diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 198108b40..55bbba190 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -182,6 +182,7 @@ public class Compiler { optimizations.add(new Pass2ConstantIdentification(program)); optimizations.add(new Pass2ConstantAdditionElimination(program)); optimizations.add(new Pass2FixInlineConstructors(program)); + optimizations.add(new Pass2TypeInference(program)); optimizations.add(new PassNEliminateUnusedVars(program)); optimizations.add(new Pass2NopCastElimination(program)); pass2OptimizeSSA(optimizations); diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorAddressOf.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorAddressOf.java index 5dc6e5acb..cfda70105 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorAddressOf.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorAddressOf.java @@ -1,6 +1,9 @@ package dk.camelot64.kickc.model.operators; -import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.ConstantNotLiteral; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantLiteral; /** Unary Address-of Operator (&p) */ @@ -12,7 +15,11 @@ public class OperatorAddressOf extends OperatorUnary { @Override public ConstantLiteral calculateLiteral(ConstantLiteral operand) { - throw new CompileError("Not implemented"); + throw new ConstantNotLiteral("Constant not literal"); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return new SymbolTypePointer(operandType); + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorBinary.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorBinary.java index 578c440f0..0ae783a25 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorBinary.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorBinary.java @@ -1,5 +1,7 @@ package dk.camelot64.kickc.model.operators; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantLiteral; /** A binary expression operator */ @@ -9,6 +11,20 @@ public abstract class OperatorBinary extends Operator { super(operator, asmOperator, Type.BINARY, precedence); } + /** + * Calculate the literal value of the operator applied to constant operands + * @param left The left constant operand + * @param right The right constant operand + * @return The literal value + */ public abstract ConstantLiteral calculateLiteral(ConstantLiteral left, ConstantLiteral right); + /** + * Infer the type of the operator applied to operands of a specific type + * @param left The type of the left operand + * @param right The type of the right operand + * @return The type resulting from applying the operator to the operands + */ + public abstract SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right); + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolAnd.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolAnd.java index 711292d6b..0445f5582 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolAnd.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolAnd.java @@ -1,7 +1,10 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; -import dk.camelot64.kickc.model.values.ConstantBool; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeInteger; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -17,7 +20,30 @@ public class OperatorBoolAnd extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantInteger(((ConstantInteger) left).getInteger() & ((ConstantInteger) right).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + @Override + public SymbolType inferType(SymbolTypeSimple type1, SymbolTypeSimple type2) { + // Handle pointers as words + if(type1 instanceof SymbolTypePointer) { + type1 = SymbolType.WORD; + } + if(type2 instanceof SymbolTypePointer) { + type2 = SymbolType.WORD; + } + // Find smallest bitwise type + if(type1 instanceof SymbolTypeInteger && type2 instanceof SymbolTypeInteger) { + + for(SymbolTypeInteger candidate : SymbolType.getIntegerTypes()) { + boolean match1 = ((SymbolTypeInteger) type1).getBits() <= candidate.getBits(); + boolean match2 = ((SymbolTypeInteger) type2).getBits() <= candidate.getBits(); + if(!candidate.isSigned() && (match1 || match2)) { + return candidate; + } + } + } + + throw new CompileError("Type inference case not handled " + type1 + " " + getOperator() + " " + type2); + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolNot.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolNot.java index d2004fd4e..de518e57d 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolNot.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolNot.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,6 +18,12 @@ public class OperatorBoolNot extends OperatorUnary { if(left instanceof ConstantInteger) { return new ConstantInteger(~((ConstantInteger) left).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + left ); } + + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return operandType; + } + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolOr.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolOr.java index 3f63a3077..ea020f3ce 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolOr.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolOr.java @@ -1,6 +1,10 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeInteger; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,6 +20,23 @@ public class OperatorBoolOr extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantInteger(((ConstantInteger) left).getInteger() | ((ConstantInteger) right).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + + @Override + public SymbolType inferType(SymbolTypeSimple type1, SymbolTypeSimple type2) { + // Handle pointers as words + if(type1 instanceof SymbolTypePointer) { + type1 = SymbolType.WORD; + } + if(type2 instanceof SymbolTypePointer) { + type2 = SymbolType.WORD; + } + // Handle numeric types through proper promotion + if(SymbolType.isInteger(type1) && SymbolType.isInteger(type2)) { + return SymbolType.promotedBitwiseType((SymbolTypeInteger) type1, (SymbolTypeInteger) type2); + } + throw new CompileError("Type inference case not handled " + type1 + " " + getOperator() + " " + type2); + } + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolXor.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolXor.java index 1acdaf77f..7926c690c 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolXor.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorBoolXor.java @@ -1,6 +1,10 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeInteger; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +20,24 @@ public class OperatorBoolXor extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantInteger(((ConstantInteger) left).getInteger() ^ ((ConstantInteger) right).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + @Override + public SymbolType inferType(SymbolTypeSimple type1, SymbolTypeSimple type2) { + // Handle pointers as words + if(type1 instanceof SymbolTypePointer) { + type1 = SymbolType.WORD; + } + if(type2 instanceof SymbolTypePointer) { + type2 = SymbolType.WORD; + } + // Handle numeric types through proper promotion + if(SymbolType.isInteger(type1) && SymbolType.isInteger(type2)) { + return SymbolType.promotedBitwiseType((SymbolTypeInteger) type1, (SymbolTypeInteger) type2); + } + throw new CompileError("Type inference case not handled " + type1 + " " + getOperator() + " " + type2); + } + + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastByte.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastByte.java index ff61846f1..dbefb96ca 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastByte.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastByte.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; import dk.camelot64.kickc.model.values.ConstantPointer; @@ -17,9 +19,13 @@ public class OperatorCastByte extends OperatorUnary { if(value instanceof ConstantInteger) { return new ConstantInteger(0xff & ((ConstantInteger) value).getValue()); } else if(value instanceof ConstantPointer) { - return new ConstantInteger(((ConstantPointer) value).getLocation()&0xff); + return new ConstantInteger(0xff & ((ConstantPointer) value).getLocation()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + value ); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return SymbolType.BYTE; + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastDWord.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastDWord.java index de0b3dcea..663285003 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastDWord.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastDWord.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,8 +18,12 @@ public class OperatorCastDWord extends OperatorUnary { if(value instanceof ConstantInteger) { return new ConstantInteger(0xffffffffL & ((ConstantInteger) value).getValue()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + value ); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return SymbolType.DWORD; + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtrByte.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtrByte.java index 578727c6a..759dfca96 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtrByte.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtrByte.java @@ -2,6 +2,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; import dk.camelot64.kickc.model.values.ConstantPointer; @@ -18,7 +20,11 @@ public class OperatorCastPtrByte extends OperatorUnary { if(value instanceof ConstantInteger) { return new ConstantPointer(((ConstantInteger) value).getInteger(), SymbolType.BYTE); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + value ); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return new SymbolTypePointer(SymbolType.BYTE); + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastSByte.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastSByte.java index f7f645131..6a901bc41 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastSByte.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastSByte.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +18,11 @@ public class OperatorCastSByte extends OperatorUnary { if(value instanceof ConstantInteger) { return new ConstantInteger(0xff & ((ConstantInteger) value).getValue()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + value ); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return SymbolType.SBYTE; + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastSDWord.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastSDWord.java index 64011b49b..bef969f2b 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastSDWord.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastSDWord.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +18,11 @@ public class OperatorCastSDWord extends OperatorUnary { if(value instanceof ConstantInteger) { return new ConstantInteger(0xffffffffL & ((ConstantInteger) value).getValue()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + value ); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return SymbolType.SDWORD; + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastSWord.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastSWord.java index 90dccbc54..e0ea0879a 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastSWord.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastSWord.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +18,11 @@ public class OperatorCastSWord extends OperatorUnary { if(value instanceof ConstantInteger) { return new ConstantInteger(0xffff & ((ConstantInteger) value).getValue()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + value ); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return SymbolType.SWORD; + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastWord.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastWord.java index 1083e467d..ea9074ee0 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastWord.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastWord.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; import dk.camelot64.kickc.model.values.ConstantPointer; @@ -18,9 +20,13 @@ public class OperatorCastWord extends OperatorUnary { return new ConstantInteger(0xffff & ((ConstantInteger) value).getValue()); } if(value instanceof ConstantPointer) { - return new ConstantInteger( (long) (0xffff & ((ConstantPointer) value).getLocation())); + return new ConstantInteger(0xffff & ((ConstantPointer) value).getLocation()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + value ); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return SymbolType.WORD; + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorDWord.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorDWord.java index 2c88bfcd4..c713d3255 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorDWord.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorDWord.java @@ -1,6 +1,10 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.NoMatchingType; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +20,27 @@ public class OperatorDWord extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantInteger(0x10000 * ((ConstantInteger) left).getInteger() + ((ConstantInteger) right).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + // Handle pointers as words + if(left instanceof SymbolTypePointer) { + left = SymbolType.WORD; + } + if(right instanceof SymbolTypePointer) { + right = SymbolType.WORD; + } + if(SymbolType.isByte(left)) { + left = SymbolType.WORD; + } + if(SymbolType.isByte(right)) { + right = SymbolType.WORD; + } + if(SymbolType.isWord(left) && SymbolType.isWord(right)) { + return SymbolType.DWORD; + } + throw new NoMatchingType("DWord constructor cannot use " + left + " " + getOperator() + " " + right); + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorDecrement.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorDecrement.java index c41c8cc29..30dbbbb7a 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorDecrement.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorDecrement.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +18,11 @@ public class OperatorDecrement extends OperatorUnary { if(operand instanceof ConstantInteger ) { return new ConstantInteger(((ConstantInteger) operand).getInteger() -1); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + operand ); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return operandType; + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorDeref.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorDeref.java index 7e013d409..991f6ed6f 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorDeref.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorDeref.java @@ -1,6 +1,9 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantLiteral; /** Unary Pointer Dereference Operator (*p) */ @@ -12,7 +15,15 @@ public class OperatorDeref extends OperatorUnary { @Override public ConstantLiteral calculateLiteral(ConstantLiteral operand) { - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + operand ); + } + + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + if(operandType instanceof SymbolTypePointer) { + return ((SymbolTypePointer) operandType).getElementType(); + } + throw new CompileError("Type error: Dereferencing a non-pointer " + operandType); } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorDerefIdx.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorDerefIdx.java index eb894d561..c4cf2b56f 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorDerefIdx.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorDerefIdx.java @@ -1,6 +1,9 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantLiteral; /** Binary Pointer Dereference with an index Operator ( p[i] / *(p+i) ) */ @@ -12,6 +15,14 @@ public class OperatorDerefIdx extends OperatorBinary { @Override public ConstantLiteral calculateLiteral(ConstantLiteral left, ConstantLiteral right) { - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } + + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + if(left instanceof SymbolTypePointer) { + return ((SymbolTypePointer) left).getElementType(); + } + throw new RuntimeException("Type error: Dereferencing a non-pointer " + left + "[" + right + "]"); } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorDivide.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorDivide.java index cb6f80046..affbc45c7 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorDivide.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorDivide.java @@ -1,6 +1,7 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.*; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; import dk.camelot64.kickc.model.values.ConstantPointer; @@ -22,6 +23,25 @@ public class OperatorDivide extends OperatorBinary { ((ConstantPointer) left).getElementType() ); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + if(left instanceof SymbolTypePointer) { + if(SymbolType.isByte(right) || SymbolType.isWord(right)) { + return left; + } else { + throw new NoMatchingType("Cannot divide pointer by "+right.toString()); + + } + } + // Handle numeric types through proper promotion + if(SymbolType.isInteger(left) && SymbolType.isInteger(right)) { + return SymbolType.promotedMathType((SymbolTypeInteger) left, (SymbolTypeInteger) right); + } + + throw new RuntimeException("Type inference case not handled " + left + " " + getOperator() + " " + right); + } + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorEqual.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorEqual.java index 877cea2ff..08777da59 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorEqual.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorEqual.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantBool; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -19,7 +21,12 @@ public class OperatorEqual extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantBool(Objects.equals(((ConstantInteger) left).getInteger(), ((ConstantInteger) right).getInteger())); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } + + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + return SymbolType.BOOLEAN; } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetHigh.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetHigh.java index f481ba9f0..c1760639a 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetHigh.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetHigh.java @@ -2,6 +2,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; import dk.camelot64.kickc.model.values.ConstantPointer; @@ -17,14 +19,25 @@ public class OperatorGetHigh extends OperatorUnary { public ConstantLiteral calculateLiteral(ConstantLiteral operand) { if(operand instanceof ConstantInteger) { ConstantInteger operandInt = (ConstantInteger) operand; - if(SymbolType.isWord(operandInt.getType())) { + if(SymbolType.isWord(operandInt.getType()) || SymbolType.isSWord(operandInt.getType())) { return new ConstantInteger(operandInt.getInteger()>>8); - } else if(SymbolType.isDWord(operandInt.getType())) { + } else if(SymbolType.isDWord(operandInt.getType()) || SymbolType.isSDWord(operandInt.getType())) { return new ConstantInteger(operandInt.getInteger()>>16); } } else if(operand instanceof ConstantPointer) { return new ConstantInteger(((ConstantPointer) operand).getLocation()>>8); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + operand ); } + + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + if(operandType instanceof SymbolTypePointer || SymbolType.isWord(operandType) || SymbolType.isSWord(operandType)) { + return SymbolType.BYTE; + } else if(SymbolType.isDWord(operandType) || SymbolType.isSDWord(operandType)) { + return SymbolType.WORD; + } + throw new CompileError("Type inference not implemented "+getOperator()+" "+operandType); + } + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetLow.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetLow.java index 1044d96f3..080219200 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetLow.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetLow.java @@ -2,6 +2,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; import dk.camelot64.kickc.model.values.ConstantPointer; @@ -17,15 +19,26 @@ public class OperatorGetLow extends OperatorUnary { public ConstantLiteral calculateLiteral(ConstantLiteral operand) { if(operand instanceof ConstantInteger) { ConstantInteger operandInt = (ConstantInteger) operand; - if(SymbolType.isWord(operandInt.getType())) { + if(SymbolType.isWord(operandInt.getType()) || SymbolType.isSWord(operandInt.getType())) { return new ConstantInteger(operandInt.getInteger()&0xff); - } else if(SymbolType.isDWord(operandInt.getType())) { + } else if(SymbolType.isDWord(operandInt.getType()) || SymbolType.isSDWord(operandInt.getType())) { return new ConstantInteger(operandInt.getInteger()&0xffff); } } else if(operand instanceof ConstantPointer) { return new ConstantInteger(((ConstantPointer) operand).getLocation()&0xff); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + operand ); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + if(operandType instanceof SymbolTypePointer || SymbolType.isWord(operandType) || SymbolType.isSWord(operandType)) { + return SymbolType.BYTE; + } else if(SymbolType.isDWord(operandType) || SymbolType.isSDWord(operandType)) { + return SymbolType.WORD; + } + throw new CompileError("Type inference not implemented "+getOperator()+" "+operandType); + } + + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorGreaterThan.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorGreaterThan.java index 387eb6399..fcf503c84 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorGreaterThan.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorGreaterThan.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantBool; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -17,7 +19,13 @@ public class OperatorGreaterThan extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantBool(((ConstantInteger) left).getInteger() > ((ConstantInteger) right).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + return SymbolType.BOOLEAN; + } + + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorGreaterThanEqual.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorGreaterThanEqual.java index c309b5d16..b195f1e40 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorGreaterThanEqual.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorGreaterThanEqual.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantBool; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -17,7 +19,13 @@ public class OperatorGreaterThanEqual extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantBool(((ConstantInteger) left).getInteger() >= ((ConstantInteger) right).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + return SymbolType.BOOLEAN; + } + + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorIncrement.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorIncrement.java index 7a47132cf..8794dd418 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorIncrement.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorIncrement.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +18,11 @@ public class OperatorIncrement extends OperatorUnary { if(operand instanceof ConstantInteger ) { return new ConstantInteger(((ConstantInteger) operand).getInteger() + 1); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + operand ); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return operandType; + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorLessThan.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorLessThan.java index 2354f6165..a3d0c379f 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorLessThan.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorLessThan.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantBool; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -17,7 +19,13 @@ public class OperatorLessThan extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantBool(((ConstantInteger) left).getInteger() < ((ConstantInteger) right).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + return SymbolType.BOOLEAN; + } + + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorLessThanEqual.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorLessThanEqual.java index cbc67de89..af07b0378 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorLessThanEqual.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorLessThanEqual.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantBool; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -17,7 +19,13 @@ public class OperatorLessThanEqual extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantBool(((ConstantInteger) left).getInteger() <= ((ConstantInteger) right).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + return SymbolType.BOOLEAN; + } + + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicAnd.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicAnd.java index 4b1cba7a6..d755616a3 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicAnd.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicAnd.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantBool; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +18,13 @@ public class OperatorLogicAnd extends OperatorBinary { if(left instanceof ConstantBool && right instanceof ConstantBool) { return new ConstantBool(((ConstantBool) left).getBool() && ((ConstantBool) right).getBool()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + return SymbolType.BOOLEAN; + } + + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicNot.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicNot.java index 44cf8e6b6..10356cb2c 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicNot.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicNot.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantBool; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,8 +18,12 @@ public class OperatorLogicNot extends OperatorUnary { if(left instanceof ConstantBool) { return new ConstantBool(!((ConstantBool) left).getBool() ); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + left ); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return SymbolType.BOOLEAN; + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicOr.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicOr.java index 1f98809de..5c838560a 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicOr.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicOr.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantBool; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +18,13 @@ public class OperatorLogicOr extends OperatorBinary { if(left instanceof ConstantBool && right instanceof ConstantBool) { return new ConstantBool(((ConstantBool) left).getBool() || ((ConstantBool) right).getBool()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + return SymbolType.BOOLEAN; + } + + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorMinus.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorMinus.java index 76702eb0d..931584adb 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorMinus.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorMinus.java @@ -1,6 +1,10 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeInteger; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -14,9 +18,26 @@ public class OperatorMinus extends OperatorBinary { @Override public ConstantLiteral calculateLiteral(ConstantLiteral left, ConstantLiteral right) { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { - return new ConstantInteger(((ConstantInteger) left).getInteger() - ((ConstantInteger) right).getInteger()); + long val = ((ConstantInteger) left).getInteger() - ((ConstantInteger) right).getInteger(); + return new ConstantInteger(val); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } + + @Override + public SymbolType inferType(SymbolTypeSimple type1, SymbolTypeSimple type2) { + // Handle pointer types + if(type1 instanceof SymbolTypePointer && SymbolType.isInteger(type2)) { + return new SymbolTypePointer(((SymbolTypePointer) type1).getElementType()); + } else if(type1 instanceof SymbolTypePointer && type2 instanceof SymbolTypePointer) { + return SymbolType.WORD; + } + + // Handle numeric types through proper promotion + if(SymbolType.isInteger(type1) && SymbolType.isInteger(type2)) { + return SymbolType.promotedMathType((SymbolTypeInteger) type1, (SymbolTypeInteger) type2); + } + throw new RuntimeException("Type inference case not handled " + type1 + " " + getOperator() + " " + type2); } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorMultiply.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorMultiply.java index c10f557db..5da795636 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorMultiply.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorMultiply.java @@ -1,6 +1,9 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeInteger; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +19,15 @@ public class OperatorMultiply extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantInteger(((ConstantInteger) left).getInteger() * ((ConstantInteger) right).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + // Handle numeric types through proper promotion + if(SymbolType.isInteger(left) && SymbolType.isInteger(right)) { + return SymbolType.promotedMathType((SymbolTypeInteger) left, (SymbolTypeInteger) right); + } + throw new RuntimeException("Type inference case not handled " + left + " " + getOperator() + " " + right); + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorNeg.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorNeg.java index 5db22f639..45fe7d0d8 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorNeg.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorNeg.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,6 +18,11 @@ public class OperatorNeg extends OperatorUnary { if(operand instanceof ConstantInteger) { return new ConstantInteger(-((ConstantInteger)operand).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + operand ); + } + + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return operandType; } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorNotEqual.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorNotEqual.java index 659340abf..27614357a 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorNotEqual.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorNotEqual.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantBool; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -19,7 +21,13 @@ public class OperatorNotEqual extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantBool(!Objects.equals(((ConstantInteger) left).getInteger(), ((ConstantInteger) right).getInteger())); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + return SymbolType.BOOLEAN; + } + + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorPlus.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorPlus.java index 5786e4677..920cfa612 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorPlus.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorPlus.java @@ -1,7 +1,7 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; -import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.*; import dk.camelot64.kickc.model.values.*; /** Binary plus Operator ( x + y ) */ @@ -23,15 +23,66 @@ public class OperatorPlus extends OperatorBinary { return new ConstantString(((ConstantString) left).getString() + ((ConstantString) right).getString()); } else if(left instanceof ConstantString && right instanceof ConstantChar) { return new ConstantString(((ConstantString) left).getString() + ((ConstantChar) right).getChar()); - } else if(left instanceof ConstantString && right instanceof ConstantInteger && SymbolType.isByte(((ConstantInteger)right).getType())) { + } else if(left instanceof ConstantString && right instanceof ConstantInteger && SymbolType.isByte(((ConstantInteger) right).getType())) { Character character = (char) ((ConstantInteger) right).getInteger().byteValue(); return new ConstantString(((ConstantString) left).getString() + character); } else if(left instanceof ConstantPointer && right instanceof ConstantInteger) { long location = ((ConstantPointer) left).getLocation() + ((ConstantInteger) right).getInteger(); return new ConstantPointer(location, ((ConstantPointer) left).getElementType()); } + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } - throw new CompileError("Not implemented"); + @Override + public SymbolType inferType(SymbolTypeSimple type1, SymbolTypeSimple type2) { + + // Handle all non-numeric types + if(type1.equals(SymbolType.STRING) && isStringLike(type2)) { + return SymbolType.STRING; + } else if(isStringLike(type1) && type2.equals(SymbolType.STRING)) { + return SymbolType.STRING; + } else if(type1 instanceof SymbolTypeArray && type2 instanceof SymbolTypeArray) { + SymbolType elemType1 = ((SymbolTypeArray) type1).getElementType(); + SymbolType elemType2 = ((SymbolTypeArray) type2).getElementType(); + if(SymbolTypeInference.typeMatch(elemType1, elemType2)) { + return new SymbolTypeArray(elemType1); + } else if(SymbolTypeInference.typeMatch(elemType2, elemType1)) { + return new SymbolTypeArray(elemType2); + } else { + throw new RuntimeException("Type inference case not handled " + type1 + " " + getOperator() + " " + type2); + } + } else if(SymbolType.isInteger(type1) && type2 instanceof SymbolTypePointer ) { + return new SymbolTypePointer(((SymbolTypePointer) type2).getElementType()); + } else if(type1 instanceof SymbolTypePointer && SymbolType.isInteger(type2)) { + return new SymbolTypePointer(((SymbolTypePointer) type1).getElementType()); + } else if(type1 instanceof SymbolTypePointer && type2 instanceof SymbolTypePointer) { + throw new NoMatchingType("Two pointers cannot be added."); + } + + // Handle numeric types through proper promotion + if(SymbolType.isInteger(type1) && SymbolType.isInteger(type2)) { + return SymbolType.promotedMathType((SymbolTypeInteger) type1, (SymbolTypeInteger) type2); + } + + throw new CompileError("Type inference case not handled " + type1 + " " + getOperator() + " " + type2); + } + + /** + * Determines if a type is enough like a string to be added to a string to yield a new string. + * This is true for Strings, arrays of bytes and single bytes. + * + * @param type The type to check + * @return true if the type is string like + */ + private boolean isStringLike(SymbolTypeSimple type) { + if(SymbolType.STRING.equals(type)) { + return true; + } else if(SymbolType.isByte(type)) { + return true; + } else if(type instanceof SymbolTypeArray && SymbolType.isByte(((SymbolTypeArray) type).getElementType())) { + return true; + } + return false; } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorPos.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorPos.java index 45b7028a4..4e70ca96a 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorPos.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorPos.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +18,11 @@ public class OperatorPos extends OperatorUnary { if(operand instanceof ConstantInteger) { return new ConstantInteger(+((ConstantInteger)operand).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + getOperator() + " " + operand ); } + @Override + public SymbolType inferType(SymbolTypeSimple operandType) { + return operandType; + } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetHigh.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetHigh.java index e00228085..e5218c3bd 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetHigh.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetHigh.java @@ -1,6 +1,9 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantLiteral; /** Binary SetHighByte Operator ( w hi= b ) */ @@ -12,6 +15,27 @@ public class OperatorSetHigh extends OperatorBinary { @Override public ConstantLiteral calculateLiteral(ConstantLiteral left, ConstantLiteral right) { - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + if(left instanceof SymbolTypePointer) { + return left; + } else if(SymbolType.isByte(left)) { + return SymbolType.WORD; + } else if(SymbolType.isSByte(left)) { + return SymbolType.WORD; + } else if(SymbolType.isWord(left)) { + return SymbolType.WORD; + } else if(SymbolType.isSWord(left)) { + return SymbolType.SWORD; + } else if(SymbolType.isDWord(left)) { + return SymbolType.DWORD; + } else if(SymbolType.isSDWord(left)) { + return SymbolType.SDWORD; + } + throw new RuntimeException("Type inference case not handled " + left + " " + getOperator() + " " + right); + } + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetLow.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetLow.java index 195ebcba9..12e3d486f 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetLow.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetLow.java @@ -1,6 +1,9 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantLiteral; /** Binary SetLowByte Operator ( w lo= b ) */ @@ -12,7 +15,25 @@ public class OperatorSetLow extends OperatorBinary { @Override public ConstantLiteral calculateLiteral(ConstantLiteral left, ConstantLiteral right) { - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + if(left instanceof SymbolTypePointer) { + return left; + } + if(SymbolType.isWord(left)) { + return SymbolType.WORD; + } else if(SymbolType.isSWord(left)) { + return SymbolType.SWORD; + } else if(SymbolType.isDWord(left)) { + return SymbolType.DWORD; + } else if(SymbolType.isSDWord(left)) { + return SymbolType.SDWORD; + } + throw new RuntimeException("Type inference case not handled " + left + " " + getOperator() + " " + right); + } + + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftLeft.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftLeft.java index 0d9a2bb25..bb14a9cd1 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftLeft.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftLeft.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantBool; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -17,7 +19,12 @@ public class OperatorShiftLeft extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantInteger( ((ConstantInteger) left).getInteger() << ((ConstantInteger) right).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } + + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + return left; } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftRight.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftRight.java index 397949e3e..6b3adb2b7 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftRight.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftRight.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +18,12 @@ public class OperatorShiftRight extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantInteger( ((ConstantInteger) left).getInteger() >> ((ConstantInteger) right).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } + + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + return left; } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorUnary.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorUnary.java index 2b366e8df..433488b36 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorUnary.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorUnary.java @@ -1,5 +1,7 @@ package dk.camelot64.kickc.model.operators; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantLiteral; /** A unary expression operator */ @@ -9,5 +11,18 @@ public abstract class OperatorUnary extends Operator { super(operator, asmOperator, Type.UNARY, precedence); } + /** + * Calculate the literal value of the operator applied to a constant operand + * @param operand The constant operand + * @return The literal value + */ public abstract ConstantLiteral calculateLiteral(ConstantLiteral operand); + + /** + * Infer the type of the operator applied to an operand of a specific type + * @param operandType The type of the operand + * @return The type resulting from applying the operator to the operand + */ + public abstract SymbolType inferType(SymbolTypeSimple operandType); + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorWord.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorWord.java index d45b39835..1ddc3a770 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorWord.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorWord.java @@ -1,6 +1,10 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.NoMatchingType; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.types.SymbolTypeSimple; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; @@ -16,7 +20,15 @@ public class OperatorWord extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantInteger(0x100 * ((ConstantInteger) left).getInteger() + ((ConstantInteger) right).getInteger()); } - throw new CompileError("Not implemented"); + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } + + @Override + public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { + if(SymbolType.isByte(left) && SymbolType.isByte(right)) { + return SymbolType.WORD; + } + throw new NoMatchingType("Word constructor cannot use " + left + " " + getOperator() + " " + right); } } diff --git a/src/main/java/dk/camelot64/kickc/model/types/NoMatchingType.java b/src/main/java/dk/camelot64/kickc/model/types/NoMatchingType.java new file mode 100644 index 000000000..6486196d6 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/types/NoMatchingType.java @@ -0,0 +1,10 @@ +package dk.camelot64.kickc.model.types; + +import dk.camelot64.kickc.model.CompileError; + +/** Signalling that no type can be used to promote the operands of a binary expression to be compatible. */ +public class NoMatchingType extends CompileError { + public NoMatchingType(String message) { + super(message); + } +} diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolType.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolType.java index 0ab234c82..d9b2e65bd 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolType.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolType.java @@ -1,5 +1,7 @@ package dk.camelot64.kickc.model.types; +import dk.camelot64.kickc.model.CompileError; + import java.util.ArrayList; import java.util.Collection; @@ -7,29 +9,29 @@ import java.util.Collection; public interface SymbolType { /** Unsigned byte (8 bits)). */ - SymbolTypeInteger BYTE = new SymbolTypeInteger("byte", 0, 255); + SymbolTypeInteger BYTE = new SymbolTypeInteger("byte", 0, 255, false, 8); /** Signed byte (8 bits). */ - SymbolTypeInteger SBYTE = new SymbolTypeInteger("signed byte", -128, 127); + SymbolTypeInteger SBYTE = new SymbolTypeInteger("signed byte", -128, 127, true, 8); /** Unsigned word (2 bytes, 16 bits). */ - SymbolTypeInteger WORD = new SymbolTypeInteger("word", 0, 65_535); + SymbolTypeInteger WORD = new SymbolTypeInteger("word", 0, 65_535, false, 16); /** Signed word (2 bytes, 16 bits). */ - SymbolTypeInteger SWORD = new SymbolTypeInteger("signed word", -32_768, 32_767); + SymbolTypeInteger SWORD = new SymbolTypeInteger("signed word", -32_768, 32_767, true, 16); /** Unsigned double word (4 bytes, 32 bits). */ - SymbolTypeInteger DWORD = new SymbolTypeInteger("dword", 0, 4_294_967_296L); + SymbolTypeInteger DWORD = new SymbolTypeInteger("dword", 0, 4_294_967_296L, false, 32); /** Signed double word (4 bytes, 32 bits). */ - SymbolTypeInteger SDWORD = new SymbolTypeInteger("signed dword", -2_147_483_648, 2_147_483_647); + SymbolTypeInteger SDWORD = new SymbolTypeInteger("signed dword", -2_147_483_648, 2_147_483_647, true, 32); /** String value (treated like byte* ). */ - SymbolTypeBasic STRING = new SymbolTypeBasic("string"); + SymbolTypeNamed STRING = new SymbolTypeNamed("string"); /** Boolean value. */ - SymbolTypeBasic BOOLEAN = new SymbolTypeBasic("boolean"); + SymbolTypeNamed BOOLEAN = new SymbolTypeNamed("boolean"); /** Numeric floating point value. */ - SymbolTypeBasic DOUBLE = new SymbolTypeBasic("double"); + SymbolTypeNamed DOUBLE = new SymbolTypeNamed("double"); /** A label. Name of functions of jump-targets. */ - SymbolTypeBasic LABEL = new SymbolTypeBasic("label"); + SymbolTypeNamed LABEL = new SymbolTypeNamed("label"); /** Void type representing no value. */ - SymbolTypeBasic VOID = new SymbolTypeBasic("void"); + SymbolTypeNamed VOID = new SymbolTypeNamed("void"); /** An unresolved type. Will be infered later. */ - SymbolTypeBasic VAR = new SymbolTypeBasic("var"); + SymbolTypeNamed VAR = new SymbolTypeNamed("var"); /** * Get a simple symbol type from the type name. @@ -61,6 +63,120 @@ public interface SymbolType { return null; } + + /** + * Get the name of the type + * + * @return The type name + */ + String getTypeName(); + + /** + * Is the type {@link #BYTE} or compatible {@link SymbolTypeMulti} + * + * @param type The type to examine + * @return true if the type is BYTE compatible + */ + static boolean isByte(SymbolType type) { + if(BYTE.equals(type)) { + return true; + } else if(type instanceof SymbolTypeMulti) { + return ((SymbolTypeMulti) type).isByte(); + } else { + return false; + } + } + + /** + * Is the type {@link #SBYTE} or compatible {@link SymbolTypeMulti} + * + * @param type The type to examine + * @return true if the type is SBYTE compatible + */ + static boolean isSByte(SymbolType type) { + if(SBYTE.equals(type)) { + return true; + } else if(type instanceof SymbolTypeMulti) { + return ((SymbolTypeMulti) type).isSByte(); + } else { + return false; + } + } + + /** + * Is the type {@link #WORD} or compatible {@link SymbolTypeMulti} + * + * @param type The type to examine + * @return true if the type is WORD compatible + */ + static boolean isWord(SymbolType type) { + if(WORD.equals(type)) { + return true; + } else if(type instanceof SymbolTypeMulti) { + return ((SymbolTypeMulti) type).isWord(); + } else { + return false; + } + } + + /** + * Is the type {@link #SWORD} or compatible {@link SymbolTypeMulti} + * + * @param type The type to examine + * @return true if the type is SWORD compatible + */ + static boolean isSWord(SymbolType type) { + if(SWORD.equals(type)) { + return true; + } else if(type instanceof SymbolTypeMulti) { + return ((SymbolTypeMulti) type).isSWord(); + } else { + return false; + } + } + + /** + * Is the type {@link #DWORD} or compatible {@link SymbolTypeMulti} + * + * @param type The type to examine + * @return true if the type is DWORD compatible + */ + static boolean isDWord(SymbolType type) { + if(DWORD.equals(type)) { + return true; + } else if(type instanceof SymbolTypeMulti) { + return ((SymbolTypeMulti) type).isDWord(); + } else { + return false; + } + } + + /** + * Is the type {@link #SDWORD} or compatible {@link SymbolTypeMulti} + * + * @param type The type to examine + * @return true if the type is SDWORD compatible + */ + static boolean isSDWord(SymbolType type) { + if(SDWORD.equals(type)) { + return true; + } else if(type instanceof SymbolTypeMulti) { + return ((SymbolTypeMulti) type).isSWord(); + } else { + return false; + } + } + + /** + * Is the type an integer type or compatible {@link SymbolTypeMulti} + * + * @param type The type to examine + * @return true if the type is integer + */ + static boolean isInteger(SymbolType type) { + return isSDWord(type) || isDWord(type) || isSWord(type) || isWord(type) || isSByte(type) || isByte(type); + } + /** * Get all integer types. * @@ -78,116 +194,37 @@ public interface SymbolType { } /** - * Is the type {@link #BYTE} or compatible {@link SymbolTypeInline} + * Find the smallest integer type that contains both sub-types usable for math ( + - * / ). * - * @param type The type to examine - * @return true if the type is BYTE compatible + * @param type1 Left type in a binary expression + * @param type2 Right type in a binary expression + * @return */ - static boolean isByte(SymbolType type) { - if(BYTE.equals(type)) { - return true; - } else if(type instanceof SymbolTypeInline) { - return ((SymbolTypeInline) type).isByte(); - } else { - return false; + static SymbolType promotedMathType(SymbolTypeInteger type1, SymbolTypeInteger type2) { + for(SymbolTypeInteger candidate : getIntegerTypes()) { + boolean match1 = type1.getMinValue() >= candidate.getMinValue() && type1.getMaxValue() <= candidate.getMaxValue(); + boolean match2 = type2.getMinValue() >= candidate.getMinValue() && type2.getMaxValue() <= candidate.getMaxValue(); + if(match1 && match2) { + return candidate; + } } + throw new NoMatchingType("Cannot promote to a common type for "+type1.toString()+" and "+type2.toString()); } /** - * Is the type {@link #SBYTE} or compatible {@link SymbolTypeInline} + * Find the unsigned integer type that contains both sub-types usable for binary operations ( & | ^ ). * - * @param type The type to examine - * @return true if the type is SBYTE compatible + * @param type1 Left type in a binary expression + * @param type2 Right type in a binary expression + * @return */ - static boolean isSByte(SymbolType type) { - if(SBYTE.equals(type)) { - return true; - } else if(type instanceof SymbolTypeInline) { - return ((SymbolTypeInline) type).isSByte(); - } else { - return false; + static SymbolType promotedBitwiseType(SymbolTypeInteger type1, SymbolTypeInteger type2) { + for(SymbolTypeInteger candidate : getIntegerTypes()) { + if(!candidate.isSigned() && type1.getBits()<=candidate.getBits() && type2.getBits()<=candidate.getBits()) { + return candidate; + } } + throw new CompileError("Cannot promote to a common type for "+type1.toString()+" and "+type2.toString()); } - /** - * Is the type {@link #WORD} or compatible {@link SymbolTypeInline} - * - * @param type The type to examine - * @return true if the type is WORD compatible - */ - static boolean isWord(SymbolType type) { - if(WORD.equals(type)) { - return true; - } else if(type instanceof SymbolTypeInline) { - return ((SymbolTypeInline) type).isWord(); - } else { - return false; - } - } - - /** - * Is the type {@link #SWORD} or compatible {@link SymbolTypeInline} - * - * @param type The type to examine - * @return true if the type is SWORD compatible - */ - static boolean isSWord(SymbolType type) { - if(SWORD.equals(type)) { - return true; - } else if(type instanceof SymbolTypeInline) { - return ((SymbolTypeInline) type).isSWord(); - } else { - return false; - } - } - - /** - * Is the type {@link #DWORD} or compatible {@link SymbolTypeInline} - * - * @param type The type to examine - * @return true if the type is DWORD compatible - */ - static boolean isDWord(SymbolType type) { - if(DWORD.equals(type)) { - return true; - } else if(type instanceof SymbolTypeInline) { - return ((SymbolTypeInline) type).isDWord(); - } else { - return false; - } - } - - /** - * Is the type {@link #SDWORD} or compatible {@link SymbolTypeInline} - * - * @param type The type to examine - * @return true if the type is SDWORD compatible - */ - static boolean isSDWord(SymbolType type) { - if(SDWORD.equals(type)) { - return true; - } else if(type instanceof SymbolTypeInline) { - return ((SymbolTypeInline) type).isSWord(); - } else { - return false; - } - } - - /** - * Is the type an integer type or compatible {@link SymbolTypeInline} - * - * @param type The type to examine - * @return true if the type is integer - */ - static boolean isInteger(SymbolType type) { - return isSDWord(type) || isDWord(type) || isSWord(type) || isWord(type) || isSByte(type) || isByte(type); - } - - /** - * Get the name of the type - * - * @return The type name - */ - String getTypeName(); - } diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeArray.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeArray.java index 4c9277da6..4efab35c1 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeArray.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeArray.java @@ -31,7 +31,7 @@ public class SymbolTypeArray extends SymbolTypePointer { @Override public String getTypeName() { SymbolType elementType = getElementType(); - if(elementType instanceof SymbolTypeInline) { + if(elementType instanceof SymbolTypeMulti) { return "(" + elementType.getTypeName() + ")" + "[" + (size == null ? "" : size) + "]"; } else { return elementType.getTypeName() + "[" + (size == null ? "" : size) + "]"; 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 43d4b38ea..948128bc8 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInference.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInference.java @@ -2,10 +2,10 @@ package dk.camelot64.kickc.model.types; import dk.camelot64.kickc.model.CompileError; import dk.camelot64.kickc.model.ConstantNotLiteral; +import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.operators.Operator; import dk.camelot64.kickc.model.operators.OperatorBinary; import dk.camelot64.kickc.model.operators.OperatorUnary; -import dk.camelot64.kickc.model.operators.Operators; import dk.camelot64.kickc.model.statements.StatementAssignment; import dk.camelot64.kickc.model.statements.StatementCall; import dk.camelot64.kickc.model.statements.StatementLValue; @@ -21,7 +21,6 @@ import java.util.Collection; */ public class SymbolTypeInference { - /** * Infer the type of a unary operator on a value * @@ -32,286 +31,103 @@ public class SymbolTypeInference { */ public static SymbolType inferType(ProgramScope programScope, OperatorUnary operator, RValue rValue) { if(rValue instanceof ConstantValue) { - ConstantValue value = null; + // Calculate resulting constant literal try { - value = operator.calculate(((ConstantValue) rValue).calculateLiteral(programScope)); - } catch(ConstantNotLiteral e) { - value = null; - } - if(value != null) { + ConstantValue value = operator.calculateLiteral(((ConstantValue) rValue).calculateLiteral(programScope)); return value.getType(programScope); + } catch(ConstantNotLiteral e) { + // Value literal cannot be calculated } } - if(operator.equals(Operators.CAST_BYTE)) { - return SymbolType.BYTE; - } else if(operator.equals(Operators.CAST_SBYTE)) { - return SymbolType.SBYTE; - } else if(operator.equals(Operators.CAST_WORD)) { - return SymbolType.WORD; - } else if(operator.equals(Operators.CAST_SWORD)) { - return SymbolType.SWORD; - } else if(operator.equals(Operators.CAST_DWORD)) { - return SymbolType.DWORD; - } else if(operator.equals(Operators.CAST_SDWORD)) { - return SymbolType.SDWORD; - } else if(operator.equals(Operators.CAST_PTRBY)) { - return new SymbolTypePointer(SymbolType.BYTE); - } else if(operator.equals(Operators.ADDRESS_OF)) { - SymbolType valueType = inferType(programScope, rValue); - return new SymbolTypePointer(valueType); - } + // Infer value type - and then infer operator result type SymbolType valueType = inferType(programScope, rValue); return inferType(operator, valueType); } - public static SymbolType inferType(ProgramScope programScope, RValue rValue1, OperatorBinary operator, RValue rValue2) { - if(rValue1 instanceof ConstantValue && rValue2 instanceof ConstantValue) { - //ConstantValue value = ConstantValueCalculator.calcValue(programScope,(ConstantValue) rValue1,operator,(ConstantValue) rValue2); - ConstantValue value = null; + /** + * Infer the type of a unary operator on an operand type + * + * @param operator The unary operator + * @param operandType The operand type + * @return The type of the result from applying the operator on the operand + */ + public static SymbolType inferType(OperatorUnary operator, SymbolType operandType) { + if(operandType instanceof SymbolTypeSimple) { + return operator.inferType((SymbolTypeSimple) operandType); + } else { + // Infer all resulting types for each sub-type of the multi-type + ArrayList resultTypes = new ArrayList<>(); + for(SymbolType opType : ((SymbolTypeMulti) operandType).getTypes()) { + SymbolType resType = inferType(operator, opType); + if(!resultTypes.contains(resType)) { + resultTypes.add(resType); + } + } + if(resultTypes.size() == 1) { + return resultTypes.get(0); + } else { + return new SymbolTypeMulti(resultTypes); + } + } + } + + /** + * Infer the type of a binary operator on a value + * + * @param programScope The program scope usable for accessing the symbol table + * @param left The left value + * @param operator The binary operator + * @param rValue The right value + * @return The type of the resulting value + */ + public static SymbolType inferType(ProgramScope programScope, RValue left, OperatorBinary operator, RValue right) { + if(left instanceof ConstantValue && right instanceof ConstantValue) { + // Calculate resulting constant literal try { - value = operator.calculate( - ((ConstantValue) rValue1).calculateLiteral(programScope), - ((ConstantValue) rValue2).calculateLiteral(programScope) + ConstantValue value = operator.calculateLiteral( + ((ConstantValue) left).calculateLiteral(programScope), + ((ConstantValue) right).calculateLiteral(programScope) ); - } catch(ConstantNotLiteral e) { - value = null; - } - if(value != null) { return value.getType(programScope); + } catch(ConstantNotLiteral e) { + // Value literal cannot be calculated } } - SymbolType valueType1 = inferType(programScope, rValue1); - SymbolType valueType2 = inferType(programScope, rValue2); - return inferType(valueType1, operator, valueType2); + SymbolType leftType = inferType(programScope, left); + SymbolType rightType = inferType(programScope, right); + return inferType(leftType, operator, rightType); } - - public static SymbolType inferType(Operator operator, SymbolType subType) { - if(operator == null) { - return subType; - } - if(Operators.DEREF.equals(operator)) { - if(subType instanceof SymbolTypePointer) { - return ((SymbolTypePointer) subType).getElementType(); - } else { - throw new RuntimeException("Type error: Dereferencing a non-pointer " + subType); - } - } else if(Operators.LOWBYTE.equals(operator)) { - if(subType instanceof SymbolTypePointer || SymbolType.isWord(subType) || SymbolType.isSWord(subType)) { - return SymbolType.BYTE; - } else if(SymbolType.isDWord(subType) || SymbolType.isSDWord(subType)) { - return SymbolType.WORD; - } - } else if(Operators.HIBYTE.equals(operator)) { - if(subType instanceof SymbolTypePointer || SymbolType.isWord(subType) || SymbolType.isSWord(subType)) { - return SymbolType.BYTE; - } else if(SymbolType.isDWord(subType) || SymbolType.isSDWord(subType)) { - return SymbolType.WORD; - } - } else if(Operators.CAST_BYTE.equals(operator)) { - return SymbolType.BYTE; - } else if(Operators.CAST_SBYTE.equals(operator)) { - return SymbolType.SBYTE; - } else if(Operators.CAST_WORD.equals(operator)) { - return SymbolType.WORD; - } else if(Operators.CAST_SWORD.equals(operator)) { - return SymbolType.SWORD; + public static SymbolType inferType(SymbolType left, OperatorBinary operator, SymbolType right) { + if(left instanceof SymbolTypeSimple && right instanceof SymbolTypeSimple) { + return operator.inferType((SymbolTypeSimple) left, (SymbolTypeSimple) right); } else { - return subType; - } - throw new RuntimeException("Type inference problem unary " + operator + " " + subType); - } - - public static SymbolType inferType(SymbolType type1, Operator operator, SymbolType type2) { - - if(Operators.PLUS.equals(operator)) { - return inferPlus(type1, type2); - } else if(Operators.MINUS.equals(operator)) { - return inferMinus(type1, type2); - } else if(Operators.BOOL_AND.equals(operator)) { - return inferBoolAnd(type1, type2); - } else if(Operators.SET_HIBYTE.equals(operator)) { - return type1; - } else if(Operators.SET_LOWBYTE.equals(operator)) { - return type1; - } else if(Operators.WORD.equals(operator)) { - return SymbolType.WORD; - } else if(Operators.DWORD.equals(operator)) { - return SymbolType.DWORD; - } - - String op = operator.getOperator(); - switch(op) { - case "==": - case "<": - case "<=": - case "=<": - case ">": - case ">=": - case "=>": - case "<>": - case "!=": - case "&&": - case "||": - case "and": - case "or": - return SymbolType.BOOLEAN; - case "*": - if(type1 == null && type2 instanceof SymbolTypePointer) { - return ((SymbolTypePointer) type2).getElementType(); - } - if(SymbolType.isByte(type1) && SymbolType.isByte(type2)) { - return SymbolType.BYTE; - } else if(SymbolType.SBYTE.equals(type1) && SymbolType.SBYTE.equals(type2)) { - return SymbolType.SBYTE; - } else if(SymbolType.isWord(type1) && SymbolType.isWord(type2)) { - return SymbolType.WORD; - } else if(SymbolType.isSWord(type1) && SymbolType.isSWord(type2)) { - return SymbolType.SWORD; - } else if(SymbolType.isDWord(type1) && SymbolType.isDWord(type2)) { - return SymbolType.DWORD; - } else if(SymbolType.isSDWord(type1) && SymbolType.isSDWord(type2)) { - return SymbolType.SDWORD; - } - throw new RuntimeException("Type inference case not handled " + type1 + " " + operator + " " + type2); - case "*idx": - if(type1 instanceof SymbolTypePointer) { - return ((SymbolTypePointer) type1).getElementType(); - } - throw new RuntimeException("Type inference case not handled " + type1 + " " + operator + " " + type2); - case "/": - if(type1 instanceof SymbolTypePointer && SymbolType.isByte(type2)) { - return type1; - } - case "&": - case "|": - case "^": - if(SymbolType.isByte(type1) && SymbolType.isByte(type2)) { - return SymbolType.BYTE; - } else if(SymbolType.isWord(type1) && SymbolType.isWord(type2)) { - return SymbolType.WORD; - } else if(SymbolType.isDWord(type1) || SymbolType.isSDWord(type2)) { - return SymbolType.DWORD; - } - throw new RuntimeException("Type inference case not handled " + type1 + " " + operator + " " + type2); - case "<<": - case ">>": - if(SymbolType.isByte(type1)) { - return SymbolType.BYTE; - } else if(SymbolType.isSByte(type1)) { - return SymbolType.SBYTE; - } else if(SymbolType.isWord(type1)) { - return SymbolType.WORD; - } else if(SymbolType.isSWord(type1)) { - return SymbolType.SWORD; - } else if(SymbolType.isDWord(type1)) { - return SymbolType.DWORD; - } else if(SymbolType.isSDWord(type1)) { - return SymbolType.SDWORD; - } - throw new RuntimeException("Type inference case not handled " + type1 + " " + operator + " " + type2); - default: - throw new RuntimeException("Type inference case not handled " + type1 + " " + operator + " " + type2); - } - } - - private static SymbolType inferPlus(SymbolType type1, SymbolType type2) { - if(type1.equals(SymbolType.STRING) && SymbolType.isByte(type2)) { - return SymbolType.STRING; - } else if(type1.equals(SymbolType.STRING) && SymbolType.STRING.equals(type2)) { - return SymbolType.STRING; - } else if(type1.equals(SymbolType.STRING) && type2 instanceof SymbolTypeArray && SymbolType.isByte(((SymbolTypeArray) type2).getElementType())) { - return SymbolType.STRING; - } else if(type1 instanceof SymbolTypeArray && SymbolType.isByte(((SymbolTypeArray) type1).getElementType()) && type2.equals(SymbolType.STRING)) { - return SymbolType.STRING; - } else if(type1 instanceof SymbolTypeArray && type2 instanceof SymbolTypeArray) { - SymbolType elemType1 = ((SymbolTypeArray) type1).getElementType(); - SymbolType elemType2 = ((SymbolTypeArray) type2).getElementType(); - if(typeMatch(elemType1, elemType2)) { - return new SymbolTypeArray(elemType1); - } else if(typeMatch(elemType2, elemType1)) { - return new SymbolTypeArray(elemType2); - } else { - throw new RuntimeException("Type inference case not handled " + type1 + " " + "+" + " " + type2); + // Infer all resulting types for each sub-type of the multi-type + if(left instanceof SymbolTypeSimple) { + left = new SymbolTypeMulti(Arrays.asList(left)); + } + if(right instanceof SymbolTypeSimple) { + right = new SymbolTypeMulti(Arrays.asList(right)); + } + ArrayList resultTypes = new ArrayList<>(); + for(SymbolType leftType : ((SymbolTypeMulti) left).getTypes()) { + for(SymbolType rightType : ((SymbolTypeMulti) right).getTypes()) { + SymbolType resType; + try { + resType = inferType(leftType, operator, rightType); + if(!resultTypes.contains(resType)) { + resultTypes.add(resType); + } + } catch(NoMatchingType e) { + // Cannot promote to common type - ignore! + } + } + } + if(resultTypes.size() == 1) { + return resultTypes.get(0); + } else { + return new SymbolTypeMulti(resultTypes); } - } else if(type1 instanceof SymbolTypePointer && isInteger(type2)) { - return new SymbolTypePointer(((SymbolTypePointer) type1).getElementType()); - } else if(SymbolType.isByte(type1) && SymbolType.isByte(type2)) { - return new SymbolTypeInline(Arrays.asList(SymbolType.BYTE, SymbolType.WORD)); - } else if(SymbolType.isSByte(type1) && SymbolType.isSByte(type2)) { - return SymbolTypeInline.NUMERIC; - } else if(SymbolType.isWord(type1) && (SymbolType.isWord(type2) || SymbolType.isByte(type2))) { - return SymbolType.WORD; - } else if(SymbolType.isSWord(type1) && (SymbolType.isSWord(type2) || SymbolType.isSByte(type2))) { - return SymbolType.SWORD; - } else if(SymbolType.isDWord(type1) && (SymbolType.isDWord(type2) || SymbolType.isWord(type2)) || SymbolType.isByte(type2)) { - return SymbolType.DWORD; - } else if(SymbolType.isSDWord(type1) && (SymbolType.isSDWord(type2) || SymbolType.isSWord(type2) || SymbolType.isSByte(type2))) { - return SymbolType.SDWORD; - } - throw new RuntimeException("Type inference case not handled " + type1 + " " + "+" + " " + type2); - } - - private static SymbolType inferBoolAnd(SymbolType type1, SymbolType type2) { - if(SymbolType.isSByte(type1) && SymbolType.isSByte(type2)) { - return SymbolTypeInline.SBYTE; - } else if(SymbolType.isByte(type1) || SymbolType.isByte(type2)) { - return SymbolType.BYTE; - } else if(SymbolType.isSWord(type1) && SymbolType.isSWord(type2)) { - return SymbolType.SWORD; - } else if(SymbolType.isWord(type1) || SymbolType.isWord(type2)) { - return SymbolType.WORD; - } else if(SymbolType.isSDWord(type1) || SymbolType.isSDWord(type2)) { - return SymbolType.SDWORD; - } else if(SymbolType.isDWord(type1) || SymbolType.isDWord(type2)) { - return SymbolType.DWORD; - } - throw new RuntimeException("Type inference case not handled " + type1 + " " + "+" + " " + type2); - } - - private static SymbolType inferMinus(SymbolType type1, SymbolType type2) { - if(type1 instanceof SymbolTypePointer && isInteger(type2)) { - return new SymbolTypePointer(((SymbolTypePointer) type1).getElementType()); - } - if(type1 instanceof SymbolTypePointer && type2 instanceof SymbolTypePointer) { - return SymbolType.WORD; - } - if(SymbolType.isByte(type1) && SymbolType.isByte(type2)) { - return SymbolTypeInline.NUMERIC; - } - if(SymbolType.isSByte(type1) && SymbolType.isSByte(type2)) { - return SymbolTypeInline.NUMERIC; - } - if(SymbolType.isWord(type1) && (SymbolType.isWord(type2) || SymbolType.isByte(type2))) { - return SymbolType.WORD; - } - if(SymbolType.isSWord(type1) && (SymbolType.isSWord(type2) || SymbolType.isSByte(type2))) { - return SymbolType.SWORD; - } - if(SymbolType.isDWord(type1) && (SymbolType.isDWord(type2) || SymbolType.isWord(type2) || SymbolType.isByte(type2))) { - return SymbolType.DWORD; - } - if(SymbolType.isSDWord(type1) && (SymbolType.isSDWord(type2) || SymbolType.isSWord(type2) || SymbolType.isSByte(type2))) { - return SymbolType.SDWORD; - } - throw new RuntimeException("Type inference case not handled " + type1 + " - " + type2); - } - - - private static boolean isInteger(SymbolType type) { - if(SymbolType.BYTE.equals(type)) { - return true; - } else if(SymbolType.WORD.equals(type)) { - return true; - } else if(SymbolType.SBYTE.equals(type)) { - return true; - } else if(SymbolType.SWORD.equals(type)) { - return true; - } else if(type instanceof SymbolTypeInline) { - SymbolTypeInline typeInline = (SymbolTypeInline) type; - return typeInline.isByte() || typeInline.isSByte() || typeInline.isWord() || typeInline.isSWord() || typeInline.isDWord() || typeInline.isSDWord(); - } else { - return false; } } @@ -389,13 +205,13 @@ public class SymbolTypeInference { ArrayList types = new ArrayList<>(); types.add(new SymbolTypeArray(elmType)); types.add(SymbolType.WORD); - return new SymbolTypeInline(types); - } else if((list.getList().size() == 2 && SymbolType.isWord(elmType) )) { + return new SymbolTypeMulti(types); + } else if((list.getList().size() == 2 && SymbolType.isWord(elmType))) { // Potentially a dword constructor - return a composite type ArrayList types = new ArrayList<>(); types.add(new SymbolTypeArray(elmType)); types.add(SymbolType.DWORD); - return new SymbolTypeInline(types); + return new SymbolTypeMulti(types); } else { return new SymbolTypeArray(elmType); } @@ -415,7 +231,7 @@ public class SymbolTypeInference { } else if(assignment.getOperator() instanceof OperatorBinary) { rValueType = inferType(symbols, rValue1, (OperatorBinary) assignment.getOperator(), rValue2); } else { - throw new CompileError("Cannot infer type of "+assignment.toString()); + throw new CompileError("Cannot infer type of " + assignment.toString()); } return rValueType; } @@ -431,11 +247,11 @@ public class SymbolTypeInference { if(lValueType.equals(rValueType)) { // Types match directly return true; - } else if(rValueType instanceof SymbolTypeInline) { - Collection rTypes = ((SymbolTypeInline) rValueType).getTypes(); - if(lValueType instanceof SymbolTypeInline) { + } else if(rValueType instanceof SymbolTypeMulti) { + Collection rTypes = ((SymbolTypeMulti) rValueType).getTypes(); + if(lValueType instanceof SymbolTypeMulti) { // Both are inline types - RValue type must be superset of LValue - Collection lTypes = ((SymbolTypeInline) lValueType).getTypes(); + Collection lTypes = ((SymbolTypeMulti) lValueType).getTypes(); return typeContainsMatchAll(lTypes, rTypes); } else { // Types match because the right side matches the left side @@ -482,43 +298,46 @@ public class SymbolTypeInference { return false; } - public static void inferCallLValue(ProgramScope programScope, StatementCall call) { + public static void inferCallLValue(Program program, StatementCall call, boolean reinfer) { + ProgramScope programScope = program.getScope(); LValue lValue = call.getlValue(); if(lValue instanceof VariableRef) { - Variable lValueVar = programScope.getVariable((VariableRef) lValue); - if(SymbolType.VAR.equals(lValueVar.getType())) { + Variable symbol = programScope.getVariable((VariableRef) lValue); + if(SymbolType.VAR.equals(symbol.getType()) || (reinfer && symbol.isInferredType())) { Procedure procedure = programScope.getProcedure(call.getProcedure()); - lValueVar.setTypeInferred(procedure.getReturnType()); + SymbolType type = procedure.getReturnType(); + setInferedType(program, call, symbol, type); } } } - public static void inferAssignmentLValue(ProgramScope programScope, StatementAssignment assignment) { + public static void inferAssignmentLValue(Program program, StatementAssignment assignment, boolean reinfer) { + ProgramScope programScope = program.getScope(); LValue lValue = assignment.getlValue(); if(lValue instanceof VariableRef) { Variable symbol = programScope.getVariable((VariableRef) lValue); - if(SymbolType.VAR.equals(symbol.getType())) { + if(SymbolType.VAR.equals(symbol.getType()) || (reinfer && symbol.isInferredType())) { // Unresolved symbol - perform inference Operator operator = assignment.getOperator(); - if(assignment.getrValue1()==null && operator == null ) { + if(assignment.getrValue1() == null && operator == null) { // Copy operation RValue rValue = assignment.getrValue2(); SymbolType type = inferType(programScope, rValue); - symbol.setTypeInferred(type); + setInferedType(program, assignment, symbol, type); } else if(assignment.getrValue1() == null && operator instanceof OperatorUnary) { // Unary operation RValue rValue = assignment.getrValue2(); SymbolType type = inferType(programScope, (OperatorUnary) operator, rValue); - symbol.setTypeInferred(type); - } else if(operator instanceof OperatorBinary){ + setInferedType(program, assignment, symbol, type); + } else if(operator instanceof OperatorBinary) { // Binary operation SymbolType type = inferType( programScope, assignment.getrValue1(), (OperatorBinary) assignment.getOperator(), assignment.getrValue2()); - symbol.setTypeInferred(type); + setInferedType(program, assignment, symbol, type); } else { - throw new CompileError("Cannot infer type of "+assignment); + throw new CompileError("Cannot infer type of " + assignment); } // If the type is an array or a string the symbol is constant if(symbol.getType() instanceof SymbolTypeArray) { @@ -530,11 +349,18 @@ public class SymbolTypeInference { } } - public static void inferLValue(ProgramScope programScope, StatementLValue statementLValue) { + private static void setInferedType(Program program, StatementLValue statementLValue, Variable symbol, SymbolType type) { + if(!SymbolType.VAR.equals(symbol.getType()) && !type.equals(symbol.getType())) { + program.getLog().append("Inferred type updated to " + type + " in " + statementLValue.toString(program, false)); + } + symbol.setTypeInferred(type); + } + + public static void inferLValue(Program program, StatementLValue statementLValue, boolean reinfer) { if(statementLValue instanceof StatementAssignment) { - inferAssignmentLValue(programScope, (StatementAssignment) statementLValue); + inferAssignmentLValue(program, (StatementAssignment) statementLValue, reinfer); } else if(statementLValue instanceof StatementCall) { - inferCallLValue(programScope, (StatementCall) statementLValue); + inferCallLValue(program, (StatementCall) statementLValue, reinfer); } else { throw new RuntimeException("LValue statement not implemented " + statementLValue); } diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInteger.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInteger.java index ba92160b2..a9bd14c8f 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInteger.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInteger.java @@ -1,16 +1,20 @@ package dk.camelot64.kickc.model.types; /** Integer symbol types (byte, signed byte, word, ...). */ -public class SymbolTypeInteger implements SymbolType { +public class SymbolTypeInteger implements SymbolTypeSimple { private final String typeName; private final long minValue; private final long maxValue; + private final boolean signed; + private final int bits; - SymbolTypeInteger(String typeName, long minValue, long maxValue) { + SymbolTypeInteger(String typeName, long minValue, long maxValue, boolean signed, int bits) { this.typeName = typeName; this.minValue = minValue; this.maxValue = maxValue; + this.signed = signed; + this.bits = bits; } @Override @@ -26,6 +30,14 @@ public class SymbolTypeInteger implements SymbolType { return maxValue; } + public boolean isSigned() { + return signed; + } + + public int getBits() { + return bits; + } + @Override public String toString() { return getTypeName(); diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInline.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeMulti.java similarity index 89% rename from src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInline.java rename to src/main/java/dk/camelot64/kickc/model/types/SymbolTypeMulti.java index 10267b9c9..0b5fc87f9 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInline.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeMulti.java @@ -7,16 +7,16 @@ import java.util.Collection; * Symbol Type of an inline expression. Inline expressions can match multiple types depending on the actual value, * eg. the value 27 matches both byte and signed byte (which can in turn be promoted to word/signed word, dword/signed dword), while the value -252 only matches signed word or signed dword. */ -public class SymbolTypeInline implements SymbolType { +public class SymbolTypeMulti implements SymbolType { /** All numeric types. */ - public static final SymbolTypeInline NUMERIC = new SymbolTypeInline(Arrays.asList(BYTE, SBYTE, WORD, SWORD, DWORD, SDWORD)); + public static final SymbolTypeMulti NUMERIC = new SymbolTypeMulti(Arrays.asList(BYTE, SBYTE, WORD, SWORD, DWORD, SDWORD)); /** * All potential types for the inline constant. */ private Collection types; - public SymbolTypeInline(Collection types) { + public SymbolTypeMulti(Collection types) { this.types = types; } @@ -47,7 +47,7 @@ public class SymbolTypeInline implements SymbolType { if(o == null || getClass() != o.getClass()) { return false; } - SymbolTypeInline that = (SymbolTypeInline) o; + SymbolTypeMulti that = (SymbolTypeMulti) o; return types != null ? types.equals(that.types) : that.types == null; } diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeBasic.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeNamed.java similarity index 76% rename from src/main/java/dk/camelot64/kickc/model/types/SymbolTypeBasic.java rename to src/main/java/dk/camelot64/kickc/model/types/SymbolTypeNamed.java index 3b85c0873..4791a1e7a 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeBasic.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeNamed.java @@ -1,11 +1,11 @@ package dk.camelot64.kickc.model.types; -/** Basic Symbol Types */ -public class SymbolTypeBasic implements SymbolType { +/** Basic named (string, char, ...) Symbol Types */ +public class SymbolTypeNamed implements SymbolTypeSimple { private String typeName; - SymbolTypeBasic(String typeName) { + SymbolTypeNamed(String typeName) { this.typeName = typeName; } @@ -22,7 +22,7 @@ public class SymbolTypeBasic implements SymbolType { return false; } - SymbolTypeBasic that = (SymbolTypeBasic) o; + SymbolTypeNamed that = (SymbolTypeNamed) o; return typeName != null ? typeName.equals(that.typeName) : that.typeName == null; } @@ -38,3 +38,4 @@ public class SymbolTypeBasic implements SymbolType { } } + diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypePointer.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypePointer.java index 1eb6163fa..f4df62f0e 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypePointer.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypePointer.java @@ -1,7 +1,7 @@ package dk.camelot64.kickc.model.types; /** A pointer */ -public class SymbolTypePointer implements SymbolType { +public class SymbolTypePointer implements SymbolTypeSimple { private SymbolType elementType; diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeProcedure.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeProcedure.java index 19feb4bee..1b7f2cb36 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeProcedure.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeProcedure.java @@ -1,7 +1,7 @@ package dk.camelot64.kickc.model.types; /** A function returning another type */ -public class SymbolTypeProcedure implements SymbolType { +public class SymbolTypeProcedure implements SymbolTypeSimple { private SymbolType returnType; diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeProgram.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeProgram.java index 20bef8ded..a5e47a713 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeProgram.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeProgram.java @@ -1,7 +1,7 @@ package dk.camelot64.kickc.model.types; /** A program */ -public class SymbolTypeProgram implements SymbolType { +public class SymbolTypeProgram implements SymbolTypeSimple { public SymbolTypeProgram() { diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeSimple.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeSimple.java new file mode 100644 index 000000000..ea306056a --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeSimple.java @@ -0,0 +1,5 @@ +package dk.camelot64.kickc.model.types; + +/** Marker interface for simple symbol types - ie. not a multi-type */ +public interface SymbolTypeSimple extends SymbolType { +} diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantBinary.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantBinary.java index 16603375a..7c81909cd 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantBinary.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantBinary.java @@ -38,7 +38,7 @@ public class ConstantBinary implements ConstantValue { @Override public ConstantLiteral calculateLiteral(ProgramScope scope) { - return operator.calculate(left.calculateLiteral(scope), right.calculateLiteral(scope)); + return operator.calculateLiteral(left.calculateLiteral(scope), right.calculateLiteral(scope)); } @Override diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantInteger.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantInteger.java index 88a60a1e5..c757ec655 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantInteger.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantInteger.java @@ -3,7 +3,7 @@ package dk.camelot64.kickc.model.values; import dk.camelot64.kickc.model.*; import dk.camelot64.kickc.model.symbols.ProgramScope; import dk.camelot64.kickc.model.types.SymbolType; -import dk.camelot64.kickc.model.types.SymbolTypeInline; +import dk.camelot64.kickc.model.types.SymbolTypeMulti; import dk.camelot64.kickc.model.types.SymbolTypeInteger; import java.util.ArrayList; @@ -38,7 +38,7 @@ public class ConstantInteger implements ConstantLiteral { potentialTypes.add(typeInteger); } } - return new SymbolTypeInline(potentialTypes); + return new SymbolTypeMulti(potentialTypes); } @Override diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantPointer.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantPointer.java index 5b4d74b30..a4172d59c 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantPointer.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantPointer.java @@ -3,12 +3,8 @@ package dk.camelot64.kickc.model.values; import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.symbols.ProgramScope; import dk.camelot64.kickc.model.types.SymbolType; -import dk.camelot64.kickc.model.types.SymbolTypeInline; -import dk.camelot64.kickc.model.types.SymbolTypeInteger; import dk.camelot64.kickc.model.types.SymbolTypePointer; -import java.util.ArrayList; - /** Constant pointer (meaning it points to a constant location)*/ public class ConstantPointer implements ConstantLiteral { diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantUnary.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantUnary.java index dc57a6f11..8993dbefb 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantUnary.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantUnary.java @@ -30,7 +30,7 @@ public class ConstantUnary implements ConstantValue { @Override public ConstantLiteral calculateLiteral(ProgramScope scope) { - return operator.calculate(operand.calculateLiteral(scope)); + return operator.calculateLiteral(operand.calculateLiteral(scope)); } @Override diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1FixLValuesLoHi.java b/src/main/java/dk/camelot64/kickc/passes/Pass1FixLValuesLoHi.java index 028fbcf81..688ade2f8 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1FixLValuesLoHi.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1FixLValuesLoHi.java @@ -67,7 +67,7 @@ public class Pass1FixLValuesLoHi extends Pass1Base { VariableIntermediate tmpVar = currentScope.addVariableIntermediate(); VariableRef tmpVarRef = tmpVar.getRef(); statementLValue.setlValue(tmpVarRef); - SymbolTypeInference.inferLValue(programScope, statementLValue); + SymbolTypeInference.inferLValue(getProgram(), statementLValue, false); // Insert an extra "set low" assignment statement Statement setLoHiAssignment = new StatementAssignment(loHiVar, loHiVar, loHiOperator, tmpVarRef); statementsIt.add(setLoHiAssignment); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1TypeInference.java b/src/main/java/dk/camelot64/kickc/passes/Pass1TypeInference.java index e82abb5be..93745c90f 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1TypeInference.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1TypeInference.java @@ -35,7 +35,7 @@ public class Pass1TypeInference extends Pass1Base { scopes.pop(); } else if(statement instanceof StatementAssignment) { StatementAssignment assignment = (StatementAssignment) statement; - SymbolTypeInference.inferAssignmentLValue(programScope, assignment); + SymbolTypeInference.inferAssignmentLValue(getProgram(), assignment, false); } else if(statement instanceof StatementCall) { StatementCall call = (StatementCall) statement; String procedureName = call.getProcedureName(); @@ -47,7 +47,7 @@ public class Pass1TypeInference extends Pass1Base { if(procedure.getParameters().size() != call.getParameters().size()) { throw new CompileError("Wrong number of parameters in call. Expected " + procedure.getParameters().size() + ". " + statement.toString()); } - SymbolTypeInference.inferCallLValue(programScope, (StatementCall) statement); + SymbolTypeInference.inferCallLValue(getProgram(), (StatementCall) statement, false); } } return false; diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2TypeInference.java b/src/main/java/dk/camelot64/kickc/passes/Pass2TypeInference.java new file mode 100644 index 000000000..b59532300 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/passes/Pass2TypeInference.java @@ -0,0 +1,33 @@ +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.model.ControlFlowBlock; +import dk.camelot64.kickc.model.Program; +import dk.camelot64.kickc.model.statements.Statement; +import dk.camelot64.kickc.model.statements.StatementAssignment; +import dk.camelot64.kickc.model.statements.StatementCall; +import dk.camelot64.kickc.model.types.SymbolTypeInference; + +/** + * Pass through the all statements (re-)inferring types of variables. + */ +public class Pass2TypeInference extends Pass2SsaOptimization { + + public Pass2TypeInference(Program program) { + super(program); + } + + @Override + public boolean step() { + for(ControlFlowBlock block : getProgram().getGraph().getAllBlocks()) { + for(Statement statement : block.getStatements()) { + if(statement instanceof StatementAssignment) { + SymbolTypeInference.inferAssignmentLValue(getProgram(), (StatementAssignment) statement, true); + } else if(statement instanceof StatementCall) { + SymbolTypeInference.inferCallLValue(getProgram(), (StatementCall) statement, true); + } + } + } + return false; + } + +} diff --git a/src/test/java/dk/camelot64/kickc/test/kc/constants.kc b/src/test/java/dk/camelot64/kickc/test/kc/constants.kc index 1188e0e87..64b86ad42 100644 --- a/src/test/java/dk/camelot64/kickc/test/kc/constants.kc +++ b/src/test/java/dk/camelot64/kickc/test/kc/constants.kc @@ -16,7 +16,7 @@ void test_bytes() { assert_byte("0=0@", bb, 0); byte bc=bb+2; assert_byte("0+2=2@", bc, 2); - byte bd=(byte)(bc-4); + byte bd=(byte)((signed byte)bc-4); assert_byte("0+2-4=254@", bd, 254); } diff --git a/src/test/java/dk/camelot64/kickc/test/kc/sinusgenscale8.kc b/src/test/java/dk/camelot64/kickc/test/kc/sinusgenscale8.kc index fce8f7a12..708feb88a 100644 --- a/src/test/java/dk/camelot64/kickc/test/kc/sinusgenscale8.kc +++ b/src/test/java/dk/camelot64/kickc/test/kc/sinusgenscale8.kc @@ -27,7 +27,7 @@ void main() { // max - the maximal value void sin8u_table(byte* sintab, word tabsize, byte min, byte max) { byte amplitude = max-min; - word sum = min+max; + word sum = (word)min+max; byte mid = (byte)((sum>>1)+1); //if( sum & 1 > 0) mid++; // u[4.28] step = PI*2/wavelength diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.cfg b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.cfg index 410147cfa..f15b4d34a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.cfg @@ -168,8 +168,8 @@ line_ydxi::@3: scope:[line_ydxi] from line_ydxi::@5 line_ydxi::@2: scope:[line_ydxi] from line_ydxi::@3 line_ydxi::@5 [98] (byte) line_ydxi::e#6 ← phi( line_ydxi::@3/(byte) line_ydxi::e#2 line_ydxi::@5/(byte) line_ydxi::e#1 ) [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) [98] (byte) line_ydxi::x#6 ← phi( line_ydxi::@3/(byte) line_ydxi::x#2 line_ydxi::@5/(byte) line_ydxi::x#3 ) [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) - [99] (byte/word~) line_ydxi::$6 ← (byte) line_ydxi::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ) - [100] if((byte) line_ydxi::y#2!=(byte/word~) line_ydxi::$6) goto line_ydxi::@1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) + [99] (byte/signed word/word/dword/signed dword~) line_ydxi::$6 ← (byte) line_ydxi::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ) + [100] if((byte) line_ydxi::y#2!=(byte/signed word/word/dword/signed dword~) line_ydxi::$6) goto line_ydxi::@1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) to:line_ydxi::@return line_ydxi::@return: scope:[line_ydxi] from line_ydxi::@2 [101] return [ ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 ] ) @@ -214,8 +214,8 @@ line_xdyi::@3: scope:[line_xdyi] from line_xdyi::@5 line_xdyi::@2: scope:[line_xdyi] from line_xdyi::@3 line_xdyi::@5 [120] (byte) line_xdyi::e#6 ← phi( line_xdyi::@3/(byte) line_xdyi::e#2 line_xdyi::@5/(byte) line_xdyi::e#1 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) [120] (byte) line_xdyi::y#6 ← phi( line_xdyi::@3/(byte) line_xdyi::y#2 line_xdyi::@5/(byte) line_xdyi::y#3 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) - [121] (byte/word~) line_xdyi::$6 ← (byte) line_xdyi::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ) - [122] if((byte) line_xdyi::x#2!=(byte/word~) line_xdyi::$6) goto line_xdyi::@1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) + [121] (byte/signed word/word/dword/signed dword~) line_xdyi::$6 ← (byte) line_xdyi::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ) + [122] if((byte) line_xdyi::x#2!=(byte/signed word/word/dword/signed dword~) line_xdyi::$6) goto line_xdyi::@1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) to:line_xdyi::@return line_xdyi::@return: scope:[line_xdyi] from line_xdyi::@2 [123] return [ ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 ] ) @@ -248,8 +248,8 @@ line_ydxd::@3: scope:[line_ydxd] from line_ydxd::@5 line_ydxd::@2: scope:[line_ydxd] from line_ydxd::@3 line_ydxd::@5 [135] (byte) line_ydxd::e#6 ← phi( line_ydxd::@3/(byte) line_ydxd::e#2 line_ydxd::@5/(byte) line_ydxd::e#1 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) [135] (byte) line_ydxd::x#6 ← phi( line_ydxd::@3/(byte) line_ydxd::x#2 line_ydxd::@5/(byte) line_ydxd::x#3 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) - [136] (byte/word~) line_ydxd::$6 ← (byte) line_ydxd::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ) - [137] if((byte) line_ydxd::y#3!=(byte/word~) line_ydxd::$6) goto line_ydxd::@1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) + [136] (byte/signed word/word/dword/signed dword~) line_ydxd::$6 ← (byte) line_ydxd::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ) + [137] if((byte) line_ydxd::y#3!=(byte/signed word/word/dword/signed dword~) line_ydxd::$6) goto line_ydxd::@1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) to:line_ydxd::@return line_ydxd::@return: scope:[line_ydxd] from line_ydxd::@2 [138] return [ ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 ] ) @@ -282,8 +282,8 @@ line_xdyd::@3: scope:[line_xdyd] from line_xdyd::@5 line_xdyd::@2: scope:[line_xdyd] from line_xdyd::@3 line_xdyd::@5 [150] (byte) line_xdyd::e#6 ← phi( line_xdyd::@3/(byte) line_xdyd::e#2 line_xdyd::@5/(byte) line_xdyd::e#1 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) [150] (byte) line_xdyd::y#6 ← phi( line_xdyd::@3/(byte) line_xdyd::y#2 line_xdyd::@5/(byte) line_xdyd::y#3 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) - [151] (byte/word~) line_xdyd::$6 ← (byte) line_xdyd::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ) - [152] if((byte) line_xdyd::x#2!=(byte/word~) line_xdyd::$6) goto line_xdyd::@1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) + [151] (byte/signed word/word/dword/signed dword~) line_xdyd::$6 ← (byte) line_xdyd::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ) + [152] if((byte) line_xdyd::x#2!=(byte/signed word/word/dword/signed dword~) line_xdyd::$6) goto line_xdyd::@1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) to:line_xdyd::@return line_xdyd::@return: scope:[line_xdyd] from line_xdyd::@2 [153] return [ ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log index 2c8ee5dec..ea73aea4d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log @@ -218,14 +218,14 @@ proc (void()) main() *((byte*) FGCOL) ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte~) main::$0 ← (byte) BMM | (byte) DEN (byte~) main::$1 ← (byte~) main::$0 | (byte) RSEL - (byte~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word/dword/signed dword) 3 - *((byte*) D011) ← (byte~) main::$2 + (byte/word/dword~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word/dword/signed dword) 3 + *((byte*) D011) ← (byte/word/dword~) main::$2 (word~) main::$3 ← ((word)) (byte*) SCREEN - (word~) main::$4 ← (word~) main::$3 / (byte/signed byte/word/signed word/dword/signed dword) 64 + (word/signed dword/dword~) main::$4 ← (word~) main::$3 / (byte/signed byte/word/signed word/dword/signed dword) 64 (word~) main::$5 ← ((word)) (byte*) BITMAP - (word~) main::$6 ← (word~) main::$5 / (word/signed word/dword/signed dword) 1024 - (word~) main::$7 ← (word~) main::$4 | (word~) main::$6 - (byte~) main::$8 ← ((byte)) (word~) main::$7 + (word/signed dword/dword~) main::$6 ← (word~) main::$5 / (word/signed word/dword/signed dword) 1024 + (word/dword~) main::$7 ← (word/signed dword/dword~) main::$4 | (word/signed dword/dword~) main::$6 + (byte~) main::$8 ← ((byte)) (word/dword~) main::$7 *((byte*) D018) ← (byte~) main::$8 (void~) main::$9 ← call init_screen (void~) main::$10 ← call init_plot_tables @@ -238,9 +238,9 @@ endproc // main() proc (void()) lines() (byte) lines::l ← (byte/signed byte/word/signed word/dword/signed dword) 0 lines::@1: - (byte/word~) lines::$0 ← (byte) lines::l + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) lines::$1 ← (byte) lines::l + (byte/signed byte/word/signed word/dword/signed dword) 1 - (void~) lines::$2 ← call line *((byte[]) lines_x + (byte) lines::l) *((byte[]) lines_x + (byte/word~) lines::$0) *((byte[]) lines_y + (byte) lines::l) *((byte[]) lines_y + (byte/word~) lines::$1) + (byte/signed word/word/dword/signed dword~) lines::$0 ← (byte) lines::l + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte/signed word/word/dword/signed dword~) lines::$1 ← (byte) lines::l + (byte/signed byte/word/signed word/dword/signed dword) 1 + (void~) lines::$2 ← call line *((byte[]) lines_x + (byte) lines::l) *((byte[]) lines_x + (byte/signed word/word/dword/signed dword~) lines::$0) *((byte[]) lines_y + (byte) lines::l) *((byte[]) lines_y + (byte/signed word/word/dword/signed dword~) lines::$1) (byte) lines::l ← ++ (byte) lines::l (boolean~) lines::$3 ← (byte) lines::l < (byte) lines_cnt if((boolean~) lines::$3) goto lines::@1 @@ -251,13 +251,13 @@ proc (void()) line((byte) line::x0 , (byte) line::x1 , (byte) line::y0 , (byte) (boolean~) line::$0 ← (byte) line::x0 < (byte) line::x1 (boolean~) line::$1 ← ! (boolean~) line::$0 if((boolean~) line::$1) goto line::@1 - (byte/signed byte/word/signed word/dword/signed dword~) line::$2 ← (byte) line::x1 - (byte) line::x0 - (byte) line::xd ← (byte/signed byte/word/signed word/dword/signed dword~) line::$2 + (byte~) line::$2 ← (byte) line::x1 - (byte) line::x0 + (byte) line::xd ← (byte~) line::$2 (boolean~) line::$3 ← (byte) line::y0 < (byte) line::y1 (boolean~) line::$4 ← ! (boolean~) line::$3 if((boolean~) line::$4) goto line::@2 - (byte/signed byte/word/signed word/dword/signed dword~) line::$5 ← (byte) line::y1 - (byte) line::y0 - (byte) line::yd ← (byte/signed byte/word/signed word/dword/signed dword~) line::$5 + (byte~) line::$5 ← (byte) line::y1 - (byte) line::y0 + (byte) line::yd ← (byte~) line::$5 (boolean~) line::$6 ← (byte) line::yd < (byte) line::xd (boolean~) line::$7 ← ! (boolean~) line::$6 if((boolean~) line::$7) goto line::@3 @@ -268,8 +268,8 @@ line::@3: line::@4: goto line::@5 line::@2: - (byte/signed byte/word/signed word/dword/signed dword~) line::$10 ← (byte) line::y0 - (byte) line::y1 - (byte) line::yd ← (byte/signed byte/word/signed word/dword/signed dword~) line::$10 + (byte~) line::$10 ← (byte) line::y0 - (byte) line::y1 + (byte) line::yd ← (byte~) line::$10 (boolean~) line::$11 ← (byte) line::yd < (byte) line::xd (boolean~) line::$12 ← ! (boolean~) line::$11 if((boolean~) line::$12) goto line::@6 @@ -281,13 +281,13 @@ line::@7: line::@5: goto line::@8 line::@1: - (byte/signed byte/word/signed word/dword/signed dword~) line::$15 ← (byte) line::x0 - (byte) line::x1 - (byte) line::xd ← (byte/signed byte/word/signed word/dword/signed dword~) line::$15 + (byte~) line::$15 ← (byte) line::x0 - (byte) line::x1 + (byte) line::xd ← (byte~) line::$15 (boolean~) line::$16 ← (byte) line::y0 < (byte) line::y1 (boolean~) line::$17 ← ! (boolean~) line::$16 if((boolean~) line::$17) goto line::@9 - (byte/signed byte/word/signed word/dword/signed dword~) line::$18 ← (byte) line::y1 - (byte) line::y0 - (byte) line::yd ← (byte/signed byte/word/signed word/dword/signed dword~) line::$18 + (byte~) line::$18 ← (byte) line::y1 - (byte) line::y0 + (byte) line::yd ← (byte~) line::$18 (boolean~) line::$19 ← (byte) line::yd < (byte) line::xd (boolean~) line::$20 ← ! (boolean~) line::$19 if((boolean~) line::$20) goto line::@10 @@ -298,8 +298,8 @@ line::@10: line::@11: goto line::@12 line::@9: - (byte/signed byte/word/signed word/dword/signed dword~) line::$23 ← (byte) line::y0 - (byte) line::y1 - (byte) line::yd ← (byte/signed byte/word/signed word/dword/signed dword~) line::$23 + (byte~) line::$23 ← (byte) line::y0 - (byte) line::y1 + (byte) line::yd ← (byte~) line::$23 (boolean~) line::$24 ← (byte) line::yd < (byte) line::xd (boolean~) line::$25 ← ! (boolean~) line::$24 if((boolean~) line::$25) goto line::@13 @@ -319,17 +319,17 @@ proc (void()) line_xdyi((byte) line_xdyi::x , (byte) line_xdyi::y , (byte) line_ line_xdyi::@1: (void~) line_xdyi::$1 ← call plot (byte) line_xdyi::x (byte) line_xdyi::y (byte) line_xdyi::x ← ++ (byte) line_xdyi::x - (byte/word~) line_xdyi::$2 ← (byte) line_xdyi::e + (byte) line_xdyi::yd - (byte) line_xdyi::e ← (byte/word~) line_xdyi::$2 + (byte~) line_xdyi::$2 ← (byte) line_xdyi::e + (byte) line_xdyi::yd + (byte) line_xdyi::e ← (byte~) line_xdyi::$2 (boolean~) line_xdyi::$3 ← (byte) line_xdyi::xd < (byte) line_xdyi::e (boolean~) line_xdyi::$4 ← ! (boolean~) line_xdyi::$3 if((boolean~) line_xdyi::$4) goto line_xdyi::@2 (byte) line_xdyi::y ← ++ (byte) line_xdyi::y - (byte/signed byte/word/signed word/dword/signed dword~) line_xdyi::$5 ← (byte) line_xdyi::e - (byte) line_xdyi::xd - (byte) line_xdyi::e ← (byte/signed byte/word/signed word/dword/signed dword~) line_xdyi::$5 + (byte~) line_xdyi::$5 ← (byte) line_xdyi::e - (byte) line_xdyi::xd + (byte) line_xdyi::e ← (byte~) line_xdyi::$5 line_xdyi::@2: - (byte/word~) line_xdyi::$6 ← (byte) line_xdyi::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) line_xdyi::$7 ← (byte) line_xdyi::x != (byte/word~) line_xdyi::$6 + (byte/signed word/word/dword/signed dword~) line_xdyi::$6 ← (byte) line_xdyi::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) line_xdyi::$7 ← (byte) line_xdyi::x != (byte/signed word/word/dword/signed dword~) line_xdyi::$6 if((boolean~) line_xdyi::$7) goto line_xdyi::@1 line_xdyi::@return: return @@ -340,17 +340,17 @@ proc (void()) line_xdyd((byte) line_xdyd::x , (byte) line_xdyd::y , (byte) line_ line_xdyd::@1: (void~) line_xdyd::$1 ← call plot (byte) line_xdyd::x (byte) line_xdyd::y (byte) line_xdyd::x ← ++ (byte) line_xdyd::x - (byte/word~) line_xdyd::$2 ← (byte) line_xdyd::e + (byte) line_xdyd::yd - (byte) line_xdyd::e ← (byte/word~) line_xdyd::$2 + (byte~) line_xdyd::$2 ← (byte) line_xdyd::e + (byte) line_xdyd::yd + (byte) line_xdyd::e ← (byte~) line_xdyd::$2 (boolean~) line_xdyd::$3 ← (byte) line_xdyd::xd < (byte) line_xdyd::e (boolean~) line_xdyd::$4 ← ! (boolean~) line_xdyd::$3 if((boolean~) line_xdyd::$4) goto line_xdyd::@2 (byte) line_xdyd::y ← -- (byte) line_xdyd::y - (byte/signed byte/word/signed word/dword/signed dword~) line_xdyd::$5 ← (byte) line_xdyd::e - (byte) line_xdyd::xd - (byte) line_xdyd::e ← (byte/signed byte/word/signed word/dword/signed dword~) line_xdyd::$5 + (byte~) line_xdyd::$5 ← (byte) line_xdyd::e - (byte) line_xdyd::xd + (byte) line_xdyd::e ← (byte~) line_xdyd::$5 line_xdyd::@2: - (byte/word~) line_xdyd::$6 ← (byte) line_xdyd::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) line_xdyd::$7 ← (byte) line_xdyd::x != (byte/word~) line_xdyd::$6 + (byte/signed word/word/dword/signed dword~) line_xdyd::$6 ← (byte) line_xdyd::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) line_xdyd::$7 ← (byte) line_xdyd::x != (byte/signed word/word/dword/signed dword~) line_xdyd::$6 if((boolean~) line_xdyd::$7) goto line_xdyd::@1 line_xdyd::@return: return @@ -361,17 +361,17 @@ proc (void()) line_ydxi((byte) line_ydxi::y , (byte) line_ydxi::x , (byte) line_ line_ydxi::@1: (void~) line_ydxi::$1 ← call plot (byte) line_ydxi::x (byte) line_ydxi::y (byte) line_ydxi::y ← ++ (byte) line_ydxi::y - (byte/word~) line_ydxi::$2 ← (byte) line_ydxi::e + (byte) line_ydxi::xd - (byte) line_ydxi::e ← (byte/word~) line_ydxi::$2 + (byte~) line_ydxi::$2 ← (byte) line_ydxi::e + (byte) line_ydxi::xd + (byte) line_ydxi::e ← (byte~) line_ydxi::$2 (boolean~) line_ydxi::$3 ← (byte) line_ydxi::yd < (byte) line_ydxi::e (boolean~) line_ydxi::$4 ← ! (boolean~) line_ydxi::$3 if((boolean~) line_ydxi::$4) goto line_ydxi::@2 (byte) line_ydxi::x ← ++ (byte) line_ydxi::x - (byte/signed byte/word/signed word/dword/signed dword~) line_ydxi::$5 ← (byte) line_ydxi::e - (byte) line_ydxi::yd - (byte) line_ydxi::e ← (byte/signed byte/word/signed word/dword/signed dword~) line_ydxi::$5 + (byte~) line_ydxi::$5 ← (byte) line_ydxi::e - (byte) line_ydxi::yd + (byte) line_ydxi::e ← (byte~) line_ydxi::$5 line_ydxi::@2: - (byte/word~) line_ydxi::$6 ← (byte) line_ydxi::y1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) line_ydxi::$7 ← (byte) line_ydxi::y != (byte/word~) line_ydxi::$6 + (byte/signed word/word/dword/signed dword~) line_ydxi::$6 ← (byte) line_ydxi::y1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) line_ydxi::$7 ← (byte) line_ydxi::y != (byte/signed word/word/dword/signed dword~) line_ydxi::$6 if((boolean~) line_ydxi::$7) goto line_ydxi::@1 line_ydxi::@return: return @@ -383,17 +383,17 @@ line_ydxd::@1: (void~) line_ydxd::$1 ← call plot (byte) line_ydxd::x (byte) line_ydxd::y (byte) line_ydxd::y ← (byte) line_ydxd::y (byte) line_ydxd::y ← ++ (byte) line_ydxd::y - (byte/word~) line_ydxd::$2 ← (byte) line_ydxd::e + (byte) line_ydxd::xd - (byte) line_ydxd::e ← (byte/word~) line_ydxd::$2 + (byte~) line_ydxd::$2 ← (byte) line_ydxd::e + (byte) line_ydxd::xd + (byte) line_ydxd::e ← (byte~) line_ydxd::$2 (boolean~) line_ydxd::$3 ← (byte) line_ydxd::yd < (byte) line_ydxd::e (boolean~) line_ydxd::$4 ← ! (boolean~) line_ydxd::$3 if((boolean~) line_ydxd::$4) goto line_ydxd::@2 (byte) line_ydxd::x ← -- (byte) line_ydxd::x - (byte/signed byte/word/signed word/dword/signed dword~) line_ydxd::$5 ← (byte) line_ydxd::e - (byte) line_ydxd::yd - (byte) line_ydxd::e ← (byte/signed byte/word/signed word/dword/signed dword~) line_ydxd::$5 + (byte~) line_ydxd::$5 ← (byte) line_ydxd::e - (byte) line_ydxd::yd + (byte) line_ydxd::e ← (byte~) line_ydxd::$5 line_ydxd::@2: - (byte/word~) line_ydxd::$6 ← (byte) line_ydxd::y1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) line_ydxd::$7 ← (byte) line_ydxd::y != (byte/word~) line_ydxd::$6 + (byte/signed word/word/dword/signed dword~) line_ydxd::$6 ← (byte) line_ydxd::y1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) line_ydxd::$7 ← (byte) line_ydxd::y != (byte/signed word/word/dword/signed dword~) line_ydxd::$6 if((boolean~) line_ydxd::$7) goto line_ydxd::@1 line_ydxd::@return: return @@ -526,28 +526,28 @@ SYMBOLS (void()) line((byte) line::x0 , (byte) line::x1 , (byte) line::y0 , (byte) line::y1) (boolean~) line::$0 (boolean~) line::$1 -(byte/signed byte/word/signed word/dword/signed dword~) line::$10 +(byte~) line::$10 (boolean~) line::$11 (boolean~) line::$12 (void~) line::$13 (void~) line::$14 -(byte/signed byte/word/signed word/dword/signed dword~) line::$15 +(byte~) line::$15 (boolean~) line::$16 (boolean~) line::$17 -(byte/signed byte/word/signed word/dword/signed dword~) line::$18 +(byte~) line::$18 (boolean~) line::$19 -(byte/signed byte/word/signed word/dword/signed dword~) line::$2 +(byte~) line::$2 (boolean~) line::$20 (void~) line::$21 (void~) line::$22 -(byte/signed byte/word/signed word/dword/signed dword~) line::$23 +(byte~) line::$23 (boolean~) line::$24 (boolean~) line::$25 (void~) line::$26 (void~) line::$27 (boolean~) line::$3 (boolean~) line::$4 -(byte/signed byte/word/signed word/dword/signed dword~) line::$5 +(byte~) line::$5 (boolean~) line::$6 (boolean~) line::$7 (void~) line::$8 @@ -576,11 +576,11 @@ SYMBOLS (void()) line_xdyd((byte) line_xdyd::x , (byte) line_xdyd::y , (byte) line_xdyd::x1 , (byte) line_xdyd::xd , (byte) line_xdyd::yd) (byte~) line_xdyd::$0 (void~) line_xdyd::$1 -(byte/word~) line_xdyd::$2 +(byte~) line_xdyd::$2 (boolean~) line_xdyd::$3 (boolean~) line_xdyd::$4 -(byte/signed byte/word/signed word/dword/signed dword~) line_xdyd::$5 -(byte/word~) line_xdyd::$6 +(byte~) line_xdyd::$5 +(byte/signed word/word/dword/signed dword~) line_xdyd::$6 (boolean~) line_xdyd::$7 (label) line_xdyd::@1 (label) line_xdyd::@2 @@ -594,11 +594,11 @@ SYMBOLS (void()) line_xdyi((byte) line_xdyi::x , (byte) line_xdyi::y , (byte) line_xdyi::x1 , (byte) line_xdyi::xd , (byte) line_xdyi::yd) (byte~) line_xdyi::$0 (void~) line_xdyi::$1 -(byte/word~) line_xdyi::$2 +(byte~) line_xdyi::$2 (boolean~) line_xdyi::$3 (boolean~) line_xdyi::$4 -(byte/signed byte/word/signed word/dword/signed dword~) line_xdyi::$5 -(byte/word~) line_xdyi::$6 +(byte~) line_xdyi::$5 +(byte/signed word/word/dword/signed dword~) line_xdyi::$6 (boolean~) line_xdyi::$7 (label) line_xdyi::@1 (label) line_xdyi::@2 @@ -612,11 +612,11 @@ SYMBOLS (void()) line_ydxd((byte) line_ydxd::y , (byte) line_ydxd::x , (byte) line_ydxd::y1 , (byte) line_ydxd::yd , (byte) line_ydxd::xd) (byte~) line_ydxd::$0 (void~) line_ydxd::$1 -(byte/word~) line_ydxd::$2 +(byte~) line_ydxd::$2 (boolean~) line_ydxd::$3 (boolean~) line_ydxd::$4 -(byte/signed byte/word/signed word/dword/signed dword~) line_ydxd::$5 -(byte/word~) line_ydxd::$6 +(byte~) line_ydxd::$5 +(byte/signed word/word/dword/signed dword~) line_ydxd::$6 (boolean~) line_ydxd::$7 (label) line_ydxd::@1 (label) line_ydxd::@2 @@ -630,11 +630,11 @@ SYMBOLS (void()) line_ydxi((byte) line_ydxi::y , (byte) line_ydxi::x , (byte) line_ydxi::y1 , (byte) line_ydxi::yd , (byte) line_ydxi::xd) (byte~) line_ydxi::$0 (void~) line_ydxi::$1 -(byte/word~) line_ydxi::$2 +(byte~) line_ydxi::$2 (boolean~) line_ydxi::$3 (boolean~) line_ydxi::$4 -(byte/signed byte/word/signed word/dword/signed dword~) line_ydxi::$5 -(byte/word~) line_ydxi::$6 +(byte~) line_ydxi::$5 +(byte/signed word/word/dword/signed dword~) line_ydxi::$6 (boolean~) line_ydxi::$7 (label) line_ydxi::@1 (label) line_ydxi::@2 @@ -646,8 +646,8 @@ SYMBOLS (byte) line_ydxi::y1 (byte) line_ydxi::yd (void()) lines() -(byte/word~) lines::$0 -(byte/word~) lines::$1 +(byte/signed word/word/dword/signed dword~) lines::$0 +(byte/signed word/word/dword/signed dword~) lines::$1 (void~) lines::$2 (boolean~) lines::$3 (label) lines::@1 @@ -661,12 +661,12 @@ SYMBOLS (byte~) main::$1 (void~) main::$10 (void~) main::$11 -(byte~) main::$2 +(byte/word/dword~) main::$2 (word~) main::$3 -(word~) main::$4 +(word/signed dword/dword~) main::$4 (word~) main::$5 -(word~) main::$6 -(word~) main::$7 +(word/signed dword/dword~) main::$6 +(word/dword~) main::$7 (byte~) main::$8 (void~) main::$9 (label) main::@1 @@ -729,14 +729,14 @@ main: scope:[main] from *((byte*) FGCOL) ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte~) main::$0 ← (byte) BMM | (byte) DEN (byte~) main::$1 ← (byte~) main::$0 | (byte) RSEL - (byte~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word/dword/signed dword) 3 - *((byte*) D011) ← (byte~) main::$2 + (byte/word/dword~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word/dword/signed dword) 3 + *((byte*) D011) ← (byte/word/dword~) main::$2 (word~) main::$3 ← ((word)) (byte*) SCREEN - (word~) main::$4 ← (word~) main::$3 / (byte/signed byte/word/signed word/dword/signed dword) 64 + (word/signed dword/dword~) main::$4 ← (word~) main::$3 / (byte/signed byte/word/signed word/dword/signed dword) 64 (word~) main::$5 ← ((word)) (byte*) BITMAP - (word~) main::$6 ← (word~) main::$5 / (word/signed word/dword/signed dword) 1024 - (word~) main::$7 ← (word~) main::$4 | (word~) main::$6 - (byte~) main::$8 ← ((byte)) (word~) main::$7 + (word/signed dword/dword~) main::$6 ← (word~) main::$5 / (word/signed word/dword/signed dword) 1024 + (word/dword~) main::$7 ← (word/signed dword/dword~) main::$4 | (word/signed dword/dword~) main::$6 + (byte~) main::$8 ← ((byte)) (word/dword~) main::$7 *((byte*) D018) ← (byte~) main::$8 (void~) main::$9 ← call init_screen (void~) main::$10 ← call init_plot_tables @@ -756,9 +756,9 @@ lines: scope:[lines] from (byte) lines::l ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:lines::@1 lines::@1: scope:[lines] from lines lines::@1 - (byte/word~) lines::$0 ← (byte) lines::l + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) lines::$1 ← (byte) lines::l + (byte/signed byte/word/signed word/dword/signed dword) 1 - (void~) lines::$2 ← call line *((byte[]) lines_x + (byte) lines::l) *((byte[]) lines_x + (byte/word~) lines::$0) *((byte[]) lines_y + (byte) lines::l) *((byte[]) lines_y + (byte/word~) lines::$1) + (byte/signed word/word/dword/signed dword~) lines::$0 ← (byte) lines::l + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte/signed word/word/dword/signed dword~) lines::$1 ← (byte) lines::l + (byte/signed byte/word/signed word/dword/signed dword) 1 + (void~) lines::$2 ← call line *((byte[]) lines_x + (byte) lines::l) *((byte[]) lines_x + (byte/signed word/word/dword/signed dword~) lines::$0) *((byte[]) lines_y + (byte) lines::l) *((byte[]) lines_y + (byte/signed word/word/dword/signed dword~) lines::$1) (byte) lines::l ← ++ (byte) lines::l (boolean~) lines::$3 ← (byte) lines::l < (byte) lines_cnt if((boolean~) lines::$3) goto lines::@1 @@ -776,29 +776,29 @@ line: scope:[line] from if((boolean~) line::$1) goto line::@1 to:line::@15 line::@1: scope:[line] from line line::@22 - (byte/signed byte/word/signed word/dword/signed dword~) line::$15 ← (byte) line::x0 - (byte) line::x1 - (byte) line::xd ← (byte/signed byte/word/signed word/dword/signed dword~) line::$15 + (byte~) line::$15 ← (byte) line::x0 - (byte) line::x1 + (byte) line::xd ← (byte~) line::$15 (boolean~) line::$16 ← (byte) line::y0 < (byte) line::y1 (boolean~) line::$17 ← ! (boolean~) line::$16 if((boolean~) line::$17) goto line::@9 to:line::@23 line::@15: scope:[line] from line - (byte/signed byte/word/signed word/dword/signed dword~) line::$2 ← (byte) line::x1 - (byte) line::x0 - (byte) line::xd ← (byte/signed byte/word/signed word/dword/signed dword~) line::$2 + (byte~) line::$2 ← (byte) line::x1 - (byte) line::x0 + (byte) line::xd ← (byte~) line::$2 (boolean~) line::$3 ← (byte) line::y0 < (byte) line::y1 (boolean~) line::$4 ← ! (boolean~) line::$3 if((boolean~) line::$4) goto line::@2 to:line::@16 line::@2: scope:[line] from line::@15 line::@19 - (byte/signed byte/word/signed word/dword/signed dword~) line::$10 ← (byte) line::y0 - (byte) line::y1 - (byte) line::yd ← (byte/signed byte/word/signed word/dword/signed dword~) line::$10 + (byte~) line::$10 ← (byte) line::y0 - (byte) line::y1 + (byte) line::yd ← (byte~) line::$10 (boolean~) line::$11 ← (byte) line::yd < (byte) line::xd (boolean~) line::$12 ← ! (boolean~) line::$11 if((boolean~) line::$12) goto line::@6 to:line::@20 line::@16: scope:[line] from line::@15 - (byte/signed byte/word/signed word/dword/signed dword~) line::$5 ← (byte) line::y1 - (byte) line::y0 - (byte) line::yd ← (byte/signed byte/word/signed word/dword/signed dword~) line::$5 + (byte~) line::$5 ← (byte) line::y1 - (byte) line::y0 + (byte) line::yd ← (byte~) line::$5 (boolean~) line::$6 ← (byte) line::yd < (byte) line::xd (boolean~) line::$7 ← ! (boolean~) line::$6 if((boolean~) line::$7) goto line::@3 @@ -832,15 +832,15 @@ line::@8: scope:[line] from line::@12 line::@5 line::@22: scope:[line] from to:line::@1 line::@9: scope:[line] from line::@1 line::@26 - (byte/signed byte/word/signed word/dword/signed dword~) line::$23 ← (byte) line::y0 - (byte) line::y1 - (byte) line::yd ← (byte/signed byte/word/signed word/dword/signed dword~) line::$23 + (byte~) line::$23 ← (byte) line::y0 - (byte) line::y1 + (byte) line::yd ← (byte~) line::$23 (boolean~) line::$24 ← (byte) line::yd < (byte) line::xd (boolean~) line::$25 ← ! (boolean~) line::$24 if((boolean~) line::$25) goto line::@13 to:line::@27 line::@23: scope:[line] from line::@1 - (byte/signed byte/word/signed word/dword/signed dword~) line::$18 ← (byte) line::y1 - (byte) line::y0 - (byte) line::yd ← (byte/signed byte/word/signed word/dword/signed dword~) line::$18 + (byte~) line::$18 ← (byte) line::y1 - (byte) line::y0 + (byte) line::yd ← (byte~) line::$18 (boolean~) line::$19 ← (byte) line::yd < (byte) line::xd (boolean~) line::$20 ← ! (boolean~) line::$19 if((boolean~) line::$20) goto line::@10 @@ -881,21 +881,21 @@ line_xdyi: scope:[line_xdyi] from line_xdyi::@1: scope:[line_xdyi] from line_xdyi line_xdyi::@2 (void~) line_xdyi::$1 ← call plot (byte) line_xdyi::x (byte) line_xdyi::y (byte) line_xdyi::x ← ++ (byte) line_xdyi::x - (byte/word~) line_xdyi::$2 ← (byte) line_xdyi::e + (byte) line_xdyi::yd - (byte) line_xdyi::e ← (byte/word~) line_xdyi::$2 + (byte~) line_xdyi::$2 ← (byte) line_xdyi::e + (byte) line_xdyi::yd + (byte) line_xdyi::e ← (byte~) line_xdyi::$2 (boolean~) line_xdyi::$3 ← (byte) line_xdyi::xd < (byte) line_xdyi::e (boolean~) line_xdyi::$4 ← ! (boolean~) line_xdyi::$3 if((boolean~) line_xdyi::$4) goto line_xdyi::@2 to:line_xdyi::@3 line_xdyi::@2: scope:[line_xdyi] from line_xdyi::@1 line_xdyi::@3 - (byte/word~) line_xdyi::$6 ← (byte) line_xdyi::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) line_xdyi::$7 ← (byte) line_xdyi::x != (byte/word~) line_xdyi::$6 + (byte/signed word/word/dword/signed dword~) line_xdyi::$6 ← (byte) line_xdyi::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) line_xdyi::$7 ← (byte) line_xdyi::x != (byte/signed word/word/dword/signed dword~) line_xdyi::$6 if((boolean~) line_xdyi::$7) goto line_xdyi::@1 to:line_xdyi::@4 line_xdyi::@3: scope:[line_xdyi] from line_xdyi::@1 (byte) line_xdyi::y ← ++ (byte) line_xdyi::y - (byte/signed byte/word/signed word/dword/signed dword~) line_xdyi::$5 ← (byte) line_xdyi::e - (byte) line_xdyi::xd - (byte) line_xdyi::e ← (byte/signed byte/word/signed word/dword/signed dword~) line_xdyi::$5 + (byte~) line_xdyi::$5 ← (byte) line_xdyi::e - (byte) line_xdyi::xd + (byte) line_xdyi::e ← (byte~) line_xdyi::$5 to:line_xdyi::@2 line_xdyi::@4: scope:[line_xdyi] from line_xdyi::@2 to:line_xdyi::@return @@ -911,21 +911,21 @@ line_xdyd: scope:[line_xdyd] from line_xdyd::@1: scope:[line_xdyd] from line_xdyd line_xdyd::@2 (void~) line_xdyd::$1 ← call plot (byte) line_xdyd::x (byte) line_xdyd::y (byte) line_xdyd::x ← ++ (byte) line_xdyd::x - (byte/word~) line_xdyd::$2 ← (byte) line_xdyd::e + (byte) line_xdyd::yd - (byte) line_xdyd::e ← (byte/word~) line_xdyd::$2 + (byte~) line_xdyd::$2 ← (byte) line_xdyd::e + (byte) line_xdyd::yd + (byte) line_xdyd::e ← (byte~) line_xdyd::$2 (boolean~) line_xdyd::$3 ← (byte) line_xdyd::xd < (byte) line_xdyd::e (boolean~) line_xdyd::$4 ← ! (boolean~) line_xdyd::$3 if((boolean~) line_xdyd::$4) goto line_xdyd::@2 to:line_xdyd::@3 line_xdyd::@2: scope:[line_xdyd] from line_xdyd::@1 line_xdyd::@3 - (byte/word~) line_xdyd::$6 ← (byte) line_xdyd::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) line_xdyd::$7 ← (byte) line_xdyd::x != (byte/word~) line_xdyd::$6 + (byte/signed word/word/dword/signed dword~) line_xdyd::$6 ← (byte) line_xdyd::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) line_xdyd::$7 ← (byte) line_xdyd::x != (byte/signed word/word/dword/signed dword~) line_xdyd::$6 if((boolean~) line_xdyd::$7) goto line_xdyd::@1 to:line_xdyd::@4 line_xdyd::@3: scope:[line_xdyd] from line_xdyd::@1 (byte) line_xdyd::y ← -- (byte) line_xdyd::y - (byte/signed byte/word/signed word/dword/signed dword~) line_xdyd::$5 ← (byte) line_xdyd::e - (byte) line_xdyd::xd - (byte) line_xdyd::e ← (byte/signed byte/word/signed word/dword/signed dword~) line_xdyd::$5 + (byte~) line_xdyd::$5 ← (byte) line_xdyd::e - (byte) line_xdyd::xd + (byte) line_xdyd::e ← (byte~) line_xdyd::$5 to:line_xdyd::@2 line_xdyd::@4: scope:[line_xdyd] from line_xdyd::@2 to:line_xdyd::@return @@ -941,21 +941,21 @@ line_ydxi: scope:[line_ydxi] from line_ydxi::@1: scope:[line_ydxi] from line_ydxi line_ydxi::@2 (void~) line_ydxi::$1 ← call plot (byte) line_ydxi::x (byte) line_ydxi::y (byte) line_ydxi::y ← ++ (byte) line_ydxi::y - (byte/word~) line_ydxi::$2 ← (byte) line_ydxi::e + (byte) line_ydxi::xd - (byte) line_ydxi::e ← (byte/word~) line_ydxi::$2 + (byte~) line_ydxi::$2 ← (byte) line_ydxi::e + (byte) line_ydxi::xd + (byte) line_ydxi::e ← (byte~) line_ydxi::$2 (boolean~) line_ydxi::$3 ← (byte) line_ydxi::yd < (byte) line_ydxi::e (boolean~) line_ydxi::$4 ← ! (boolean~) line_ydxi::$3 if((boolean~) line_ydxi::$4) goto line_ydxi::@2 to:line_ydxi::@3 line_ydxi::@2: scope:[line_ydxi] from line_ydxi::@1 line_ydxi::@3 - (byte/word~) line_ydxi::$6 ← (byte) line_ydxi::y1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) line_ydxi::$7 ← (byte) line_ydxi::y != (byte/word~) line_ydxi::$6 + (byte/signed word/word/dword/signed dword~) line_ydxi::$6 ← (byte) line_ydxi::y1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) line_ydxi::$7 ← (byte) line_ydxi::y != (byte/signed word/word/dword/signed dword~) line_ydxi::$6 if((boolean~) line_ydxi::$7) goto line_ydxi::@1 to:line_ydxi::@4 line_ydxi::@3: scope:[line_ydxi] from line_ydxi::@1 (byte) line_ydxi::x ← ++ (byte) line_ydxi::x - (byte/signed byte/word/signed word/dword/signed dword~) line_ydxi::$5 ← (byte) line_ydxi::e - (byte) line_ydxi::yd - (byte) line_ydxi::e ← (byte/signed byte/word/signed word/dword/signed dword~) line_ydxi::$5 + (byte~) line_ydxi::$5 ← (byte) line_ydxi::e - (byte) line_ydxi::yd + (byte) line_ydxi::e ← (byte~) line_ydxi::$5 to:line_ydxi::@2 line_ydxi::@4: scope:[line_ydxi] from line_ydxi::@2 to:line_ydxi::@return @@ -972,21 +972,21 @@ line_ydxd::@1: scope:[line_ydxd] from line_ydxd line_ydxd::@2 (void~) line_ydxd::$1 ← call plot (byte) line_ydxd::x (byte) line_ydxd::y (byte) line_ydxd::y ← (byte) line_ydxd::y (byte) line_ydxd::y ← ++ (byte) line_ydxd::y - (byte/word~) line_ydxd::$2 ← (byte) line_ydxd::e + (byte) line_ydxd::xd - (byte) line_ydxd::e ← (byte/word~) line_ydxd::$2 + (byte~) line_ydxd::$2 ← (byte) line_ydxd::e + (byte) line_ydxd::xd + (byte) line_ydxd::e ← (byte~) line_ydxd::$2 (boolean~) line_ydxd::$3 ← (byte) line_ydxd::yd < (byte) line_ydxd::e (boolean~) line_ydxd::$4 ← ! (boolean~) line_ydxd::$3 if((boolean~) line_ydxd::$4) goto line_ydxd::@2 to:line_ydxd::@3 line_ydxd::@2: scope:[line_ydxd] from line_ydxd::@1 line_ydxd::@3 - (byte/word~) line_ydxd::$6 ← (byte) line_ydxd::y1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) line_ydxd::$7 ← (byte) line_ydxd::y != (byte/word~) line_ydxd::$6 + (byte/signed word/word/dword/signed dword~) line_ydxd::$6 ← (byte) line_ydxd::y1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) line_ydxd::$7 ← (byte) line_ydxd::y != (byte/signed word/word/dword/signed dword~) line_ydxd::$6 if((boolean~) line_ydxd::$7) goto line_ydxd::@1 to:line_ydxd::@4 line_ydxd::@3: scope:[line_ydxd] from line_ydxd::@1 (byte) line_ydxd::x ← -- (byte) line_ydxd::x - (byte/signed byte/word/signed word/dword/signed dword~) line_ydxd::$5 ← (byte) line_ydxd::e - (byte) line_ydxd::yd - (byte) line_ydxd::e ← (byte/signed byte/word/signed word/dword/signed dword~) line_ydxd::$5 + (byte~) line_ydxd::$5 ← (byte) line_ydxd::e - (byte) line_ydxd::yd + (byte) line_ydxd::e ← (byte~) line_ydxd::$5 to:line_ydxd::@2 line_ydxd::@4: scope:[line_ydxd] from line_ydxd::@2 to:line_ydxd::@return @@ -1194,14 +1194,14 @@ main: scope:[main] from @10 *((byte*) FGCOL#1) ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte~) main::$0 ← (byte) BMM#1 | (byte) DEN#1 (byte~) main::$1 ← (byte~) main::$0 | (byte) RSEL#1 - (byte~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word/dword/signed dword) 3 - *((byte*) D011#1) ← (byte~) main::$2 + (byte/word/dword~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word/dword/signed dword) 3 + *((byte*) D011#1) ← (byte/word/dword~) main::$2 (word~) main::$3 ← ((word)) (byte*) SCREEN#1 - (word~) main::$4 ← (word~) main::$3 / (byte/signed byte/word/signed word/dword/signed dword) 64 + (word/signed dword/dword~) main::$4 ← (word~) main::$3 / (byte/signed byte/word/signed word/dword/signed dword) 64 (word~) main::$5 ← ((word)) (byte*) BITMAP#0 - (word~) main::$6 ← (word~) main::$5 / (word/signed word/dword/signed dword) 1024 - (word~) main::$7 ← (word~) main::$4 | (word~) main::$6 - (byte~) main::$8 ← ((byte)) (word~) main::$7 + (word/signed dword/dword~) main::$6 ← (word~) main::$5 / (word/signed word/dword/signed dword) 1024 + (word/dword~) main::$7 ← (word/signed dword/dword~) main::$4 | (word/signed dword/dword~) main::$6 + (byte~) main::$8 ← ((byte)) (word/dword~) main::$7 *((byte*) D018#1) ← (byte~) main::$8 call init_screen param-assignment to:main::@3 @@ -1230,12 +1230,12 @@ lines: scope:[lines] from main::@1 lines::@1: scope:[lines] from lines lines::@3 (byte) lines_cnt#2 ← phi( lines/(byte) lines_cnt#3 lines::@3/(byte) lines_cnt#1 ) (byte) lines::l#2 ← phi( lines/(byte) lines::l#0 lines::@3/(byte) lines::l#1 ) - (byte/word~) lines::$0 ← (byte) lines::l#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) lines::$1 ← (byte) lines::l#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte/signed word/word/dword/signed dword~) lines::$0 ← (byte) lines::l#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte/signed word/word/dword/signed dword~) lines::$1 ← (byte) lines::l#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) line::x0#0 ← *((byte[]) lines_x#0 + (byte) lines::l#2) - (byte) line::x1#0 ← *((byte[]) lines_x#0 + (byte/word~) lines::$0) + (byte) line::x1#0 ← *((byte[]) lines_x#0 + (byte/signed word/word/dword/signed dword~) lines::$0) (byte) line::y0#0 ← *((byte[]) lines_y#0 + (byte) lines::l#2) - (byte) line::y1#0 ← *((byte[]) lines_y#0 + (byte/word~) lines::$1) + (byte) line::y1#0 ← *((byte[]) lines_y#0 + (byte/signed word/word/dword/signed dword~) lines::$1) call line param-assignment to:lines::@3 lines::@3: scope:[lines] from lines::@1 @@ -1262,8 +1262,8 @@ line::@1: scope:[line] from line (byte) line::y0#1 ← phi( line/(byte) line::y0#13 ) (byte) line::x1#2 ← phi( line/(byte) line::x1#1 ) (byte) line::x0#2 ← phi( line/(byte) line::x0#1 ) - (byte/signed byte/word/signed word/dword/signed dword~) line::$15 ← (byte) line::x0#2 - (byte) line::x1#2 - (byte) line::xd#0 ← (byte/signed byte/word/signed word/dword/signed dword~) line::$15 + (byte~) line::$15 ← (byte) line::x0#2 - (byte) line::x1#2 + (byte) line::xd#0 ← (byte~) line::$15 (boolean~) line::$16 ← (byte) line::y0#1 < (byte) line::y1#1 (boolean~) line::$17 ← ! (boolean~) line::$16 if((boolean~) line::$17) goto line::@9 @@ -1273,8 +1273,8 @@ line::@15: scope:[line] from line (byte) line::y0#2 ← phi( line/(byte) line::y0#13 ) (byte) line::x0#3 ← phi( line/(byte) line::x0#1 ) (byte) line::x1#3 ← phi( line/(byte) line::x1#1 ) - (byte/signed byte/word/signed word/dword/signed dword~) line::$2 ← (byte) line::x1#3 - (byte) line::x0#3 - (byte) line::xd#1 ← (byte/signed byte/word/signed word/dword/signed dword~) line::$2 + (byte~) line::$2 ← (byte) line::x1#3 - (byte) line::x0#3 + (byte) line::xd#1 ← (byte~) line::$2 (boolean~) line::$3 ← (byte) line::y0#2 < (byte) line::y1#2 (boolean~) line::$4 ← ! (boolean~) line::$3 if((boolean~) line::$4) goto line::@2 @@ -1285,8 +1285,8 @@ line::@2: scope:[line] from line::@15 (byte) line::xd#2 ← phi( line::@15/(byte) line::xd#1 ) (byte) line::y1#3 ← phi( line::@15/(byte) line::y1#2 ) (byte) line::y0#3 ← phi( line::@15/(byte) line::y0#2 ) - (byte/signed byte/word/signed word/dword/signed dword~) line::$10 ← (byte) line::y0#3 - (byte) line::y1#3 - (byte) line::yd#0 ← (byte/signed byte/word/signed word/dword/signed dword~) line::$10 + (byte~) line::$10 ← (byte) line::y0#3 - (byte) line::y1#3 + (byte) line::yd#0 ← (byte~) line::$10 (boolean~) line::$11 ← (byte) line::yd#0 < (byte) line::xd#2 (boolean~) line::$12 ← ! (boolean~) line::$11 if((boolean~) line::$12) goto line::@6 @@ -1297,8 +1297,8 @@ line::@16: scope:[line] from line::@15 (byte) line::xd#3 ← phi( line::@15/(byte) line::xd#1 ) (byte) line::y0#4 ← phi( line::@15/(byte) line::y0#2 ) (byte) line::y1#4 ← phi( line::@15/(byte) line::y1#2 ) - (byte/signed byte/word/signed word/dword/signed dword~) line::$5 ← (byte) line::y1#4 - (byte) line::y0#4 - (byte) line::yd#1 ← (byte/signed byte/word/signed word/dword/signed dword~) line::$5 + (byte~) line::$5 ← (byte) line::y1#4 - (byte) line::y0#4 + (byte) line::yd#1 ← (byte~) line::$5 (boolean~) line::$6 ← (byte) line::yd#1 < (byte) line::xd#3 (boolean~) line::$7 ← ! (boolean~) line::$6 if((boolean~) line::$7) goto line::@3 @@ -1369,8 +1369,8 @@ line::@9: scope:[line] from line::@1 (byte) line::xd#8 ← phi( line::@1/(byte) line::xd#0 ) (byte) line::y1#7 ← phi( line::@1/(byte) line::y1#1 ) (byte) line::y0#9 ← phi( line::@1/(byte) line::y0#1 ) - (byte/signed byte/word/signed word/dword/signed dword~) line::$23 ← (byte) line::y0#9 - (byte) line::y1#7 - (byte) line::yd#2 ← (byte/signed byte/word/signed word/dword/signed dword~) line::$23 + (byte~) line::$23 ← (byte) line::y0#9 - (byte) line::y1#7 + (byte) line::yd#2 ← (byte~) line::$23 (boolean~) line::$24 ← (byte) line::yd#2 < (byte) line::xd#8 (boolean~) line::$25 ← ! (boolean~) line::$24 if((boolean~) line::$25) goto line::@13 @@ -1381,8 +1381,8 @@ line::@23: scope:[line] from line::@1 (byte) line::xd#9 ← phi( line::@1/(byte) line::xd#0 ) (byte) line::y0#10 ← phi( line::@1/(byte) line::y0#1 ) (byte) line::y1#8 ← phi( line::@1/(byte) line::y1#1 ) - (byte/signed byte/word/signed word/dword/signed dword~) line::$18 ← (byte) line::y1#8 - (byte) line::y0#10 - (byte) line::yd#3 ← (byte/signed byte/word/signed word/dword/signed dword~) line::$18 + (byte~) line::$18 ← (byte) line::y1#8 - (byte) line::y0#10 + (byte) line::yd#3 ← (byte~) line::$18 (boolean~) line::$19 ← (byte) line::yd#3 < (byte) line::xd#9 (boolean~) line::$20 ← ! (boolean~) line::$19 if((boolean~) line::$20) goto line::@10 @@ -1478,8 +1478,8 @@ line_xdyi::@5: scope:[line_xdyi] from line_xdyi::@1 (byte) line_xdyi::e#3 ← phi( line_xdyi::@1/(byte) line_xdyi::e#5 ) (byte) line_xdyi::x#4 ← phi( line_xdyi::@1/(byte) line_xdyi::x#3 ) (byte) line_xdyi::x#2 ← ++ (byte) line_xdyi::x#4 - (byte/word~) line_xdyi::$2 ← (byte) line_xdyi::e#3 + (byte) line_xdyi::yd#3 - (byte) line_xdyi::e#1 ← (byte/word~) line_xdyi::$2 + (byte~) line_xdyi::$2 ← (byte) line_xdyi::e#3 + (byte) line_xdyi::yd#3 + (byte) line_xdyi::e#1 ← (byte~) line_xdyi::$2 (boolean~) line_xdyi::$3 ← (byte) line_xdyi::xd#2 < (byte) line_xdyi::e#1 (boolean~) line_xdyi::$4 ← ! (boolean~) line_xdyi::$3 if((boolean~) line_xdyi::$4) goto line_xdyi::@2 @@ -1491,8 +1491,8 @@ line_xdyi::@2: scope:[line_xdyi] from line_xdyi::@3 line_xdyi::@5 (byte) line_xdyi::y#6 ← phi( line_xdyi::@3/(byte) line_xdyi::y#2 line_xdyi::@5/(byte) line_xdyi::y#7 ) (byte) line_xdyi::x#5 ← phi( line_xdyi::@3/(byte) line_xdyi::x#7 line_xdyi::@5/(byte) line_xdyi::x#2 ) (byte) line_xdyi::x1#2 ← phi( line_xdyi::@3/(byte) line_xdyi::x1#3 line_xdyi::@5/(byte) line_xdyi::x1#4 ) - (byte/word~) line_xdyi::$6 ← (byte) line_xdyi::x1#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) line_xdyi::$7 ← (byte) line_xdyi::x#5 != (byte/word~) line_xdyi::$6 + (byte/signed word/word/dword/signed dword~) line_xdyi::$6 ← (byte) line_xdyi::x1#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) line_xdyi::$7 ← (byte) line_xdyi::x#5 != (byte/signed word/word/dword/signed dword~) line_xdyi::$6 if((boolean~) line_xdyi::$7) goto line_xdyi::@1 to:line_xdyi::@return line_xdyi::@3: scope:[line_xdyi] from line_xdyi::@5 @@ -1503,8 +1503,8 @@ line_xdyi::@3: scope:[line_xdyi] from line_xdyi::@5 (byte) line_xdyi::e#4 ← phi( line_xdyi::@5/(byte) line_xdyi::e#1 ) (byte) line_xdyi::y#4 ← phi( line_xdyi::@5/(byte) line_xdyi::y#7 ) (byte) line_xdyi::y#2 ← ++ (byte) line_xdyi::y#4 - (byte/signed byte/word/signed word/dword/signed dword~) line_xdyi::$5 ← (byte) line_xdyi::e#4 - (byte) line_xdyi::xd#3 - (byte) line_xdyi::e#2 ← (byte/signed byte/word/signed word/dword/signed dword~) line_xdyi::$5 + (byte~) line_xdyi::$5 ← (byte) line_xdyi::e#4 - (byte) line_xdyi::xd#3 + (byte) line_xdyi::e#2 ← (byte~) line_xdyi::$5 to:line_xdyi::@2 line_xdyi::@return: scope:[line_xdyi] from line_xdyi::@2 return @@ -1537,8 +1537,8 @@ line_xdyd::@5: scope:[line_xdyd] from line_xdyd::@1 (byte) line_xdyd::e#3 ← phi( line_xdyd::@1/(byte) line_xdyd::e#5 ) (byte) line_xdyd::x#4 ← phi( line_xdyd::@1/(byte) line_xdyd::x#3 ) (byte) line_xdyd::x#2 ← ++ (byte) line_xdyd::x#4 - (byte/word~) line_xdyd::$2 ← (byte) line_xdyd::e#3 + (byte) line_xdyd::yd#3 - (byte) line_xdyd::e#1 ← (byte/word~) line_xdyd::$2 + (byte~) line_xdyd::$2 ← (byte) line_xdyd::e#3 + (byte) line_xdyd::yd#3 + (byte) line_xdyd::e#1 ← (byte~) line_xdyd::$2 (boolean~) line_xdyd::$3 ← (byte) line_xdyd::xd#2 < (byte) line_xdyd::e#1 (boolean~) line_xdyd::$4 ← ! (boolean~) line_xdyd::$3 if((boolean~) line_xdyd::$4) goto line_xdyd::@2 @@ -1550,8 +1550,8 @@ line_xdyd::@2: scope:[line_xdyd] from line_xdyd::@3 line_xdyd::@5 (byte) line_xdyd::y#6 ← phi( line_xdyd::@3/(byte) line_xdyd::y#2 line_xdyd::@5/(byte) line_xdyd::y#7 ) (byte) line_xdyd::x#5 ← phi( line_xdyd::@3/(byte) line_xdyd::x#7 line_xdyd::@5/(byte) line_xdyd::x#2 ) (byte) line_xdyd::x1#2 ← phi( line_xdyd::@3/(byte) line_xdyd::x1#3 line_xdyd::@5/(byte) line_xdyd::x1#4 ) - (byte/word~) line_xdyd::$6 ← (byte) line_xdyd::x1#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) line_xdyd::$7 ← (byte) line_xdyd::x#5 != (byte/word~) line_xdyd::$6 + (byte/signed word/word/dword/signed dword~) line_xdyd::$6 ← (byte) line_xdyd::x1#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) line_xdyd::$7 ← (byte) line_xdyd::x#5 != (byte/signed word/word/dword/signed dword~) line_xdyd::$6 if((boolean~) line_xdyd::$7) goto line_xdyd::@1 to:line_xdyd::@return line_xdyd::@3: scope:[line_xdyd] from line_xdyd::@5 @@ -1562,8 +1562,8 @@ line_xdyd::@3: scope:[line_xdyd] from line_xdyd::@5 (byte) line_xdyd::e#4 ← phi( line_xdyd::@5/(byte) line_xdyd::e#1 ) (byte) line_xdyd::y#4 ← phi( line_xdyd::@5/(byte) line_xdyd::y#7 ) (byte) line_xdyd::y#2 ← -- (byte) line_xdyd::y#4 - (byte/signed byte/word/signed word/dword/signed dword~) line_xdyd::$5 ← (byte) line_xdyd::e#4 - (byte) line_xdyd::xd#3 - (byte) line_xdyd::e#2 ← (byte/signed byte/word/signed word/dword/signed dword~) line_xdyd::$5 + (byte~) line_xdyd::$5 ← (byte) line_xdyd::e#4 - (byte) line_xdyd::xd#3 + (byte) line_xdyd::e#2 ← (byte~) line_xdyd::$5 to:line_xdyd::@2 line_xdyd::@return: scope:[line_xdyd] from line_xdyd::@2 return @@ -1596,8 +1596,8 @@ line_ydxi::@5: scope:[line_ydxi] from line_ydxi::@1 (byte) line_ydxi::e#3 ← phi( line_ydxi::@1/(byte) line_ydxi::e#5 ) (byte) line_ydxi::y#4 ← phi( line_ydxi::@1/(byte) line_ydxi::y#3 ) (byte) line_ydxi::y#2 ← ++ (byte) line_ydxi::y#4 - (byte/word~) line_ydxi::$2 ← (byte) line_ydxi::e#3 + (byte) line_ydxi::xd#3 - (byte) line_ydxi::e#1 ← (byte/word~) line_ydxi::$2 + (byte~) line_ydxi::$2 ← (byte) line_ydxi::e#3 + (byte) line_ydxi::xd#3 + (byte) line_ydxi::e#1 ← (byte~) line_ydxi::$2 (boolean~) line_ydxi::$3 ← (byte) line_ydxi::yd#2 < (byte) line_ydxi::e#1 (boolean~) line_ydxi::$4 ← ! (boolean~) line_ydxi::$3 if((boolean~) line_ydxi::$4) goto line_ydxi::@2 @@ -1609,8 +1609,8 @@ line_ydxi::@2: scope:[line_ydxi] from line_ydxi::@3 line_ydxi::@5 (byte) line_ydxi::x#6 ← phi( line_ydxi::@3/(byte) line_ydxi::x#2 line_ydxi::@5/(byte) line_ydxi::x#7 ) (byte) line_ydxi::y#5 ← phi( line_ydxi::@3/(byte) line_ydxi::y#7 line_ydxi::@5/(byte) line_ydxi::y#2 ) (byte) line_ydxi::y1#2 ← phi( line_ydxi::@3/(byte) line_ydxi::y1#3 line_ydxi::@5/(byte) line_ydxi::y1#4 ) - (byte/word~) line_ydxi::$6 ← (byte) line_ydxi::y1#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) line_ydxi::$7 ← (byte) line_ydxi::y#5 != (byte/word~) line_ydxi::$6 + (byte/signed word/word/dword/signed dword~) line_ydxi::$6 ← (byte) line_ydxi::y1#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) line_ydxi::$7 ← (byte) line_ydxi::y#5 != (byte/signed word/word/dword/signed dword~) line_ydxi::$6 if((boolean~) line_ydxi::$7) goto line_ydxi::@1 to:line_ydxi::@return line_ydxi::@3: scope:[line_ydxi] from line_ydxi::@5 @@ -1621,8 +1621,8 @@ line_ydxi::@3: scope:[line_ydxi] from line_ydxi::@5 (byte) line_ydxi::e#4 ← phi( line_ydxi::@5/(byte) line_ydxi::e#1 ) (byte) line_ydxi::x#4 ← phi( line_ydxi::@5/(byte) line_ydxi::x#7 ) (byte) line_ydxi::x#2 ← ++ (byte) line_ydxi::x#4 - (byte/signed byte/word/signed word/dword/signed dword~) line_ydxi::$5 ← (byte) line_ydxi::e#4 - (byte) line_ydxi::yd#3 - (byte) line_ydxi::e#2 ← (byte/signed byte/word/signed word/dword/signed dword~) line_ydxi::$5 + (byte~) line_ydxi::$5 ← (byte) line_ydxi::e#4 - (byte) line_ydxi::yd#3 + (byte) line_ydxi::e#2 ← (byte~) line_ydxi::$5 to:line_ydxi::@2 line_ydxi::@return: scope:[line_ydxi] from line_ydxi::@2 return @@ -1656,8 +1656,8 @@ line_ydxd::@5: scope:[line_ydxd] from line_ydxd::@1 (byte) line_ydxd::y#5 ← phi( line_ydxd::@1/(byte) line_ydxd::y#4 ) (byte) line_ydxd::y#2 ← (byte) line_ydxd::y#5 (byte) line_ydxd::y#3 ← ++ (byte) line_ydxd::y#2 - (byte/word~) line_ydxd::$2 ← (byte) line_ydxd::e#3 + (byte) line_ydxd::xd#3 - (byte) line_ydxd::e#1 ← (byte/word~) line_ydxd::$2 + (byte~) line_ydxd::$2 ← (byte) line_ydxd::e#3 + (byte) line_ydxd::xd#3 + (byte) line_ydxd::e#1 ← (byte~) line_ydxd::$2 (boolean~) line_ydxd::$3 ← (byte) line_ydxd::yd#2 < (byte) line_ydxd::e#1 (boolean~) line_ydxd::$4 ← ! (boolean~) line_ydxd::$3 if((boolean~) line_ydxd::$4) goto line_ydxd::@2 @@ -1669,8 +1669,8 @@ line_ydxd::@2: scope:[line_ydxd] from line_ydxd::@3 line_ydxd::@5 (byte) line_ydxd::x#6 ← phi( line_ydxd::@3/(byte) line_ydxd::x#2 line_ydxd::@5/(byte) line_ydxd::x#7 ) (byte) line_ydxd::y#6 ← phi( line_ydxd::@3/(byte) line_ydxd::y#8 line_ydxd::@5/(byte) line_ydxd::y#3 ) (byte) line_ydxd::y1#2 ← phi( line_ydxd::@3/(byte) line_ydxd::y1#3 line_ydxd::@5/(byte) line_ydxd::y1#4 ) - (byte/word~) line_ydxd::$6 ← (byte) line_ydxd::y1#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) line_ydxd::$7 ← (byte) line_ydxd::y#6 != (byte/word~) line_ydxd::$6 + (byte/signed word/word/dword/signed dword~) line_ydxd::$6 ← (byte) line_ydxd::y1#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) line_ydxd::$7 ← (byte) line_ydxd::y#6 != (byte/signed word/word/dword/signed dword~) line_ydxd::$6 if((boolean~) line_ydxd::$7) goto line_ydxd::@1 to:line_ydxd::@return line_ydxd::@3: scope:[line_ydxd] from line_ydxd::@5 @@ -1681,8 +1681,8 @@ line_ydxd::@3: scope:[line_ydxd] from line_ydxd::@5 (byte) line_ydxd::e#4 ← phi( line_ydxd::@5/(byte) line_ydxd::e#1 ) (byte) line_ydxd::x#4 ← phi( line_ydxd::@5/(byte) line_ydxd::x#7 ) (byte) line_ydxd::x#2 ← -- (byte) line_ydxd::x#4 - (byte/signed byte/word/signed word/dword/signed dword~) line_ydxd::$5 ← (byte) line_ydxd::e#4 - (byte) line_ydxd::yd#3 - (byte) line_ydxd::e#2 ← (byte/signed byte/word/signed word/dword/signed dword~) line_ydxd::$5 + (byte~) line_ydxd::$5 ← (byte) line_ydxd::e#4 - (byte) line_ydxd::yd#3 + (byte) line_ydxd::e#2 ← (byte~) line_ydxd::$5 to:line_ydxd::@2 line_ydxd::@return: scope:[line_ydxd] from line_ydxd::@2 return @@ -1921,22 +1921,22 @@ SYMBOL TABLE SSA (void()) line((byte) line::x0 , (byte) line::x1 , (byte) line::y0 , (byte) line::y1) (boolean~) line::$0 (boolean~) line::$1 -(byte/signed byte/word/signed word/dword/signed dword~) line::$10 +(byte~) line::$10 (boolean~) line::$11 (boolean~) line::$12 -(byte/signed byte/word/signed word/dword/signed dword~) line::$15 +(byte~) line::$15 (boolean~) line::$16 (boolean~) line::$17 -(byte/signed byte/word/signed word/dword/signed dword~) line::$18 +(byte~) line::$18 (boolean~) line::$19 -(byte/signed byte/word/signed word/dword/signed dword~) line::$2 +(byte~) line::$2 (boolean~) line::$20 -(byte/signed byte/word/signed word/dword/signed dword~) line::$23 +(byte~) line::$23 (boolean~) line::$24 (boolean~) line::$25 (boolean~) line::$3 (boolean~) line::$4 -(byte/signed byte/word/signed word/dword/signed dword~) line::$5 +(byte~) line::$5 (boolean~) line::$6 (boolean~) line::$7 (label) line::@1 @@ -2052,11 +2052,11 @@ SYMBOL TABLE SSA (byte) line::yd#9 (void()) line_xdyd((byte) line_xdyd::x , (byte) line_xdyd::y , (byte) line_xdyd::x1 , (byte) line_xdyd::xd , (byte) line_xdyd::yd) (byte~) line_xdyd::$0 -(byte/word~) line_xdyd::$2 +(byte~) line_xdyd::$2 (boolean~) line_xdyd::$3 (boolean~) line_xdyd::$4 -(byte/signed byte/word/signed word/dword/signed dword~) line_xdyd::$5 -(byte/word~) line_xdyd::$6 +(byte~) line_xdyd::$5 +(byte/signed word/word/dword/signed dword~) line_xdyd::$6 (boolean~) line_xdyd::$7 (label) line_xdyd::@1 (label) line_xdyd::@2 @@ -2115,11 +2115,11 @@ SYMBOL TABLE SSA (byte) line_xdyd::yd#6 (void()) line_xdyi((byte) line_xdyi::x , (byte) line_xdyi::y , (byte) line_xdyi::x1 , (byte) line_xdyi::xd , (byte) line_xdyi::yd) (byte~) line_xdyi::$0 -(byte/word~) line_xdyi::$2 +(byte~) line_xdyi::$2 (boolean~) line_xdyi::$3 (boolean~) line_xdyi::$4 -(byte/signed byte/word/signed word/dword/signed dword~) line_xdyi::$5 -(byte/word~) line_xdyi::$6 +(byte~) line_xdyi::$5 +(byte/signed word/word/dword/signed dword~) line_xdyi::$6 (boolean~) line_xdyi::$7 (label) line_xdyi::@1 (label) line_xdyi::@2 @@ -2178,11 +2178,11 @@ SYMBOL TABLE SSA (byte) line_xdyi::yd#6 (void()) line_ydxd((byte) line_ydxd::y , (byte) line_ydxd::x , (byte) line_ydxd::y1 , (byte) line_ydxd::yd , (byte) line_ydxd::xd) (byte~) line_ydxd::$0 -(byte/word~) line_ydxd::$2 +(byte~) line_ydxd::$2 (boolean~) line_ydxd::$3 (boolean~) line_ydxd::$4 -(byte/signed byte/word/signed word/dword/signed dword~) line_ydxd::$5 -(byte/word~) line_ydxd::$6 +(byte~) line_ydxd::$5 +(byte/signed word/word/dword/signed dword~) line_ydxd::$6 (boolean~) line_ydxd::$7 (label) line_ydxd::@1 (label) line_ydxd::@2 @@ -2242,11 +2242,11 @@ SYMBOL TABLE SSA (byte) line_ydxd::yd#6 (void()) line_ydxi((byte) line_ydxi::y , (byte) line_ydxi::x , (byte) line_ydxi::y1 , (byte) line_ydxi::yd , (byte) line_ydxi::xd) (byte~) line_ydxi::$0 -(byte/word~) line_ydxi::$2 +(byte~) line_ydxi::$2 (boolean~) line_ydxi::$3 (boolean~) line_ydxi::$4 -(byte/signed byte/word/signed word/dword/signed dword~) line_ydxi::$5 -(byte/word~) line_ydxi::$6 +(byte~) line_ydxi::$5 +(byte/signed word/word/dword/signed dword~) line_ydxi::$6 (boolean~) line_ydxi::$7 (label) line_ydxi::@1 (label) line_ydxi::@2 @@ -2304,8 +2304,8 @@ SYMBOL TABLE SSA (byte) line_ydxi::yd#5 (byte) line_ydxi::yd#6 (void()) lines() -(byte/word~) lines::$0 -(byte/word~) lines::$1 +(byte/signed word/word/dword/signed dword~) lines::$0 +(byte/signed word/word/dword/signed dword~) lines::$1 (boolean~) lines::$3 (label) lines::@1 (label) lines::@3 @@ -2333,12 +2333,12 @@ SYMBOL TABLE SSA (void()) main() (byte~) main::$0 (byte~) main::$1 -(byte~) main::$2 +(byte/word/dword~) main::$2 (word~) main::$3 -(word~) main::$4 +(word/signed dword/dword~) main::$4 (word~) main::$5 -(word~) main::$6 -(word~) main::$7 +(word/signed dword/dword~) main::$6 +(word/dword~) main::$7 (byte~) main::$8 (label) main::@1 (label) main::@3 @@ -2499,12 +2499,12 @@ Alias (byte) line::x0#1 = (byte) line::x0#2 (byte) line::x0#3 (byte) line::x0#11 Alias (byte) line::x1#1 = (byte) line::x1#2 (byte) line::x1#3 (byte) line::x1#11 (byte) line::x1#10 (byte) line::x1#4 (byte) line::x1#5 (byte) line::x1#6 (byte) line::x1#13 (byte) line::x1#12 (byte) line::x1#7 (byte) line::x1#8 (byte) line::x1#9 Alias (byte) line::y0#1 = (byte) line::y0#13 (byte) line::y0#2 (byte) line::y0#3 (byte) line::y0#4 (byte) line::y0#5 (byte) line::y0#6 (byte) line::y0#7 (byte) line::y0#8 (byte) line::y0#9 (byte) line::y0#10 (byte) line::y0#11 (byte) line::y0#12 Alias (byte) line::y1#1 = (byte) line::y1#13 (byte) line::y1#2 (byte) line::y1#3 (byte) line::y1#4 (byte) line::y1#5 (byte) line::y1#6 (byte) line::y1#7 (byte) line::y1#8 (byte) line::y1#9 (byte) line::y1#10 (byte) line::y1#11 (byte) line::y1#12 -Alias (byte) line::xd#0 = (byte/signed byte/word/signed word/dword/signed dword~) line::$15 (byte) line::xd#8 (byte) line::xd#9 (byte) line::xd#10 (byte) line::xd#11 (byte) line::xd#12 (byte) line::xd#13 -Alias (byte) line::xd#1 = (byte/signed byte/word/signed word/dword/signed dword~) line::$2 (byte) line::xd#2 (byte) line::xd#3 (byte) line::xd#4 (byte) line::xd#5 (byte) line::xd#6 (byte) line::xd#7 -Alias (byte) line::yd#0 = (byte/signed byte/word/signed word/dword/signed dword~) line::$10 (byte) line::yd#6 (byte) line::yd#7 -Alias (byte) line::yd#1 = (byte/signed byte/word/signed word/dword/signed dword~) line::$5 (byte) line::yd#4 (byte) line::yd#5 -Alias (byte) line::yd#10 = (byte) line::yd#2 (byte/signed byte/word/signed word/dword/signed dword~) line::$23 (byte) line::yd#11 -Alias (byte) line::yd#3 = (byte/signed byte/word/signed word/dword/signed dword~) line::$18 (byte) line::yd#8 (byte) line::yd#9 +Alias (byte) line::xd#0 = (byte~) line::$15 (byte) line::xd#8 (byte) line::xd#9 (byte) line::xd#10 (byte) line::xd#11 (byte) line::xd#12 (byte) line::xd#13 +Alias (byte) line::xd#1 = (byte~) line::$2 (byte) line::xd#2 (byte) line::xd#3 (byte) line::xd#4 (byte) line::xd#5 (byte) line::xd#6 (byte) line::xd#7 +Alias (byte) line::yd#0 = (byte~) line::$10 (byte) line::yd#6 (byte) line::yd#7 +Alias (byte) line::yd#1 = (byte~) line::$5 (byte) line::yd#4 (byte) line::yd#5 +Alias (byte) line::yd#10 = (byte) line::yd#2 (byte~) line::$23 (byte) line::yd#11 +Alias (byte) line::yd#3 = (byte~) line::$18 (byte) line::yd#8 (byte) line::yd#9 Alias (byte) line_xdyi::e#0 = (byte~) line_xdyi::$0 Alias (byte) line_xdyi::x#3 = (byte) line_xdyi::x#4 Alias (byte) line_xdyi::e#3 = (byte) line_xdyi::e#5 @@ -2512,9 +2512,9 @@ Alias (byte) line_xdyi::yd#3 = (byte) line_xdyi::yd#4 (byte) line_xdyi::yd#6 Alias (byte) line_xdyi::xd#2 = (byte) line_xdyi::xd#4 (byte) line_xdyi::xd#3 Alias (byte) line_xdyi::x1#3 = (byte) line_xdyi::x1#4 (byte) line_xdyi::x1#5 Alias (byte) line_xdyi::y#3 = (byte) line_xdyi::y#7 (byte) line_xdyi::y#4 -Alias (byte) line_xdyi::e#1 = (byte/word~) line_xdyi::$2 (byte) line_xdyi::e#4 +Alias (byte) line_xdyi::e#1 = (byte~) line_xdyi::$2 (byte) line_xdyi::e#4 Alias (byte) line_xdyi::x#2 = (byte) line_xdyi::x#7 -Alias (byte) line_xdyi::e#2 = (byte/signed byte/word/signed word/dword/signed dword~) line_xdyi::$5 +Alias (byte) line_xdyi::e#2 = (byte~) line_xdyi::$5 Alias (byte) line_xdyd::e#0 = (byte~) line_xdyd::$0 Alias (byte) line_xdyd::x#3 = (byte) line_xdyd::x#4 Alias (byte) line_xdyd::e#3 = (byte) line_xdyd::e#5 @@ -2522,9 +2522,9 @@ Alias (byte) line_xdyd::yd#3 = (byte) line_xdyd::yd#4 (byte) line_xdyd::yd#6 Alias (byte) line_xdyd::xd#2 = (byte) line_xdyd::xd#4 (byte) line_xdyd::xd#3 Alias (byte) line_xdyd::x1#3 = (byte) line_xdyd::x1#4 (byte) line_xdyd::x1#5 Alias (byte) line_xdyd::y#3 = (byte) line_xdyd::y#7 (byte) line_xdyd::y#4 -Alias (byte) line_xdyd::e#1 = (byte/word~) line_xdyd::$2 (byte) line_xdyd::e#4 +Alias (byte) line_xdyd::e#1 = (byte~) line_xdyd::$2 (byte) line_xdyd::e#4 Alias (byte) line_xdyd::x#2 = (byte) line_xdyd::x#7 -Alias (byte) line_xdyd::e#2 = (byte/signed byte/word/signed word/dword/signed dword~) line_xdyd::$5 +Alias (byte) line_xdyd::e#2 = (byte~) line_xdyd::$5 Alias (byte) line_ydxi::e#0 = (byte~) line_ydxi::$0 Alias (byte) line_ydxi::y#3 = (byte) line_ydxi::y#4 Alias (byte) line_ydxi::e#3 = (byte) line_ydxi::e#5 @@ -2532,9 +2532,9 @@ Alias (byte) line_ydxi::xd#3 = (byte) line_ydxi::xd#4 (byte) line_ydxi::xd#6 Alias (byte) line_ydxi::yd#2 = (byte) line_ydxi::yd#4 (byte) line_ydxi::yd#3 Alias (byte) line_ydxi::y1#3 = (byte) line_ydxi::y1#4 (byte) line_ydxi::y1#5 Alias (byte) line_ydxi::x#3 = (byte) line_ydxi::x#7 (byte) line_ydxi::x#4 -Alias (byte) line_ydxi::e#1 = (byte/word~) line_ydxi::$2 (byte) line_ydxi::e#4 +Alias (byte) line_ydxi::e#1 = (byte~) line_ydxi::$2 (byte) line_ydxi::e#4 Alias (byte) line_ydxi::y#2 = (byte) line_ydxi::y#7 -Alias (byte) line_ydxi::e#2 = (byte/signed byte/word/signed word/dword/signed dword~) line_ydxi::$5 +Alias (byte) line_ydxi::e#2 = (byte~) line_ydxi::$5 Alias (byte) line_ydxd::e#0 = (byte~) line_ydxd::$0 Alias (byte) line_ydxd::y#2 = (byte) line_ydxd::y#5 (byte) line_ydxd::y#4 Alias (byte) line_ydxd::e#3 = (byte) line_ydxd::e#5 @@ -2542,9 +2542,9 @@ Alias (byte) line_ydxd::xd#3 = (byte) line_ydxd::xd#4 (byte) line_ydxd::xd#6 Alias (byte) line_ydxd::yd#2 = (byte) line_ydxd::yd#4 (byte) line_ydxd::yd#3 Alias (byte) line_ydxd::y1#3 = (byte) line_ydxd::y1#4 (byte) line_ydxd::y1#5 Alias (byte) line_ydxd::x#3 = (byte) line_ydxd::x#7 (byte) line_ydxd::x#4 -Alias (byte) line_ydxd::e#1 = (byte/word~) line_ydxd::$2 (byte) line_ydxd::e#4 +Alias (byte) line_ydxd::e#1 = (byte~) line_ydxd::$2 (byte) line_ydxd::e#4 Alias (byte) line_ydxd::y#3 = (byte) line_ydxd::y#8 -Alias (byte) line_ydxd::e#2 = (byte/signed byte/word/signed word/dword/signed dword~) line_ydxd::$5 +Alias (byte) line_ydxd::e#2 = (byte~) line_ydxd::$5 Alias (byte) init_plot_tables::bits#1 = (byte~) init_plot_tables::$2 Alias (byte) init_plot_tables::x#2 = (byte) init_plot_tables::x#4 Alias (byte*) init_plot_tables::yoffs#2 = (byte*) init_plot_tables::yoffs#3 @@ -2814,13 +2814,13 @@ Simple Condition (boolean~) line::$7 if((byte) line::yd#1>=(byte) line::xd#1) go Simple Condition (boolean~) line::$25 if((byte) line::yd#10>=(byte) line::xd#0) goto line::@13 Simple Condition (boolean~) line::$20 if((byte) line::yd#3>=(byte) line::xd#0) goto line::@10 Simple Condition (boolean~) line_xdyi::$4 if((byte) line_xdyi::xd#5>=(byte) line_xdyi::e#1) goto line_xdyi::@2 -Simple Condition (boolean~) line_xdyi::$7 if((byte) line_xdyi::x#2!=(byte/word~) line_xdyi::$6) goto line_xdyi::@1 +Simple Condition (boolean~) line_xdyi::$7 if((byte) line_xdyi::x#2!=(byte/signed word/word/dword/signed dword~) line_xdyi::$6) goto line_xdyi::@1 Simple Condition (boolean~) line_xdyd::$4 if((byte) line_xdyd::xd#5>=(byte) line_xdyd::e#1) goto line_xdyd::@2 -Simple Condition (boolean~) line_xdyd::$7 if((byte) line_xdyd::x#2!=(byte/word~) line_xdyd::$6) goto line_xdyd::@1 +Simple Condition (boolean~) line_xdyd::$7 if((byte) line_xdyd::x#2!=(byte/signed word/word/dword/signed dword~) line_xdyd::$6) goto line_xdyd::@1 Simple Condition (boolean~) line_ydxi::$4 if((byte) line_ydxi::yd#5>=(byte) line_ydxi::e#1) goto line_ydxi::@2 -Simple Condition (boolean~) line_ydxi::$7 if((byte) line_ydxi::y#2!=(byte/word~) line_ydxi::$6) goto line_ydxi::@1 +Simple Condition (boolean~) line_ydxi::$7 if((byte) line_ydxi::y#2!=(byte/signed word/word/dword/signed dword~) line_ydxi::$6) goto line_ydxi::@1 Simple Condition (boolean~) line_ydxd::$4 if((byte) line_ydxd::yd#5>=(byte) line_ydxd::e#1) goto line_ydxd::@2 -Simple Condition (boolean~) line_ydxd::$7 if((byte) line_ydxd::y#3!=(byte/word~) line_ydxd::$6) goto line_ydxd::@1 +Simple Condition (boolean~) line_ydxd::$7 if((byte) line_ydxd::y#3!=(byte/signed word/word/dword/signed dword~) line_ydxd::$6) goto line_ydxd::@1 Simple Condition (boolean~) init_plot_tables::$4 if((byte) init_plot_tables::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@2 Simple Condition (boolean~) init_plot_tables::$5 if((byte) init_plot_tables::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@1 Simple Condition (boolean~) init_plot_tables::$12 if((byte~) init_plot_tables::$10!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto init_plot_tables::@4 @@ -2863,11 +2863,11 @@ Constant (const byte*) init_screen::c#0 = SCREEN#0 Constant (const byte*) init_screen::$2 = SCREEN#0+1024 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$1 = main::$0|RSEL#0 -Constant (const word) main::$4 = main::$3/64 -Constant (const word) main::$6 = main::$5/1024 +Constant (const word/signed dword/dword) main::$4 = main::$3/64 +Constant (const word/signed dword/dword) main::$6 = main::$5/1024 Succesful SSA optimization Pass2ConstantIdentification -Constant (const byte) main::$2 = main::$1|3 -Constant (const word) main::$7 = main::$4|main::$6 +Constant (const byte/word/dword) main::$2 = main::$1|3 +Constant (const word/dword) main::$7 = main::$4|main::$6 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$8 = ((byte))main::$7 Succesful SSA optimization Pass2ConstantIdentification @@ -2895,6 +2895,8 @@ Multiple usages for variable. Not optimizing sub-constant (byte*) init_plot_tabl Fixing inline constructor with plot::$2 ← *(plot_xhi#0 + plot::x#4) w= *(plot_xlo#0 + plot::x#4) Fixing inline constructor with plot::$3 ← *(plot_yhi#0 + plot::y#4) w= *(plot_ylo#0 + plot::y#4) Succesful SSA optimization Pass2FixInlineConstructors +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) lines::$0 ← (byte) lines::l#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) lines::$1 ← (byte) lines::l#2 Eliminating Noop Cast (byte*) plot::plotter#0 ← ((byte*)) (word~) plot::$0 Succesful SSA optimization Pass2NopCastElimination Culled Empty Block (label) main::@4 @@ -2973,7 +2975,7 @@ Not aliassing across scopes: plot::x#3 line_ydxd::x#3 Not aliassing across scopes: plot::y#3 line_ydxd::y#2 Not aliassing across scopes: plot::x#4 plot::x#1 Not aliassing across scopes: plot::y#4 plot::y#1 -Alias (byte) lines::l#2 = (byte/word~) lines::$0 (byte/word~) lines::$1 +Alias (byte) lines::l#2 = (byte~) lines::$0 (byte~) lines::$1 Alias (word) plot::plotter_x#0 = (word~) plot::$2 Alias (word) plot::plotter_y#0 = (word~) plot::$3 Succesful SSA optimization Pass2AliasElimination @@ -3534,8 +3536,8 @@ line_ydxi::@3: scope:[line_ydxi] from line_ydxi::@5 line_ydxi::@2: scope:[line_ydxi] from line_ydxi::@3 line_ydxi::@5 [98] (byte) line_ydxi::e#6 ← phi( line_ydxi::@3/(byte) line_ydxi::e#2 line_ydxi::@5/(byte) line_ydxi::e#1 ) [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) [98] (byte) line_ydxi::x#6 ← phi( line_ydxi::@3/(byte) line_ydxi::x#2 line_ydxi::@5/(byte) line_ydxi::x#3 ) [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) - [99] (byte/word~) line_ydxi::$6 ← (byte) line_ydxi::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ) - [100] if((byte) line_ydxi::y#2!=(byte/word~) line_ydxi::$6) goto line_ydxi::@1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) + [99] (byte/signed word/word/dword/signed dword~) line_ydxi::$6 ← (byte) line_ydxi::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ) + [100] if((byte) line_ydxi::y#2!=(byte/signed word/word/dword/signed dword~) line_ydxi::$6) goto line_ydxi::@1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) to:line_ydxi::@return line_ydxi::@return: scope:[line_ydxi] from line_ydxi::@2 [101] return [ ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 ] ) @@ -3580,8 +3582,8 @@ line_xdyi::@3: scope:[line_xdyi] from line_xdyi::@5 line_xdyi::@2: scope:[line_xdyi] from line_xdyi::@3 line_xdyi::@5 [120] (byte) line_xdyi::e#6 ← phi( line_xdyi::@3/(byte) line_xdyi::e#2 line_xdyi::@5/(byte) line_xdyi::e#1 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) [120] (byte) line_xdyi::y#6 ← phi( line_xdyi::@3/(byte) line_xdyi::y#2 line_xdyi::@5/(byte) line_xdyi::y#3 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) - [121] (byte/word~) line_xdyi::$6 ← (byte) line_xdyi::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ) - [122] if((byte) line_xdyi::x#2!=(byte/word~) line_xdyi::$6) goto line_xdyi::@1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) + [121] (byte/signed word/word/dword/signed dword~) line_xdyi::$6 ← (byte) line_xdyi::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ) + [122] if((byte) line_xdyi::x#2!=(byte/signed word/word/dword/signed dword~) line_xdyi::$6) goto line_xdyi::@1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) to:line_xdyi::@return line_xdyi::@return: scope:[line_xdyi] from line_xdyi::@2 [123] return [ ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 ] ) @@ -3614,8 +3616,8 @@ line_ydxd::@3: scope:[line_ydxd] from line_ydxd::@5 line_ydxd::@2: scope:[line_ydxd] from line_ydxd::@3 line_ydxd::@5 [135] (byte) line_ydxd::e#6 ← phi( line_ydxd::@3/(byte) line_ydxd::e#2 line_ydxd::@5/(byte) line_ydxd::e#1 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) [135] (byte) line_ydxd::x#6 ← phi( line_ydxd::@3/(byte) line_ydxd::x#2 line_ydxd::@5/(byte) line_ydxd::x#3 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) - [136] (byte/word~) line_ydxd::$6 ← (byte) line_ydxd::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ) - [137] if((byte) line_ydxd::y#3!=(byte/word~) line_ydxd::$6) goto line_ydxd::@1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) + [136] (byte/signed word/word/dword/signed dword~) line_ydxd::$6 ← (byte) line_ydxd::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ) + [137] if((byte) line_ydxd::y#3!=(byte/signed word/word/dword/signed dword~) line_ydxd::$6) goto line_ydxd::@1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) to:line_ydxd::@return line_ydxd::@return: scope:[line_ydxd] from line_ydxd::@2 [138] return [ ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 ] ) @@ -3648,8 +3650,8 @@ line_xdyd::@3: scope:[line_xdyd] from line_xdyd::@5 line_xdyd::@2: scope:[line_xdyd] from line_xdyd::@3 line_xdyd::@5 [150] (byte) line_xdyd::e#6 ← phi( line_xdyd::@3/(byte) line_xdyd::e#2 line_xdyd::@5/(byte) line_xdyd::e#1 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) [150] (byte) line_xdyd::y#6 ← phi( line_xdyd::@3/(byte) line_xdyd::y#2 line_xdyd::@5/(byte) line_xdyd::y#3 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) - [151] (byte/word~) line_xdyd::$6 ← (byte) line_xdyd::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ) - [152] if((byte) line_xdyd::x#2!=(byte/word~) line_xdyd::$6) goto line_xdyd::@1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) + [151] (byte/signed word/word/dword/signed dword~) line_xdyd::$6 ← (byte) line_xdyd::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ) + [152] if((byte) line_xdyd::x#2!=(byte/signed word/word/dword/signed dword~) line_xdyd::$6) goto line_xdyd::@1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) to:line_xdyd::@return line_xdyd::@return: scope:[line_xdyd] from line_xdyd::@2 [153] return [ ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 ] ) @@ -3907,7 +3909,7 @@ VARIABLE REGISTER WEIGHTS (byte) line::yd#10 0.8888888888888888 (byte) line::yd#3 0.8888888888888888 (void()) line_xdyd((byte) line_xdyd::x , (byte) line_xdyd::y , (byte) line_xdyd::x1 , (byte) line_xdyd::xd , (byte) line_xdyd::yd) -(byte/word~) line_xdyd::$6 2002.0 +(byte/signed word/word/dword/signed dword~) line_xdyd::$6 2002.0 (byte) line_xdyd::e (byte) line_xdyd::e#0 4.0 (byte) line_xdyd::e#1 1334.6666666666667 @@ -3940,7 +3942,7 @@ VARIABLE REGISTER WEIGHTS (byte) line_xdyd::yd#1 4.0 (byte) line_xdyd::yd#2 71.92857142857143 (void()) line_xdyi((byte) line_xdyi::x , (byte) line_xdyi::y , (byte) line_xdyi::x1 , (byte) line_xdyi::xd , (byte) line_xdyi::yd) -(byte/word~) line_xdyi::$6 2002.0 +(byte/signed word/word/dword/signed dword~) line_xdyi::$6 2002.0 (byte) line_xdyi::e (byte) line_xdyi::e#0 4.0 (byte) line_xdyi::e#1 1334.6666666666667 @@ -3973,7 +3975,7 @@ VARIABLE REGISTER WEIGHTS (byte) line_xdyi::yd#1 4.0 (byte) line_xdyi::yd#2 71.92857142857143 (void()) line_ydxd((byte) line_ydxd::y , (byte) line_ydxd::x , (byte) line_ydxd::y1 , (byte) line_ydxd::yd , (byte) line_ydxd::xd) -(byte/word~) line_ydxd::$6 2002.0 +(byte/signed word/word/dword/signed dword~) line_ydxd::$6 2002.0 (byte) line_ydxd::e (byte) line_ydxd::e#0 4.0 (byte) line_ydxd::e#1 1334.6666666666667 @@ -4006,7 +4008,7 @@ VARIABLE REGISTER WEIGHTS (byte) line_ydxd::yd#1 2.0 (byte) line_ydxd::yd#5 143.28571428571428 (void()) line_ydxi((byte) line_ydxi::y , (byte) line_ydxi::x , (byte) line_ydxi::y1 , (byte) line_ydxi::yd , (byte) line_ydxi::xd) -(byte/word~) line_ydxi::$6 2002.0 +(byte/signed word/word/dword/signed dword~) line_ydxi::$6 2002.0 (byte) line_ydxi::e (byte) line_ydxi::e#0 4.0 (byte) line_ydxi::e#1 1334.6666666666667 @@ -4748,11 +4750,11 @@ line_ydxi: { jmp b2 //SEG192 line_ydxi::@2 b2: - //SEG193 [99] (byte/word~) line_ydxi::$6 ← (byte) line_ydxi::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ) -- vbuz1=vbuz2_plus_1 + //SEG193 [99] (byte/signed word/word/dword/signed dword~) line_ydxi::$6 ← (byte) line_ydxi::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ) -- vbuz1=vbuz2_plus_1 ldy y1 iny sty _6 - //SEG194 [100] if((byte) line_ydxi::y#2!=(byte/word~) line_ydxi::$6) goto line_ydxi::@1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) -- vbuz1_neq_vbuz2_then_la1 + //SEG194 [100] if((byte) line_ydxi::y#2!=(byte/signed word/word/dword/signed dword~) line_ydxi::$6) goto line_ydxi::@1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) -- vbuz1_neq_vbuz2_then_la1 lda y cmp _6 bne b1_from_b2 @@ -4872,11 +4874,11 @@ line_xdyi: { jmp b2 //SEG228 line_xdyi::@2 b2: - //SEG229 [121] (byte/word~) line_xdyi::$6 ← (byte) line_xdyi::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ) -- vbuz1=vbuz2_plus_1 + //SEG229 [121] (byte/signed word/word/dword/signed dword~) line_xdyi::$6 ← (byte) line_xdyi::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ) -- vbuz1=vbuz2_plus_1 ldy x1 iny sty _6 - //SEG230 [122] if((byte) line_xdyi::x#2!=(byte/word~) line_xdyi::$6) goto line_xdyi::@1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) -- vbuz1_neq_vbuz2_then_la1 + //SEG230 [122] if((byte) line_xdyi::x#2!=(byte/signed word/word/dword/signed dword~) line_xdyi::$6) goto line_xdyi::@1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) -- vbuz1_neq_vbuz2_then_la1 lda x cmp _6 bne b1_from_b2 @@ -4952,11 +4954,11 @@ line_ydxd: { jmp b2 //SEG256 line_ydxd::@2 b2: - //SEG257 [136] (byte/word~) line_ydxd::$6 ← (byte) line_ydxd::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ) -- vbuz1=vbuz2_plus_1 + //SEG257 [136] (byte/signed word/word/dword/signed dword~) line_ydxd::$6 ← (byte) line_ydxd::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ) -- vbuz1=vbuz2_plus_1 ldy y1 iny sty _6 - //SEG258 [137] if((byte) line_ydxd::y#3!=(byte/word~) line_ydxd::$6) goto line_ydxd::@1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) -- vbuz1_neq_vbuz2_then_la1 + //SEG258 [137] if((byte) line_ydxd::y#3!=(byte/signed word/word/dword/signed dword~) line_ydxd::$6) goto line_ydxd::@1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) -- vbuz1_neq_vbuz2_then_la1 lda y cmp _6 bne b1_from_b2 @@ -5032,11 +5034,11 @@ line_xdyd: { jmp b2 //SEG284 line_xdyd::@2 b2: - //SEG285 [151] (byte/word~) line_xdyd::$6 ← (byte) line_xdyd::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ) -- vbuz1=vbuz2_plus_1 + //SEG285 [151] (byte/signed word/word/dword/signed dword~) line_xdyd::$6 ← (byte) line_xdyd::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ) -- vbuz1=vbuz2_plus_1 ldy x1 iny sty _6 - //SEG286 [152] if((byte) line_xdyd::x#2!=(byte/word~) line_xdyd::$6) goto line_xdyd::@1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) -- vbuz1_neq_vbuz2_then_la1 + //SEG286 [152] if((byte) line_xdyd::x#2!=(byte/signed word/word/dword/signed dword~) line_xdyd::$6) goto line_xdyd::@1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) -- vbuz1_neq_vbuz2_then_la1 lda x cmp _6 bne b1_from_b2 @@ -6057,10 +6059,10 @@ line_ydxi: { jmp b2 //SEG192 line_ydxi::@2 b2: - //SEG193 [99] (byte/word~) line_ydxi::$6 ← (byte) line_ydxi::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ) -- vbuyy=vbuz1_plus_1 + //SEG193 [99] (byte/signed word/word/dword/signed dword~) line_ydxi::$6 ← (byte) line_ydxi::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ) -- vbuyy=vbuz1_plus_1 ldy y1 iny - //SEG194 [100] if((byte) line_ydxi::y#2!=(byte/word~) line_ydxi::$6) goto line_ydxi::@1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) -- vbuz1_neq_vbuyy_then_la1 + //SEG194 [100] if((byte) line_ydxi::y#2!=(byte/signed word/word/dword/signed dword~) line_ydxi::$6) goto line_ydxi::@1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) -- vbuz1_neq_vbuyy_then_la1 cpy y bne b1_from_b2 jmp breturn @@ -6168,11 +6170,11 @@ line_xdyi: { jmp b2 //SEG228 line_xdyi::@2 b2: - //SEG229 [121] (byte/word~) line_xdyi::$6 ← (byte) line_xdyi::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ) -- vbuz1=vbuz2_plus_1 + //SEG229 [121] (byte/signed word/word/dword/signed dword~) line_xdyi::$6 ← (byte) line_xdyi::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ) -- vbuz1=vbuz2_plus_1 ldy x1 iny sty _6 - //SEG230 [122] if((byte) line_xdyi::x#2!=(byte/word~) line_xdyi::$6) goto line_xdyi::@1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) -- vbuxx_neq_vbuz1_then_la1 + //SEG230 [122] if((byte) line_xdyi::x#2!=(byte/signed word/word/dword/signed dword~) line_xdyi::$6) goto line_xdyi::@1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) -- vbuxx_neq_vbuz1_then_la1 cpx _6 bne b1_from_b2 jmp breturn @@ -6243,10 +6245,10 @@ line_ydxd: { jmp b2 //SEG256 line_ydxd::@2 b2: - //SEG257 [136] (byte/word~) line_ydxd::$6 ← (byte) line_ydxd::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ) -- vbuyy=vbuz1_plus_1 + //SEG257 [136] (byte/signed word/word/dword/signed dword~) line_ydxd::$6 ← (byte) line_ydxd::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ) -- vbuyy=vbuz1_plus_1 ldy y1 iny - //SEG258 [137] if((byte) line_ydxd::y#3!=(byte/word~) line_ydxd::$6) goto line_ydxd::@1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) -- vbuz1_neq_vbuyy_then_la1 + //SEG258 [137] if((byte) line_ydxd::y#3!=(byte/signed word/word/dword/signed dword~) line_ydxd::$6) goto line_ydxd::@1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) -- vbuz1_neq_vbuyy_then_la1 cpy y bne b1_from_b2 jmp breturn @@ -6318,11 +6320,11 @@ line_xdyd: { jmp b2 //SEG284 line_xdyd::@2 b2: - //SEG285 [151] (byte/word~) line_xdyd::$6 ← (byte) line_xdyd::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ) -- vbuz1=vbuz2_plus_1 + //SEG285 [151] (byte/signed word/word/dword/signed dword~) line_xdyd::$6 ← (byte) line_xdyd::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ) -- vbuz1=vbuz2_plus_1 ldy x1 iny sty _6 - //SEG286 [152] if((byte) line_xdyd::x#2!=(byte/word~) line_xdyd::$6) goto line_xdyd::@1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) -- vbuxx_neq_vbuz1_then_la1 + //SEG286 [152] if((byte) line_xdyd::x#2!=(byte/signed word/word/dword/signed dword~) line_xdyd::$6) goto line_xdyd::@1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) -- vbuxx_neq_vbuz1_then_la1 cpx _6 bne b1_from_b2 jmp breturn @@ -6804,7 +6806,7 @@ FINAL SYMBOL TABLE (byte) line::yd#10 yd zp ZP_BYTE:4 0.8888888888888888 (byte) line::yd#3 yd zp ZP_BYTE:4 0.8888888888888888 (void()) line_xdyd((byte) line_xdyd::x , (byte) line_xdyd::y , (byte) line_xdyd::x1 , (byte) line_xdyd::xd , (byte) line_xdyd::yd) -(byte/word~) line_xdyd::$6 $6 zp ZP_BYTE:7 2002.0 +(byte/signed word/word/dword/signed dword~) line_xdyd::$6 $6 zp ZP_BYTE:7 2002.0 (label) line_xdyd::@1 (label) line_xdyd::@2 (label) line_xdyd::@3 @@ -6842,7 +6844,7 @@ FINAL SYMBOL TABLE (byte) line_xdyd::yd#1 yd zp ZP_BYTE:4 4.0 (byte) line_xdyd::yd#2 yd zp ZP_BYTE:4 71.92857142857143 (void()) line_xdyi((byte) line_xdyi::x , (byte) line_xdyi::y , (byte) line_xdyi::x1 , (byte) line_xdyi::xd , (byte) line_xdyi::yd) -(byte/word~) line_xdyi::$6 $6 zp ZP_BYTE:8 2002.0 +(byte/signed word/word/dword/signed dword~) line_xdyi::$6 $6 zp ZP_BYTE:8 2002.0 (label) line_xdyi::@1 (label) line_xdyi::@2 (label) line_xdyi::@3 @@ -6880,7 +6882,7 @@ FINAL SYMBOL TABLE (byte) line_xdyi::yd#1 yd zp ZP_BYTE:4 4.0 (byte) line_xdyi::yd#2 yd zp ZP_BYTE:4 71.92857142857143 (void()) line_ydxd((byte) line_ydxd::y , (byte) line_ydxd::x , (byte) line_ydxd::y1 , (byte) line_ydxd::yd , (byte) line_ydxd::xd) -(byte/word~) line_ydxd::$6 reg byte y 2002.0 +(byte/signed word/word/dword/signed dword~) line_ydxd::$6 reg byte y 2002.0 (label) line_ydxd::@1 (label) line_ydxd::@2 (label) line_ydxd::@3 @@ -6918,7 +6920,7 @@ FINAL SYMBOL TABLE (byte) line_ydxd::yd#1 yd zp ZP_BYTE:4 2.0 (byte) line_ydxd::yd#5 yd zp ZP_BYTE:4 143.28571428571428 (void()) line_ydxi((byte) line_ydxi::y , (byte) line_ydxi::x , (byte) line_ydxi::y1 , (byte) line_ydxi::yd , (byte) line_ydxi::xd) -(byte/word~) line_ydxi::$6 reg byte y 2002.0 +(byte/signed word/word/dword/signed dword~) line_ydxi::$6 reg byte y 2002.0 (label) line_ydxi::@1 (label) line_ydxi::@2 (label) line_ydxi::@3 @@ -7426,10 +7428,10 @@ line_ydxi: { //SEG191 [98] phi (byte) line_ydxi::x#6 = (byte) line_ydxi::x#2 [phi:line_ydxi::@3/line_ydxi::@5->line_ydxi::@2#1] -- register_copy //SEG192 line_ydxi::@2 b2: - //SEG193 [99] (byte/word~) line_ydxi::$6 ← (byte) line_ydxi::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ) -- vbuyy=vbuz1_plus_1 + //SEG193 [99] (byte/signed word/word/dword/signed dword~) line_ydxi::$6 ← (byte) line_ydxi::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 line_ydxi::$6 ] ) -- vbuyy=vbuz1_plus_1 ldy y1 iny - //SEG194 [100] if((byte) line_ydxi::y#2!=(byte/word~) line_ydxi::$6) goto line_ydxi::@1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) -- vbuz1_neq_vbuyy_then_la1 + //SEG194 [100] if((byte) line_ydxi::y#2!=(byte/signed word/word/dword/signed dword~) line_ydxi::$6) goto line_ydxi::@1 [ line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#6 line_ydxi::y#2 line_ydxi::e#6 ] ) -- vbuz1_neq_vbuyy_then_la1 cpy y bne b1 //SEG195 line_ydxi::@return @@ -7521,11 +7523,11 @@ line_xdyi: { //SEG227 [120] phi (byte) line_xdyi::y#6 = (byte) line_xdyi::y#2 [phi:line_xdyi::@3/line_xdyi::@5->line_xdyi::@2#1] -- register_copy //SEG228 line_xdyi::@2 b2: - //SEG229 [121] (byte/word~) line_xdyi::$6 ← (byte) line_xdyi::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ) -- vbuz1=vbuz2_plus_1 + //SEG229 [121] (byte/signed word/word/dword/signed dword~) line_xdyi::$6 ← (byte) line_xdyi::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$6 ] ) -- vbuz1=vbuz2_plus_1 ldy x1 iny sty _6 - //SEG230 [122] if((byte) line_xdyi::x#2!=(byte/word~) line_xdyi::$6) goto line_xdyi::@1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) -- vbuxx_neq_vbuz1_then_la1 + //SEG230 [122] if((byte) line_xdyi::x#2!=(byte/signed word/word/dword/signed dword~) line_xdyi::$6) goto line_xdyi::@1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ) -- vbuxx_neq_vbuz1_then_la1 cpx _6 bne b1 //SEG231 line_xdyi::@return @@ -7583,10 +7585,10 @@ line_ydxd: { //SEG255 [135] phi (byte) line_ydxd::x#6 = (byte) line_ydxd::x#2 [phi:line_ydxd::@3/line_ydxd::@5->line_ydxd::@2#1] -- register_copy //SEG256 line_ydxd::@2 b2: - //SEG257 [136] (byte/word~) line_ydxd::$6 ← (byte) line_ydxd::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ) -- vbuyy=vbuz1_plus_1 + //SEG257 [136] (byte/signed word/word/dword/signed dword~) line_ydxd::$6 ← (byte) line_ydxd::y1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 line_ydxd::$6 ] ) -- vbuyy=vbuz1_plus_1 ldy y1 iny - //SEG258 [137] if((byte) line_ydxd::y#3!=(byte/word~) line_ydxd::$6) goto line_ydxd::@1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) -- vbuz1_neq_vbuyy_then_la1 + //SEG258 [137] if((byte) line_ydxd::y#3!=(byte/signed word/word/dword/signed dword~) line_ydxd::$6) goto line_ydxd::@1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#3 line_ydxd::e#6 ] ) -- vbuz1_neq_vbuyy_then_la1 cpy y bne b1 //SEG259 line_ydxd::@return @@ -7645,11 +7647,11 @@ line_xdyd: { //SEG283 [150] phi (byte) line_xdyd::y#6 = (byte) line_xdyd::y#2 [phi:line_xdyd::@3/line_xdyd::@5->line_xdyd::@2#1] -- register_copy //SEG284 line_xdyd::@2 b2: - //SEG285 [151] (byte/word~) line_xdyd::$6 ← (byte) line_xdyd::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ) -- vbuz1=vbuz2_plus_1 + //SEG285 [151] (byte/signed word/word/dword/signed dword~) line_xdyd::$6 ← (byte) line_xdyd::x1#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$6 ] ) -- vbuz1=vbuz2_plus_1 ldy x1 iny sty _6 - //SEG286 [152] if((byte) line_xdyd::x#2!=(byte/word~) line_xdyd::$6) goto line_xdyd::@1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) -- vbuxx_neq_vbuz1_then_la1 + //SEG286 [152] if((byte) line_xdyd::x#2!=(byte/signed word/word/dword/signed dword~) line_xdyd::$6) goto line_xdyd::@1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ) -- vbuxx_neq_vbuz1_then_la1 cpx _6 bne b1 //SEG287 line_xdyd::@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.sym b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.sym index 54cbb9663..15fca6286 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.sym @@ -90,7 +90,7 @@ (byte) line::yd#10 yd zp ZP_BYTE:4 0.8888888888888888 (byte) line::yd#3 yd zp ZP_BYTE:4 0.8888888888888888 (void()) line_xdyd((byte) line_xdyd::x , (byte) line_xdyd::y , (byte) line_xdyd::x1 , (byte) line_xdyd::xd , (byte) line_xdyd::yd) -(byte/word~) line_xdyd::$6 $6 zp ZP_BYTE:7 2002.0 +(byte/signed word/word/dword/signed dword~) line_xdyd::$6 $6 zp ZP_BYTE:7 2002.0 (label) line_xdyd::@1 (label) line_xdyd::@2 (label) line_xdyd::@3 @@ -128,7 +128,7 @@ (byte) line_xdyd::yd#1 yd zp ZP_BYTE:4 4.0 (byte) line_xdyd::yd#2 yd zp ZP_BYTE:4 71.92857142857143 (void()) line_xdyi((byte) line_xdyi::x , (byte) line_xdyi::y , (byte) line_xdyi::x1 , (byte) line_xdyi::xd , (byte) line_xdyi::yd) -(byte/word~) line_xdyi::$6 $6 zp ZP_BYTE:8 2002.0 +(byte/signed word/word/dword/signed dword~) line_xdyi::$6 $6 zp ZP_BYTE:8 2002.0 (label) line_xdyi::@1 (label) line_xdyi::@2 (label) line_xdyi::@3 @@ -166,7 +166,7 @@ (byte) line_xdyi::yd#1 yd zp ZP_BYTE:4 4.0 (byte) line_xdyi::yd#2 yd zp ZP_BYTE:4 71.92857142857143 (void()) line_ydxd((byte) line_ydxd::y , (byte) line_ydxd::x , (byte) line_ydxd::y1 , (byte) line_ydxd::yd , (byte) line_ydxd::xd) -(byte/word~) line_ydxd::$6 reg byte y 2002.0 +(byte/signed word/word/dword/signed dword~) line_ydxd::$6 reg byte y 2002.0 (label) line_ydxd::@1 (label) line_ydxd::@2 (label) line_ydxd::@3 @@ -204,7 +204,7 @@ (byte) line_ydxd::yd#1 yd zp ZP_BYTE:4 2.0 (byte) line_ydxd::yd#5 yd zp ZP_BYTE:4 143.28571428571428 (void()) line_ydxi((byte) line_ydxi::y , (byte) line_ydxi::x , (byte) line_ydxi::y1 , (byte) line_ydxi::yd , (byte) line_ydxi::xd) -(byte/word~) line_ydxi::$6 reg byte y 2002.0 +(byte/signed word/word/dword/signed dword~) line_ydxi::$6 reg byte y 2002.0 (label) line_ydxi::@1 (label) line_ydxi::@2 (label) line_ydxi::@3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log index ac4525cc9..b5167baed 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log @@ -119,14 +119,14 @@ proc (void()) main() *((byte*) FGCOL) ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte~) main::$0 ← (byte) BMM | (byte) DEN (byte~) main::$1 ← (byte~) main::$0 | (byte) RSEL - (byte~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word/dword/signed dword) 3 - *((byte*) D011) ← (byte~) main::$2 + (byte/word/dword~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word/dword/signed dword) 3 + *((byte*) D011) ← (byte/word/dword~) main::$2 (word~) main::$3 ← ((word)) (byte*) SCREEN - (word~) main::$4 ← (word~) main::$3 / (byte/signed byte/word/signed word/dword/signed dword) 64 + (word/signed dword/dword~) main::$4 ← (word~) main::$3 / (byte/signed byte/word/signed word/dword/signed dword) 64 (word~) main::$5 ← ((word)) (byte*) BITMAP - (word~) main::$6 ← (word~) main::$5 / (word/signed word/dword/signed dword) 1024 - (word~) main::$7 ← (word~) main::$4 | (word~) main::$6 - (byte~) main::$8 ← ((byte)) (word~) main::$7 + (word/signed dword/dword~) main::$6 ← (word~) main::$5 / (word/signed word/dword/signed dword) 1024 + (word/dword~) main::$7 ← (word/signed dword/dword~) main::$4 | (word/signed dword/dword~) main::$6 + (byte~) main::$8 ← ((byte)) (word/dword~) main::$7 *((byte*) D018) ← (byte~) main::$8 (void~) main::$9 ← call init_screen (void~) main::$10 ← call init_plot_tables @@ -298,12 +298,12 @@ SYMBOLS (void~) main::$10 (boolean~) main::$11 (void~) main::$12 -(byte~) main::$2 +(byte/word/dword~) main::$2 (word~) main::$3 -(word~) main::$4 +(word/signed dword/dword~) main::$4 (word~) main::$5 -(word~) main::$6 -(word~) main::$7 +(word/signed dword/dword~) main::$6 +(word/dword~) main::$7 (byte~) main::$8 (void~) main::$9 (label) main::@1 @@ -376,14 +376,14 @@ main: scope:[main] from *((byte*) FGCOL) ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte~) main::$0 ← (byte) BMM | (byte) DEN (byte~) main::$1 ← (byte~) main::$0 | (byte) RSEL - (byte~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word/dword/signed dword) 3 - *((byte*) D011) ← (byte~) main::$2 + (byte/word/dword~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word/dword/signed dword) 3 + *((byte*) D011) ← (byte/word/dword~) main::$2 (word~) main::$3 ← ((word)) (byte*) SCREEN - (word~) main::$4 ← (word~) main::$3 / (byte/signed byte/word/signed word/dword/signed dword) 64 + (word/signed dword/dword~) main::$4 ← (word~) main::$3 / (byte/signed byte/word/signed word/dword/signed dword) 64 (word~) main::$5 ← ((word)) (byte*) BITMAP - (word~) main::$6 ← (word~) main::$5 / (word/signed word/dword/signed dword) 1024 - (word~) main::$7 ← (word~) main::$4 | (word~) main::$6 - (byte~) main::$8 ← ((byte)) (word~) main::$7 + (word/signed dword/dword~) main::$6 ← (word~) main::$5 / (word/signed word/dword/signed dword) 1024 + (word/dword~) main::$7 ← (word/signed dword/dword~) main::$4 | (word/signed dword/dword~) main::$6 + (byte~) main::$8 ← ((byte)) (word/dword~) main::$7 *((byte*) D018) ← (byte~) main::$8 (void~) main::$9 ← call init_screen (void~) main::$10 ← call init_plot_tables @@ -604,14 +604,14 @@ main: scope:[main] from @5 *((byte*) FGCOL#1) ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte~) main::$0 ← (byte) BMM#1 | (byte) DEN#1 (byte~) main::$1 ← (byte~) main::$0 | (byte) RSEL#1 - (byte~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word/dword/signed dword) 3 - *((byte*) D011#1) ← (byte~) main::$2 + (byte/word/dword~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word/dword/signed dword) 3 + *((byte*) D011#1) ← (byte/word/dword~) main::$2 (word~) main::$3 ← ((word)) (byte*) SCREEN#1 - (word~) main::$4 ← (word~) main::$3 / (byte/signed byte/word/signed word/dword/signed dword) 64 + (word/signed dword/dword~) main::$4 ← (word~) main::$3 / (byte/signed byte/word/signed word/dword/signed dword) 64 (word~) main::$5 ← ((word)) (byte*) BITMAP#0 - (word~) main::$6 ← (word~) main::$5 / (word/signed word/dword/signed dword) 1024 - (word~) main::$7 ← (word~) main::$4 | (word~) main::$6 - (byte~) main::$8 ← ((byte)) (word~) main::$7 + (word/signed dword/dword~) main::$6 ← (word~) main::$5 / (word/signed word/dword/signed dword) 1024 + (word/dword~) main::$7 ← (word/signed dword/dword~) main::$4 | (word/signed dword/dword~) main::$6 + (byte~) main::$8 ← ((byte)) (word/dword~) main::$7 *((byte*) D018#1) ← (byte~) main::$8 call init_screen param-assignment to:main::@5 @@ -987,12 +987,12 @@ SYMBOL TABLE SSA (byte~) main::$0 (byte~) main::$1 (boolean~) main::$11 -(byte~) main::$2 +(byte/word/dword~) main::$2 (word~) main::$3 -(word~) main::$4 +(word/signed dword/dword~) main::$4 (word~) main::$5 -(word~) main::$6 -(word~) main::$7 +(word/signed dword/dword~) main::$6 +(word/dword~) main::$7 (byte~) main::$8 (label) main::@1 (label) main::@2 @@ -1234,11 +1234,11 @@ Constant (const byte*) init_screen::c#0 = SCREEN#0 Constant (const byte*) init_screen::$2 = SCREEN#0+1024 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$1 = main::$0|RSEL#0 -Constant (const word) main::$4 = main::$3/64 -Constant (const word) main::$6 = main::$5/1024 +Constant (const word/signed dword/dword) main::$4 = main::$3/64 +Constant (const word/signed dword/dword) main::$6 = main::$5/1024 Succesful SSA optimization Pass2ConstantIdentification -Constant (const byte) main::$2 = main::$1|3 -Constant (const word) main::$7 = main::$4|main::$6 +Constant (const byte/word/dword) main::$2 = main::$1|3 +Constant (const word/dword) main::$7 = main::$4|main::$6 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$8 = ((byte))main::$7 Succesful SSA optimization Pass2ConstantIdentification diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bresenham.log b/src/test/java/dk/camelot64/kickc/test/ref/bresenham.log index f582962dd..6c296c998 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bresenham.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bresenham.log @@ -34,38 +34,38 @@ proc (void()) main() (byte) main::y0 ← (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) main::x1 ← (byte/signed byte/word/signed word/dword/signed dword) 39 (byte) main::y1 ← (byte/signed byte/word/signed word/dword/signed dword) 24 - (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← (byte) main::x1 - (byte) main::x0 - (byte) main::xd ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 - (byte/signed byte/word/signed word/dword/signed dword~) main::$1 ← (byte) main::y1 - (byte) main::y0 - (byte) main::yd ← (byte/signed byte/word/signed word/dword/signed dword~) main::$1 + (byte~) main::$0 ← (byte) main::x1 - (byte) main::x0 + (byte) main::xd ← (byte~) main::$0 + (byte~) main::$1 ← (byte) main::y1 - (byte) main::y0 + (byte) main::yd ← (byte~) main::$1 (byte) main::x ← (byte) main::x0 (byte) main::y ← (byte) main::y0 - (byte~) main::$2 ← (byte) main::yd / (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) main::e ← (byte~) main::$2 - (byte~) main::$3 ← (byte) main::y * (byte/signed byte/word/signed word/dword/signed dword) 40 - (byte*~) main::$4 ← (byte[1000]) SCREEN + (byte~) main::$3 + (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::yd / (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::e ← (byte/signed word/word/dword/signed dword~) main::$2 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::y * (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte*~) main::$4 ← (byte[1000]) SCREEN + (byte/signed word/word/dword/signed dword~) main::$3 (byte*~) main::$5 ← (byte*~) main::$4 + (byte) main::x (byte*) main::cursor ← (byte*~) main::$5 main::@1: *((byte*) main::cursor) ← (byte) STAR - (byte/word~) main::$6 ← (byte) main::x + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::x ← (byte/word~) main::$6 + (byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::x + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::x ← (byte/signed word/word/dword/signed dword~) main::$6 (byte*~) main::$7 ← (byte*) main::cursor + (byte/signed byte/word/signed word/dword/signed dword) 1 (byte*) main::cursor ← (byte*~) main::$7 - (byte/word~) main::$8 ← (byte) main::e + (byte) main::yd - (byte) main::e ← (byte/word~) main::$8 + (byte~) main::$8 ← (byte) main::e + (byte) main::yd + (byte) main::e ← (byte~) main::$8 (boolean~) main::$9 ← (byte) main::xd <= (byte) main::e (boolean~) main::$10 ← ! (boolean~) main::$9 if((boolean~) main::$10) goto main::@2 - (byte/word~) main::$11 ← (byte) main::y + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::y ← (byte/word~) main::$11 + (byte/signed word/word/dword/signed dword~) main::$11 ← (byte) main::y + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::y ← (byte/signed word/word/dword/signed dword~) main::$11 (byte*~) main::$12 ← (byte*) main::cursor + (byte/signed byte/word/signed word/dword/signed dword) 40 (byte*) main::cursor ← (byte*~) main::$12 - (byte/signed byte/word/signed word/dword/signed dword~) main::$13 ← (byte) main::e - (byte) main::xd - (byte) main::e ← (byte/signed byte/word/signed word/dword/signed dword~) main::$13 + (byte~) main::$13 ← (byte) main::e - (byte) main::xd + (byte) main::e ← (byte~) main::$13 main::@2: - (byte/word~) main::$14 ← (byte) main::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) main::$15 ← (byte) main::x < (byte/word~) main::$14 + (byte/signed word/word/dword/signed dword~) main::$14 ← (byte) main::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) main::$15 ← (byte) main::x < (byte/signed word/word/dword/signed dword~) main::$14 if((boolean~) main::$15) goto main::@1 main::@return: return @@ -76,21 +76,21 @@ SYMBOLS (byte[1000]) SCREEN (byte) STAR (void()) main() -(byte/signed byte/word/signed word/dword/signed dword~) main::$0 -(byte/signed byte/word/signed word/dword/signed dword~) main::$1 +(byte~) main::$0 +(byte~) main::$1 (boolean~) main::$10 -(byte/word~) main::$11 +(byte/signed word/word/dword/signed dword~) main::$11 (byte*~) main::$12 -(byte/signed byte/word/signed word/dword/signed dword~) main::$13 -(byte/word~) main::$14 +(byte~) main::$13 +(byte/signed word/word/dword/signed dword~) main::$14 (boolean~) main::$15 -(byte~) main::$2 -(byte~) main::$3 +(byte/signed word/word/dword/signed dword~) main::$2 +(byte/signed word/word/dword/signed dword~) main::$3 (byte*~) main::$4 (byte*~) main::$5 -(byte/word~) main::$6 +(byte/signed word/word/dword/signed dword~) main::$6 (byte*~) main::$7 -(byte/word~) main::$8 +(byte~) main::$8 (boolean~) main::$9 (label) main::@1 (label) main::@2 @@ -117,43 +117,43 @@ main: scope:[main] from (byte) main::y0 ← (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) main::x1 ← (byte/signed byte/word/signed word/dword/signed dword) 39 (byte) main::y1 ← (byte/signed byte/word/signed word/dword/signed dword) 24 - (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← (byte) main::x1 - (byte) main::x0 - (byte) main::xd ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 - (byte/signed byte/word/signed word/dword/signed dword~) main::$1 ← (byte) main::y1 - (byte) main::y0 - (byte) main::yd ← (byte/signed byte/word/signed word/dword/signed dword~) main::$1 + (byte~) main::$0 ← (byte) main::x1 - (byte) main::x0 + (byte) main::xd ← (byte~) main::$0 + (byte~) main::$1 ← (byte) main::y1 - (byte) main::y0 + (byte) main::yd ← (byte~) main::$1 (byte) main::x ← (byte) main::x0 (byte) main::y ← (byte) main::y0 - (byte~) main::$2 ← (byte) main::yd / (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) main::e ← (byte~) main::$2 - (byte~) main::$3 ← (byte) main::y * (byte/signed byte/word/signed word/dword/signed dword) 40 - (byte*~) main::$4 ← (byte[1000]) SCREEN + (byte~) main::$3 + (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::yd / (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::e ← (byte/signed word/word/dword/signed dword~) main::$2 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::y * (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte*~) main::$4 ← (byte[1000]) SCREEN + (byte/signed word/word/dword/signed dword~) main::$3 (byte*~) main::$5 ← (byte*~) main::$4 + (byte) main::x (byte*) main::cursor ← (byte*~) main::$5 to:main::@1 main::@1: scope:[main] from main main::@2 *((byte*) main::cursor) ← (byte) STAR - (byte/word~) main::$6 ← (byte) main::x + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::x ← (byte/word~) main::$6 + (byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::x + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::x ← (byte/signed word/word/dword/signed dword~) main::$6 (byte*~) main::$7 ← (byte*) main::cursor + (byte/signed byte/word/signed word/dword/signed dword) 1 (byte*) main::cursor ← (byte*~) main::$7 - (byte/word~) main::$8 ← (byte) main::e + (byte) main::yd - (byte) main::e ← (byte/word~) main::$8 + (byte~) main::$8 ← (byte) main::e + (byte) main::yd + (byte) main::e ← (byte~) main::$8 (boolean~) main::$9 ← (byte) main::xd <= (byte) main::e (boolean~) main::$10 ← ! (boolean~) main::$9 if((boolean~) main::$10) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 - (byte/word~) main::$14 ← (byte) main::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) main::$15 ← (byte) main::x < (byte/word~) main::$14 + (byte/signed word/word/dword/signed dword~) main::$14 ← (byte) main::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) main::$15 ← (byte) main::x < (byte/signed word/word/dword/signed dword~) main::$14 if((boolean~) main::$15) goto main::@1 to:main::@4 main::@3: scope:[main] from main::@1 - (byte/word~) main::$11 ← (byte) main::y + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::y ← (byte/word~) main::$11 + (byte/signed word/word/dword/signed dword~) main::$11 ← (byte) main::y + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::y ← (byte/signed word/word/dword/signed dword~) main::$11 (byte*~) main::$12 ← (byte*) main::cursor + (byte/signed byte/word/signed word/dword/signed dword) 40 (byte*) main::cursor ← (byte*~) main::$12 - (byte/signed byte/word/signed word/dword/signed dword~) main::$13 ← (byte) main::e - (byte) main::xd - (byte) main::e ← (byte/signed byte/word/signed word/dword/signed dword~) main::$13 + (byte~) main::$13 ← (byte) main::e - (byte) main::xd + (byte) main::e ← (byte~) main::$13 to:main::@2 main::@4: scope:[main] from main::@2 to:main::@return @@ -183,16 +183,16 @@ main: scope:[main] from @1 (byte) main::y0#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) main::x1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 39 (byte) main::y1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 24 - (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← (byte) main::x1#0 - (byte) main::x0#0 - (byte) main::xd#0 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 - (byte/signed byte/word/signed word/dword/signed dword~) main::$1 ← (byte) main::y1#0 - (byte) main::y0#0 - (byte) main::yd#0 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$1 + (byte~) main::$0 ← (byte) main::x1#0 - (byte) main::x0#0 + (byte) main::xd#0 ← (byte~) main::$0 + (byte~) main::$1 ← (byte) main::y1#0 - (byte) main::y0#0 + (byte) main::yd#0 ← (byte~) main::$1 (byte) main::x#0 ← (byte) main::x0#0 (byte) main::y#0 ← (byte) main::y0#0 - (byte~) main::$2 ← (byte) main::yd#0 / (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) main::e#0 ← (byte~) main::$2 - (byte~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word/dword/signed dword) 40 - (byte*~) main::$4 ← (byte[1000]) SCREEN#0 + (byte~) main::$3 + (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::yd#0 / (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::e#0 ← (byte/signed word/word/dword/signed dword~) main::$2 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte*~) main::$4 ← (byte[1000]) SCREEN#0 + (byte/signed word/word/dword/signed dword~) main::$3 (byte*~) main::$5 ← (byte*~) main::$4 + (byte) main::x#0 (byte*) main::cursor#0 ← (byte*~) main::$5 to:main::@1 @@ -206,12 +206,12 @@ main::@1: scope:[main] from main main::@2 (byte*) main::cursor#3 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#5 ) (byte) STAR#1 ← phi( main/(byte) STAR#2 main::@2/(byte) STAR#3 ) *((byte*) main::cursor#3) ← (byte) STAR#1 - (byte/word~) main::$6 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::x#1 ← (byte/word~) main::$6 + (byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::x#1 ← (byte/signed word/word/dword/signed dword~) main::$6 (byte*~) main::$7 ← (byte*) main::cursor#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 (byte*) main::cursor#1 ← (byte*~) main::$7 - (byte/word~) main::$8 ← (byte) main::e#3 + (byte) main::yd#1 - (byte) main::e#1 ← (byte/word~) main::$8 + (byte~) main::$8 ← (byte) main::e#3 + (byte) main::yd#1 + (byte) main::e#1 ← (byte~) main::$8 (boolean~) main::$9 ← (byte) main::xd#1 <= (byte) main::e#1 (boolean~) main::$10 ← ! (boolean~) main::$9 if((boolean~) main::$10) goto main::@2 @@ -225,8 +225,8 @@ main::@2: scope:[main] from main::@1 main::@3 (byte) STAR#3 ← phi( main::@1/(byte) STAR#1 main::@3/(byte) STAR#5 ) (byte) main::x#3 ← phi( main::@1/(byte) main::x#1 main::@3/(byte) main::x#4 ) (byte) main::x1#1 ← phi( main::@1/(byte) main::x1#2 main::@3/(byte) main::x1#3 ) - (byte/word~) main::$14 ← (byte) main::x1#1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) main::$15 ← (byte) main::x#3 < (byte/word~) main::$14 + (byte/signed word/word/dword/signed dword~) main::$14 ← (byte) main::x1#1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) main::$15 ← (byte) main::x#3 < (byte/signed word/word/dword/signed dword~) main::$14 if((boolean~) main::$15) goto main::@1 to:main::@return main::@3: scope:[main] from main::@1 @@ -238,12 +238,12 @@ main::@3: scope:[main] from main::@1 (byte) main::e#4 ← phi( main::@1/(byte) main::e#1 ) (byte*) main::cursor#4 ← phi( main::@1/(byte*) main::cursor#1 ) (byte) main::y#2 ← phi( main::@1/(byte) main::y#3 ) - (byte/word~) main::$11 ← (byte) main::y#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::y#1 ← (byte/word~) main::$11 + (byte/signed word/word/dword/signed dword~) main::$11 ← (byte) main::y#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::y#1 ← (byte/signed word/word/dword/signed dword~) main::$11 (byte*~) main::$12 ← (byte*) main::cursor#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 (byte*) main::cursor#2 ← (byte*~) main::$12 - (byte/signed byte/word/signed word/dword/signed dword~) main::$13 ← (byte) main::e#4 - (byte) main::xd#2 - (byte) main::e#2 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$13 + (byte~) main::$13 ← (byte) main::e#4 - (byte) main::xd#2 + (byte) main::e#2 ← (byte~) main::$13 to:main::@2 main::@return: scope:[main] from main::@2 return @@ -271,21 +271,21 @@ SYMBOL TABLE SSA (byte) STAR#4 (byte) STAR#5 (void()) main() -(byte/signed byte/word/signed word/dword/signed dword~) main::$0 -(byte/signed byte/word/signed word/dword/signed dword~) main::$1 +(byte~) main::$0 +(byte~) main::$1 (boolean~) main::$10 -(byte/word~) main::$11 +(byte/signed word/word/dword/signed dword~) main::$11 (byte*~) main::$12 -(byte/signed byte/word/signed word/dword/signed dword~) main::$13 -(byte/word~) main::$14 +(byte~) main::$13 +(byte/signed word/word/dword/signed dword~) main::$14 (boolean~) main::$15 -(byte~) main::$2 -(byte~) main::$3 +(byte/signed word/word/dword/signed dword~) main::$2 +(byte/signed word/word/dword/signed dword~) main::$3 (byte*~) main::$4 (byte*~) main::$5 -(byte/word~) main::$6 +(byte/signed word/word/dword/signed dword~) main::$6 (byte*~) main::$7 -(byte/word~) main::$8 +(byte~) main::$8 (boolean~) main::$9 (label) main::@1 (label) main::@2 @@ -345,23 +345,23 @@ Succesful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (boolean~) main::$10 ← (byte) main::xd#1 > (byte) main::e#1 from (boolean~) main::$9 ← (byte) main::xd#1 <= (byte) main::e#1 Succesful SSA optimization Pass2UnaryNotSimplification Not aliassing across scopes: STAR#2 STAR#4 -Alias (byte) main::xd#0 = (byte/signed byte/word/signed word/dword/signed dword~) main::$0 -Alias (byte) main::yd#0 = (byte/signed byte/word/signed word/dword/signed dword~) main::$1 +Alias (byte) main::xd#0 = (byte~) main::$0 +Alias (byte) main::yd#0 = (byte~) main::$1 Alias (byte) main::x#0 = (byte) main::x0#0 Alias (byte) main::y#0 = (byte) main::y0#0 -Alias (byte) main::e#0 = (byte~) main::$2 +Alias (byte) main::e#0 = (byte/signed word/word/dword/signed dword~) main::$2 Alias (byte*) main::cursor#0 = (byte*~) main::$5 -Alias (byte) main::x#1 = (byte/word~) main::$6 (byte) main::x#4 +Alias (byte) main::x#1 = (byte/signed word/word/dword/signed dword~) main::$6 (byte) main::x#4 Alias (byte*) main::cursor#1 = (byte*~) main::$7 (byte*) main::cursor#4 -Alias (byte) main::e#1 = (byte/word~) main::$8 (byte) main::e#4 +Alias (byte) main::e#1 = (byte~) main::$8 (byte) main::e#4 Alias (byte) main::y#2 = (byte) main::y#3 Alias (byte) main::xd#1 = (byte) main::xd#2 Alias (byte) main::x1#2 = (byte) main::x1#3 Alias (byte) STAR#1 = (byte) STAR#5 Alias (byte) main::yd#1 = (byte) main::yd#3 -Alias (byte) main::y#1 = (byte/word~) main::$11 +Alias (byte) main::y#1 = (byte/signed word/word/dword/signed dword~) main::$11 Alias (byte*) main::cursor#2 = (byte*~) main::$12 -Alias (byte) main::e#2 = (byte/signed byte/word/signed word/dword/signed dword~) main::$13 +Alias (byte) main::e#2 = (byte~) main::$13 Alias (byte) STAR#0 = (byte) STAR#4 Succesful SSA optimization Pass2AliasElimination Not aliassing across scopes: STAR#2 STAR#0 @@ -384,7 +384,7 @@ Redundant Phi (byte) main::xd#1 (byte) main::xd#0 Redundant Phi (byte) main::x1#1 (byte) main::x1#0 Succesful SSA optimization Pass2RedundantPhiElimination Simple Condition (boolean~) main::$10 if((byte) main::xd#0>(byte) main::e#1) goto main::@2 -Simple Condition (boolean~) main::$15 if((byte) main::x#1<(byte/word~) main::$14) goto main::@1 +Simple Condition (boolean~) main::$15 if((byte) main::x#1<(byte/signed word/word/dword/signed dword~) main::$14) goto main::@1 Succesful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) STAR#0 = 81 Constant (const byte*) SCREEN#0 = ((byte*))1024 @@ -395,8 +395,8 @@ Constant (const byte) main::y1#0 = 24 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) main::xd#0 = main::x1#0-main::x#0 Constant (const byte) main::yd#0 = main::y1#0-main::y#0 -Constant (const byte) main::$3 = main::y#0*40 -Constant (const byte/word) main::$14 = main::x1#0+1 +Constant (const byte/word/signed word/dword/signed dword) main::$3 = main::y#0*40 +Constant (const byte/signed word/word/dword/signed dword) main::$14 = main::x1#0+1 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) main::e#0 = main::yd#0/2 Constant (const byte*) main::$4 = SCREEN#0+main::$3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.log b/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.log index 9a124967f..a69305b93 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.log @@ -34,37 +34,37 @@ proc (void()) main() (byte) main::y0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) main::x1 ← (byte/signed byte/word/signed word/dword/signed dword) 39 (byte) main::y1 ← (byte/signed byte/word/signed word/dword/signed dword) 24 - (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← (byte) main::x1 - (byte) main::x0 - (byte) main::xd ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 - (byte/signed byte/word/signed word/dword/signed dword~) main::$1 ← (byte) main::y1 - (byte) main::y0 - (byte) main::yd ← (byte/signed byte/word/signed word/dword/signed dword~) main::$1 + (byte~) main::$0 ← (byte) main::x1 - (byte) main::x0 + (byte) main::xd ← (byte~) main::$0 + (byte~) main::$1 ← (byte) main::y1 - (byte) main::y0 + (byte) main::yd ← (byte~) main::$1 (byte) main::x ← (byte) main::x0 (byte) main::y ← (byte) main::y0 - (byte~) main::$2 ← (byte) main::yd / (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) main::e ← (byte~) main::$2 - (byte~) main::$3 ← (byte) main::y * (byte/signed byte/word/signed word/dword/signed dword) 40 - (byte/word~) main::$4 ← (byte) main::x + (byte~) main::$3 - (word) main::idx ← (byte/word~) main::$4 + (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::yd / (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::e ← (byte/signed word/word/dword/signed dword~) main::$2 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::y * (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte/signed word/word/dword/signed dword~) main::$4 ← (byte) main::x + (byte/signed word/word/dword/signed dword~) main::$3 + (word) main::idx ← (byte/signed word/word/dword/signed dword~) main::$4 main::@1: *((byte[1000]) main::screen + (word) main::idx) ← (byte) main::STAR - (byte/word~) main::$5 ← (byte) main::x + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::x ← (byte/word~) main::$5 - (word~) main::$6 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) main::idx ← (word~) main::$6 - (byte/word~) main::$7 ← (byte) main::e + (byte) main::yd - (byte) main::e ← (byte/word~) main::$7 + (byte/signed word/word/dword/signed dword~) main::$5 ← (byte) main::x + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::x ← (byte/signed word/word/dword/signed dword~) main::$5 + (word/signed dword/dword~) main::$6 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) main::idx ← (word/signed dword/dword~) main::$6 + (byte~) main::$7 ← (byte) main::e + (byte) main::yd + (byte) main::e ← (byte~) main::$7 (boolean~) main::$8 ← (byte) main::xd < (byte) main::e (boolean~) main::$9 ← ! (boolean~) main::$8 if((boolean~) main::$9) goto main::@2 - (byte/word~) main::$10 ← (byte) main::y + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::y ← (byte/word~) main::$10 - (word~) main::$11 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 40 - (word) main::idx ← (word~) main::$11 - (byte/signed byte/word/signed word/dword/signed dword~) main::$12 ← (byte) main::e - (byte) main::xd - (byte) main::e ← (byte/signed byte/word/signed word/dword/signed dword~) main::$12 + (byte/signed word/word/dword/signed dword~) main::$10 ← (byte) main::y + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::y ← (byte/signed word/word/dword/signed dword~) main::$10 + (word/signed dword/dword~) main::$11 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 40 + (word) main::idx ← (word/signed dword/dword~) main::$11 + (byte~) main::$12 ← (byte) main::e - (byte) main::xd + (byte) main::e ← (byte~) main::$12 main::@2: - (byte/word~) main::$13 ← (byte) main::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) main::$14 ← (byte) main::x < (byte/word~) main::$13 + (byte/signed word/word/dword/signed dword~) main::$13 ← (byte) main::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) main::$14 ← (byte) main::x < (byte/signed word/word/dword/signed dword~) main::$13 if((boolean~) main::$14) goto main::@1 main::@return: return @@ -73,19 +73,19 @@ endproc // main() SYMBOLS (void()) main() -(byte/signed byte/word/signed word/dword/signed dword~) main::$0 -(byte/signed byte/word/signed word/dword/signed dword~) main::$1 -(byte/word~) main::$10 -(word~) main::$11 -(byte/signed byte/word/signed word/dword/signed dword~) main::$12 -(byte/word~) main::$13 +(byte~) main::$0 +(byte~) main::$1 +(byte/signed word/word/dword/signed dword~) main::$10 +(word/signed dword/dword~) main::$11 +(byte~) main::$12 +(byte/signed word/word/dword/signed dword~) main::$13 (boolean~) main::$14 -(byte~) main::$2 -(byte~) main::$3 -(byte/word~) main::$4 -(byte/word~) main::$5 -(word~) main::$6 -(byte/word~) main::$7 +(byte/signed word/word/dword/signed dword~) main::$2 +(byte/signed word/word/dword/signed dword~) main::$3 +(byte/signed word/word/dword/signed dword~) main::$4 +(byte/signed word/word/dword/signed dword~) main::$5 +(word/signed dword/dword~) main::$6 +(byte~) main::$7 (boolean~) main::$8 (boolean~) main::$9 (label) main::@1 @@ -115,42 +115,42 @@ main: scope:[main] from (byte) main::y0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) main::x1 ← (byte/signed byte/word/signed word/dword/signed dword) 39 (byte) main::y1 ← (byte/signed byte/word/signed word/dword/signed dword) 24 - (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← (byte) main::x1 - (byte) main::x0 - (byte) main::xd ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 - (byte/signed byte/word/signed word/dword/signed dword~) main::$1 ← (byte) main::y1 - (byte) main::y0 - (byte) main::yd ← (byte/signed byte/word/signed word/dword/signed dword~) main::$1 + (byte~) main::$0 ← (byte) main::x1 - (byte) main::x0 + (byte) main::xd ← (byte~) main::$0 + (byte~) main::$1 ← (byte) main::y1 - (byte) main::y0 + (byte) main::yd ← (byte~) main::$1 (byte) main::x ← (byte) main::x0 (byte) main::y ← (byte) main::y0 - (byte~) main::$2 ← (byte) main::yd / (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) main::e ← (byte~) main::$2 - (byte~) main::$3 ← (byte) main::y * (byte/signed byte/word/signed word/dword/signed dword) 40 - (byte/word~) main::$4 ← (byte) main::x + (byte~) main::$3 - (word) main::idx ← (byte/word~) main::$4 + (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::yd / (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::e ← (byte/signed word/word/dword/signed dword~) main::$2 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::y * (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte/signed word/word/dword/signed dword~) main::$4 ← (byte) main::x + (byte/signed word/word/dword/signed dword~) main::$3 + (word) main::idx ← (byte/signed word/word/dword/signed dword~) main::$4 to:main::@1 main::@1: scope:[main] from main main::@2 *((byte[1000]) main::screen + (word) main::idx) ← (byte) main::STAR - (byte/word~) main::$5 ← (byte) main::x + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::x ← (byte/word~) main::$5 - (word~) main::$6 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) main::idx ← (word~) main::$6 - (byte/word~) main::$7 ← (byte) main::e + (byte) main::yd - (byte) main::e ← (byte/word~) main::$7 + (byte/signed word/word/dword/signed dword~) main::$5 ← (byte) main::x + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::x ← (byte/signed word/word/dword/signed dword~) main::$5 + (word/signed dword/dword~) main::$6 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) main::idx ← (word/signed dword/dword~) main::$6 + (byte~) main::$7 ← (byte) main::e + (byte) main::yd + (byte) main::e ← (byte~) main::$7 (boolean~) main::$8 ← (byte) main::xd < (byte) main::e (boolean~) main::$9 ← ! (boolean~) main::$8 if((boolean~) main::$9) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 - (byte/word~) main::$13 ← (byte) main::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) main::$14 ← (byte) main::x < (byte/word~) main::$13 + (byte/signed word/word/dword/signed dword~) main::$13 ← (byte) main::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) main::$14 ← (byte) main::x < (byte/signed word/word/dword/signed dword~) main::$13 if((boolean~) main::$14) goto main::@1 to:main::@4 main::@3: scope:[main] from main::@1 - (byte/word~) main::$10 ← (byte) main::y + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::y ← (byte/word~) main::$10 - (word~) main::$11 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 40 - (word) main::idx ← (word~) main::$11 - (byte/signed byte/word/signed word/dword/signed dword~) main::$12 ← (byte) main::e - (byte) main::xd - (byte) main::e ← (byte/signed byte/word/signed word/dword/signed dword~) main::$12 + (byte/signed word/word/dword/signed dword~) main::$10 ← (byte) main::y + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::y ← (byte/signed word/word/dword/signed dword~) main::$10 + (word/signed dword/dword~) main::$11 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 40 + (word) main::idx ← (word/signed dword/dword~) main::$11 + (byte~) main::$12 ← (byte) main::e - (byte) main::xd + (byte) main::e ← (byte~) main::$12 to:main::@2 main::@4: scope:[main] from main::@2 to:main::@return @@ -179,17 +179,17 @@ main: scope:[main] from @1 (byte) main::y0#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) main::x1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 39 (byte) main::y1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 24 - (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← (byte) main::x1#0 - (byte) main::x0#0 - (byte) main::xd#0 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 - (byte/signed byte/word/signed word/dword/signed dword~) main::$1 ← (byte) main::y1#0 - (byte) main::y0#0 - (byte) main::yd#0 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$1 + (byte~) main::$0 ← (byte) main::x1#0 - (byte) main::x0#0 + (byte) main::xd#0 ← (byte~) main::$0 + (byte~) main::$1 ← (byte) main::y1#0 - (byte) main::y0#0 + (byte) main::yd#0 ← (byte~) main::$1 (byte) main::x#0 ← (byte) main::x0#0 (byte) main::y#0 ← (byte) main::y0#0 - (byte~) main::$2 ← (byte) main::yd#0 / (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) main::e#0 ← (byte~) main::$2 - (byte~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word/dword/signed dword) 40 - (byte/word~) main::$4 ← (byte) main::x#0 + (byte~) main::$3 - (word) main::idx#0 ← (byte/word~) main::$4 + (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::yd#0 / (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::e#0 ← (byte/signed word/word/dword/signed dword~) main::$2 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte/signed word/word/dword/signed dword~) main::$4 ← (byte) main::x#0 + (byte/signed word/word/dword/signed dword~) main::$3 + (word) main::idx#0 ← (byte/signed word/word/dword/signed dword~) main::$4 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::y#3 ← phi( main/(byte) main::y#0 main::@2/(byte) main::y#4 ) @@ -201,12 +201,12 @@ main::@1: scope:[main] from main main::@2 (word) main::idx#3 ← phi( main/(word) main::idx#0 main::@2/(word) main::idx#5 ) (byte) main::STAR#1 ← phi( main/(byte) main::STAR#0 main::@2/(byte) main::STAR#2 ) *((byte[1000]) main::screen#0 + (word) main::idx#3) ← (byte) main::STAR#1 - (byte/word~) main::$5 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::x#1 ← (byte/word~) main::$5 - (word~) main::$6 ← (word) main::idx#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) main::idx#1 ← (word~) main::$6 - (byte/word~) main::$7 ← (byte) main::e#3 + (byte) main::yd#1 - (byte) main::e#1 ← (byte/word~) main::$7 + (byte/signed word/word/dword/signed dword~) main::$5 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::x#1 ← (byte/signed word/word/dword/signed dword~) main::$5 + (word/signed dword/dword~) main::$6 ← (word) main::idx#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) main::idx#1 ← (word/signed dword/dword~) main::$6 + (byte~) main::$7 ← (byte) main::e#3 + (byte) main::yd#1 + (byte) main::e#1 ← (byte~) main::$7 (boolean~) main::$8 ← (byte) main::xd#1 < (byte) main::e#1 (boolean~) main::$9 ← ! (boolean~) main::$8 if((boolean~) main::$9) goto main::@2 @@ -220,8 +220,8 @@ main::@2: scope:[main] from main::@1 main::@3 (byte) main::STAR#2 ← phi( main::@1/(byte) main::STAR#1 main::@3/(byte) main::STAR#3 ) (byte) main::x#3 ← phi( main::@1/(byte) main::x#1 main::@3/(byte) main::x#4 ) (byte) main::x1#1 ← phi( main::@1/(byte) main::x1#2 main::@3/(byte) main::x1#3 ) - (byte/word~) main::$13 ← (byte) main::x1#1 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) main::$14 ← (byte) main::x#3 < (byte/word~) main::$13 + (byte/signed word/word/dword/signed dword~) main::$13 ← (byte) main::x1#1 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) main::$14 ← (byte) main::x#3 < (byte/signed word/word/dword/signed dword~) main::$13 if((boolean~) main::$14) goto main::@1 to:main::@return main::@3: scope:[main] from main::@1 @@ -233,12 +233,12 @@ main::@3: scope:[main] from main::@1 (byte) main::e#4 ← phi( main::@1/(byte) main::e#1 ) (word) main::idx#4 ← phi( main::@1/(word) main::idx#1 ) (byte) main::y#2 ← phi( main::@1/(byte) main::y#3 ) - (byte/word~) main::$10 ← (byte) main::y#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::y#1 ← (byte/word~) main::$10 - (word~) main::$11 ← (word) main::idx#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 - (word) main::idx#2 ← (word~) main::$11 - (byte/signed byte/word/signed word/dword/signed dword~) main::$12 ← (byte) main::e#4 - (byte) main::xd#2 - (byte) main::e#2 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$12 + (byte/signed word/word/dword/signed dword~) main::$10 ← (byte) main::y#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::y#1 ← (byte/signed word/word/dword/signed dword~) main::$10 + (word/signed dword/dword~) main::$11 ← (word) main::idx#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 + (word) main::idx#2 ← (word/signed dword/dword~) main::$11 + (byte~) main::$12 ← (byte) main::e#4 - (byte) main::xd#2 + (byte) main::e#2 ← (byte~) main::$12 to:main::@2 main::@return: scope:[main] from main::@2 return @@ -256,19 +256,19 @@ SYMBOL TABLE SSA (label) @begin (label) @end (void()) main() -(byte/signed byte/word/signed word/dword/signed dword~) main::$0 -(byte/signed byte/word/signed word/dword/signed dword~) main::$1 -(byte/word~) main::$10 -(word~) main::$11 -(byte/signed byte/word/signed word/dword/signed dword~) main::$12 -(byte/word~) main::$13 +(byte~) main::$0 +(byte~) main::$1 +(byte/signed word/word/dword/signed dword~) main::$10 +(word/signed dword/dword~) main::$11 +(byte~) main::$12 +(byte/signed word/word/dword/signed dword~) main::$13 (boolean~) main::$14 -(byte~) main::$2 -(byte~) main::$3 -(byte/word~) main::$4 -(byte/word~) main::$5 -(word~) main::$6 -(byte/word~) main::$7 +(byte/signed word/word/dword/signed dword~) main::$2 +(byte/signed word/word/dword/signed dword~) main::$3 +(byte/signed word/word/dword/signed dword~) main::$4 +(byte/signed word/word/dword/signed dword~) main::$5 +(word/signed dword/dword~) main::$6 +(byte~) main::$7 (boolean~) main::$8 (boolean~) main::$9 (label) main::@1 @@ -335,23 +335,23 @@ Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (boolean~) main::$9 ← (byte) main::xd#1 >= (byte) main::e#1 from (boolean~) main::$8 ← (byte) main::xd#1 < (byte) main::e#1 Succesful SSA optimization Pass2UnaryNotSimplification -Alias (byte) main::xd#0 = (byte/signed byte/word/signed word/dword/signed dword~) main::$0 -Alias (byte) main::yd#0 = (byte/signed byte/word/signed word/dword/signed dword~) main::$1 +Alias (byte) main::xd#0 = (byte~) main::$0 +Alias (byte) main::yd#0 = (byte~) main::$1 Alias (byte) main::x#0 = (byte) main::x0#0 Alias (byte) main::y#0 = (byte) main::y0#0 -Alias (byte) main::e#0 = (byte~) main::$2 -Alias (word) main::idx#0 = (byte/word~) main::$4 -Alias (byte) main::x#1 = (byte/word~) main::$5 (byte) main::x#4 -Alias (word) main::idx#1 = (word~) main::$6 (word) main::idx#4 -Alias (byte) main::e#1 = (byte/word~) main::$7 (byte) main::e#4 +Alias (byte) main::e#0 = (byte/signed word/word/dword/signed dword~) main::$2 +Alias (word) main::idx#0 = (byte/signed word/word/dword/signed dword~) main::$4 +Alias (byte) main::x#1 = (byte/signed word/word/dword/signed dword~) main::$5 (byte) main::x#4 +Alias (word) main::idx#1 = (word/signed dword/dword~) main::$6 (word) main::idx#4 +Alias (byte) main::e#1 = (byte~) main::$7 (byte) main::e#4 Alias (byte) main::y#2 = (byte) main::y#3 Alias (byte) main::xd#1 = (byte) main::xd#2 Alias (byte) main::x1#2 = (byte) main::x1#3 Alias (byte) main::STAR#1 = (byte) main::STAR#3 Alias (byte) main::yd#1 = (byte) main::yd#3 -Alias (byte) main::y#1 = (byte/word~) main::$10 -Alias (word) main::idx#2 = (word~) main::$11 -Alias (byte) main::e#2 = (byte/signed byte/word/signed word/dword/signed dword~) main::$12 +Alias (byte) main::y#1 = (byte/signed word/word/dword/signed dword~) main::$10 +Alias (word) main::idx#2 = (word/signed dword/dword~) main::$11 +Alias (byte) main::e#2 = (byte~) main::$12 Succesful SSA optimization Pass2AliasElimination Alias (byte) main::x1#1 = (byte) main::x1#2 Alias (byte) main::x#1 = (byte) main::x#3 @@ -370,7 +370,7 @@ Redundant Phi (byte) main::xd#1 (byte) main::xd#0 Redundant Phi (byte) main::x1#1 (byte) main::x1#0 Succesful SSA optimization Pass2RedundantPhiElimination Simple Condition (boolean~) main::$9 if((byte) main::xd#0>=(byte) main::e#1) goto main::@2 -Simple Condition (boolean~) main::$14 if((byte) main::x#1<(byte/word~) main::$13) goto main::@1 +Simple Condition (boolean~) main::$14 if((byte) main::x#1<(byte/signed word/word/dword/signed dword~) main::$13) goto main::@1 Succesful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::STAR#0 = 81 Constant (const byte*) main::screen#0 = ((byte*))1024 @@ -381,8 +381,8 @@ Constant (const byte) main::y1#0 = 24 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) main::xd#0 = main::x1#0-main::x#0 Constant (const byte) main::yd#0 = main::y1#0-main::y#0 -Constant (const byte) main::$3 = main::y#0*40 -Constant (const byte/word) main::$13 = main::x1#0+1 +Constant (const byte/signed word/word/dword/signed dword) main::$3 = main::y#0*40 +Constant (const byte/signed word/word/dword/signed dword) main::$13 = main::x1#0+1 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) main::e#0 = main::yd#0/2 Constant (const word) main::idx#0 = main::x#0+main::$3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.asm b/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.asm index 7af21f277..39ab9b738 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.asm @@ -7,8 +7,8 @@ main: { .const min = $a .const max = $c8 .label BGCOL = $d021 - .const sumw = min+max .const sumb = min+max + .const sumw = min+max .const midb = (sumb>>1)+1 .const midw = (sumw>>1)+1 lda #midw diff --git a/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.log b/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.log index 5bcb2ab24..c77bfff6c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.log @@ -25,18 +25,18 @@ proc (void()) main() (byte*) main::SCREEN ← (word/signed word/dword/signed dword) 1024 (byte) main::min ← (byte/signed byte/word/signed word/dword/signed dword) 10 (byte) main::max ← (byte/word/signed word/dword/signed dword) 200 - (byte/word~) main::$0 ← (byte) main::min + (byte) main::max - (word) main::sumw ← (byte/word~) main::$0 + (byte~) main::$0 ← (byte) main::min + (byte) main::max + (word) main::sumw ← (byte~) main::$0 (word~) main::$1 ← (word) main::sumw >> (byte/signed byte/word/signed word/dword/signed dword) 1 (byte~) main::$2 ← ((byte)) (word~) main::$1 - (byte/word~) main::$3 ← (byte~) main::$2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::midw ← (byte/word~) main::$3 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte~) main::$2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::midw ← (byte/signed word/word/dword/signed dword~) main::$3 *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) main::midw - (byte/word~) main::$4 ← (byte) main::min + (byte) main::max - (byte) main::sumb ← (byte/word~) main::$4 + (byte~) main::$4 ← (byte) main::min + (byte) main::max + (byte) main::sumb ← (byte~) main::$4 (byte~) main::$5 ← (byte) main::sumb >> (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) main::$6 ← (byte~) main::$5 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::midb ← (byte/word~) main::$6 + (byte/signed word/word/dword/signed dword~) main::$6 ← (byte~) main::$5 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::midb ← (byte/signed word/word/dword/signed dword~) main::$6 *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) main::midb (byte*) main::BGCOL ← (word/dword/signed dword) 53281 (boolean~) main::$7 ← *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 0) == *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1) @@ -54,13 +54,13 @@ endproc // main() SYMBOLS (void()) main() -(byte/word~) main::$0 +(byte~) main::$0 (word~) main::$1 (byte~) main::$2 -(byte/word~) main::$3 -(byte/word~) main::$4 +(byte/signed word/word/dword/signed dword~) main::$3 +(byte~) main::$4 (byte~) main::$5 -(byte/word~) main::$6 +(byte/signed word/word/dword/signed dword~) main::$6 (boolean~) main::$7 (boolean~) main::$8 (label) main::@1 @@ -76,6 +76,7 @@ SYMBOLS (word) main::sumw Promoting word/signed word/dword/signed dword to byte* in main::SCREEN ← ((byte*)) 1024 +Promoting byte to word in main::sumw ← ((word)) main::$0 Promoting word/dword/signed dword to byte* in main::BGCOL ← ((byte*)) 53281 INITIAL CONTROL FLOW GRAPH @begin: scope:[] from @@ -84,18 +85,18 @@ main: scope:[main] from (byte*) main::SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte) main::min ← (byte/signed byte/word/signed word/dword/signed dword) 10 (byte) main::max ← (byte/word/signed word/dword/signed dword) 200 - (byte/word~) main::$0 ← (byte) main::min + (byte) main::max - (word) main::sumw ← (byte/word~) main::$0 + (byte~) main::$0 ← (byte) main::min + (byte) main::max + (word) main::sumw ← ((word)) (byte~) main::$0 (word~) main::$1 ← (word) main::sumw >> (byte/signed byte/word/signed word/dword/signed dword) 1 (byte~) main::$2 ← ((byte)) (word~) main::$1 - (byte/word~) main::$3 ← (byte~) main::$2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::midw ← (byte/word~) main::$3 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte~) main::$2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::midw ← (byte/signed word/word/dword/signed dword~) main::$3 *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) main::midw - (byte/word~) main::$4 ← (byte) main::min + (byte) main::max - (byte) main::sumb ← (byte/word~) main::$4 + (byte~) main::$4 ← (byte) main::min + (byte) main::max + (byte) main::sumb ← (byte~) main::$4 (byte~) main::$5 ← (byte) main::sumb >> (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) main::$6 ← (byte~) main::$5 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::midb ← (byte/word~) main::$6 + (byte/signed word/word/dword/signed dword~) main::$6 ← (byte~) main::$5 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::midb ← (byte/signed word/word/dword/signed dword~) main::$6 *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) main::midb (byte*) main::BGCOL ← ((byte*)) (word/dword/signed dword) 53281 (boolean~) main::$7 ← *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 0) == *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1) @@ -133,18 +134,18 @@ main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte) main::min#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10 (byte) main::max#0 ← (byte/word/signed word/dword/signed dword) 200 - (byte/word~) main::$0 ← (byte) main::min#0 + (byte) main::max#0 - (word) main::sumw#0 ← (byte/word~) main::$0 + (byte~) main::$0 ← (byte) main::min#0 + (byte) main::max#0 + (word) main::sumw#0 ← ((word)) (byte~) main::$0 (word~) main::$1 ← (word) main::sumw#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 (byte~) main::$2 ← ((byte)) (word~) main::$1 - (byte/word~) main::$3 ← (byte~) main::$2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::midw#0 ← (byte/word~) main::$3 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte~) main::$2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::midw#0 ← (byte/signed word/word/dword/signed dword~) main::$3 *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) main::midw#0 - (byte/word~) main::$4 ← (byte) main::min#0 + (byte) main::max#0 - (byte) main::sumb#0 ← (byte/word~) main::$4 + (byte~) main::$4 ← (byte) main::min#0 + (byte) main::max#0 + (byte) main::sumb#0 ← (byte~) main::$4 (byte~) main::$5 ← (byte) main::sumb#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) main::$6 ← (byte~) main::$5 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::midb#0 ← (byte/word~) main::$6 + (byte/signed word/word/dword/signed dword~) main::$6 ← (byte~) main::$5 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::midb#0 ← (byte/signed word/word/dword/signed dword~) main::$6 *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) main::midb#0 (byte*) main::BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281 (boolean~) main::$7 ← *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) == *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) @@ -175,13 +176,13 @@ SYMBOL TABLE SSA (label) @begin (label) @end (void()) main() -(byte/word~) main::$0 +(byte~) main::$0 (word~) main::$1 (byte~) main::$2 -(byte/word~) main::$3 -(byte/word~) main::$4 +(byte/signed word/word/dword/signed dword~) main::$3 +(byte~) main::$4 (byte~) main::$5 -(byte/word~) main::$6 +(byte/signed word/word/dword/signed dword~) main::$6 (boolean~) main::$7 (boolean~) main::$8 (label) main::@1 @@ -211,10 +212,9 @@ Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (boolean~) main::$8 ← *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) != *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) from (boolean~) main::$7 ← *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) == *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) Succesful SSA optimization Pass2UnaryNotSimplification -Alias (word) main::sumw#0 = (byte/word~) main::$0 -Alias (byte) main::midw#0 = (byte/word~) main::$3 -Alias (byte) main::sumb#0 = (byte/word~) main::$4 -Alias (byte) main::midb#0 = (byte/word~) main::$6 +Alias (byte) main::midw#0 = (byte/signed word/word/dword/signed dword~) main::$3 +Alias (byte) main::sumb#0 = (byte~) main::$4 +Alias (byte) main::midb#0 = (byte/signed word/word/dword/signed dword~) main::$6 Alias (byte*) main::BGCOL#0 = (byte*) main::BGCOL#1 (byte*) main::BGCOL#2 Succesful SSA optimization Pass2AliasElimination Simple Condition (boolean~) main::$8 if(*((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0)!=*((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1)) goto main::@1 @@ -224,15 +224,17 @@ Constant (const byte) main::min#0 = 10 Constant (const byte) main::max#0 = 200 Constant (const byte*) main::BGCOL#0 = ((byte*))53281 Succesful SSA optimization Pass2ConstantIdentification -Constant (const word) main::sumw#0 = main::min#0+main::max#0 +Constant (const byte) main::$0 = main::min#0+main::max#0 Constant (const byte) main::sumb#0 = main::min#0+main::max#0 Succesful SSA optimization Pass2ConstantIdentification -Constant (const word) main::$1 = main::sumw#0>>1 +Constant (const word) main::sumw#0 = ((word))main::$0 Constant (const byte) main::$5 = main::sumb#0>>1 Succesful SSA optimization Pass2ConstantIdentification -Constant (const byte) main::$2 = ((byte))main::$1 +Constant (const word) main::$1 = main::sumw#0>>1 Constant (const byte) main::midb#0 = main::$5+1 Succesful SSA optimization Pass2ConstantIdentification +Constant (const byte) main::$2 = ((byte))main::$1 +Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) main::midw#0 = main::$2+1 Succesful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+0) @@ -244,6 +246,7 @@ OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$5 = (const byte) main::sumb#0>>(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::$1 = (const word) main::sumw#0>>(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::$2 = ((byte))(const word) main::sumw#0>>(byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined main::$0 = (const byte) main::min#0+(const byte) main::max#0 Succesful SSA optimization Pass2ConstantInlining Block Sequence Planned @begin @1 @end main main::@3 main::@return main::@1 Block Sequence Planned @begin @1 @end main main::@3 main::@return main::@1 @@ -343,8 +346,8 @@ main: { .const min = $a .const max = $c8 .label BGCOL = $d021 - .const sumw = min+max .const sumb = min+max + .const sumw = min+max .const midb = (sumb>>1)+1 .const midw = (sumw>>1)+1 //SEG9 [4] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (const byte) main::midw#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 @@ -418,8 +421,8 @@ main: { .const min = $a .const max = $c8 .label BGCOL = $d021 - .const sumw = min+max .const sumb = min+max + .const sumw = min+max .const midb = (sumb>>1)+1 .const midw = (sumw>>1)+1 //SEG9 [4] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (const byte) main::midw#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 @@ -492,7 +495,7 @@ FINAL SYMBOL TABLE (byte) main::sumb (const byte) main::sumb#0 sumb = (const byte) main::min#0+(const byte) main::max#0 (word) main::sumw -(const word) main::sumw#0 sumw = (const byte) main::min#0+(const byte) main::max#0 +(const word) main::sumw#0 sumw = ((word))(const byte) main::min#0+(const byte) main::max#0 @@ -517,8 +520,8 @@ main: { .const min = $a .const max = $c8 .label BGCOL = $d021 - .const sumw = min+max .const sumb = min+max + .const sumw = min+max .const midb = (sumb>>1)+1 .const midw = (sumw>>1)+1 //SEG9 [4] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (const byte) main::midw#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.sym b/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.sym index fcbb40f7d..155c51391 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.sym @@ -20,5 +20,5 @@ (byte) main::sumb (const byte) main::sumb#0 sumb = (const byte) main::min#0+(const byte) main::max#0 (word) main::sumw -(const word) main::sumw#0 sumw = (const byte) main::min#0+(const byte) main::max#0 +(const word) main::sumw#0 sumw = ((word))(const byte) main::min#0+(const byte) main::max#0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/casting.log b/src/test/java/dk/camelot64/kickc/test/ref/casting.log index 1c3dccd60..8a7bd142f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/casting.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/casting.log @@ -43,8 +43,8 @@ STATEMENTS proc (void()) main() (byte) main::b ← (byte/signed byte/word/signed word/dword/signed dword) 0 main::@1: - (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← (byte/word/signed word/dword/signed dword) 200 - (byte) main::b - (byte) main::b2 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 + (byte/word/signed word/dword/signed dword~) main::$0 ← (byte/word/signed word/dword/signed dword) 200 - (byte) main::b + (byte) main::b2 ← (byte/word/signed word/dword/signed dword~) main::$0 *((byte*) SCREEN + (byte) main::b) ← (byte) main::b2 (signed byte~) main::$1 ← ((signed byte)) (byte) main::b (signed byte~) main::$2 ← - (signed byte~) main::$1 @@ -67,8 +67,8 @@ w::@1: (byte~) w::$1 ← ((byte)) (word~) w::$0 (byte) w::b ← (byte~) w::$1 (byte/signed byte/word/signed word/dword/signed dword~) w::$2 ← (word/signed word/dword/signed dword) 1400 - (word/signed word/dword/signed dword) 1350 - (byte/word~) w::$3 ← (byte/signed byte/word/signed word/dword/signed dword~) w::$2 + (byte) w::i - (byte) w::b2 ← (byte/word~) w::$3 + (byte/signed word/word/dword/signed dword~) w::$3 ← (byte/signed byte/word/signed word/dword/signed dword~) w::$2 + (byte) w::i + (byte) w::b2 ← (byte/signed word/word/dword/signed dword~) w::$3 *((byte*) SCREEN3 + (byte) w::i) ← (byte) w::b *((byte*) SCREEN4 + (byte) w::i) ← (byte) w::b2 (byte) w::i ← ++ (byte) w::i @@ -91,7 +91,7 @@ SYMBOLS (byte*) SCREEN3 (byte*) SCREEN4 (void()) main() -(byte/signed byte/word/signed word/dword/signed dword~) main::$0 +(byte/word/signed word/dword/signed dword~) main::$0 (signed byte~) main::$1 (signed byte~) main::$2 (byte~) main::$3 @@ -106,7 +106,7 @@ SYMBOLS (word~) w::$0 (byte~) w::$1 (byte/signed byte/word/signed word/dword/signed dword~) w::$2 -(byte/word~) w::$3 +(byte/signed word/word/dword/signed dword~) w::$3 (boolean~) w::$4 (label) w::@1 (label) w::@return @@ -134,8 +134,8 @@ main: scope:[main] from (byte) main::b ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← (byte/word/signed word/dword/signed dword) 200 - (byte) main::b - (byte) main::b2 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 + (byte/word/signed word/dword/signed dword~) main::$0 ← (byte/word/signed word/dword/signed dword) 200 - (byte) main::b + (byte) main::b2 ← (byte/word/signed word/dword/signed dword~) main::$0 *((byte*) SCREEN + (byte) main::b) ← (byte) main::b2 (signed byte~) main::$1 ← ((signed byte)) (byte) main::b (signed byte~) main::$2 ← - (signed byte~) main::$1 @@ -164,8 +164,8 @@ w::@1: scope:[w] from w w::@1 (byte~) w::$1 ← ((byte)) (word~) w::$0 (byte) w::b ← (byte~) w::$1 (byte/signed byte/word/signed word/dword/signed dword~) w::$2 ← (word/signed word/dword/signed dword) 1400 - (word/signed word/dword/signed dword) 1350 - (byte/word~) w::$3 ← (byte/signed byte/word/signed word/dword/signed dword~) w::$2 + (byte) w::i - (byte) w::b2 ← (byte/word~) w::$3 + (byte/signed word/word/dword/signed dword~) w::$3 ← (byte/signed byte/word/signed word/dword/signed dword~) w::$2 + (byte) w::i + (byte) w::b2 ← (byte/signed word/word/dword/signed dword~) w::$3 *((byte*) SCREEN3 + (byte) w::i) ← (byte) w::b *((byte*) SCREEN4 + (byte) w::i) ← (byte) w::b2 (byte) w::i ← ++ (byte) w::i @@ -220,8 +220,8 @@ main::@1: scope:[main] from main main::@1 (byte*) SCREEN2#1 ← phi( main/(byte*) SCREEN2#2 main::@1/(byte*) SCREEN2#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 ) (byte) main::b#2 ← phi( main/(byte) main::b#0 main::@1/(byte) main::b#1 ) - (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← (byte/word/signed word/dword/signed dword) 200 - (byte) main::b#2 - (byte) main::b2#0 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 + (byte/word/signed word/dword/signed dword~) main::$0 ← (byte/word/signed word/dword/signed dword) 200 - (byte) main::b#2 + (byte) main::b2#0 ← (byte/word/signed word/dword/signed dword~) main::$0 *((byte*) SCREEN#1 + (byte) main::b#2) ← (byte) main::b2#0 (signed byte~) main::$1 ← ((signed byte)) (byte) main::b#2 (signed byte~) main::$2 ← - (signed byte~) main::$1 @@ -257,8 +257,8 @@ w::@1: scope:[w] from w w::@1 (byte~) w::$1 ← ((byte)) (word~) w::$0 (byte) w::b#0 ← (byte~) w::$1 (byte/signed byte/word/signed word/dword/signed dword~) w::$2 ← (word/signed word/dword/signed dword) 1400 - (word/signed word/dword/signed dword) 1350 - (byte/word~) w::$3 ← (byte/signed byte/word/signed word/dword/signed dword~) w::$2 + (byte) w::i#2 - (byte) w::b2#0 ← (byte/word~) w::$3 + (byte/signed word/word/dword/signed dword~) w::$3 ← (byte/signed byte/word/signed word/dword/signed dword~) w::$2 + (byte) w::i#2 + (byte) w::b2#0 ← (byte/signed word/word/dword/signed dword~) w::$3 *((byte*) SCREEN3#1 + (byte) w::i#2) ← (byte) w::b#0 *((byte*) SCREEN4#1 + (byte) w::i#2) ← (byte) w::b2#0 (byte) w::i#1 ← ++ (byte) w::i#2 @@ -317,7 +317,7 @@ SYMBOL TABLE SSA (byte*) SCREEN4#5 (byte*) SCREEN4#6 (void()) main() -(byte/signed byte/word/signed word/dword/signed dword~) main::$0 +(byte/word/signed word/dword/signed dword~) main::$0 (signed byte~) main::$1 (signed byte~) main::$2 (byte~) main::$3 @@ -338,7 +338,7 @@ SYMBOL TABLE SSA (word~) w::$0 (byte~) w::$1 (byte/signed byte/word/signed word/dword/signed dword~) w::$2 -(byte/word~) w::$3 +(byte/signed word/word/dword/signed dword~) w::$3 (boolean~) w::$4 (label) w::@1 (label) w::@return @@ -368,12 +368,12 @@ Not aliassing across scopes: SCREEN4#2 SCREEN4#3 Alias (byte*) SCREEN2#0 = (byte*~) $1 (byte*) SCREEN2#3 Alias (byte*) SCREEN3#0 = (byte*~) $3 (byte*) SCREEN3#6 Alias (byte*) SCREEN4#0 = (byte*~) $5 (byte*) SCREEN4#6 -Alias (byte) main::b2#0 = (byte/signed byte/word/signed word/dword/signed dword~) main::$0 +Alias (byte) main::b2#0 = (byte/word/signed word/dword/signed dword~) main::$0 Alias (signed byte) main::sb#0 = (signed byte~) main::$2 Alias (byte*) SCREEN3#3 = (byte*) SCREEN3#4 Alias (byte*) SCREEN4#3 = (byte*) SCREEN4#4 Alias (byte) w::b#0 = (byte~) w::$1 -Alias (byte) w::b2#0 = (byte/word~) w::$3 +Alias (byte) w::b2#0 = (byte/signed word/word/dword/signed dword~) w::$3 Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 Succesful SSA optimization Pass2AliasElimination Not aliassing across scopes: SCREEN#2 SCREEN#0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/const-identification.cfg b/src/test/java/dk/camelot64/kickc/test/ref/const-identification.cfg index 6482ed422..c85472b7a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/const-identification.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/const-identification.cfg @@ -49,8 +49,8 @@ line::@1: scope:[line] from line plot: scope:[plot] from line::@1 line::@2 [23] (byte) plot::x#2 ← phi( line::@1/(const byte) line::x0#0 line::@2/(byte) plot::x#1 ) [ plot::x#2 ] ( main:2::line:11::plot:17 [ line::x#2 plot::x#2 ] main:2::line:11::plot:22 [ plot::x#2 ] ) [24] (byte) plot::idx#0 ← *((const byte*) plots#0 + (byte) plot::x#2) [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] ) - [25] (byte/word~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) - [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte/word~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) + [25] (byte/signed word/word/dword/signed dword~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) + [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte/signed word/word/dword/signed dword~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) to:plot::@return plot::@return: scope:[plot] from plot [27] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/const-identification.log b/src/test/java/dk/camelot64/kickc/test/ref/const-identification.log index 121ed73f3..b23774a35 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/const-identification.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/const-identification.log @@ -65,8 +65,8 @@ line::@return: endproc // line() proc (void()) plot((byte) plot::x) (byte) plot::idx ← *((byte*) plots + (byte) plot::x) - (byte/word~) plot::$0 ← *((byte*) SCREEN + (byte) plot::idx) + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*) SCREEN + (byte) plot::idx) ← (byte/word~) plot::$0 + (byte/signed word/word/dword/signed dword~) plot::$0 ← *((byte*) SCREEN + (byte) plot::idx) + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*) SCREEN + (byte) plot::idx) ← (byte/signed word/word/dword/signed dword~) plot::$0 plot::@return: return endproc // plot() @@ -95,7 +95,7 @@ SYMBOLS (label) main::@return (byte) main::i (void()) plot((byte) plot::x) -(byte/word~) plot::$0 +(byte/signed word/word/dword/signed dword~) plot::$0 (label) plot::@return (byte) plot::idx (byte) plot::x @@ -161,8 +161,8 @@ line::@return: scope:[line] from line::@3 to:@3 plot: scope:[plot] from (byte) plot::idx ← *((byte*) plots + (byte) plot::x) - (byte/word~) plot::$0 ← *((byte*) SCREEN + (byte) plot::idx) + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*) SCREEN + (byte) plot::idx) ← (byte/word~) plot::$0 + (byte/signed word/word/dword/signed dword~) plot::$0 ← *((byte*) SCREEN + (byte) plot::idx) + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*) SCREEN + (byte) plot::idx) ← (byte/signed word/word/dword/signed dword~) plot::$0 to:plot::@return plot::@return: scope:[plot] from plot return @@ -253,8 +253,8 @@ line::@return: scope:[line] from line::@7 line::@8 plot: scope:[plot] from line::@1 line::@2 (byte) plot::x#2 ← phi( line::@1/(byte) plot::x#0 line::@2/(byte) plot::x#1 ) (byte) plot::idx#0 ← *((byte*) plots#0 + (byte) plot::x#2) - (byte/word~) plot::$0 ← *((byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte/word~) plot::$0 + (byte/signed word/word/dword/signed dword~) plot::$0 ← *((byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte/signed word/word/dword/signed dword~) plot::$0 to:plot::@return plot::@return: scope:[plot] from plot return @@ -310,7 +310,7 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 (void()) plot((byte) plot::x) -(byte/word~) plot::$0 +(byte/signed word/word/dword/signed dword~) plot::$0 (label) plot::@return (byte) plot::idx (byte) plot::idx#0 @@ -467,8 +467,8 @@ line::@1: scope:[line] from line plot: scope:[plot] from line::@1 line::@2 [23] (byte) plot::x#2 ← phi( line::@1/(const byte) line::x0#0 line::@2/(byte) plot::x#1 ) [ plot::x#2 ] ( main:2::line:11::plot:17 [ line::x#2 plot::x#2 ] main:2::line:11::plot:22 [ plot::x#2 ] ) [24] (byte) plot::idx#0 ← *((const byte*) plots#0 + (byte) plot::x#2) [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] ) - [25] (byte/word~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) - [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte/word~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) + [25] (byte/signed word/word/dword/signed dword~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) + [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte/signed word/word/dword/signed dword~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) to:plot::@return plot::@return: scope:[plot] from plot [27] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) @@ -528,7 +528,7 @@ VARIABLE REGISTER WEIGHTS (byte) main::i#1 16.5 (byte) main::i#2 18.333333333333332 (void()) plot((byte) plot::x) -(byte/word~) plot::$0 4.0 +(byte/signed word/word/dword/signed dword~) plot::$0 4.0 (byte) plot::idx (byte) plot::idx#0 3.0 (byte) plot::x @@ -692,13 +692,13 @@ plot: { ldy x lda plots,y sta idx - //SEG49 [25] (byte/word~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2_plus_1 + //SEG49 [25] (byte/signed word/word/dword/signed dword~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2_plus_1 ldy idx lda SCREEN,y clc adc #1 sta _0 - //SEG50 [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte/word~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) -- pbuc1_derefidx_vbuz1=vbuz2 + //SEG50 [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte/signed word/word/dword/signed dword~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) -- pbuc1_derefidx_vbuz1=vbuz2 lda _0 ldy idx sta SCREEN,y @@ -713,13 +713,13 @@ REGISTER UPLIFT POTENTIAL REGISTERS Statement [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Statement [14] if((const byte) line::x0#0>=(const byte) line::x1#0) goto line::@1 [ ] ( main:2::line:11 [ ] ) always clobbers reg byte a -Statement [25] (byte/word~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) always clobbers reg byte a +Statement [25] (byte/signed word/word/dword/signed dword~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ line::x#2 line::x#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ plot::idx#0 ] Statement [6] *((const byte*) plots#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [14] if((const byte) line::x0#0>=(const byte) line::x1#0) goto line::@1 [ ] ( main:2::line:11 [ ] ) always clobbers reg byte a -Statement [25] (byte/word~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) always clobbers reg byte a +Statement [25] (byte/signed word/word/dword/signed dword~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:3 [ line::x#2 line::x#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:4 [ plot::x#2 plot::x#1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , @@ -866,11 +866,11 @@ line: { plot: { //SEG48 [24] (byte) plot::idx#0 ← *((const byte*) plots#0 + (byte) plot::x#2) [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] ) -- vbuyy=pbuc1_derefidx_vbuxx ldy plots,x - //SEG49 [25] (byte/word~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy_plus_1 + //SEG49 [25] (byte/signed word/word/dword/signed dword~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy_plus_1 lda SCREEN,y clc adc #1 - //SEG50 [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte/word~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) -- pbuc1_derefidx_vbuyy=vbuaa + //SEG50 [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte/signed word/word/dword/signed dword~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) -- pbuc1_derefidx_vbuyy=vbuaa sta SCREEN,y jmp breturn //SEG51 plot::@return @@ -952,7 +952,7 @@ FINAL SYMBOL TABLE (byte) main::i#1 reg byte x 16.5 (byte) main::i#2 reg byte x 18.333333333333332 (void()) plot((byte) plot::x) -(byte/word~) plot::$0 reg byte a 4.0 +(byte/signed word/word/dword/signed dword~) plot::$0 reg byte a 4.0 (label) plot::@return (byte) plot::idx (byte) plot::idx#0 reg byte y 3.0 @@ -1065,11 +1065,11 @@ line: { plot: { //SEG48 [24] (byte) plot::idx#0 ← *((const byte*) plots#0 + (byte) plot::x#2) [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] ) -- vbuyy=pbuc1_derefidx_vbuxx ldy plots,x - //SEG49 [25] (byte/word~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy_plus_1 + //SEG49 [25] (byte/signed word/word/dword/signed dword~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy_plus_1 lda SCREEN,y clc adc #1 - //SEG50 [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte/word~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) -- pbuc1_derefidx_vbuyy=vbuaa + //SEG50 [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte/signed word/word/dword/signed dword~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) -- pbuc1_derefidx_vbuyy=vbuaa sta SCREEN,y //SEG51 plot::@return //SEG52 [27] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/const-identification.sym b/src/test/java/dk/camelot64/kickc/test/ref/const-identification.sym index e60814f10..43a20cd8f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/const-identification.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/const-identification.sym @@ -24,7 +24,7 @@ (byte) main::i#1 reg byte x 16.5 (byte) main::i#2 reg byte x 18.333333333333332 (void()) plot((byte) plot::x) -(byte/word~) plot::$0 reg byte a 4.0 +(byte/signed word/word/dword/signed dword~) plot::$0 reg byte a 4.0 (label) plot::@return (byte) plot::idx (byte) plot::idx#0 reg byte y 3.0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constantmin.log b/src/test/java/dk/camelot64/kickc/test/ref/constantmin.log index 9ad6961ef..96f4d4f3d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constantmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/constantmin.log @@ -28,8 +28,8 @@ proc (void()) main() *((byte*) BGCOL) ← (byte) RED (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 40 main::@1: - (byte/word~) main::$0 ← (byte) STAR + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*) SCREEN + (byte) main::i) ← (byte/word~) main::$0 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) STAR + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*) SCREEN + (byte) main::i) ← (byte/signed word/word/dword/signed dword~) main::$0 (byte) main::i ← ++ (byte) main::i (boolean~) main::$1 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 80 if((boolean~) main::$1) goto main::@1 @@ -48,7 +48,7 @@ SYMBOLS (byte) STAR (byte*) VIC (void()) main() -(byte/word~) main::$0 +(byte/signed word/word/dword/signed dword~) main::$0 (boolean~) main::$1 (label) main::@1 (label) main::@return @@ -73,8 +73,8 @@ main: scope:[main] from (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 40 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte/word~) main::$0 ← (byte) STAR + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*) SCREEN + (byte) main::i) ← (byte/word~) main::$0 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) STAR + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*) SCREEN + (byte) main::i) ← (byte/signed word/word/dword/signed dword~) main::$0 (byte) main::i ← ++ (byte) main::i (boolean~) main::$1 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 80 if((boolean~) main::$1) goto main::@1 @@ -115,8 +115,8 @@ main: scope:[main] from @1 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 ) - (byte/word~) main::$0 ← (byte) STAR#0 + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*) SCREEN#0 + (byte) main::i#2) ← (byte/word~) main::$0 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) STAR#0 + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*) SCREEN#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$0 (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 80 if((boolean~) main::$1) goto main::@1 @@ -156,7 +156,7 @@ SYMBOL TABLE SSA (byte*) VIC (byte*) VIC#0 (void()) main() -(byte/word~) main::$0 +(byte/signed word/word/dword/signed dword~) main::$0 (boolean~) main::$1 (label) main::@1 (label) main::@return @@ -188,7 +188,7 @@ Constant (const byte) RED#0 = 2 Constant (const byte) main::i#0 = 40 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte*) $1 = VIC#0+$0 -Constant (const byte/word) main::$0 = STAR#0+1 +Constant (const byte/signed word/word/dword/signed dword) main::$0 = STAR#0+1 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte*) BGCOL#0 = $1+1 Succesful SSA optimization Pass2ConstantIdentification diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constants.log b/src/test/java/dk/camelot64/kickc/test/ref/constants.log index 4d6b08683..89a9d907c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constants.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/constants.log @@ -17,7 +17,7 @@ void test_bytes() { assert_byte("0=0@", bb, 0); byte bc=bb+2; assert_byte("0+2=2@", bc, 2); - byte bd=(byte)(bc-4); + byte bd=(byte)((signed byte)bc-4); assert_byte("0+2-4=254@", bd, 254); } @@ -275,13 +275,14 @@ endproc // main() proc (void()) test_bytes() (byte) test_bytes::bb ← (byte/signed byte/word/signed word/dword/signed dword) 0 (void~) test_bytes::$0 ← call assert_byte (string) "0=0@" (byte) test_bytes::bb (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte/word~) test_bytes::$1 ← (byte) test_bytes::bb + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) test_bytes::bc ← (byte/word~) test_bytes::$1 + (byte/signed word/word/dword/signed dword~) test_bytes::$1 ← (byte) test_bytes::bb + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) test_bytes::bc ← (byte/signed word/word/dword/signed dword~) test_bytes::$1 (void~) test_bytes::$2 ← call assert_byte (string) "0+2=2@" (byte) test_bytes::bc (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte/signed byte/word/signed word/dword/signed dword~) test_bytes::$3 ← (byte) test_bytes::bc - (byte/signed byte/word/signed word/dword/signed dword) 4 - (byte~) test_bytes::$4 ← ((byte)) (byte/signed byte/word/signed word/dword/signed dword~) test_bytes::$3 - (byte) test_bytes::bd ← (byte~) test_bytes::$4 - (void~) test_bytes::$5 ← call assert_byte (string) "0+2-4=254@" (byte) test_bytes::bd (byte/word/signed word/dword/signed dword) 254 + (signed byte~) test_bytes::$3 ← ((signed byte)) (byte) test_bytes::bc + (signed word/signed byte/signed dword~) test_bytes::$4 ← (signed byte~) test_bytes::$3 - (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte~) test_bytes::$5 ← ((byte)) (signed word/signed byte/signed dword~) test_bytes::$4 + (byte) test_bytes::bd ← (byte~) test_bytes::$5 + (void~) test_bytes::$6 ← call assert_byte (string) "0+2-4=254@" (byte) test_bytes::bd (byte/word/signed word/dword/signed dword) 254 test_bytes::@return: return endproc // test_bytes() @@ -304,19 +305,19 @@ endproc // assert_byte() proc (void()) test_sbytes() (signed byte) test_sbytes::bb ← (byte/signed byte/word/signed word/dword/signed dword) 0 (void~) test_sbytes::$0 ← call assert_sbyte (string) "0=0@" (signed byte) test_sbytes::bb (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$1 ← (signed byte) test_sbytes::bb + (byte/signed byte/word/signed word/dword/signed dword) 2 - (signed byte) test_sbytes::bc ← (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$1 + (signed word/signed byte/signed dword~) test_sbytes::$1 ← (signed byte) test_sbytes::bb + (byte/signed byte/word/signed word/dword/signed dword) 2 + (signed byte) test_sbytes::bc ← (signed word/signed byte/signed dword~) test_sbytes::$1 (void~) test_sbytes::$2 ← call assert_sbyte (string) "0+2=2@" (signed byte) test_sbytes::bc (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$3 ← (signed byte) test_sbytes::bc - (byte/signed byte/word/signed word/dword/signed dword) 4 - (signed byte) test_sbytes::bd ← (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$3 + (signed word/signed byte/signed dword~) test_sbytes::$3 ← (signed byte) test_sbytes::bc - (byte/signed byte/word/signed word/dword/signed dword) 4 + (signed byte) test_sbytes::bd ← (signed word/signed byte/signed dword~) test_sbytes::$3 (signed byte/signed word/signed dword~) test_sbytes::$4 ← - (byte/signed byte/word/signed word/dword/signed dword) 2 (void~) test_sbytes::$5 ← call assert_sbyte (string) "0+2-4=-2@" (signed byte) test_sbytes::bd (signed byte/signed word/signed dword~) test_sbytes::$4 (signed byte~) test_sbytes::$6 ← - (signed byte) test_sbytes::bd (signed byte) test_sbytes::be ← (signed byte~) test_sbytes::$6 (void~) test_sbytes::$7 ← call assert_sbyte (string) "-(0+2-4)=2@" (signed byte) test_sbytes::be (byte/signed byte/word/signed word/dword/signed dword) 2 (signed byte/signed word/signed dword~) test_sbytes::$8 ← - (byte/signed byte/word/signed word/dword/signed dword) 127 - (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$9 ← (signed byte/signed word/signed dword~) test_sbytes::$8 - (byte/signed byte/word/signed word/dword/signed dword) 127 - (signed byte~) test_sbytes::$10 ← ((signed byte)) (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$9 + (signed word/signed byte/signed dword~) test_sbytes::$9 ← (signed byte/signed word/signed dword~) test_sbytes::$8 - (byte/signed byte/word/signed word/dword/signed dword) 127 + (signed byte~) test_sbytes::$10 ← ((signed byte)) (signed word/signed byte/signed dword~) test_sbytes::$9 (signed byte) test_sbytes::bf ← (signed byte~) test_sbytes::$10 (void~) test_sbytes::$11 ← call assert_sbyte (string) "-127-127=2@" (signed byte) test_sbytes::bf (byte/signed byte/word/signed word/dword/signed dword) 2 test_sbytes::@return: @@ -455,28 +456,29 @@ SYMBOLS (word) print_word::w (void()) test_bytes() (void~) test_bytes::$0 -(byte/word~) test_bytes::$1 +(byte/signed word/word/dword/signed dword~) test_bytes::$1 (void~) test_bytes::$2 -(byte/signed byte/word/signed word/dword/signed dword~) test_bytes::$3 -(byte~) test_bytes::$4 -(void~) test_bytes::$5 +(signed byte~) test_bytes::$3 +(signed word/signed byte/signed dword~) test_bytes::$4 +(byte~) test_bytes::$5 +(void~) test_bytes::$6 (label) test_bytes::@return (byte) test_bytes::bb (byte) test_bytes::bc (byte) test_bytes::bd (void()) test_sbytes() (void~) test_sbytes::$0 -(byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$1 +(signed word/signed byte/signed dword~) test_sbytes::$1 (signed byte~) test_sbytes::$10 (void~) test_sbytes::$11 (void~) test_sbytes::$2 -(byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$3 +(signed word/signed byte/signed dword~) test_sbytes::$3 (signed byte/signed word/signed dword~) test_sbytes::$4 (void~) test_sbytes::$5 (signed byte~) test_sbytes::$6 (void~) test_sbytes::$7 (signed byte/signed word/signed dword~) test_sbytes::$8 -(byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$9 +(signed word/signed byte/signed dword~) test_sbytes::$9 (label) test_sbytes::@return (signed byte) test_sbytes::bb (signed byte) test_sbytes::bc @@ -668,13 +670,14 @@ main::@return: scope:[main] from main test_bytes: scope:[test_bytes] from (byte) test_bytes::bb ← (byte/signed byte/word/signed word/dword/signed dword) 0 (void~) test_bytes::$0 ← call assert_byte (string) "0=0@" (byte) test_bytes::bb (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte/word~) test_bytes::$1 ← (byte) test_bytes::bb + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) test_bytes::bc ← (byte/word~) test_bytes::$1 + (byte/signed word/word/dword/signed dword~) test_bytes::$1 ← (byte) test_bytes::bb + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) test_bytes::bc ← (byte/signed word/word/dword/signed dword~) test_bytes::$1 (void~) test_bytes::$2 ← call assert_byte (string) "0+2=2@" (byte) test_bytes::bc (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte/signed byte/word/signed word/dword/signed dword~) test_bytes::$3 ← (byte) test_bytes::bc - (byte/signed byte/word/signed word/dword/signed dword) 4 - (byte~) test_bytes::$4 ← ((byte)) (byte/signed byte/word/signed word/dword/signed dword~) test_bytes::$3 - (byte) test_bytes::bd ← (byte~) test_bytes::$4 - (void~) test_bytes::$5 ← call assert_byte (string) "0+2-4=254@" (byte) test_bytes::bd (byte/word/signed word/dword/signed dword) 254 + (signed byte~) test_bytes::$3 ← ((signed byte)) (byte) test_bytes::bc + (signed word/signed byte/signed dword~) test_bytes::$4 ← (signed byte~) test_bytes::$3 - (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte~) test_bytes::$5 ← ((byte)) (signed word/signed byte/signed dword~) test_bytes::$4 + (byte) test_bytes::bd ← (byte~) test_bytes::$5 + (void~) test_bytes::$6 ← call assert_byte (string) "0+2-4=254@" (byte) test_bytes::bd (byte/word/signed word/dword/signed dword) 254 to:test_bytes::@return test_bytes::@return: scope:[test_bytes] from test_bytes return @@ -708,19 +711,19 @@ assert_byte::@return: scope:[assert_byte] from assert_byte::@2 test_sbytes: scope:[test_sbytes] from (signed byte) test_sbytes::bb ← (byte/signed byte/word/signed word/dword/signed dword) 0 (void~) test_sbytes::$0 ← call assert_sbyte (string) "0=0@" (signed byte) test_sbytes::bb (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$1 ← (signed byte) test_sbytes::bb + (byte/signed byte/word/signed word/dword/signed dword) 2 - (signed byte) test_sbytes::bc ← (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$1 + (signed word/signed byte/signed dword~) test_sbytes::$1 ← (signed byte) test_sbytes::bb + (byte/signed byte/word/signed word/dword/signed dword) 2 + (signed byte) test_sbytes::bc ← (signed word/signed byte/signed dword~) test_sbytes::$1 (void~) test_sbytes::$2 ← call assert_sbyte (string) "0+2=2@" (signed byte) test_sbytes::bc (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$3 ← (signed byte) test_sbytes::bc - (byte/signed byte/word/signed word/dword/signed dword) 4 - (signed byte) test_sbytes::bd ← (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$3 + (signed word/signed byte/signed dword~) test_sbytes::$3 ← (signed byte) test_sbytes::bc - (byte/signed byte/word/signed word/dword/signed dword) 4 + (signed byte) test_sbytes::bd ← (signed word/signed byte/signed dword~) test_sbytes::$3 (signed byte/signed word/signed dword~) test_sbytes::$4 ← - (byte/signed byte/word/signed word/dword/signed dword) 2 (void~) test_sbytes::$5 ← call assert_sbyte (string) "0+2-4=-2@" (signed byte) test_sbytes::bd (signed byte/signed word/signed dword~) test_sbytes::$4 (signed byte~) test_sbytes::$6 ← - (signed byte) test_sbytes::bd (signed byte) test_sbytes::be ← (signed byte~) test_sbytes::$6 (void~) test_sbytes::$7 ← call assert_sbyte (string) "-(0+2-4)=2@" (signed byte) test_sbytes::be (byte/signed byte/word/signed word/dword/signed dword) 2 (signed byte/signed word/signed dword~) test_sbytes::$8 ← - (byte/signed byte/word/signed word/dword/signed dword) 127 - (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$9 ← (signed byte/signed word/signed dword~) test_sbytes::$8 - (byte/signed byte/word/signed word/dword/signed dword) 127 - (signed byte~) test_sbytes::$10 ← ((signed byte)) (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$9 + (signed word/signed byte/signed dword~) test_sbytes::$9 ← (signed byte/signed word/signed dword~) test_sbytes::$8 - (byte/signed byte/word/signed word/dword/signed dword) 127 + (signed byte~) test_sbytes::$10 ← ((signed byte)) (signed word/signed byte/signed dword~) test_sbytes::$9 (signed byte) test_sbytes::bf ← (signed byte~) test_sbytes::$10 (void~) test_sbytes::$11 ← call assert_sbyte (string) "-127-127=2@" (signed byte) test_sbytes::bf (byte/signed byte/word/signed word/dword/signed dword) 2 to:test_sbytes::@return @@ -768,7 +771,7 @@ Eliminating unused variable - keeping the call (void~) main::$1 Eliminating unused variable - keeping the call (void~) main::$2 Eliminating unused variable - keeping the call (void~) test_bytes::$0 Eliminating unused variable - keeping the call (void~) test_bytes::$2 -Eliminating unused variable - keeping the call (void~) test_bytes::$5 +Eliminating unused variable - keeping the call (void~) test_bytes::$6 Eliminating unused variable - keeping the call (void~) assert_byte::$0 Eliminating unused variable - keeping the call (void~) assert_byte::$1 Eliminating unused variable - keeping the call (void~) assert_byte::$5 @@ -970,8 +973,8 @@ test_bytes::@1: scope:[test_bytes] from test_bytes (byte*) char_cursor#43 ← phi( test_bytes/(byte*) char_cursor#20 ) (byte*) char_cursor#11 ← (byte*) char_cursor#43 (byte*) line_cursor#9 ← (byte*) line_cursor#32 - (byte/word~) test_bytes::$1 ← (byte) test_bytes::bb#1 + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) test_bytes::bc#0 ← (byte/word~) test_bytes::$1 + (byte/signed word/word/dword/signed dword~) test_bytes::$1 ← (byte) test_bytes::bb#1 + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) test_bytes::bc#0 ← (byte/signed word/word/dword/signed dword~) test_bytes::$1 (byte*) assert_byte::msg#1 ← (const string) test_bytes::msg1 (byte) assert_byte::b#1 ← (byte) test_bytes::bc#0 (byte) assert_byte::c#1 ← (byte/signed byte/word/signed word/dword/signed dword) 2 @@ -983,9 +986,10 @@ test_bytes::@2: scope:[test_bytes] from test_bytes::@1 (byte*) char_cursor#44 ← phi( test_bytes::@1/(byte*) char_cursor#20 ) (byte*) char_cursor#12 ← (byte*) char_cursor#44 (byte*) line_cursor#10 ← (byte*) line_cursor#33 - (byte/signed byte/word/signed word/dword/signed dword~) test_bytes::$3 ← (byte) test_bytes::bc#1 - (byte/signed byte/word/signed word/dword/signed dword) 4 - (byte~) test_bytes::$4 ← ((byte)) (byte/signed byte/word/signed word/dword/signed dword~) test_bytes::$3 - (byte) test_bytes::bd#0 ← (byte~) test_bytes::$4 + (signed byte~) test_bytes::$3 ← ((signed byte)) (byte) test_bytes::bc#1 + (signed word/signed byte/signed dword~) test_bytes::$4 ← (signed byte~) test_bytes::$3 - (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte~) test_bytes::$5 ← ((byte)) (signed word/signed byte/signed dword~) test_bytes::$4 + (byte) test_bytes::bd#0 ← (byte~) test_bytes::$5 (byte*) assert_byte::msg#2 ← (const string) test_bytes::msg2 (byte) assert_byte::b#2 ← (byte) test_bytes::bd#0 (byte) assert_byte::c#2 ← (byte/word/signed word/dword/signed dword) 254 @@ -1088,8 +1092,8 @@ test_sbytes::@1: scope:[test_sbytes] from test_sbytes (byte*) char_cursor#53 ← phi( test_sbytes/(byte*) char_cursor#32 ) (byte*) char_cursor#21 ← (byte*) char_cursor#53 (byte*) line_cursor#15 ← (byte*) line_cursor#38 - (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$1 ← (signed byte) test_sbytes::bb#1 + (byte/signed byte/word/signed word/dword/signed dword) 2 - (signed byte) test_sbytes::bc#0 ← (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$1 + (signed word/signed byte/signed dword~) test_sbytes::$1 ← (signed byte) test_sbytes::bb#1 + (byte/signed byte/word/signed word/dword/signed dword) 2 + (signed byte) test_sbytes::bc#0 ← (signed word/signed byte/signed dword~) test_sbytes::$1 (byte*) assert_sbyte::msg#1 ← (const string) test_sbytes::msg1 (signed byte) assert_sbyte::b#1 ← (signed byte) test_sbytes::bc#0 (signed byte) assert_sbyte::c#1 ← (byte/signed byte/word/signed word/dword/signed dword) 2 @@ -1101,8 +1105,8 @@ test_sbytes::@2: scope:[test_sbytes] from test_sbytes::@1 (byte*) char_cursor#54 ← phi( test_sbytes::@1/(byte*) char_cursor#32 ) (byte*) char_cursor#22 ← (byte*) char_cursor#54 (byte*) line_cursor#16 ← (byte*) line_cursor#39 - (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$3 ← (signed byte) test_sbytes::bc#1 - (byte/signed byte/word/signed word/dword/signed dword) 4 - (signed byte) test_sbytes::bd#0 ← (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$3 + (signed word/signed byte/signed dword~) test_sbytes::$3 ← (signed byte) test_sbytes::bc#1 - (byte/signed byte/word/signed word/dword/signed dword) 4 + (signed byte) test_sbytes::bd#0 ← (signed word/signed byte/signed dword~) test_sbytes::$3 (signed byte/signed word/signed dword~) test_sbytes::$4 ← - (byte/signed byte/word/signed word/dword/signed dword) 2 (byte*) assert_sbyte::msg#2 ← (const string) test_sbytes::msg2 (signed byte) assert_sbyte::b#2 ← (signed byte) test_sbytes::bd#0 @@ -1128,8 +1132,8 @@ test_sbytes::@4: scope:[test_sbytes] from test_sbytes::@3 (byte*) char_cursor#24 ← (byte*) char_cursor#56 (byte*) line_cursor#18 ← (byte*) line_cursor#41 (signed byte/signed word/signed dword~) test_sbytes::$8 ← - (byte/signed byte/word/signed word/dword/signed dword) 127 - (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$9 ← (signed byte/signed word/signed dword~) test_sbytes::$8 - (byte/signed byte/word/signed word/dword/signed dword) 127 - (signed byte~) test_sbytes::$10 ← ((signed byte)) (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$9 + (signed word/signed byte/signed dword~) test_sbytes::$9 ← (signed byte/signed word/signed dword~) test_sbytes::$8 - (byte/signed byte/word/signed word/dword/signed dword) 127 + (signed byte~) test_sbytes::$10 ← ((signed byte)) (signed word/signed byte/signed dword~) test_sbytes::$9 (signed byte) test_sbytes::bf#0 ← (signed byte~) test_sbytes::$10 (byte*) assert_sbyte::msg#4 ← (const string) test_sbytes::msg4 (signed byte) assert_sbyte::b#4 ← (signed byte) test_sbytes::bf#0 @@ -1512,9 +1516,10 @@ SYMBOL TABLE SSA (byte*) print_str::str#8 (byte*) print_str::str#9 (void()) test_bytes() -(byte/word~) test_bytes::$1 -(byte/signed byte/word/signed word/dword/signed dword~) test_bytes::$3 -(byte~) test_bytes::$4 +(byte/signed word/word/dword/signed dword~) test_bytes::$1 +(signed byte~) test_bytes::$3 +(signed word/signed byte/signed dword~) test_bytes::$4 +(byte~) test_bytes::$5 (label) test_bytes::@1 (label) test_bytes::@2 (label) test_bytes::@3 @@ -1531,13 +1536,13 @@ SYMBOL TABLE SSA (const string) test_bytes::msg1 = (string) "0+2=2@" (const string) test_bytes::msg2 = (string) "0+2-4=254@" (void()) test_sbytes() -(byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$1 +(signed word/signed byte/signed dword~) test_sbytes::$1 (signed byte~) test_sbytes::$10 -(byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$3 +(signed word/signed byte/signed dword~) test_sbytes::$3 (signed byte/signed word/signed dword~) test_sbytes::$4 (signed byte~) test_sbytes::$6 (signed byte/signed word/signed dword~) test_sbytes::$8 -(byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$9 +(signed word/signed byte/signed dword~) test_sbytes::$9 (label) test_sbytes::@1 (label) test_sbytes::@2 (label) test_sbytes::@3 @@ -1649,10 +1654,10 @@ Alias (byte*) line_cursor#30 = (byte*) line_cursor#7 (byte*) line_cursor#31 (byt Alias (byte) test_bytes::bb#0 = (byte) test_bytes::bb#1 Alias (byte*) char_cursor#11 = (byte*) char_cursor#43 Alias (byte*) line_cursor#32 = (byte*) line_cursor#9 -Alias (byte) test_bytes::bc#0 = (byte/word~) test_bytes::$1 (byte) test_bytes::bc#1 +Alias (byte) test_bytes::bc#0 = (byte/signed word/word/dword/signed dword~) test_bytes::$1 (byte) test_bytes::bc#1 Alias (byte*) char_cursor#12 = (byte*) char_cursor#44 Alias (byte*) line_cursor#10 = (byte*) line_cursor#33 -Alias (byte) test_bytes::bd#0 = (byte~) test_bytes::$4 +Alias (byte) test_bytes::bd#0 = (byte~) test_bytes::$5 Alias (byte*) char_cursor#13 = (byte*) char_cursor#45 (byte*) char_cursor#46 (byte*) char_cursor#14 Alias (byte*) line_cursor#11 = (byte*) line_cursor#34 (byte*) line_cursor#35 (byte*) line_cursor#12 Alias (byte) assert_byte::b#3 = (byte) assert_byte::b#4 (byte) assert_byte::b#5 @@ -1667,10 +1672,10 @@ Alias (byte*) char_cursor#19 = (byte*) char_cursor#51 (byte*) char_cursor#52 (by Alias (signed byte) test_sbytes::bb#0 = (signed byte) test_sbytes::bb#1 Alias (byte*) char_cursor#21 = (byte*) char_cursor#53 Alias (byte*) line_cursor#15 = (byte*) line_cursor#38 -Alias (signed byte) test_sbytes::bc#0 = (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$1 (signed byte) test_sbytes::bc#1 +Alias (signed byte) test_sbytes::bc#0 = (signed word/signed byte/signed dword~) test_sbytes::$1 (signed byte) test_sbytes::bc#1 Alias (byte*) char_cursor#22 = (byte*) char_cursor#54 Alias (byte*) line_cursor#16 = (byte*) line_cursor#39 -Alias (signed byte) test_sbytes::bd#0 = (byte/signed byte/word/signed word/dword/signed dword~) test_sbytes::$3 (signed byte) test_sbytes::bd#1 +Alias (signed byte) test_sbytes::bd#0 = (signed word/signed byte/signed dword~) test_sbytes::$3 (signed byte) test_sbytes::bd#1 Alias (signed byte) assert_sbyte::c#2 = (signed byte/signed word/signed dword~) test_sbytes::$4 Alias (byte*) char_cursor#23 = (byte*) char_cursor#55 Alias (byte*) line_cursor#17 = (byte*) line_cursor#40 @@ -1930,19 +1935,21 @@ Constant (const signed byte) test_sbytes::bc#0 = test_sbytes::bb#0+2 Constant (const signed word/signed dword) test_sbytes::$9 = test_sbytes::$8-127 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) assert_byte::b#1 = test_bytes::bc#0 -Constant (const signed byte/signed word/signed dword) test_bytes::$3 = test_bytes::bc#0-4 +Constant (const signed byte) test_bytes::$3 = ((signed byte))test_bytes::bc#0 Constant (const signed byte) assert_sbyte::b#1 = test_sbytes::bc#0 Constant (const signed byte) test_sbytes::bd#0 = test_sbytes::bc#0-4 Constant (const signed byte) test_sbytes::bf#0 = ((signed byte))test_sbytes::$9 Succesful SSA optimization Pass2ConstantIdentification -Constant (const byte) test_bytes::bd#0 = ((byte))test_bytes::$3 +Constant (const signed byte/signed word/signed dword) test_bytes::$4 = test_bytes::$3-4 Constant (const signed byte) assert_sbyte::b#2 = test_sbytes::bd#0 Constant (const signed byte) test_sbytes::be#0 = -test_sbytes::bd#0 Constant (const signed byte) assert_sbyte::b#4 = test_sbytes::bf#0 Succesful SSA optimization Pass2ConstantIdentification -Constant (const byte) assert_byte::b#2 = test_bytes::bd#0 +Constant (const byte) test_bytes::bd#0 = ((byte))test_bytes::$4 Constant (const signed byte) assert_sbyte::b#3 = test_sbytes::be#0 Succesful SSA optimization Pass2ConstantIdentification +Constant (const byte) assert_byte::b#2 = test_bytes::bd#0 +Succesful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) @10 @@ -2059,9 +2066,10 @@ Constant inlined assert_byte::b#1 = (const byte) test_bytes::bc#0 Constant inlined assert_byte::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined assert_byte::b#2 = (const byte) test_bytes::bd#0 Constant inlined assert_byte::c#1 = (byte/signed byte/word/signed word/dword/signed dword) 2 -Constant inlined test_bytes::$3 = (const byte) test_bytes::bc#0-(byte/signed byte/word/signed word/dword/signed dword) 4 +Constant inlined test_bytes::$3 = ((signed byte))(const byte) test_bytes::bc#0 Constant inlined assert_byte::c#2 = (byte/word/signed word/dword/signed dword) 254 Constant inlined assert_sbyte::c#4 = (byte/signed byte/word/signed word/dword/signed dword) 2 +Constant inlined test_bytes::$4 = ((signed byte))(const byte) test_bytes::bc#0-(byte/signed byte/word/signed word/dword/signed dword) 4 Constant inlined assert_sbyte::b#4 = (const signed byte) test_sbytes::bf#0 Constant inlined assert_sbyte::c#3 = (byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined assert_sbyte::b#3 = (const signed byte) test_sbytes::be#0 @@ -3884,7 +3892,7 @@ FINAL SYMBOL TABLE (byte) test_bytes::bc (const byte) test_bytes::bc#0 bc = (const byte) test_bytes::bb#0+(byte/signed byte/word/signed word/dword/signed dword) 2 (byte) test_bytes::bd -(const byte) test_bytes::bd#0 bd = ((byte))(const byte) test_bytes::bc#0-(byte/signed byte/word/signed word/dword/signed dword) 4 +(const byte) test_bytes::bd#0 bd = ((byte))((signed byte))(const byte) test_bytes::bc#0-(byte/signed byte/word/signed word/dword/signed dword) 4 (const string) test_bytes::msg msg = (string) "0=0@" (const string) test_bytes::msg1 msg1 = (string) "0+2=2@" (const string) test_bytes::msg2 msg2 = (string) "0+2-4=254@" diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constants.sym b/src/test/java/dk/camelot64/kickc/test/ref/constants.sym index 8c66e2044..73ba70e60 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constants.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/constants.sym @@ -86,7 +86,7 @@ (byte) test_bytes::bc (const byte) test_bytes::bc#0 bc = (const byte) test_bytes::bb#0+(byte/signed byte/word/signed word/dword/signed dword) 2 (byte) test_bytes::bd -(const byte) test_bytes::bd#0 bd = ((byte))(const byte) test_bytes::bc#0-(byte/signed byte/word/signed word/dword/signed dword) 4 +(const byte) test_bytes::bd#0 bd = ((byte))((signed byte))(const byte) test_bytes::bc#0-(byte/signed byte/word/signed word/dword/signed dword) 4 (const string) test_bytes::msg msg = (string) "0=0@" (const string) test_bytes::msg1 msg1 = (string) "0+2=2@" (const string) test_bytes::msg2 msg2 = (string) "0+2-4=254@" diff --git a/src/test/java/dk/camelot64/kickc/test/ref/fibmem.cfg b/src/test/java/dk/camelot64/kickc/test/ref/fibmem.cfg index 5b4792a27..c968f24b7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/fibmem.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/fibmem.cfg @@ -13,8 +13,8 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 [6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) - [7] (byte/word~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) - [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte/word~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) + [7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) + [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [10] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) to:main::@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/fibmem.log b/src/test/java/dk/camelot64/kickc/test/ref/fibmem.log index fab2fc65c..7c301198d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/fibmem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/fibmem.log @@ -18,10 +18,10 @@ proc (void()) main() *((byte[15]) fibs + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 main::@1: - (byte/word~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte/word~) main::$1 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) main::$2 ← *((byte[15]) fibs + (byte) main::i) + *((byte[15]) fibs + (byte/word~) main::$1) - *((byte[15]) fibs + (byte/word~) main::$0) ← (byte/word~) main::$2 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte~) main::$2 ← *((byte[15]) fibs + (byte) main::i) + *((byte[15]) fibs + (byte/signed word/word/dword/signed dword~) main::$1) + *((byte[15]) fibs + (byte/signed word/word/dword/signed dword~) main::$0) ← (byte~) main::$2 (byte) main::i ← ++ (byte) main::i (boolean~) main::$3 ← (byte) main::i < (byte/signed byte/word/signed word/dword/signed dword) 15 if((boolean~) main::$3) goto main::@1 @@ -33,9 +33,9 @@ endproc // main() SYMBOLS (byte[15]) fibs (void()) main() -(byte/word~) main::$0 -(byte/word~) main::$1 -(byte/word~) main::$2 +(byte/signed word/word/dword/signed dword~) main::$0 +(byte/signed word/word/dword/signed dword~) main::$1 +(byte~) main::$2 (boolean~) main::$3 (label) main::@1 (label) main::@return @@ -52,10 +52,10 @@ main: scope:[main] from (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte/word~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte/word~) main::$1 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) main::$2 ← *((byte[15]) fibs + (byte) main::i) + *((byte[15]) fibs + (byte/word~) main::$1) - *((byte[15]) fibs + (byte/word~) main::$0) ← (byte/word~) main::$2 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte~) main::$2 ← *((byte[15]) fibs + (byte) main::i) + *((byte[15]) fibs + (byte/signed word/word/dword/signed dword~) main::$1) + *((byte[15]) fibs + (byte/signed word/word/dword/signed dword~) main::$0) ← (byte~) main::$2 (byte) main::i ← ++ (byte) main::i (boolean~) main::$3 ← (byte) main::i < (byte/signed byte/word/signed word/dword/signed dword) 15 if((boolean~) main::$3) goto main::@1 @@ -86,10 +86,10 @@ main: scope:[main] from @1 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 ) - (byte/word~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) main::$2 ← *((byte[15]) fibs#0 + (byte) main::i#2) + *((byte[15]) fibs#0 + (byte/word~) main::$1) - *((byte[15]) fibs#0 + (byte/word~) main::$0) ← (byte/word~) main::$2 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte~) main::$2 ← *((byte[15]) fibs#0 + (byte) main::i#2) + *((byte[15]) fibs#0 + (byte/signed word/word/dword/signed dword~) main::$1) + *((byte[15]) fibs#0 + (byte/signed word/word/dword/signed dword~) main::$0) ← (byte~) main::$2 (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word/dword/signed dword) 15 if((boolean~) main::$3) goto main::@1 @@ -112,9 +112,9 @@ SYMBOL TABLE SSA (byte[15]) fibs (byte[15]) fibs#0 (void()) main() -(byte/word~) main::$0 -(byte/word~) main::$1 -(byte/word~) main::$2 +(byte/signed word/word/dword/signed dword~) main::$0 +(byte/signed word/word/dword/signed dword~) main::$1 +(byte~) main::$2 (boolean~) main::$3 (label) main::@1 (label) main::@return @@ -140,7 +140,9 @@ Consolidated array index constant in assignment *(fibs#0+1 + main::$1) Consolidated array index constant in assignment *(fibs#0+2 + main::$0) Succesful SSA optimization Pass2ConstantAdditionElimination Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 -Alias (byte) main::i#2 = (byte/word~) main::$0 (byte/word~) main::$1 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 +Alias (byte) main::i#2 = (byte~) main::$0 (byte~) main::$1 Succesful SSA optimization Pass2AliasElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 @@ -185,8 +187,8 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 [6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) - [7] (byte/word~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) - [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte/word~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) + [7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) + [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [10] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) to:main::@return @@ -217,7 +219,7 @@ Loop head: main::@1 tails: main::@1 blocks: main::@1 depth: 1 VARIABLE REGISTER WEIGHTS (byte[15]) fibs (void()) main() -(byte/word~) main::$2 22.0 +(byte~) main::$2 22.0 (byte) main::i (byte) main::i#1 16.5 (byte) main::i#2 18.333333333333332 @@ -274,13 +276,13 @@ main: { jmp b1 //SEG15 main::@1 b1: - //SEG16 [7] (byte/word~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz2 + //SEG16 [7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz2 ldy i lda fibs,y clc adc fibs+1,y sta _2 - //SEG17 [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte/word~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 + //SEG17 [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 lda _2 ldy i sta fibs+2,y @@ -300,11 +302,11 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [5] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [7] (byte/word~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a +Statement [7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Statement [4] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [5] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [7] (byte/word~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a +Statement [7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:3 [ main::$2 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , @@ -355,11 +357,11 @@ main: { jmp b1 //SEG15 main::@1 b1: - //SEG16 [7] (byte/word~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx + //SEG16 [7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx lda fibs,x clc adc fibs+1,x - //SEG17 [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte/word~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa + //SEG17 [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa sta fibs+2,x //SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx inx @@ -400,7 +402,7 @@ FINAL SYMBOL TABLE (byte[15]) fibs (const byte*) fibs#0 fibs = ((byte*))(word/signed word/dword/signed dword) 4352 (void()) main() -(byte/word~) main::$2 reg byte a 22.0 +(byte~) main::$2 reg byte a 22.0 (label) main::@1 (label) main::@return (byte) main::i @@ -442,11 +444,11 @@ main: { //SEG14 [6] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy //SEG15 main::@1 b1: - //SEG16 [7] (byte/word~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx + //SEG16 [7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx lda fibs,x clc adc fibs+1,x - //SEG17 [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte/word~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa + //SEG17 [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa sta fibs+2,x //SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx inx diff --git a/src/test/java/dk/camelot64/kickc/test/ref/fibmem.sym b/src/test/java/dk/camelot64/kickc/test/ref/fibmem.sym index 2b5badc06..4a3e15628 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/fibmem.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/fibmem.sym @@ -4,7 +4,7 @@ (byte[15]) fibs (const byte*) fibs#0 fibs = ((byte*))(word/signed word/dword/signed dword) 4352 (void()) main() -(byte/word~) main::$2 reg byte a 22.0 +(byte~) main::$2 reg byte a 22.0 (label) main::@1 (label) main::@return (byte) main::i diff --git a/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.log b/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.log index 5b8c43e17..2829a698a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.log @@ -99,8 +99,8 @@ flip::@1: flip::@2: *((byte[256]) buffer2 + (byte) flip::dstIdx) ← *((byte[256]) buffer1 + (byte) flip::srcIdx) (byte) flip::srcIdx ← ++ (byte) flip::srcIdx - (byte/word~) flip::$0 ← (byte) flip::dstIdx + (byte/signed byte/word/signed word/dword/signed dword) 16 - (byte) flip::dstIdx ← (byte/word~) flip::$0 + (byte/signed word/word/dword/signed dword~) flip::$0 ← (byte) flip::dstIdx + (byte/signed byte/word/signed word/dword/signed dword) 16 + (byte) flip::dstIdx ← (byte/signed word/word/dword/signed dword~) flip::$0 (byte) flip::c ← -- (byte) flip::c (boolean~) flip::$1 ← (byte) flip::c != (byte/signed byte/word/signed word/dword/signed dword) 0 if((boolean~) flip::$1) goto flip::@2 @@ -148,7 +148,7 @@ SYMBOLS (byte[256]) buffer1 (byte[256]) buffer2 (void()) flip() -(byte/word~) flip::$0 +(byte/signed word/word/dword/signed dword~) flip::$0 (boolean~) flip::$1 (boolean~) flip::$2 (boolean~) flip::$3 @@ -265,8 +265,8 @@ flip::@1: scope:[flip] from flip flip::@4 flip::@2: scope:[flip] from flip::@1 flip::@2 *((byte[256]) buffer2 + (byte) flip::dstIdx) ← *((byte[256]) buffer1 + (byte) flip::srcIdx) (byte) flip::srcIdx ← ++ (byte) flip::srcIdx - (byte/word~) flip::$0 ← (byte) flip::dstIdx + (byte/signed byte/word/signed word/dword/signed dword) 16 - (byte) flip::dstIdx ← (byte/word~) flip::$0 + (byte/signed word/word/dword/signed dword~) flip::$0 ← (byte) flip::dstIdx + (byte/signed byte/word/signed word/dword/signed dword) 16 + (byte) flip::dstIdx ← (byte/signed word/word/dword/signed dword~) flip::$0 (byte) flip::c ← -- (byte) flip::c (boolean~) flip::$1 ← (byte) flip::c != (byte/signed byte/word/signed word/dword/signed dword) 0 if((boolean~) flip::$1) goto flip::@2 @@ -449,8 +449,8 @@ flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) *((byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 - (byte/word~) flip::$0 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word/dword/signed dword) 16 - (byte) flip::dstIdx#1 ← (byte/word~) flip::$0 + (byte/signed word/word/dword/signed dword~) flip::$0 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word/dword/signed dword) 16 + (byte) flip::dstIdx#1 ← (byte/signed word/word/dword/signed dword~) flip::$0 (byte) flip::c#1 ← -- (byte) flip::c#2 (boolean~) flip::$1 ← (byte) flip::c#1 != (byte/signed byte/word/signed word/dword/signed dword) 0 if((boolean~) flip::$1) goto flip::@2 @@ -562,7 +562,7 @@ SYMBOL TABLE SSA (byte[256]) buffer2 (byte[256]) buffer2#0 (void()) flip() -(byte/word~) flip::$0 +(byte/signed word/word/dword/signed dword~) flip::$0 (boolean~) flip::$1 (boolean~) flip::$2 (boolean~) flip::$3 @@ -674,7 +674,7 @@ Alias (byte*) RASTER#11 = (byte*) RASTER#4 (byte*) RASTER#7 (byte*) RASTER#2 (by Alias (byte) main::c#1 = (byte) main::c#5 Alias (byte*) SCREEN#2 = (byte*) SCREEN#8 (byte*) SCREEN#4 (byte*) SCREEN#5 (byte*) SCREEN#3 (byte*) SCREEN#9 Alias (byte) main::c#2 = (byte) main::c#3 -Alias (byte) flip::dstIdx#1 = (byte/word~) flip::$0 (byte) flip::dstIdx#4 +Alias (byte) flip::dstIdx#1 = (byte/signed word/word/dword/signed dword~) flip::$0 (byte) flip::dstIdx#4 Alias (byte) flip::r#2 = (byte) flip::r#3 Alias (byte) flip::srcIdx#1 = (byte) flip::srcIdx#4 Alias (byte*) plot::line#0 = (byte*~) plot::$2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.log b/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.log index de1ff0a49..e533101e3 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.log @@ -15,8 +15,8 @@ proc (void()) main() (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 main::@1: *((byte*) SCREEN + (byte) main::i) ← (byte) main::i - (byte/word~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) main::i ← (byte/word~) main::$0 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i ← (byte/signed word/word/dword/signed dword~) main::$0 (boolean~) main::$1 ← (byte) main::i < (byte/signed byte/word/signed word/dword/signed dword) 40 if((boolean~) main::$1) goto main::@1 main::@return: @@ -27,7 +27,7 @@ endproc // main() SYMBOLS (byte*) SCREEN (void()) main() -(byte/word~) main::$0 +(byte/signed word/word/dword/signed dword~) main::$0 (boolean~) main::$1 (label) main::@1 (label) main::@return @@ -43,8 +43,8 @@ main: scope:[main] from to:main::@1 main::@1: scope:[main] from main main::@1 *((byte*) SCREEN + (byte) main::i) ← (byte) main::i - (byte/word~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) main::i ← (byte/word~) main::$0 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i ← (byte/signed word/word/dword/signed dword~) main::$0 (boolean~) main::$1 ← (byte) main::i < (byte/signed byte/word/signed word/dword/signed dword) 40 if((boolean~) main::$1) goto main::@1 to:main::@2 @@ -77,8 +77,8 @@ main::@1: scope:[main] from main main::@1 (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) *((byte*) SCREEN#1 + (byte) main::i#2) ← (byte) main::i#2 - (byte/word~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) main::i#1 ← (byte/word~) main::$0 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#1 ← (byte/signed word/word/dword/signed dword~) main::$0 (boolean~) main::$1 ← (byte) main::i#1 < (byte/signed byte/word/signed word/dword/signed dword) 40 if((boolean~) main::$1) goto main::@1 to:main::@return @@ -104,7 +104,7 @@ SYMBOL TABLE SSA (byte*) SCREEN#2 (byte*) SCREEN#3 (void()) main() -(byte/word~) main::$0 +(byte/signed word/word/dword/signed dword~) main::$0 (boolean~) main::$1 (label) main::@1 (label) main::@return @@ -117,7 +117,7 @@ OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks Not aliassing across scopes: SCREEN#2 SCREEN#3 -Alias (byte) main::i#1 = (byte/word~) main::$0 +Alias (byte) main::i#1 = (byte/signed word/word/dword/signed dword~) main::$0 Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 Succesful SSA optimization Pass2AliasElimination Not aliassing across scopes: SCREEN#2 SCREEN#0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/halfscii.log b/src/test/java/dk/camelot64/kickc/test/ref/halfscii.log index 2bb8f1737..7f58b8d66 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/halfscii.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/halfscii.log @@ -71,8 +71,8 @@ main::@1: (boolean~) main::$7 ← (byte) main::bits >= (byte/signed byte/word/signed word/dword/signed dword) 2 (boolean~) main::$8 ← ! (boolean~) main::$7 if((boolean~) main::$8) goto main::@2 - (byte/word~) main::$9 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::bits_gen ← (byte/word~) main::$9 + (byte/signed word/word/dword/signed dword~) main::$9 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::bits_gen ← (byte/signed word/word/dword/signed dword~) main::$9 main::@2: (byte~) main::$10 ← (byte) main::bits_gen << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) main::bits_gen ← (byte~) main::$10 @@ -85,8 +85,8 @@ main::@2: (boolean~) main::$16 ← (byte) main::bits >= (byte/signed byte/word/signed word/dword/signed dword) 2 (boolean~) main::$17 ← ! (boolean~) main::$16 if((boolean~) main::$17) goto main::@3 - (byte/word~) main::$18 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::bits_gen ← (byte/word~) main::$18 + (byte/signed word/word/dword/signed dword~) main::$18 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::bits_gen ← (byte/signed word/word/dword/signed dword~) main::$18 main::@3: (byte~) main::$19 ← (byte) main::bits_gen << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) main::bits_gen ← (byte~) main::$19 @@ -99,8 +99,8 @@ main::@3: (boolean~) main::$25 ← (byte) main::bits >= (byte/signed byte/word/signed word/dword/signed dword) 2 (boolean~) main::$26 ← ! (boolean~) main::$25 if((boolean~) main::$26) goto main::@4 - (byte/word~) main::$27 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::bits_gen ← (byte/word~) main::$27 + (byte/signed word/word/dword/signed dword~) main::$27 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::bits_gen ← (byte/signed word/word/dword/signed dword~) main::$27 main::@4: (byte~) main::$28 ← (byte) main::bits_gen << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) main::bits_gen ← (byte~) main::$28 @@ -112,8 +112,8 @@ main::@4: (boolean~) main::$33 ← (byte) main::bits >= (byte/signed byte/word/signed word/dword/signed dword) 2 (boolean~) main::$34 ← ! (boolean~) main::$33 if((boolean~) main::$34) goto main::@5 - (byte/word~) main::$35 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::bits_gen ← (byte/word~) main::$35 + (byte/signed word/word/dword/signed dword~) main::$35 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::bits_gen ← (byte/signed word/word/dword/signed dword~) main::$35 main::@5: (byte~) main::$36 ← (byte) main::bits_gen << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) main::bits_gen ← (byte~) main::$36 @@ -157,7 +157,7 @@ SYMBOLS (byte~) main::$15 (boolean~) main::$16 (boolean~) main::$17 -(byte/word~) main::$18 +(byte/signed word/word/dword/signed dword~) main::$18 (byte~) main::$19 (byte~) main::$2 (byte~) main::$20 @@ -167,7 +167,7 @@ SYMBOLS (byte~) main::$24 (boolean~) main::$25 (boolean~) main::$26 -(byte/word~) main::$27 +(byte/signed word/word/dword/signed dword~) main::$27 (byte~) main::$28 (byte~) main::$29 (byte~) main::$3 @@ -176,7 +176,7 @@ SYMBOLS (byte~) main::$32 (boolean~) main::$33 (boolean~) main::$34 -(byte/word~) main::$35 +(byte/signed word/word/dword/signed dword~) main::$35 (byte~) main::$36 (byte*~) main::$37 (byte*~) main::$38 @@ -187,7 +187,7 @@ SYMBOLS (byte~) main::$6 (boolean~) main::$7 (boolean~) main::$8 -(byte/word~) main::$9 +(byte/signed word/word/dword/signed dword~) main::$9 (label) main::@1 (label) main::@2 (label) main::@3 @@ -253,8 +253,8 @@ main::@2: scope:[main] from main::@1 main::@7 if((boolean~) main::$17) goto main::@3 to:main::@8 main::@7: scope:[main] from main::@1 - (byte/word~) main::$9 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::bits_gen ← (byte/word~) main::$9 + (byte/signed word/word/dword/signed dword~) main::$9 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::bits_gen ← (byte/signed word/word/dword/signed dword~) main::$9 to:main::@2 main::@3: scope:[main] from main::@2 main::@8 (byte~) main::$19 ← (byte) main::bits_gen << (byte/signed byte/word/signed word/dword/signed dword) 1 @@ -270,8 +270,8 @@ main::@3: scope:[main] from main::@2 main::@8 if((boolean~) main::$26) goto main::@4 to:main::@9 main::@8: scope:[main] from main::@2 - (byte/word~) main::$18 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::bits_gen ← (byte/word~) main::$18 + (byte/signed word/word/dword/signed dword~) main::$18 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::bits_gen ← (byte/signed word/word/dword/signed dword~) main::$18 to:main::@3 main::@4: scope:[main] from main::@3 main::@9 (byte~) main::$28 ← (byte) main::bits_gen << (byte/signed byte/word/signed word/dword/signed dword) 1 @@ -286,8 +286,8 @@ main::@4: scope:[main] from main::@3 main::@9 if((boolean~) main::$34) goto main::@5 to:main::@10 main::@9: scope:[main] from main::@3 - (byte/word~) main::$27 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::bits_gen ← (byte/word~) main::$27 + (byte/signed word/word/dword/signed dword~) main::$27 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::bits_gen ← (byte/signed word/word/dword/signed dword~) main::$27 to:main::@4 main::@5: scope:[main] from main::@10 main::@4 (byte~) main::$36 ← (byte) main::bits_gen << (byte/signed byte/word/signed word/dword/signed dword) 1 @@ -301,8 +301,8 @@ main::@5: scope:[main] from main::@10 main::@4 if((boolean~) main::$39) goto main::@1 to:main::@11 main::@10: scope:[main] from main::@4 - (byte/word~) main::$35 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::bits_gen ← (byte/word~) main::$35 + (byte/signed word/word/dword/signed dword~) main::$35 ← (byte) main::bits_gen + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::bits_gen ← (byte/signed word/word/dword/signed dword~) main::$35 to:main::@5 main::@11: scope:[main] from main::@5 *((byte*) PROCPORT) ← (byte/signed byte/word/signed word/dword/signed dword) 55 @@ -411,8 +411,8 @@ main::@7: scope:[main] from main::@1 (byte*) main::chargen1#4 ← phi( main::@1/(byte*) main::chargen1#0 ) (byte*) main::chargen#7 ← phi( main::@1/(byte*) main::chargen#2 ) (byte) main::bits_gen#10 ← phi( main::@1/(byte) main::bits_gen#0 ) - (byte/word~) main::$9 ← (byte) main::bits_gen#10 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::bits_gen#2 ← (byte/word~) main::$9 + (byte/signed word/word/dword/signed dword~) main::$9 ← (byte) main::bits_gen#10 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::bits_gen#2 ← (byte/signed word/word/dword/signed dword~) main::$9 to:main::@2 main::@3: scope:[main] from main::@2 main::@8 (byte*) D018#7 ← phi( main::@2/(byte*) D018#9 main::@8/(byte*) D018#10 ) @@ -444,8 +444,8 @@ main::@8: scope:[main] from main::@2 (byte*) main::chargen1#5 ← phi( main::@2/(byte*) main::chargen1#1 ) (byte*) main::chargen#8 ← phi( main::@2/(byte*) main::chargen#3 ) (byte) main::bits_gen#12 ← phi( main::@2/(byte) main::bits_gen#1 ) - (byte/word~) main::$18 ← (byte) main::bits_gen#12 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::bits_gen#4 ← (byte/word~) main::$18 + (byte/signed word/word/dword/signed dword~) main::$18 ← (byte) main::bits_gen#12 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::bits_gen#4 ← (byte/signed word/word/dword/signed dword~) main::$18 to:main::@3 main::@4: scope:[main] from main::@3 main::@9 (byte*) D018#6 ← phi( main::@3/(byte*) D018#7 main::@9/(byte*) D018#8 ) @@ -476,8 +476,8 @@ main::@9: scope:[main] from main::@3 (byte*) main::chargen1#6 ← phi( main::@3/(byte*) main::chargen1#2 ) (byte*) main::chargen#9 ← phi( main::@3/(byte*) main::chargen#4 ) (byte) main::bits_gen#14 ← phi( main::@3/(byte) main::bits_gen#3 ) - (byte/word~) main::$27 ← (byte) main::bits_gen#14 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::bits_gen#6 ← (byte/word~) main::$27 + (byte/signed word/word/dword/signed dword~) main::$27 ← (byte) main::bits_gen#14 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::bits_gen#6 ← (byte/signed word/word/dword/signed dword~) main::$27 to:main::@4 main::@5: scope:[main] from main::@10 main::@4 (byte*) D018#4 ← phi( main::@10/(byte*) D018#5 main::@4/(byte*) D018#6 ) @@ -505,8 +505,8 @@ main::@10: scope:[main] from main::@4 (byte*) main::chargen#10 ← phi( main::@4/(byte*) main::chargen#5 ) (byte*) main::charset4#3 ← phi( main::@4/(byte*) main::charset4#4 ) (byte) main::bits_gen#16 ← phi( main::@4/(byte) main::bits_gen#5 ) - (byte/word~) main::$35 ← (byte) main::bits_gen#16 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::bits_gen#8 ← (byte/word~) main::$35 + (byte/signed word/word/dword/signed dword~) main::$35 ← (byte) main::bits_gen#16 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::bits_gen#8 ← (byte/signed word/word/dword/signed dword~) main::$35 to:main::@5 main::@11: scope:[main] from main::@5 (byte*) D018#3 ← phi( main::@5/(byte*) D018#4 ) @@ -624,7 +624,7 @@ SYMBOL TABLE SSA (byte~) main::$15 (boolean~) main::$16 (boolean~) main::$17 -(byte/word~) main::$18 +(byte/signed word/word/dword/signed dword~) main::$18 (byte~) main::$19 (byte~) main::$2 (byte~) main::$20 @@ -634,7 +634,7 @@ SYMBOL TABLE SSA (byte~) main::$24 (boolean~) main::$25 (boolean~) main::$26 -(byte/word~) main::$27 +(byte/signed word/word/dword/signed dword~) main::$27 (byte~) main::$28 (byte~) main::$29 (byte~) main::$3 @@ -643,7 +643,7 @@ SYMBOL TABLE SSA (byte~) main::$32 (boolean~) main::$33 (boolean~) main::$34 -(byte/word~) main::$35 +(byte/signed word/word/dword/signed dword~) main::$35 (byte~) main::$36 (byte*~) main::$37 (byte*~) main::$38 @@ -654,7 +654,7 @@ SYMBOL TABLE SSA (byte~) main::$6 (boolean~) main::$7 (boolean~) main::$8 -(byte/word~) main::$9 +(byte/signed word/word/dword/signed dword~) main::$9 (label) main::@1 (label) main::@10 (label) main::@11 @@ -752,7 +752,7 @@ Alias (byte*) CHARGEN#10 = (byte*) CHARGEN#11 Alias (byte*) PROCPORT#11 = (byte*) PROCPORT#12 Alias (byte*) SCREEN#10 = (byte*) SCREEN#11 Alias (byte*) D018#11 = (byte*) D018#12 -Alias (byte) main::bits_gen#2 = (byte/word~) main::$9 +Alias (byte) main::bits_gen#2 = (byte/signed word/word/dword/signed dword~) main::$9 Alias (byte) main::bits_gen#14 = (byte) main::bits_gen#3 (byte~) main::$19 Alias (byte*) main::chargen#3 = (byte*) main::chargen#8 Alias (byte*) main::chargen1#1 = (byte*) main::chargen1#5 @@ -761,7 +761,7 @@ Alias (byte*) CHARGEN#8 = (byte*) CHARGEN#9 Alias (byte*) PROCPORT#10 = (byte*) PROCPORT#9 Alias (byte*) SCREEN#8 = (byte*) SCREEN#9 Alias (byte*) D018#10 = (byte*) D018#9 -Alias (byte) main::bits_gen#4 = (byte/word~) main::$18 +Alias (byte) main::bits_gen#4 = (byte/signed word/word/dword/signed dword~) main::$18 Alias (byte) main::bits_gen#16 = (byte) main::bits_gen#5 (byte~) main::$28 Alias (byte*) main::chargen#4 = (byte*) main::chargen#9 Alias (byte*) main::chargen1#2 = (byte*) main::chargen1#6 @@ -770,7 +770,7 @@ Alias (byte*) CHARGEN#6 = (byte*) CHARGEN#7 Alias (byte*) PROCPORT#7 = (byte*) PROCPORT#8 Alias (byte*) SCREEN#6 = (byte*) SCREEN#7 Alias (byte*) D018#7 = (byte*) D018#8 -Alias (byte) main::bits_gen#6 = (byte/word~) main::$27 +Alias (byte) main::bits_gen#6 = (byte/signed word/word/dword/signed dword~) main::$27 Alias (byte) main::bits_gen#7 = (byte~) main::$36 Alias (byte*) main::chargen#1 = (byte*~) main::$37 Alias (byte*) main::charset4#3 = (byte*) main::charset4#4 @@ -779,7 +779,7 @@ Alias (byte*) CHARGEN#4 = (byte*) CHARGEN#5 Alias (byte*) PROCPORT#5 = (byte*) PROCPORT#6 Alias (byte*) SCREEN#4 = (byte*) SCREEN#5 Alias (byte*) D018#5 = (byte*) D018#6 -Alias (byte) main::bits_gen#8 = (byte/word~) main::$35 +Alias (byte) main::bits_gen#8 = (byte/signed word/word/dword/signed dword~) main::$35 Alias (byte*) PROCPORT#2 = (byte*) PROCPORT#4 Alias (byte*) SCREEN#2 = (byte*) SCREEN#3 Alias (byte*) D018#3 = (byte*) D018#4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/iterarray.cfg b/src/test/java/dk/camelot64/kickc/test/ref/iterarray.cfg index 0201a0b50..bdce7db5c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/iterarray.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/iterarray.cfg @@ -12,8 +12,8 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 5 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) - [6] (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) - [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/word~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) + [6] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) + [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) [8] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [9] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) to:main::@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/iterarray.log b/src/test/java/dk/camelot64/kickc/test/ref/iterarray.log index 0ec669aa0..d6635f4af 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/iterarray.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/iterarray.log @@ -13,11 +13,11 @@ proc (void()) main() (byte[16]) main::buf ← (word/signed word/dword/signed dword) 4352 (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 5 main::@1: - (byte/word~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i - (byte/word~) main::$1 ← (byte/word~) main::$0 + (byte/signed byte/word/signed word/dword/signed dword) 2 - *((byte[16]) main::buf + (byte) main::i) ← (byte/word~) main::$1 - (byte/word~) main::$2 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::i ← (byte/word~) main::$2 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i + (byte/signed word/word/dword/signed dword~) main::$1 ← (byte/signed word/word/dword/signed dword~) main::$0 + (byte/signed byte/word/signed word/dword/signed dword) 2 + *((byte[16]) main::buf + (byte) main::i) ← (byte/signed word/word/dword/signed dword~) main::$1 + (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i ← (byte/signed word/word/dword/signed dword~) main::$2 (boolean~) main::$3 ← (byte) main::i < (byte/signed byte/word/signed word/dword/signed dword) 10 if((boolean~) main::$3) goto main::@1 main::@return: @@ -27,9 +27,9 @@ endproc // main() SYMBOLS (void()) main() -(byte/word~) main::$0 -(byte/word~) main::$1 -(byte/word~) main::$2 +(byte/signed word/word/dword/signed dword~) main::$0 +(byte/signed word/word/dword/signed dword~) main::$1 +(byte/signed word/word/dword/signed dword~) main::$2 (boolean~) main::$3 (label) main::@1 (label) main::@return @@ -45,11 +45,11 @@ main: scope:[main] from (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 5 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte/word~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i - (byte/word~) main::$1 ← (byte/word~) main::$0 + (byte/signed byte/word/signed word/dword/signed dword) 2 - *((byte[16]) main::buf + (byte) main::i) ← (byte/word~) main::$1 - (byte/word~) main::$2 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::i ← (byte/word~) main::$2 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i + (byte/signed word/word/dword/signed dword~) main::$1 ← (byte/signed word/word/dword/signed dword~) main::$0 + (byte/signed byte/word/signed word/dword/signed dword) 2 + *((byte[16]) main::buf + (byte) main::i) ← (byte/signed word/word/dword/signed dword~) main::$1 + (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i ← (byte/signed word/word/dword/signed dword~) main::$2 (boolean~) main::$3 ← (byte) main::i < (byte/signed byte/word/signed word/dword/signed dword) 10 if((boolean~) main::$3) goto main::@1 to:main::@2 @@ -77,11 +77,11 @@ main: scope:[main] from @1 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 ) - (byte/word~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2 - (byte/word~) main::$1 ← (byte/word~) main::$0 + (byte/signed byte/word/signed word/dword/signed dword) 2 - *((byte[16]) main::buf#0 + (byte) main::i#2) ← (byte/word~) main::$1 - (byte/word~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::i#1 ← (byte/word~) main::$2 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2 + (byte/signed word/word/dword/signed dword~) main::$1 ← (byte/signed word/word/dword/signed dword~) main::$0 + (byte/signed byte/word/signed word/dword/signed dword) 2 + *((byte[16]) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 + (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#1 ← (byte/signed word/word/dword/signed dword~) main::$2 (boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word/dword/signed dword) 10 if((boolean~) main::$3) goto main::@1 to:main::@return @@ -101,9 +101,9 @@ SYMBOL TABLE SSA (label) @begin (label) @end (void()) main() -(byte/word~) main::$0 -(byte/word~) main::$1 -(byte/word~) main::$2 +(byte/signed word/word/dword/signed dword~) main::$0 +(byte/signed word/word/dword/signed dword~) main::$1 +(byte/signed word/word/dword/signed dword~) main::$2 (boolean~) main::$3 (label) main::@1 (label) main::@return @@ -117,7 +117,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks -Alias (byte) main::i#1 = (byte/word~) main::$2 +Alias (byte) main::i#1 = (byte/signed word/word/dword/signed dword~) main::$2 Succesful SSA optimization Pass2AliasElimination Simple Condition (boolean~) main::$3 if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@1 Succesful SSA optimization Pass2ConditionalJumpSimplification @@ -131,7 +131,8 @@ Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 Succesful SSA optimization Pass2ConstantAdditionElimination Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 -Alias (byte) main::i#2 = (byte/word~) main::$0 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i#2 +Alias (byte) main::i#2 = (byte~) main::$0 Succesful SSA optimization Pass2AliasElimination Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 @@ -183,8 +184,8 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 5 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) - [6] (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) - [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/word~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) + [6] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) + [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) [8] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [9] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) to:main::@return @@ -214,7 +215,7 @@ Loop head: main::@1 tails: main::@1 blocks: main::@1 depth: 1 VARIABLE REGISTER WEIGHTS (void()) main() -(byte/word~) main::$1 22.0 +(byte/signed word/word/dword/signed dword~) main::$1 22.0 (byte[16]) main::buf (byte) main::i (byte) main::i#1 16.5 @@ -268,12 +269,12 @@ main: { jmp b1 //SEG14 main::@1 b1: - //SEG15 [6] (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuz1=vbuz2_plus_vbuc1 + //SEG15 [6] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuz1=vbuz2_plus_vbuc1 lda #2+2 clc adc i sta _1 - //SEG16 [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/word~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 + //SEG16 [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 lda _1 ldy i sta buf,y @@ -291,9 +292,9 @@ main: { } REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) always clobbers reg byte a +Statement [6] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Statement [6] (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) always clobbers reg byte a +Statement [6] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:3 [ main::$1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , @@ -340,11 +341,11 @@ main: { jmp b1 //SEG14 main::@1 b1: - //SEG15 [6] (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuaa=vbuxx_plus_vbuc1 + //SEG15 [6] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuaa=vbuxx_plus_vbuc1 txa clc adc #2+2 - //SEG16 [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/word~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa + //SEG16 [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa sta buf,x //SEG17 [8] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=vbuxx_plus_1 inx @@ -384,7 +385,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (void()) main() -(byte/word~) main::$1 reg byte a 22.0 +(byte/signed word/word/dword/signed dword~) main::$1 reg byte a 22.0 (label) main::@1 (label) main::@return (byte[16]) main::buf @@ -423,11 +424,11 @@ main: { //SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy //SEG14 main::@1 b1: - //SEG15 [6] (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuaa=vbuxx_plus_vbuc1 + //SEG15 [6] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuaa=vbuxx_plus_vbuc1 txa clc adc #2+2 - //SEG16 [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/word~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa + //SEG16 [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa sta buf,x //SEG17 [8] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=vbuxx_plus_1 inx diff --git a/src/test/java/dk/camelot64/kickc/test/ref/iterarray.sym b/src/test/java/dk/camelot64/kickc/test/ref/iterarray.sym index abc1a7668..f90e26f7a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/iterarray.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/iterarray.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (void()) main() -(byte/word~) main::$1 reg byte a 22.0 +(byte/signed word/word/dword/signed dword~) main::$1 reg byte a 22.0 (label) main::@1 (label) main::@return (byte[16]) main::buf diff --git a/src/test/java/dk/camelot64/kickc/test/ref/linegen.log b/src/test/java/dk/camelot64/kickc/test/ref/linegen.log index dc154875e..c2e363491 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/linegen.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/linegen.log @@ -319,8 +319,8 @@ divr8u::@1: (boolean~) divr8u::$2 ← (byte~) divr8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr8u::$3 ← ! (boolean~) divr8u::$2 if((boolean~) divr8u::$3) goto divr8u::@2 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 divr8u::@2: (byte~) divr8u::$5 ← (byte) divr8u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) divr8u::dividend ← (byte~) divr8u::$5 @@ -330,8 +330,8 @@ divr8u::@2: (boolean~) divr8u::$8 ← ! (boolean~) divr8u::$7 if((boolean~) divr8u::$8) goto divr8u::@3 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 divr8u::@3: (byte) divr8u::i ← ++ (byte) divr8u::i (boolean~) divr8u::$10 ← (byte) divr8u::i != (byte/signed byte/word/signed word/dword/signed dword) 8 @@ -355,8 +355,8 @@ divr16u::@1: (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr16u::$4 ← ! (boolean~) divr16u::$3 if((boolean~) divr16u::$4) goto divr16u::@2 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 divr16u::@2: (word~) divr16u::$6 ← (word) divr16u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::dividend ← (word~) divr16u::$6 @@ -424,8 +424,8 @@ div8s::@2: (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 goto div8s::@4 div8s::@3: (byte~) div8s::$10 ← ((byte)) (signed byte) div8s::divisor @@ -478,8 +478,8 @@ div16s::@2: (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 goto div16s::@4 div16s::@3: (word~) div16s::$10 ← ((word)) (signed word) div16s::divisor @@ -644,8 +644,8 @@ main::@1: (void~) main::$16 ← call print_str (string) " @" (void~) main::$17 ← call print_word *((word[20]) main::lintab3 + (byte) main::i) (void~) main::$18 ← call print_ln - (byte/word~) main::$19 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) main::i ← (byte/word~) main::$19 + (byte/signed word/word/dword/signed dword~) main::$19 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i ← (byte/signed word/word/dword/signed dword~) main::$19 (byte/signed byte/word/signed word/dword/signed dword~) main::$20 ← (byte/signed byte/word/signed word/dword/signed dword) 20 * (byte/signed byte/word/signed word/dword/signed dword) 2 (boolean~) main::$21 ← (byte) main::i < (byte/signed byte/word/signed word/dword/signed dword~) main::$20 if((boolean~) main::$21) goto main::@1 @@ -662,11 +662,11 @@ endproc // main() proc (void()) lin16u_gen((word) lin16u_gen::min , (word) lin16u_gen::max , (word*) lin16u_gen::lintab , (word) lin16u_gen::length) (word~) lin16u_gen::$0 ← (word) lin16u_gen::max - (word) lin16u_gen::min (word) lin16u_gen::ampl ← (word~) lin16u_gen::$0 - (word~) lin16u_gen::$1 ← (word) lin16u_gen::length - (byte/signed byte/word/signed word/dword/signed dword) 1 - (word~) lin16u_gen::$2 ← call divr16u (word) lin16u_gen::ampl (word~) lin16u_gen::$1 (byte/signed byte/word/signed word/dword/signed dword) 0 + (word/signed dword/dword~) lin16u_gen::$1 ← (word) lin16u_gen::length - (byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) lin16u_gen::$2 ← call divr16u (word) lin16u_gen::ampl (word/signed dword/dword~) lin16u_gen::$1 (byte/signed byte/word/signed word/dword/signed dword) 0 (word) lin16u_gen::stepi ← (word~) lin16u_gen::$2 - (word~) lin16u_gen::$3 ← (word) lin16u_gen::length - (byte/signed byte/word/signed word/dword/signed dword) 1 - (word~) lin16u_gen::$4 ← call divr16u (byte/signed byte/word/signed word/dword/signed dword) 0 (word~) lin16u_gen::$3 (word) rem16u + (word/signed dword/dword~) lin16u_gen::$3 ← (word) lin16u_gen::length - (byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) lin16u_gen::$4 ← call divr16u (byte/signed byte/word/signed word/dword/signed dword) 0 (word/signed dword/dword~) lin16u_gen::$3 (word) rem16u (word) lin16u_gen::stepf ← (word~) lin16u_gen::$4 (dword) lin16u_gen::step ← { (word) lin16u_gen::stepi, (word) lin16u_gen::stepf } (dword) lin16u_gen::val ← { (word) lin16u_gen::min, (byte/signed byte/word/signed word/dword/signed dword) 0 } @@ -709,7 +709,7 @@ SYMBOLS (boolean~) div16s::$6 (signed word~) div16s::$7 (word~) div16s::$8 -(byte~) div16s::$9 +(byte/word/dword~) div16s::$9 (label) div16s::@1 (label) div16s::@2 (label) div16s::@3 @@ -762,7 +762,7 @@ SYMBOLS (boolean~) div8s::$6 (signed byte~) div8s::$7 (byte~) div8s::$8 -(byte~) div8s::$9 +(byte/word/dword~) div8s::$9 (label) div8s::@1 (label) div8s::@2 (label) div8s::@3 @@ -791,7 +791,7 @@ SYMBOLS (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -812,12 +812,12 @@ SYMBOLS (boolean~) divr8u::$10 (boolean~) divr8u::$2 (boolean~) divr8u::$3 -(byte~) divr8u::$4 +(byte/word/dword~) divr8u::$4 (byte~) divr8u::$5 (byte~) divr8u::$6 (boolean~) divr8u::$7 (boolean~) divr8u::$8 -(byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 +(byte~) divr8u::$9 (label) divr8u::@1 (label) divr8u::@2 (label) divr8u::@3 @@ -830,9 +830,9 @@ SYMBOLS (byte) divr8u::return (void()) lin16u_gen((word) lin16u_gen::min , (word) lin16u_gen::max , (word*) lin16u_gen::lintab , (word) lin16u_gen::length) (word~) lin16u_gen::$0 -(word~) lin16u_gen::$1 +(word/signed dword/dword~) lin16u_gen::$1 (word~) lin16u_gen::$2 -(word~) lin16u_gen::$3 +(word/signed dword/dword~) lin16u_gen::$3 (word~) lin16u_gen::$4 (word~) lin16u_gen::$5 (dword~) lin16u_gen::$6 @@ -863,7 +863,7 @@ SYMBOLS (void~) main::$16 (void~) main::$17 (void~) main::$18 -(byte/word~) main::$19 +(byte/signed word/word/dword/signed dword~) main::$19 (void~) main::$2 (byte/signed byte/word/signed word/dword/signed dword~) main::$20 (boolean~) main::$21 @@ -1004,8 +1004,8 @@ divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4 if((boolean~) divr8u::$8) goto divr8u::@3 to:divr8u::@5 divr8u::@4: scope:[divr8u] from divr8u::@1 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 to:divr8u::@2 divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 (byte) divr8u::i ← ++ (byte) divr8u::i @@ -1014,8 +1014,8 @@ divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 to:divr8u::@6 divr8u::@5: scope:[divr8u] from divr8u::@2 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 to:divr8u::@3 divr8u::@6: scope:[divr8u] from divr8u::@3 (byte) rem8u ← (byte) divr8u::rem @@ -1053,8 +1053,8 @@ divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 if((boolean~) divr16u::$9) goto divr16u::@3 to:divr16u::@5 divr16u::@4: scope:[divr16u] from divr16u::@1 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (byte) divr16u::i ← ++ (byte) divr16u::i @@ -1142,8 +1142,8 @@ div8s::@9: scope:[div8s] from div8s::@2 (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 to:div8s::@4 div8s::@4: scope:[div8s] from div8s::@3 div8s::@9 (byte~) div8s::$11 ← call div8u (byte) div8s::dividendu (byte) div8s::divisoru @@ -1216,8 +1216,8 @@ div16s::@9: scope:[div16s] from div16s::@2 (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 to:div16s::@4 div16s::@4: scope:[div16s] from div16s::@3 div16s::@9 (word~) div16s::$11 ← call div16u (word) div16s::dividendu (word) div16s::divisoru @@ -1444,8 +1444,8 @@ main::@1: scope:[main] from main main::@1 (void~) main::$16 ← call print_str (string) " @" (void~) main::$17 ← call print_word *((word[20]) main::lintab3 + (byte) main::i) (void~) main::$18 ← call print_ln - (byte/word~) main::$19 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) main::i ← (byte/word~) main::$19 + (byte/signed word/word/dword/signed dword~) main::$19 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i ← (byte/signed word/word/dword/signed dword~) main::$19 (byte/signed byte/word/signed word/dword/signed dword~) main::$20 ← (byte/signed byte/word/signed word/dword/signed dword) 20 * (byte/signed byte/word/signed word/dword/signed dword) 2 (boolean~) main::$21 ← (byte) main::i < (byte/signed byte/word/signed word/dword/signed dword~) main::$20 if((boolean~) main::$21) goto main::@1 @@ -1467,11 +1467,11 @@ main::@return: scope:[main] from main::@2 lin16u_gen: scope:[lin16u_gen] from (word~) lin16u_gen::$0 ← (word) lin16u_gen::max - (word) lin16u_gen::min (word) lin16u_gen::ampl ← (word~) lin16u_gen::$0 - (word~) lin16u_gen::$1 ← (word) lin16u_gen::length - (byte/signed byte/word/signed word/dword/signed dword) 1 - (word~) lin16u_gen::$2 ← call divr16u (word) lin16u_gen::ampl (word~) lin16u_gen::$1 (byte/signed byte/word/signed word/dword/signed dword) 0 + (word/signed dword/dword~) lin16u_gen::$1 ← (word) lin16u_gen::length - (byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) lin16u_gen::$2 ← call divr16u (word) lin16u_gen::ampl (word/signed dword/dword~) lin16u_gen::$1 (byte/signed byte/word/signed word/dword/signed dword) 0 (word) lin16u_gen::stepi ← (word~) lin16u_gen::$2 - (word~) lin16u_gen::$3 ← (word) lin16u_gen::length - (byte/signed byte/word/signed word/dword/signed dword) 1 - (word~) lin16u_gen::$4 ← call divr16u (byte/signed byte/word/signed word/dword/signed dword) 0 (word~) lin16u_gen::$3 (word) rem16u + (word/signed dword/dword~) lin16u_gen::$3 ← (word) lin16u_gen::length - (byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) lin16u_gen::$4 ← call divr16u (byte/signed byte/word/signed word/dword/signed dword) 0 (word/signed dword/dword~) lin16u_gen::$3 (word) rem16u (word) lin16u_gen::stepf ← (word~) lin16u_gen::$4 (dword) lin16u_gen::step ← { (word) lin16u_gen::stepi, (word) lin16u_gen::stepf } (dword) lin16u_gen::val ← { (word) lin16u_gen::min, (byte/signed byte/word/signed word/dword/signed dword) 0 } @@ -1662,8 +1662,8 @@ divr16u::@4: scope:[divr16u] from divr16u::@1 (word) divr16u::quotient#7 ← phi( divr16u::@1/(word) divr16u::quotient#6 ) (word) divr16u::dividend#7 ← phi( divr16u::@1/(word) divr16u::dividend#3 ) (word) divr16u::rem#7 ← phi( divr16u::@1/(word) divr16u::rem#0 ) - (word~) divr16u::$5 ← (word) divr16u::rem#7 | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem#1 ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem#7 | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem#1 ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#7 ← phi( divr16u::@2/(word) divr16u::divisor#2 divr16u::@5/(word) divr16u::divisor#3 ) @@ -2014,8 +2014,8 @@ main::@21: scope:[main] from main::@20 (byte*) line_cursor#17 ← phi( main::@20/(byte*) line_cursor#2 ) (byte*) line_cursor#7 ← (byte*) line_cursor#17 (byte*) char_cursor#30 ← (byte*) char_cursor#68 - (byte/word~) main::$19 ← (byte) main::i#6 + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) main::i#1 ← (byte/word~) main::$19 + (byte/signed word/word/dword/signed dword~) main::$19 ← (byte) main::i#6 + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#1 ← (byte/signed word/word/dword/signed dword~) main::$19 (byte/signed byte/word/signed word/dword/signed dword~) main::$20 ← (byte/signed byte/word/signed word/dword/signed dword) 20 * (byte/signed byte/word/signed word/dword/signed dword) 2 (boolean~) main::$21 ← (byte) main::i#1 < (byte/signed byte/word/signed word/dword/signed dword~) main::$20 if((boolean~) main::$21) goto main::@1 @@ -2098,9 +2098,9 @@ lin16u_gen: scope:[lin16u_gen] from main main::@3 main::@4 (word) lin16u_gen::max#3 ← phi( main/(word) lin16u_gen::max#0 main::@3/(word) lin16u_gen::max#1 main::@4/(word) lin16u_gen::max#2 ) (word~) lin16u_gen::$0 ← (word) lin16u_gen::max#3 - (word) lin16u_gen::min#3 (word) lin16u_gen::ampl#0 ← (word~) lin16u_gen::$0 - (word~) lin16u_gen::$1 ← (word) lin16u_gen::length#3 - (byte/signed byte/word/signed word/dword/signed dword) 1 + (word/signed dword/dword~) lin16u_gen::$1 ← (word) lin16u_gen::length#3 - (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::dividend#1 ← (word) lin16u_gen::ampl#0 - (word) divr16u::divisor#0 ← (word~) lin16u_gen::$1 + (word) divr16u::divisor#0 ← (word/signed dword/dword~) lin16u_gen::$1 (word) divr16u::rem#3 ← (byte/signed byte/word/signed word/dword/signed dword) 0 call divr16u param-assignment (word) divr16u::return#2 ← (word) divr16u::return#1 @@ -2114,9 +2114,9 @@ lin16u_gen::@3: scope:[lin16u_gen] from lin16u_gen (word~) lin16u_gen::$2 ← (word) divr16u::return#5 (word) rem16u#7 ← (word) rem16u#16 (word) lin16u_gen::stepi#0 ← (word~) lin16u_gen::$2 - (word~) lin16u_gen::$3 ← (word) lin16u_gen::length#4 - (byte/signed byte/word/signed word/dword/signed dword) 1 + (word/signed dword/dword~) lin16u_gen::$3 ← (word) lin16u_gen::length#4 - (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::dividend#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (word) divr16u::divisor#1 ← (word~) lin16u_gen::$3 + (word) divr16u::divisor#1 ← (word/signed dword/dword~) lin16u_gen::$3 (word) divr16u::rem#4 ← (word) rem16u#7 call divr16u param-assignment (word) divr16u::return#3 ← (word) divr16u::return#1 @@ -2281,7 +2281,7 @@ SYMBOL TABLE SSA (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -2353,9 +2353,9 @@ SYMBOL TABLE SSA (word) divr16u::return#6 (void()) lin16u_gen((word) lin16u_gen::min , (word) lin16u_gen::max , (word*) lin16u_gen::lintab , (word) lin16u_gen::length) (word~) lin16u_gen::$0 -(word~) lin16u_gen::$1 +(word/signed dword/dword~) lin16u_gen::$1 (word~) lin16u_gen::$2 -(word~) lin16u_gen::$3 +(word/signed dword/dword~) lin16u_gen::$3 (word~) lin16u_gen::$4 (word~) lin16u_gen::$5 (dword~) lin16u_gen::$6 @@ -2462,7 +2462,7 @@ SYMBOL TABLE SSA (byte*) line_cursor#8 (byte*) line_cursor#9 (void()) main() -(byte/word~) main::$19 +(byte/signed word/word/dword/signed dword~) main::$19 (byte/signed byte/word/signed word/dword/signed dword~) main::$20 (boolean~) main::$21 (label) main::@1 @@ -2734,7 +2734,7 @@ Alias (word) divr16u::dividend#3 = (word) divr16u::dividend#7 Alias (word) divr16u::quotient#6 = (word) divr16u::quotient#7 Alias (word) divr16u::divisor#4 = (word) divr16u::divisor#5 Alias (byte) divr16u::i#5 = (byte) divr16u::i#6 -Alias (word) divr16u::rem#1 = (word~) divr16u::$5 +Alias (word) divr16u::rem#1 = (word/dword~) divr16u::$5 Alias (word) divr16u::rem#6 = (word) divr16u::rem#8 Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#3 Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 @@ -2784,7 +2784,7 @@ Alias (byte*) char_cursor#28 = (byte*) char_cursor#66 Alias (byte*) char_cursor#29 = (byte*) char_cursor#67 Alias (byte*) line_cursor#17 = (byte*) line_cursor#7 (byte*) line_cursor#46 (byte*) line_cursor#44 (byte*) line_cursor#41 (byte*) line_cursor#38 (byte*) line_cursor#34 (byte*) line_cursor#30 (byte*) line_cursor#25 Alias (byte*) char_cursor#30 = (byte*) char_cursor#68 (byte*) char_cursor#84 -Alias (byte) main::i#1 = (byte/word~) main::$19 +Alias (byte) main::i#1 = (byte/signed word/word/dword/signed dword~) main::$19 Alias (byte*) char_cursor#31 = (byte*) char_cursor#69 Alias (byte*) char_cursor#32 = (byte*) char_cursor#70 Alias (byte*) char_cursor#33 = (byte*) char_cursor#71 @@ -2794,14 +2794,14 @@ Alias (byte*) char_cursor#36 = (byte*) char_cursor#74 Alias (byte*) line_cursor#18 = (byte*) line_cursor#8 (byte*) line_cursor#19 (byte*) line_cursor#9 Alias (byte*) char_cursor#37 = (byte*) char_cursor#75 (byte*) char_cursor#76 (byte*) char_cursor#38 Alias (word) lin16u_gen::ampl#0 = (word~) lin16u_gen::$0 -Alias (word) divr16u::divisor#0 = (word~) lin16u_gen::$1 +Alias (word) divr16u::divisor#0 = (word/signed dword/dword~) lin16u_gen::$1 Alias (word) divr16u::return#2 = (word) divr16u::return#5 Alias (word) lin16u_gen::length#3 = (word) lin16u_gen::length#4 (word) lin16u_gen::length#6 Alias (word) lin16u_gen::min#3 = (word) lin16u_gen::min#5 (word) lin16u_gen::min#4 Alias (word*) lin16u_gen::lintab#5 = (word*) lin16u_gen::lintab#6 (word*) lin16u_gen::lintab#7 Alias (word) rem16u#16 = (word) rem16u#7 Alias (word) lin16u_gen::stepi#0 = (word~) lin16u_gen::$2 (word) lin16u_gen::stepi#1 -Alias (word) divr16u::divisor#1 = (word~) lin16u_gen::$3 +Alias (word) divr16u::divisor#1 = (word/signed dword/dword~) lin16u_gen::$3 Alias (word) divr16u::return#3 = (word) divr16u::return#6 Alias (word) rem16u#17 = (word) rem16u#8 Alias (word) lin16u_gen::stepf#0 = (word~) lin16u_gen::$4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/literals.log b/src/test/java/dk/camelot64/kickc/test/ref/literals.log index b23a0bd58..adbacbe06 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/literals.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/literals.log @@ -28,10 +28,10 @@ proc (void()) main() *((byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) num (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 main::@1: - (byte/word~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) main::i - *((byte*) SCREEN + (byte/word~) main::$0) ← *((byte[]) str + (byte) main::i) - (byte/word~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 9 + (byte) main::i - *((byte*) SCREEN + (byte/word~) main::$1) ← *((byte[]) nums + (byte) main::i) + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) main::i + *((byte*) SCREEN + (byte/signed word/word/dword/signed dword~) main::$0) ← *((byte[]) str + (byte) main::i) + (byte/signed word/word/dword/signed dword~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 9 + (byte) main::i + *((byte*) SCREEN + (byte/signed word/word/dword/signed dword~) main::$1) ← *((byte[]) nums + (byte) main::i) (byte) main::i ← ++ (byte) main::i (boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 4 if((boolean~) main::$2) goto main::@1 @@ -46,8 +46,8 @@ SYMBOLS (byte*) SCREEN (byte) char (void()) main() -(byte/word~) main::$0 -(byte/word~) main::$1 +(byte/signed word/word/dword/signed dword~) main::$0 +(byte/signed word/word/dword/signed dword~) main::$1 (boolean~) main::$2 (label) main::@1 (label) main::@return @@ -73,10 +73,10 @@ main: scope:[main] from (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte/word~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) main::i - *((byte*) SCREEN + (byte/word~) main::$0) ← *((byte[]) str + (byte) main::i) - (byte/word~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 9 + (byte) main::i - *((byte*) SCREEN + (byte/word~) main::$1) ← *((byte[]) nums + (byte) main::i) + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) main::i + *((byte*) SCREEN + (byte/signed word/word/dword/signed dword~) main::$0) ← *((byte[]) str + (byte) main::i) + (byte/signed word/word/dword/signed dword~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 9 + (byte) main::i + *((byte*) SCREEN + (byte/signed word/word/dword/signed dword~) main::$1) ← *((byte[]) nums + (byte) main::i) (byte) main::i ← ++ (byte) main::i (boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 4 if((boolean~) main::$2) goto main::@1 @@ -120,10 +120,10 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@1 (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#1 main::@1/(byte*) SCREEN#2 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte/word~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) main::i#2 - *((byte*) SCREEN#2 + (byte/word~) main::$0) ← *((byte[]) str#0 + (byte) main::i#2) - (byte/word~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 9 + (byte) main::i#2 - *((byte*) SCREEN#2 + (byte/word~) main::$1) ← *((byte[]) nums#0 + (byte) main::i#2) + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) main::i#2 + *((byte*) SCREEN#2 + (byte/signed word/word/dword/signed dword~) main::$0) ← *((byte[]) str#0 + (byte) main::i#2) + (byte/signed word/word/dword/signed dword~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 9 + (byte) main::i#2 + *((byte*) SCREEN#2 + (byte/signed word/word/dword/signed dword~) main::$1) ← *((byte[]) nums#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 4 if((boolean~) main::$2) goto main::@1 @@ -160,8 +160,8 @@ SYMBOL TABLE SSA (byte) char#1 (byte) char#2 (void()) main() -(byte/word~) main::$0 -(byte/word~) main::$1 +(byte/signed word/word/dword/signed dword~) main::$0 +(byte/signed word/word/dword/signed dword~) main::$1 (boolean~) main::$2 (label) main::@1 (label) main::@return @@ -221,11 +221,13 @@ Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 Succesful SSA optimization Pass2ConstantAdditionElimination Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 Eliminating unused constant (const string) $2 Eliminating unused constant (const string) $3 Eliminating unused constant (const string) $0 Succesful SSA optimization PassNEliminateUnusedVars -Alias (byte) main::i#2 = (byte/word~) main::$0 (byte/word~) main::$1 +Alias (byte) main::i#2 = (byte~) main::$0 (byte~) main::$1 Succesful SSA optimization Pass2AliasElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/liverange.log b/src/test/java/dk/camelot64/kickc/test/ref/liverange.log index bad25b63c..df1061475 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/liverange.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/liverange.log @@ -20,11 +20,11 @@ STATEMENTS proc (void()) main() (byte) main::a ← (byte/signed byte/word/signed word/dword/signed dword) 4 (byte~) main::$0 ← call inci - (byte/word~) main::$1 ← (byte) main::a + (byte~) main::$0 - (byte) main::a ← (byte/word~) main::$1 + (byte~) main::$1 ← (byte) main::a + (byte~) main::$0 + (byte) main::a ← (byte~) main::$1 (byte~) main::$2 ← call inci - (byte/word~) main::$3 ← (byte) main::a + (byte~) main::$2 - (byte) main::a ← (byte/word~) main::$3 + (byte~) main::$3 ← (byte) main::a + (byte~) main::$2 + (byte) main::a ← (byte~) main::$3 (byte*) main::SCREEN ← (word/signed word/dword/signed dword) 1024 *((byte*) main::SCREEN) ← (byte) i (byte*~) main::$4 ← (byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1 @@ -33,8 +33,8 @@ main::@return: return endproc // main() proc (byte()) inci() - (byte/word~) inci::$0 ← (byte) i + (byte/signed byte/word/signed word/dword/signed dword) 7 - (byte) i ← (byte/word~) inci::$0 + (byte/signed word/word/dword/signed dword~) inci::$0 ← (byte) i + (byte/signed byte/word/signed word/dword/signed dword) 7 + (byte) i ← (byte/signed word/word/dword/signed dword~) inci::$0 (byte) inci::return ← (byte) i goto inci::@return inci::@return: @@ -46,14 +46,14 @@ endproc // inci() SYMBOLS (byte) i (byte()) inci() -(byte/word~) inci::$0 +(byte/signed word/word/dword/signed dword~) inci::$0 (label) inci::@return (byte) inci::return (void()) main() (byte~) main::$0 -(byte/word~) main::$1 +(byte~) main::$1 (byte~) main::$2 -(byte/word~) main::$3 +(byte~) main::$3 (byte*~) main::$4 (label) main::@return (byte*) main::SCREEN @@ -67,11 +67,11 @@ INITIAL CONTROL FLOW GRAPH main: scope:[main] from (byte) main::a ← (byte/signed byte/word/signed word/dword/signed dword) 4 (byte~) main::$0 ← call inci - (byte/word~) main::$1 ← (byte) main::a + (byte~) main::$0 - (byte) main::a ← (byte/word~) main::$1 + (byte~) main::$1 ← (byte) main::a + (byte~) main::$0 + (byte) main::a ← (byte~) main::$1 (byte~) main::$2 ← call inci - (byte/word~) main::$3 ← (byte) main::a + (byte~) main::$2 - (byte) main::a ← (byte/word~) main::$3 + (byte~) main::$3 ← (byte) main::a + (byte~) main::$2 + (byte) main::a ← (byte~) main::$3 (byte*) main::SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024 *((byte*) main::SCREEN) ← (byte) i (byte*~) main::$4 ← (byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1 @@ -83,8 +83,8 @@ main::@return: scope:[main] from main @1: scope:[] from @begin to:@2 inci: scope:[inci] from - (byte/word~) inci::$0 ← (byte) i + (byte/signed byte/word/signed word/dword/signed dword) 7 - (byte) i ← (byte/word~) inci::$0 + (byte/signed word/word/dword/signed dword~) inci::$0 ← (byte) i + (byte/signed byte/word/signed word/dword/signed dword) 7 + (byte) i ← (byte/signed word/word/dword/signed dword~) inci::$0 (byte) inci::return ← (byte) i to:inci::@return inci::@return: scope:[inci] from inci inci::@1 @@ -123,8 +123,8 @@ main::@1: scope:[main] from main (byte) inci::return#4 ← phi( main/(byte) inci::return#0 ) (byte~) main::$0 ← (byte) inci::return#4 (byte) i#1 ← (byte) i#7 - (byte/word~) main::$1 ← (byte) main::a#3 + (byte~) main::$0 - (byte) main::a#1 ← (byte/word~) main::$1 + (byte~) main::$1 ← (byte) main::a#3 + (byte~) main::$0 + (byte) main::a#1 ← (byte~) main::$1 call inci param-assignment (byte) inci::return#1 ← (byte) inci::return#3 to:main::@2 @@ -134,8 +134,8 @@ main::@2: scope:[main] from main::@1 (byte) inci::return#5 ← phi( main::@1/(byte) inci::return#1 ) (byte~) main::$2 ← (byte) inci::return#5 (byte) i#2 ← (byte) i#8 - (byte/word~) main::$3 ← (byte) main::a#4 + (byte~) main::$2 - (byte) main::a#2 ← (byte/word~) main::$3 + (byte~) main::$3 ← (byte) main::a#4 + (byte~) main::$2 + (byte) main::a#2 ← (byte~) main::$3 (byte*) main::SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 *((byte*) main::SCREEN#0) ← (byte) i#2 (byte*~) main::$4 ← (byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1 @@ -148,8 +148,8 @@ main::@return: scope:[main] from main::@2 to:@return inci: scope:[inci] from main main::@1 (byte) i#10 ← phi( main/(byte) i#13 main::@1/(byte) i#1 ) - (byte/word~) inci::$0 ← (byte) i#10 + (byte/signed byte/word/signed word/dword/signed dword) 7 - (byte) i#4 ← (byte/word~) inci::$0 + (byte/signed word/word/dword/signed dword~) inci::$0 ← (byte) i#10 + (byte/signed byte/word/signed word/dword/signed dword) 7 + (byte) i#4 ← (byte/signed word/word/dword/signed dword~) inci::$0 (byte) inci::return#2 ← (byte) i#4 to:inci::@return inci::@return: scope:[inci] from inci @@ -191,7 +191,7 @@ SYMBOL TABLE SSA (byte) i#8 (byte) i#9 (byte()) inci() -(byte/word~) inci::$0 +(byte/signed word/word/dword/signed dword~) inci::$0 (label) inci::@return (byte) inci::return (byte) inci::return#0 @@ -203,9 +203,9 @@ SYMBOL TABLE SSA (byte) inci::return#6 (void()) main() (byte~) main::$0 -(byte/word~) main::$1 +(byte~) main::$1 (byte~) main::$2 -(byte/word~) main::$3 +(byte~) main::$3 (byte*~) main::$4 (label) main::@1 (label) main::@2 @@ -233,11 +233,11 @@ Not aliassing across scopes: i#12 i#3 Alias (byte) inci::return#0 = (byte) inci::return#4 Alias (byte) main::a#0 = (byte) main::a#3 Alias (byte) i#1 = (byte) i#7 -Alias (byte) main::a#1 = (byte/word~) main::$1 (byte) main::a#4 +Alias (byte) main::a#1 = (byte~) main::$1 (byte) main::a#4 Alias (byte) inci::return#1 = (byte) inci::return#5 Alias (byte) i#2 = (byte) i#8 (byte) i#9 (byte) i#3 -Alias (byte) main::a#2 = (byte/word~) main::$3 -Alias (byte) i#11 = (byte) i#4 (byte/word~) inci::$0 (byte) i#5 +Alias (byte) main::a#2 = (byte~) main::$3 +Alias (byte) i#11 = (byte) i#4 (byte/signed word/word/dword/signed dword~) inci::$0 (byte) i#5 Alias (byte) inci::return#2 = (byte) inci::return#6 (byte) inci::return#3 Alias (byte) i#0 = (byte) i#14 Alias (byte) i#12 = (byte) i#6 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopmin.log b/src/test/java/dk/camelot64/kickc/test/ref/loopmin.log index ccee3680e..e14e44cc0 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopmin.log @@ -19,8 +19,8 @@ main::@1: (boolean~) main::$0 ← (byte) main::i > (byte/signed byte/word/signed word/dword/signed dword) 5 (boolean~) main::$1 ← ! (boolean~) main::$0 if((boolean~) main::$1) goto main::@2 - (byte/word~) main::$2 ← (byte) main::s + (byte) main::i - (byte) main::s ← (byte/word~) main::$2 + (byte~) main::$2 ← (byte) main::s + (byte) main::i + (byte) main::s ← (byte~) main::$2 main::@2: (byte) main::i ← -- (byte) main::i (boolean~) main::$3 ← (byte) main::i > (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -34,7 +34,7 @@ SYMBOLS (void()) main() (boolean~) main::$0 (boolean~) main::$1 -(byte/word~) main::$2 +(byte~) main::$2 (boolean~) main::$3 (label) main::@1 (label) main::@2 @@ -60,8 +60,8 @@ main::@2: scope:[main] from main::@1 main::@3 if((boolean~) main::$3) goto main::@1 to:main::@4 main::@3: scope:[main] from main::@1 - (byte/word~) main::$2 ← (byte) main::s + (byte) main::i - (byte) main::s ← (byte/word~) main::$2 + (byte~) main::$2 ← (byte) main::s + (byte) main::i + (byte) main::s ← (byte~) main::$2 to:main::@2 main::@4: scope:[main] from main::@2 to:main::@return @@ -104,8 +104,8 @@ main::@2: scope:[main] from main::@1 main::@3 main::@3: scope:[main] from main::@1 (byte) main::i#4 ← phi( main::@1/(byte) main::i#2 ) (byte) main::s#2 ← phi( main::@1/(byte) main::s#3 ) - (byte/word~) main::$2 ← (byte) main::s#2 + (byte) main::i#4 - (byte) main::s#1 ← (byte/word~) main::$2 + (byte~) main::$2 ← (byte) main::s#2 + (byte) main::i#4 + (byte) main::s#1 ← (byte~) main::$2 to:main::@2 main::@return: scope:[main] from main::@2 return @@ -125,7 +125,7 @@ SYMBOL TABLE SSA (void()) main() (boolean~) main::$0 (boolean~) main::$1 -(byte/word~) main::$2 +(byte~) main::$2 (boolean~) main::$3 (label) main::@1 (label) main::@2 @@ -151,7 +151,7 @@ Inversing boolean not (boolean~) main::$1 ← (byte) main::i#2 <= (byte/signed b Succesful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::s#2 = (byte) main::s#3 Alias (byte) main::i#2 = (byte) main::i#4 -Alias (byte) main::s#1 = (byte/word~) main::$2 +Alias (byte) main::s#1 = (byte~) main::$2 Succesful SSA optimization Pass2AliasElimination Alias (byte) main::i#2 = (byte) main::i#3 Succesful SSA optimization Pass2AliasElimination diff --git a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.log b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.log index e24b406eb..924cf08bb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.log @@ -41,8 +41,8 @@ main::@return: endproc // main() proc (void()) line((byte) line::l) (void~) line::$0 ← call plot (byte) line::l - (byte/word~) line::$1 ← (byte) line::l + (byte/signed byte/word/signed word/dword/signed dword) 20 - (void~) line::$2 ← call plot (byte/word~) line::$1 + (byte/signed word/word/dword/signed dword~) line::$1 ← (byte) line::l + (byte/signed byte/word/signed word/dword/signed dword) 20 + (void~) line::$2 ← call plot (byte/signed word/word/dword/signed dword~) line::$1 line::@return: return endproc // line() @@ -57,7 +57,7 @@ SYMBOLS (byte*) SCREEN (void()) line((byte) line::l) (void~) line::$0 -(byte/word~) line::$1 +(byte/signed word/word/dword/signed dword~) line::$1 (void~) line::$2 (label) line::@return (byte) line::l @@ -107,8 +107,8 @@ main::@return: scope:[main] from main::@4 to:@2 line: scope:[line] from (void~) line::$0 ← call plot (byte) line::l - (byte/word~) line::$1 ← (byte) line::l + (byte/signed byte/word/signed word/dword/signed dword) 20 - (void~) line::$2 ← call plot (byte/word~) line::$1 + (byte/signed word/word/dword/signed dword~) line::$1 ← (byte) line::l + (byte/signed byte/word/signed word/dword/signed dword) 20 + (void~) line::$2 ← call plot (byte/signed word/word/dword/signed dword~) line::$1 to:line::@return line::@return: scope:[line] from line return @@ -191,8 +191,8 @@ line: scope:[line] from main::@1 main::@2 line::@1: scope:[line] from line (byte*) SCREEN#3 ← phi( line/(byte*) SCREEN#2 ) (byte) line::l#3 ← phi( line/(byte) line::l#2 ) - (byte/word~) line::$1 ← (byte) line::l#3 + (byte/signed byte/word/signed word/dword/signed dword) 20 - (byte) plot::x#1 ← (byte/word~) line::$1 + (byte/signed word/word/dword/signed dword~) line::$1 ← (byte) line::l#3 + (byte/signed byte/word/signed word/dword/signed dword) 20 + (byte) plot::x#1 ← (byte/signed word/word/dword/signed dword~) line::$1 call plot param-assignment to:line::@2 line::@2: scope:[line] from line::@1 @@ -234,7 +234,7 @@ SYMBOL TABLE SSA (byte*) SCREEN#8 (byte*) SCREEN#9 (void()) line((byte) line::l) -(byte/word~) line::$1 +(byte/signed word/word/dword/signed dword~) line::$1 (label) line::@1 (label) line::@2 (label) line::@return @@ -287,7 +287,7 @@ Alias (byte) main::j#2 = (byte) main::j#3 Alias (byte*) SCREEN#5 = (byte*) SCREEN#9 Alias (byte) line::l#2 = (byte) line::l#3 Alias (byte*) SCREEN#2 = (byte*) SCREEN#3 -Alias (byte) plot::x#1 = (byte/word~) line::$1 +Alias (byte) plot::x#1 = (byte/signed word/word/dword/signed dword~) line::$1 Alias (byte*) SCREEN#0 = (byte*) SCREEN#10 Succesful SSA optimization Pass2AliasElimination Not aliassing across scopes: SCREEN#6 SCREEN#0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/print-problem.log b/src/test/java/dk/camelot64/kickc/test/ref/print-problem.log index 3075752cb..8c07454d5 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/print-problem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/print-problem.log @@ -40,8 +40,8 @@ main::@return: return endproc // main() proc (void()) ln() - (byte/word~) ln::$0 ← (byte) line + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) line ← (byte/word~) ln::$0 + (byte/signed word/word/dword/signed dword~) ln::$0 ← (byte) line + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) line ← (byte/signed word/word/dword/signed dword~) ln::$0 (byte) char ← (byte) line ln::@return: return @@ -53,7 +53,7 @@ SYMBOLS (byte) char (byte) line (void()) ln() -(byte/word~) ln::$0 +(byte/signed word/word/dword/signed dword~) ln::$0 (label) ln::@return (void()) main() (void~) main::$0 @@ -82,8 +82,8 @@ main::@return: scope:[main] from main @1: scope:[] from @begin to:@2 ln: scope:[ln] from - (byte/word~) ln::$0 ← (byte) line + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) line ← (byte/word~) ln::$0 + (byte/signed word/word/dword/signed dword~) ln::$0 ← (byte) line + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) line ← (byte/signed word/word/dword/signed dword~) ln::$0 (byte) char ← (byte) line to:ln::@return ln::@return: scope:[ln] from ln @@ -157,8 +157,8 @@ main::@return: scope:[main] from main::@3 to:@return ln: scope:[ln] from main main::@1 main::@2 (byte) line#12 ← phi( main/(byte) line#15 main::@1/(byte) line#1 main::@2/(byte) line#2 ) - (byte/word~) ln::$0 ← (byte) line#12 + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) line#5 ← (byte/word~) ln::$0 + (byte/signed word/word/dword/signed dword~) ln::$0 ← (byte) line#12 + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) line#5 ← (byte/signed word/word/dword/signed dword~) ln::$0 (byte) char#7 ← (byte) line#5 to:ln::@return ln::@return: scope:[ln] from ln @@ -232,7 +232,7 @@ SYMBOL TABLE SSA (byte) line#8 (byte) line#9 (void()) ln() -(byte/word~) ln::$0 +(byte/signed word/word/dword/signed dword~) ln::$0 (label) ln::@return (void()) main() (label) main::@1 @@ -261,7 +261,7 @@ Alias (byte) line#2 = (byte) line#9 Alias (byte) char#11 = (byte) char#3 Alias (byte) line#10 = (byte) line#3 (byte) line#11 (byte) line#4 Alias (byte) char#12 = (byte) char#5 (byte) char#13 (byte) char#6 -Alias (byte) line#13 = (byte) line#5 (byte/word~) ln::$0 (byte) char#7 (byte) char#14 (byte) line#6 (byte) char#8 +Alias (byte) line#13 = (byte) line#5 (byte/signed word/word/dword/signed dword~) ln::$0 (byte) char#7 (byte) char#14 (byte) line#6 (byte) char#8 Alias (byte*) SCREEN#0 = (byte*) SCREEN#5 Alias (byte) line#14 = (byte) line#7 Alias (byte) char#15 = (byte) char#9 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scroll.log b/src/test/java/dk/camelot64/kickc/test/ref/scroll.log index 4041813f3..68fafe487 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scroll.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/scroll.log @@ -75,8 +75,8 @@ main::@3: (byte) main::scroll ← (byte/signed byte/word/signed word/dword/signed dword) 7 (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 main::@5: - (byte/word~) main::$6 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) main::line + (byte) main::i) ← *((byte[]) main::line + (byte/word~) main::$6) + (byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) main::line + (byte) main::i) ← *((byte[]) main::line + (byte/signed word/word/dword/signed dword~) main::$6) (byte) main::i ← ++ (byte) main::i (boolean~) main::$7 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 39 if((boolean~) main::$7) goto main::@5 @@ -130,7 +130,7 @@ SYMBOLS (boolean~) main::$3 (boolean~) main::$4 (boolean~) main::$5 -(byte/word~) main::$6 +(byte/signed word/word/dword/signed dword~) main::$6 (boolean~) main::$7 (boolean~) main::$8 (boolean~) main::$9 @@ -195,8 +195,8 @@ main::@9: scope:[main] from main::@8 (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:main::@5 main::@5: scope:[main] from main::@5 main::@9 - (byte/word~) main::$6 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) main::line + (byte) main::i) ← *((byte[]) main::line + (byte/word~) main::$6) + (byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) main::line + (byte) main::i) ← *((byte[]) main::line + (byte/signed word/word/dword/signed dword~) main::$6) (byte) main::i ← ++ (byte) main::i (boolean~) main::$7 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 39 if((boolean~) main::$7) goto main::@5 @@ -359,8 +359,8 @@ main::@5: scope:[main] from main::@5 main::@9 (byte*) TEXT#6 ← phi( main::@5/(byte*) TEXT#6 main::@9/(byte*) TEXT#7 ) (byte*) main::nxt#5 ← phi( main::@5/(byte*) main::nxt#5 main::@9/(byte*) main::nxt#6 ) (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(byte) main::i#0 ) - (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/word~) main::$6) + (byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/signed word/word/dword/signed dword~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$7 ← (byte) main::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 39 if((boolean~) main::$7) goto main::@5 @@ -524,7 +524,7 @@ SYMBOL TABLE SSA (boolean~) main::$3 (boolean~) main::$4 (boolean~) main::$5 -(byte/word~) main::$6 +(byte/signed word/word/dword/signed dword~) main::$6 (boolean~) main::$7 (boolean~) main::$8 (boolean~) main::$9 @@ -745,6 +745,7 @@ Consolidated array index constant in assignment *(main::line#0+1 + main::$6) Consolidated array index constant in *(main::line#0+39) Succesful SSA optimization Pass2ConstantAdditionElimination Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::i#2 Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@9 @@ -754,7 +755,7 @@ Not aliassing identity: BGCOL#5 BGCOL#5 Not aliassing identity: SCROLL#7 SCROLL#7 Not aliassing identity: TEXT#10 TEXT#10 Not aliassing across scopes: main::nxt#2 TEXT#10 -Alias (byte) main::i#2 = (byte/word~) main::$6 +Alias (byte) main::i#2 = (byte~) main::$6 Succesful SSA optimization Pass2AliasElimination Not aliassing identity: RASTER#1 RASTER#1 Not aliassing identity: BGCOL#5 BGCOL#5 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.log b/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.log index 5bc19c1f1..caa663b81 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.log @@ -201,50 +201,50 @@ scroll_hard::@1: (byte*~) scroll_hard::$1 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$0 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$2 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 0 (byte*~) scroll_hard::$3 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$2 - (byte/word~) scroll_hard::$4 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$1 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$3 + (byte/word~) scroll_hard::$4) + (byte/signed word/word/dword/signed dword~) scroll_hard::$4 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$1 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$3 + (byte/signed word/word/dword/signed dword~) scroll_hard::$4) (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$5 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 1 (byte*~) scroll_hard::$6 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$5 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$7 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 1 (byte*~) scroll_hard::$8 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$7 - (byte/word~) scroll_hard::$9 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$6 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$8 + (byte/word~) scroll_hard::$9) + (byte/signed word/word/dword/signed dword~) scroll_hard::$9 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$6 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$8 + (byte/signed word/word/dword/signed dword~) scroll_hard::$9) (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$10 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 2 (byte*~) scroll_hard::$11 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$10 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$12 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 2 (byte*~) scroll_hard::$13 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$12 - (byte/word~) scroll_hard::$14 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$11 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$13 + (byte/word~) scroll_hard::$14) + (byte/signed word/word/dword/signed dword~) scroll_hard::$14 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$11 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$13 + (byte/signed word/word/dword/signed dword~) scroll_hard::$14) (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$15 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 3 (byte*~) scroll_hard::$16 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$15 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$17 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 3 (byte*~) scroll_hard::$18 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$17 - (byte/word~) scroll_hard::$19 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$16 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$18 + (byte/word~) scroll_hard::$19) + (byte/signed word/word/dword/signed dword~) scroll_hard::$19 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$16 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$18 + (byte/signed word/word/dword/signed dword~) scroll_hard::$19) (byte/word/signed word/dword/signed dword~) scroll_hard::$20 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 4 (byte*~) scroll_hard::$21 ← (byte*) SCREEN + (byte/word/signed word/dword/signed dword~) scroll_hard::$20 (byte/word/signed word/dword/signed dword~) scroll_hard::$22 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 4 (byte*~) scroll_hard::$23 ← (byte*) SCREEN + (byte/word/signed word/dword/signed dword~) scroll_hard::$22 - (byte/word~) scroll_hard::$24 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$21 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$23 + (byte/word~) scroll_hard::$24) + (byte/signed word/word/dword/signed dword~) scroll_hard::$24 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$21 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$23 + (byte/signed word/word/dword/signed dword~) scroll_hard::$24) (byte/word/signed word/dword/signed dword~) scroll_hard::$25 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 5 (byte*~) scroll_hard::$26 ← (byte*) SCREEN + (byte/word/signed word/dword/signed dword~) scroll_hard::$25 (byte/word/signed word/dword/signed dword~) scroll_hard::$27 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 5 (byte*~) scroll_hard::$28 ← (byte*) SCREEN + (byte/word/signed word/dword/signed dword~) scroll_hard::$27 - (byte/word~) scroll_hard::$29 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$26 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$28 + (byte/word~) scroll_hard::$29) + (byte/signed word/word/dword/signed dword~) scroll_hard::$29 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$26 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$28 + (byte/signed word/word/dword/signed dword~) scroll_hard::$29) (byte/word/signed word/dword/signed dword~) scroll_hard::$30 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 6 (byte*~) scroll_hard::$31 ← (byte*) SCREEN + (byte/word/signed word/dword/signed dword~) scroll_hard::$30 (byte/word/signed word/dword/signed dword~) scroll_hard::$32 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 6 (byte*~) scroll_hard::$33 ← (byte*) SCREEN + (byte/word/signed word/dword/signed dword~) scroll_hard::$32 - (byte/word~) scroll_hard::$34 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$31 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$33 + (byte/word~) scroll_hard::$34) + (byte/signed word/word/dword/signed dword~) scroll_hard::$34 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$31 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$33 + (byte/signed word/word/dword/signed dword~) scroll_hard::$34) (word/signed word/dword/signed dword~) scroll_hard::$35 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 7 (byte*~) scroll_hard::$36 ← (byte*) SCREEN + (word/signed word/dword/signed dword~) scroll_hard::$35 (word/signed word/dword/signed dword~) scroll_hard::$37 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 7 (byte*~) scroll_hard::$38 ← (byte*) SCREEN + (word/signed word/dword/signed dword~) scroll_hard::$37 - (byte/word~) scroll_hard::$39 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$36 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$38 + (byte/word~) scroll_hard::$39) + (byte/signed word/word/dword/signed dword~) scroll_hard::$39 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$36 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$38 + (byte/signed word/word/dword/signed dword~) scroll_hard::$39) (byte) scroll_hard::i ← ++ (byte) scroll_hard::i (boolean~) scroll_hard::$40 ← (byte) scroll_hard::i != (byte/signed byte/word/signed word/dword/signed dword) 39 if((boolean~) scroll_hard::$40) goto scroll_hard::@1 @@ -332,41 +332,41 @@ SYMBOLS (byte*~) scroll_hard::$11 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$12 (byte*~) scroll_hard::$13 -(byte/word~) scroll_hard::$14 +(byte/signed word/word/dword/signed dword~) scroll_hard::$14 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$15 (byte*~) scroll_hard::$16 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$17 (byte*~) scroll_hard::$18 -(byte/word~) scroll_hard::$19 +(byte/signed word/word/dword/signed dword~) scroll_hard::$19 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$2 (byte/word/signed word/dword/signed dword~) scroll_hard::$20 (byte*~) scroll_hard::$21 (byte/word/signed word/dword/signed dword~) scroll_hard::$22 (byte*~) scroll_hard::$23 -(byte/word~) scroll_hard::$24 +(byte/signed word/word/dword/signed dword~) scroll_hard::$24 (byte/word/signed word/dword/signed dword~) scroll_hard::$25 (byte*~) scroll_hard::$26 (byte/word/signed word/dword/signed dword~) scroll_hard::$27 (byte*~) scroll_hard::$28 -(byte/word~) scroll_hard::$29 +(byte/signed word/word/dword/signed dword~) scroll_hard::$29 (byte*~) scroll_hard::$3 (byte/word/signed word/dword/signed dword~) scroll_hard::$30 (byte*~) scroll_hard::$31 (byte/word/signed word/dword/signed dword~) scroll_hard::$32 (byte*~) scroll_hard::$33 -(byte/word~) scroll_hard::$34 +(byte/signed word/word/dword/signed dword~) scroll_hard::$34 (word/signed word/dword/signed dword~) scroll_hard::$35 (byte*~) scroll_hard::$36 (word/signed word/dword/signed dword~) scroll_hard::$37 (byte*~) scroll_hard::$38 -(byte/word~) scroll_hard::$39 -(byte/word~) scroll_hard::$4 +(byte/signed word/word/dword/signed dword~) scroll_hard::$39 +(byte/signed word/word/dword/signed dword~) scroll_hard::$4 (boolean~) scroll_hard::$40 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$5 (byte*~) scroll_hard::$6 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$7 (byte*~) scroll_hard::$8 -(byte/word~) scroll_hard::$9 +(byte/signed word/word/dword/signed dword~) scroll_hard::$9 (label) scroll_hard::@1 (label) scroll_hard::@return (byte) scroll_hard::i @@ -527,50 +527,50 @@ scroll_hard::@1: scope:[scroll_hard] from scroll_hard scroll_hard::@1 (byte*~) scroll_hard::$1 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$0 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$2 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 0 (byte*~) scroll_hard::$3 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$2 - (byte/word~) scroll_hard::$4 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$1 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$3 + (byte/word~) scroll_hard::$4) + (byte/signed word/word/dword/signed dword~) scroll_hard::$4 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$1 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$3 + (byte/signed word/word/dword/signed dword~) scroll_hard::$4) (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$5 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 1 (byte*~) scroll_hard::$6 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$5 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$7 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 1 (byte*~) scroll_hard::$8 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$7 - (byte/word~) scroll_hard::$9 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$6 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$8 + (byte/word~) scroll_hard::$9) + (byte/signed word/word/dword/signed dword~) scroll_hard::$9 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$6 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$8 + (byte/signed word/word/dword/signed dword~) scroll_hard::$9) (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$10 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 2 (byte*~) scroll_hard::$11 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$10 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$12 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 2 (byte*~) scroll_hard::$13 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$12 - (byte/word~) scroll_hard::$14 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$11 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$13 + (byte/word~) scroll_hard::$14) + (byte/signed word/word/dword/signed dword~) scroll_hard::$14 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$11 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$13 + (byte/signed word/word/dword/signed dword~) scroll_hard::$14) (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$15 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 3 (byte*~) scroll_hard::$16 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$15 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$17 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 3 (byte*~) scroll_hard::$18 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$17 - (byte/word~) scroll_hard::$19 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$16 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$18 + (byte/word~) scroll_hard::$19) + (byte/signed word/word/dword/signed dword~) scroll_hard::$19 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$16 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$18 + (byte/signed word/word/dword/signed dword~) scroll_hard::$19) (byte/word/signed word/dword/signed dword~) scroll_hard::$20 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 4 (byte*~) scroll_hard::$21 ← (byte*) SCREEN + (byte/word/signed word/dword/signed dword~) scroll_hard::$20 (byte/word/signed word/dword/signed dword~) scroll_hard::$22 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 4 (byte*~) scroll_hard::$23 ← (byte*) SCREEN + (byte/word/signed word/dword/signed dword~) scroll_hard::$22 - (byte/word~) scroll_hard::$24 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$21 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$23 + (byte/word~) scroll_hard::$24) + (byte/signed word/word/dword/signed dword~) scroll_hard::$24 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$21 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$23 + (byte/signed word/word/dword/signed dword~) scroll_hard::$24) (byte/word/signed word/dword/signed dword~) scroll_hard::$25 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 5 (byte*~) scroll_hard::$26 ← (byte*) SCREEN + (byte/word/signed word/dword/signed dword~) scroll_hard::$25 (byte/word/signed word/dword/signed dword~) scroll_hard::$27 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 5 (byte*~) scroll_hard::$28 ← (byte*) SCREEN + (byte/word/signed word/dword/signed dword~) scroll_hard::$27 - (byte/word~) scroll_hard::$29 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$26 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$28 + (byte/word~) scroll_hard::$29) + (byte/signed word/word/dword/signed dword~) scroll_hard::$29 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$26 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$28 + (byte/signed word/word/dword/signed dword~) scroll_hard::$29) (byte/word/signed word/dword/signed dword~) scroll_hard::$30 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 6 (byte*~) scroll_hard::$31 ← (byte*) SCREEN + (byte/word/signed word/dword/signed dword~) scroll_hard::$30 (byte/word/signed word/dword/signed dword~) scroll_hard::$32 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 6 (byte*~) scroll_hard::$33 ← (byte*) SCREEN + (byte/word/signed word/dword/signed dword~) scroll_hard::$32 - (byte/word~) scroll_hard::$34 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$31 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$33 + (byte/word~) scroll_hard::$34) + (byte/signed word/word/dword/signed dword~) scroll_hard::$34 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$31 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$33 + (byte/signed word/word/dword/signed dword~) scroll_hard::$34) (word/signed word/dword/signed dword~) scroll_hard::$35 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 7 (byte*~) scroll_hard::$36 ← (byte*) SCREEN + (word/signed word/dword/signed dword~) scroll_hard::$35 (word/signed word/dword/signed dword~) scroll_hard::$37 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 7 (byte*~) scroll_hard::$38 ← (byte*) SCREEN + (word/signed word/dword/signed dword~) scroll_hard::$37 - (byte/word~) scroll_hard::$39 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$36 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$38 + (byte/word~) scroll_hard::$39) + (byte/signed word/word/dword/signed dword~) scroll_hard::$39 ← (byte) scroll_hard::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$36 + (byte) scroll_hard::i) ← *((byte*~) scroll_hard::$38 + (byte/signed word/word/dword/signed dword~) scroll_hard::$39) (byte) scroll_hard::i ← ++ (byte) scroll_hard::i (boolean~) scroll_hard::$40 ← (byte) scroll_hard::i != (byte/signed byte/word/signed word/dword/signed dword) 39 if((boolean~) scroll_hard::$40) goto scroll_hard::@1 @@ -1012,50 +1012,50 @@ scroll_hard::@1: scope:[scroll_hard] from scroll_hard scroll_hard::@1 (byte*~) scroll_hard::$1 ← (byte*) SCREEN#3 + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$0 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$2 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 0 (byte*~) scroll_hard::$3 ← (byte*) SCREEN#3 + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$2 - (byte/word~) scroll_hard::$4 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$1 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$3 + (byte/word~) scroll_hard::$4) + (byte/signed word/word/dword/signed dword~) scroll_hard::$4 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$1 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$3 + (byte/signed word/word/dword/signed dword~) scroll_hard::$4) (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$5 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 1 (byte*~) scroll_hard::$6 ← (byte*) SCREEN#3 + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$5 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$7 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 1 (byte*~) scroll_hard::$8 ← (byte*) SCREEN#3 + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$7 - (byte/word~) scroll_hard::$9 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$6 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$8 + (byte/word~) scroll_hard::$9) + (byte/signed word/word/dword/signed dword~) scroll_hard::$9 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$6 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$8 + (byte/signed word/word/dword/signed dword~) scroll_hard::$9) (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$10 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 2 (byte*~) scroll_hard::$11 ← (byte*) SCREEN#3 + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$10 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$12 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 2 (byte*~) scroll_hard::$13 ← (byte*) SCREEN#3 + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$12 - (byte/word~) scroll_hard::$14 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$11 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$13 + (byte/word~) scroll_hard::$14) + (byte/signed word/word/dword/signed dword~) scroll_hard::$14 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$11 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$13 + (byte/signed word/word/dword/signed dword~) scroll_hard::$14) (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$15 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 3 (byte*~) scroll_hard::$16 ← (byte*) SCREEN#3 + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$15 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$17 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 3 (byte*~) scroll_hard::$18 ← (byte*) SCREEN#3 + (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$17 - (byte/word~) scroll_hard::$19 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$16 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$18 + (byte/word~) scroll_hard::$19) + (byte/signed word/word/dword/signed dword~) scroll_hard::$19 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$16 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$18 + (byte/signed word/word/dword/signed dword~) scroll_hard::$19) (byte/word/signed word/dword/signed dword~) scroll_hard::$20 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 4 (byte*~) scroll_hard::$21 ← (byte*) SCREEN#3 + (byte/word/signed word/dword/signed dword~) scroll_hard::$20 (byte/word/signed word/dword/signed dword~) scroll_hard::$22 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 4 (byte*~) scroll_hard::$23 ← (byte*) SCREEN#3 + (byte/word/signed word/dword/signed dword~) scroll_hard::$22 - (byte/word~) scroll_hard::$24 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$21 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$23 + (byte/word~) scroll_hard::$24) + (byte/signed word/word/dword/signed dword~) scroll_hard::$24 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$21 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$23 + (byte/signed word/word/dword/signed dword~) scroll_hard::$24) (byte/word/signed word/dword/signed dword~) scroll_hard::$25 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 5 (byte*~) scroll_hard::$26 ← (byte*) SCREEN#3 + (byte/word/signed word/dword/signed dword~) scroll_hard::$25 (byte/word/signed word/dword/signed dword~) scroll_hard::$27 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 5 (byte*~) scroll_hard::$28 ← (byte*) SCREEN#3 + (byte/word/signed word/dword/signed dword~) scroll_hard::$27 - (byte/word~) scroll_hard::$29 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$26 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$28 + (byte/word~) scroll_hard::$29) + (byte/signed word/word/dword/signed dword~) scroll_hard::$29 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$26 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$28 + (byte/signed word/word/dword/signed dword~) scroll_hard::$29) (byte/word/signed word/dword/signed dword~) scroll_hard::$30 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 6 (byte*~) scroll_hard::$31 ← (byte*) SCREEN#3 + (byte/word/signed word/dword/signed dword~) scroll_hard::$30 (byte/word/signed word/dword/signed dword~) scroll_hard::$32 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 6 (byte*~) scroll_hard::$33 ← (byte*) SCREEN#3 + (byte/word/signed word/dword/signed dword~) scroll_hard::$32 - (byte/word~) scroll_hard::$34 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$31 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$33 + (byte/word~) scroll_hard::$34) + (byte/signed word/word/dword/signed dword~) scroll_hard::$34 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$31 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$33 + (byte/signed word/word/dword/signed dword~) scroll_hard::$34) (word/signed word/dword/signed dword~) scroll_hard::$35 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 7 (byte*~) scroll_hard::$36 ← (byte*) SCREEN#3 + (word/signed word/dword/signed dword~) scroll_hard::$35 (word/signed word/dword/signed dword~) scroll_hard::$37 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 7 (byte*~) scroll_hard::$38 ← (byte*) SCREEN#3 + (word/signed word/dword/signed dword~) scroll_hard::$37 - (byte/word~) scroll_hard::$39 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte*~) scroll_hard::$36 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$38 + (byte/word~) scroll_hard::$39) + (byte/signed word/word/dword/signed dword~) scroll_hard::$39 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*~) scroll_hard::$36 + (byte) scroll_hard::i#2) ← *((byte*~) scroll_hard::$38 + (byte/signed word/word/dword/signed dword~) scroll_hard::$39) (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 (boolean~) scroll_hard::$40 ← (byte) scroll_hard::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 39 if((boolean~) scroll_hard::$40) goto scroll_hard::@1 @@ -1467,41 +1467,41 @@ SYMBOL TABLE SSA (byte*~) scroll_hard::$11 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$12 (byte*~) scroll_hard::$13 -(byte/word~) scroll_hard::$14 +(byte/signed word/word/dword/signed dword~) scroll_hard::$14 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$15 (byte*~) scroll_hard::$16 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$17 (byte*~) scroll_hard::$18 -(byte/word~) scroll_hard::$19 +(byte/signed word/word/dword/signed dword~) scroll_hard::$19 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$2 (byte/word/signed word/dword/signed dword~) scroll_hard::$20 (byte*~) scroll_hard::$21 (byte/word/signed word/dword/signed dword~) scroll_hard::$22 (byte*~) scroll_hard::$23 -(byte/word~) scroll_hard::$24 +(byte/signed word/word/dword/signed dword~) scroll_hard::$24 (byte/word/signed word/dword/signed dword~) scroll_hard::$25 (byte*~) scroll_hard::$26 (byte/word/signed word/dword/signed dword~) scroll_hard::$27 (byte*~) scroll_hard::$28 -(byte/word~) scroll_hard::$29 +(byte/signed word/word/dword/signed dword~) scroll_hard::$29 (byte*~) scroll_hard::$3 (byte/word/signed word/dword/signed dword~) scroll_hard::$30 (byte*~) scroll_hard::$31 (byte/word/signed word/dword/signed dword~) scroll_hard::$32 (byte*~) scroll_hard::$33 -(byte/word~) scroll_hard::$34 +(byte/signed word/word/dword/signed dword~) scroll_hard::$34 (word/signed word/dword/signed dword~) scroll_hard::$35 (byte*~) scroll_hard::$36 (word/signed word/dword/signed dword~) scroll_hard::$37 (byte*~) scroll_hard::$38 -(byte/word~) scroll_hard::$39 -(byte/word~) scroll_hard::$4 +(byte/signed word/word/dword/signed dword~) scroll_hard::$39 +(byte/signed word/word/dword/signed dword~) scroll_hard::$4 (boolean~) scroll_hard::$40 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$5 (byte*~) scroll_hard::$6 (byte/signed byte/word/signed word/dword/signed dword~) scroll_hard::$7 (byte*~) scroll_hard::$8 -(byte/word~) scroll_hard::$9 +(byte/signed word/word/dword/signed dword~) scroll_hard::$9 (label) scroll_hard::@1 (label) scroll_hard::@return (byte) scroll_hard::i @@ -2054,6 +2054,14 @@ Multiple usages for variable. Not optimizing sub-constant (byte) scroll_hard::i# Multiple usages for variable. Not optimizing sub-constant (byte) scroll_hard::i#2 Multiple usages for variable. Not optimizing sub-constant (byte) scroll_hard::i#2 Multiple usages for variable. Not optimizing sub-constant (byte) scroll_hard::i#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$4 ← (byte) scroll_hard::i#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$9 ← (byte) scroll_hard::i#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$14 ← (byte) scroll_hard::i#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$19 ← (byte) scroll_hard::i#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$24 ← (byte) scroll_hard::i#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$29 ← (byte) scroll_hard::i#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$34 ← (byte) scroll_hard::i#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$39 ← (byte) scroll_hard::i#2 Not culling empty block because it shares successor with its predecessor. (label) scroll_bit::@5 Not aliassing across scopes: scroll#18 scroll#10 Not aliassing across scopes: current_bit#29 current_bit#12 @@ -2067,7 +2075,7 @@ Not aliassing across scopes: nxt#36 nxt#31 Not aliassing across scopes: next_char::return#0 next_char::return#1 Not aliassing across scopes: scroll_bit::$3 next_char::return#0 Not aliassing across scopes: nxt#18 nxt#31 -Alias (byte) scroll_hard::i#2 = (byte/word~) scroll_hard::$4 (byte/word~) scroll_hard::$9 (byte/word~) scroll_hard::$14 (byte/word~) scroll_hard::$19 (byte/word~) scroll_hard::$24 (byte/word~) scroll_hard::$29 (byte/word~) scroll_hard::$34 (byte/word~) scroll_hard::$39 +Alias (byte) scroll_hard::i#2 = (byte~) scroll_hard::$4 (byte~) scroll_hard::$9 (byte~) scroll_hard::$14 (byte~) scroll_hard::$19 (byte~) scroll_hard::$24 (byte~) scroll_hard::$29 (byte~) scroll_hard::$34 (byte~) scroll_hard::$39 Succesful SSA optimization Pass2AliasElimination Not aliassing across scopes: scroll#18 scroll#10 Not aliassing across scopes: current_bit#29 current_bit#12 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/signed-words.log b/src/test/java/dk/camelot64/kickc/test/ref/signed-words.log index df3df7f7f..f5417f4df 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/signed-words.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/signed-words.log @@ -205,8 +205,8 @@ proc (void()) anim() (signed word) ypos ← (byte/signed byte/word/signed word/dword/signed dword) 0 (signed word~) anim::$2 ← - (signed word) xvel (signed word) xvel ← (signed word~) anim::$2 - (signed word~) anim::$3 ← (signed word) yvel_init - (byte/signed byte/word/signed word/dword/signed dword) 10 - (signed word) yvel_init ← (signed word~) anim::$3 + (signed word/signed dword~) anim::$3 ← (signed word) yvel_init - (byte/signed byte/word/signed word/dword/signed dword) 10 + (signed word) yvel_init ← (signed word/signed dword~) anim::$3 (signed word/signed dword~) anim::$4 ← - (byte/word/signed word/dword/signed dword) 200 (boolean~) anim::$5 ← (signed word) yvel_init < (signed word/signed dword~) anim::$4 (boolean~) anim::$6 ← ! (boolean~) anim::$5 @@ -222,11 +222,11 @@ anim::@1: (signed word~) anim::$9 ← (signed word) ypos + (signed word) yvel (signed word) ypos ← (signed word~) anim::$9 (signed word~) anim::$10 ← (signed word) xpos >> (byte/signed byte/word/signed word/dword/signed dword) 7 - (signed word~) anim::$11 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 - (signed word) anim::sprite_x ← (signed word~) anim::$11 + (signed word/signed dword~) anim::$11 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 + (signed word) anim::sprite_x ← (signed word/signed dword~) anim::$11 (signed word~) anim::$12 ← (signed word) ypos >> (byte/signed byte/word/signed word/dword/signed dword) 5 - (signed word~) anim::$13 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12 - (signed word) anim::sprite_y ← (signed word~) anim::$13 + (signed word/signed dword~) anim::$13 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12 + (signed word) anim::sprite_y ← (signed word/signed dword~) anim::$13 (byte~) anim::$14 ← ((byte)) (signed word) anim::sprite_x *((byte*) SPRITES_XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) anim::$14 (byte~) anim::$15 ← ((byte)) (signed word) anim::sprite_y @@ -281,14 +281,14 @@ SYMBOLS (boolean~) anim::$0 (boolean~) anim::$1 (signed word~) anim::$10 -(signed word~) anim::$11 +(signed word/signed dword~) anim::$11 (signed word~) anim::$12 -(signed word~) anim::$13 +(signed word/signed dword~) anim::$13 (byte~) anim::$14 (byte~) anim::$15 (byte~) anim::$16 (signed word~) anim::$2 -(signed word~) anim::$3 +(signed word/signed dword~) anim::$3 (signed word/signed dword~) anim::$4 (boolean~) anim::$5 (boolean~) anim::$6 @@ -459,11 +459,11 @@ anim::@1: scope:[anim] from anim anim::@2 (signed word~) anim::$9 ← (signed word) ypos + (signed word) yvel (signed word) ypos ← (signed word~) anim::$9 (signed word~) anim::$10 ← (signed word) xpos >> (byte/signed byte/word/signed word/dword/signed dword) 7 - (signed word~) anim::$11 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 - (signed word) anim::sprite_x ← (signed word~) anim::$11 + (signed word/signed dword~) anim::$11 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 + (signed word) anim::sprite_x ← (signed word/signed dword~) anim::$11 (signed word~) anim::$12 ← (signed word) ypos >> (byte/signed byte/word/signed word/dword/signed dword) 5 - (signed word~) anim::$13 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12 - (signed word) anim::sprite_y ← (signed word~) anim::$13 + (signed word/signed dword~) anim::$13 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12 + (signed word) anim::sprite_y ← (signed word/signed dword~) anim::$13 (byte~) anim::$14 ← ((byte)) (signed word) anim::sprite_x *((byte*) SPRITES_XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) anim::$14 (byte~) anim::$15 ← ((byte)) (signed word) anim::sprite_y @@ -476,8 +476,8 @@ anim::@3: scope:[anim] from anim (signed word) ypos ← (byte/signed byte/word/signed word/dword/signed dword) 0 (signed word~) anim::$2 ← - (signed word) xvel (signed word) xvel ← (signed word~) anim::$2 - (signed word~) anim::$3 ← (signed word) yvel_init - (byte/signed byte/word/signed word/dword/signed dword) 10 - (signed word) yvel_init ← (signed word~) anim::$3 + (signed word/signed dword~) anim::$3 ← (signed word) yvel_init - (byte/signed byte/word/signed word/dword/signed dword) 10 + (signed word) yvel_init ← (signed word/signed dword~) anim::$3 (signed word/signed dword~) anim::$4 ← - (byte/word/signed word/dword/signed dword) 200 (boolean~) anim::$5 ← (signed word) yvel_init < (signed word/signed dword~) anim::$4 (boolean~) anim::$6 ← ! (boolean~) anim::$5 @@ -690,11 +690,11 @@ anim::@1: scope:[anim] from anim anim::@2 (signed word~) anim::$9 ← (signed word) ypos#10 + (signed word) yvel#3 (signed word) ypos#3 ← (signed word~) anim::$9 (signed word~) anim::$10 ← (signed word) xpos#3 >> (byte/signed byte/word/signed word/dword/signed dword) 7 - (signed word~) anim::$11 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 - (signed word) anim::sprite_x#0 ← (signed word~) anim::$11 + (signed word/signed dword~) anim::$11 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 + (signed word) anim::sprite_x#0 ← (signed word/signed dword~) anim::$11 (signed word~) anim::$12 ← (signed word) ypos#3 >> (byte/signed byte/word/signed word/dword/signed dword) 5 - (signed word~) anim::$13 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12 - (signed word) anim::sprite_y#0 ← (signed word~) anim::$13 + (signed word/signed dword~) anim::$13 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12 + (signed word) anim::sprite_y#0 ← (signed word/signed dword~) anim::$13 (byte~) anim::$14 ← ((byte)) (signed word) anim::sprite_x#0 *((byte*) SPRITES_XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) anim::$14 (byte~) anim::$15 ← ((byte)) (signed word) anim::sprite_y#0 @@ -709,8 +709,8 @@ anim::@3: scope:[anim] from anim (signed word) ypos#4 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (signed word~) anim::$2 ← - (signed word) xvel#9 (signed word) xvel#3 ← (signed word~) anim::$2 - (signed word~) anim::$3 ← (signed word) yvel_init#9 - (byte/signed byte/word/signed word/dword/signed dword) 10 - (signed word) yvel_init#3 ← (signed word~) anim::$3 + (signed word/signed dword~) anim::$3 ← (signed word) yvel_init#9 - (byte/signed byte/word/signed word/dword/signed dword) 10 + (signed word) yvel_init#3 ← (signed word/signed dword~) anim::$3 (signed word/signed dword~) anim::$4 ← - (byte/word/signed word/dword/signed dword) 200 (boolean~) anim::$5 ← (signed word) yvel_init#3 < (signed word/signed dword~) anim::$4 (boolean~) anim::$6 ← ! (boolean~) anim::$5 @@ -800,14 +800,14 @@ SYMBOL TABLE SSA (boolean~) anim::$0 (boolean~) anim::$1 (signed word~) anim::$10 -(signed word~) anim::$11 +(signed word/signed dword~) anim::$11 (signed word~) anim::$12 -(signed word~) anim::$13 +(signed word/signed dword~) anim::$13 (byte~) anim::$14 (byte~) anim::$15 (byte~) anim::$16 (signed word~) anim::$2 -(signed word~) anim::$3 +(signed word/signed dword~) anim::$3 (signed word/signed dword~) anim::$4 (boolean~) anim::$5 (boolean~) anim::$6 @@ -1006,12 +1006,12 @@ Alias (signed word) g#0 = (signed byte/signed word/signed dword~) $1 Alias (signed word) yvel#10 = (signed word) yvel#3 (signed word~) anim::$7 (signed word) yvel#5 Alias (signed word) xpos#10 = (signed word) xpos#3 (signed word~) anim::$8 (signed word) xpos#5 Alias (signed word) ypos#11 = (signed word) ypos#3 (signed word~) anim::$9 (signed word) ypos#5 -Alias (signed word) anim::sprite_x#0 = (signed word~) anim::$11 -Alias (signed word) anim::sprite_y#0 = (signed word~) anim::$13 +Alias (signed word) anim::sprite_x#0 = (signed word/signed dword~) anim::$11 +Alias (signed word) anim::sprite_y#0 = (signed word/signed dword~) anim::$13 Alias (signed word) xvel#13 = (signed word) xvel#9 Alias (signed word) yvel_init#14 = (signed word) yvel_init#9 Alias (signed word) xvel#17 = (signed word) xvel#3 (signed word~) anim::$2 -Alias (signed word) yvel_init#3 = (signed word~) anim::$3 +Alias (signed word) yvel_init#3 = (signed word/signed dword~) anim::$3 Alias (signed word) yvel#4 = (signed word) yvel_init#10 Alias (signed word) xpos#17 = (signed word) xpos#4 Alias (signed word) ypos#17 = (signed word) ypos#4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.log b/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.log index 5e8c8e8f2..8647ea9aa 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.log @@ -956,8 +956,8 @@ proc (void()) init() (byte) init::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 init::@1: *((byte*) COLS + (byte) init::i) ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte/word~) init::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte) init::i - *((byte*) COLS + (byte/word~) init::$1) ← (byte/signed byte/word/signed word/dword/signed dword) 11 + (byte/signed word/word/dword/signed dword~) init::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte) init::i + *((byte*) COLS + (byte/signed word/word/dword/signed dword~) init::$1) ← (byte/signed byte/word/signed word/dword/signed dword) 11 (byte) init::i ← ++ (byte) init::i (boolean~) init::$2 ← (byte) init::i != (byte/signed byte/word/signed word/dword/signed dword) 40 if((boolean~) init::$2) goto init::@1 @@ -1016,8 +1016,8 @@ proc (void()) anim() (byte) anim::j ← (byte/signed byte/word/signed word/dword/signed dword) 0 anim::@1: (byte/signed byte/word/signed word/dword/signed dword~) anim::$0 ← ((word)) (byte/signed byte/word/signed word/dword/signed dword) 30 - (byte/word~) anim::$1 ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$0 + *((byte[221]) sintab_x + (byte) anim::xidx) - (word) anim::x ← (byte/word~) anim::$1 + (byte/signed word/word/dword/signed dword~) anim::$1 ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$0 + *((byte[221]) sintab_x + (byte) anim::xidx) + (word) anim::x ← (byte/signed word/word/dword/signed dword~) anim::$1 (byte~) anim::$2 ← (byte) anim::x_msb << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte~) anim::$3 ← > (word) anim::x (byte~) anim::$4 ← (byte~) anim::$2 | (byte~) anim::$3 @@ -1025,24 +1025,24 @@ anim::@1: (byte~) anim::$5 ← < (word) anim::x *((byte*) SPRITES_XPOS + (byte) anim::j2) ← (byte~) anim::$5 *((byte*) SPRITES_YPOS + (byte) anim::j2) ← *((byte[197]) sintab_y + (byte) anim::yidx) - (byte/word~) anim::$6 ← (byte) anim::xidx + (byte/signed byte/word/signed word/dword/signed dword) 10 - (byte) anim::xidx ← (byte/word~) anim::$6 + (byte/signed word/word/dword/signed dword~) anim::$6 ← (byte) anim::xidx + (byte/signed byte/word/signed word/dword/signed dword) 10 + (byte) anim::xidx ← (byte/signed word/word/dword/signed dword~) anim::$6 (boolean~) anim::$7 ← (byte) anim::xidx >= (byte) sinlen_x (boolean~) anim::$8 ← ! (boolean~) anim::$7 if((boolean~) anim::$8) goto anim::@2 - (byte/signed byte/word/signed word/dword/signed dword~) anim::$9 ← (byte) anim::xidx - (byte) sinlen_x - (byte) anim::xidx ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$9 + (byte~) anim::$9 ← (byte) anim::xidx - (byte) sinlen_x + (byte) anim::xidx ← (byte~) anim::$9 anim::@2: - (byte/word~) anim::$10 ← (byte) anim::yidx + (byte/signed byte/word/signed word/dword/signed dword) 8 - (byte) anim::yidx ← (byte/word~) anim::$10 + (byte/signed word/word/dword/signed dword~) anim::$10 ← (byte) anim::yidx + (byte/signed byte/word/signed word/dword/signed dword) 8 + (byte) anim::yidx ← (byte/signed word/word/dword/signed dword~) anim::$10 (boolean~) anim::$11 ← (byte) anim::yidx >= (byte) sinlen_y (boolean~) anim::$12 ← ! (boolean~) anim::$11 if((boolean~) anim::$12) goto anim::@3 - (byte/signed byte/word/signed word/dword/signed dword~) anim::$13 ← (byte) anim::yidx - (byte) sinlen_y - (byte) anim::yidx ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$13 + (byte~) anim::$13 ← (byte) anim::yidx - (byte) sinlen_y + (byte) anim::yidx ← (byte~) anim::$13 anim::@3: - (byte/signed byte/word/signed word/dword/signed dword~) anim::$14 ← (byte) anim::j2 - (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) anim::j2 ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$14 + (byte/signed word/word/dword/signed dword~) anim::$14 ← (byte) anim::j2 - (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) anim::j2 ← (byte/signed word/word/dword/signed dword~) anim::$14 (byte) anim::j ← ++ (byte) anim::j (boolean~) anim::$15 ← (byte) anim::j != (byte/signed byte/word/signed word/dword/signed dword) 7 if((boolean~) anim::$15) goto anim::@1 @@ -1082,11 +1082,11 @@ place_sprites::@1: *((byte*) SPRITES_XPOS + (byte) place_sprites::j2) ← (byte) place_sprites::spr_x *((byte*) SPRITES_YPOS + (byte) place_sprites::j2) ← (byte/signed byte/word/signed word/dword/signed dword) 80 *((byte*) SPRITES_COLS + (byte) place_sprites::j) ← (byte) place_sprites::col - (byte/word~) place_sprites::$3 ← (byte) place_sprites::spr_x + (byte/signed byte/word/signed word/dword/signed dword) 32 - (byte) place_sprites::spr_x ← (byte/word~) place_sprites::$3 + (byte/signed word/word/dword/signed dword~) place_sprites::$3 ← (byte) place_sprites::spr_x + (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte) place_sprites::spr_x ← (byte/signed word/word/dword/signed dword~) place_sprites::$3 (byte/signed byte/word/signed word/dword/signed dword~) place_sprites::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 7 ^ (byte/signed byte/word/signed word/dword/signed dword) 5 - (byte~) place_sprites::$5 ← (byte) place_sprites::col ^ (byte/signed byte/word/signed word/dword/signed dword~) place_sprites::$4 - (byte) place_sprites::col ← (byte~) place_sprites::$5 + (byte/word/dword~) place_sprites::$5 ← (byte) place_sprites::col ^ (byte/signed byte/word/signed word/dword/signed dword~) place_sprites::$4 + (byte) place_sprites::col ← (byte/word/dword~) place_sprites::$5 (byte) place_sprites::j2 ← ++ (byte) place_sprites::j2 (byte) place_sprites::j2 ← ++ (byte) place_sprites::j2 (byte) place_sprites::j ← ++ (byte) place_sprites::j @@ -1250,12 +1250,12 @@ SYMBOLS (byte*) addMEMtoFAC::mem (void()) anim() (byte/signed byte/word/signed word/dword/signed dword~) anim::$0 -(byte/word~) anim::$1 -(byte/word~) anim::$10 +(byte/signed word/word/dword/signed dword~) anim::$1 +(byte/signed word/word/dword/signed dword~) anim::$10 (boolean~) anim::$11 (boolean~) anim::$12 -(byte/signed byte/word/signed word/dword/signed dword~) anim::$13 -(byte/signed byte/word/signed word/dword/signed dword~) anim::$14 +(byte~) anim::$13 +(byte/signed word/word/dword/signed dword~) anim::$14 (boolean~) anim::$15 (boolean~) anim::$16 (boolean~) anim::$17 @@ -1265,10 +1265,10 @@ SYMBOLS (byte~) anim::$3 (byte~) anim::$4 (byte~) anim::$5 -(byte/word~) anim::$6 +(byte/signed word/word/dword/signed dword~) anim::$6 (boolean~) anim::$7 (boolean~) anim::$8 -(byte/signed byte/word/signed word/dword/signed dword~) anim::$9 +(byte~) anim::$9 (label) anim::@1 (label) anim::@2 (label) anim::@3 @@ -1386,7 +1386,7 @@ SYMBOLS (word) getFAC::w (void()) init() (void~) init::$0 -(byte/word~) init::$1 +(byte/signed word/word/dword/signed dword~) init::$1 (void~) init::$10 (boolean~) init::$2 (void~) init::$3 @@ -1423,9 +1423,9 @@ SYMBOLS (byte*~) place_sprites::$0 (byte*~) place_sprites::$1 (byte~) place_sprites::$2 -(byte/word~) place_sprites::$3 +(byte/signed word/word/dword/signed dword~) place_sprites::$3 (byte/signed byte/word/signed word/dword/signed dword~) place_sprites::$4 -(byte~) place_sprites::$5 +(byte/word/dword~) place_sprites::$5 (boolean~) place_sprites::$6 (label) place_sprites::@1 (label) place_sprites::@return @@ -2060,8 +2060,8 @@ init: scope:[init] from to:init::@1 init::@1: scope:[init] from init init::@1 *((byte*) COLS + (byte) init::i) ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte/word~) init::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte) init::i - *((byte*) COLS + (byte/word~) init::$1) ← (byte/signed byte/word/signed word/dword/signed dword) 11 + (byte/signed word/word/dword/signed dword~) init::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte) init::i + *((byte*) COLS + (byte/signed word/word/dword/signed dword~) init::$1) ← (byte/signed byte/word/signed word/dword/signed dword) 11 (byte) init::i ← ++ (byte) init::i (boolean~) init::$2 ← (byte) init::i != (byte/signed byte/word/signed word/dword/signed dword) 40 if((boolean~) init::$2) goto init::@1 @@ -2141,8 +2141,8 @@ anim: scope:[anim] from to:anim::@1 anim::@1: scope:[anim] from anim anim::@3 (byte/signed byte/word/signed word/dword/signed dword~) anim::$0 ← ((word)) (byte/signed byte/word/signed word/dword/signed dword) 30 - (byte/word~) anim::$1 ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$0 + *((byte[221]) sintab_x + (byte) anim::xidx) - (word) anim::x ← (byte/word~) anim::$1 + (byte/signed word/word/dword/signed dword~) anim::$1 ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$0 + *((byte[221]) sintab_x + (byte) anim::xidx) + (word) anim::x ← (byte/signed word/word/dword/signed dword~) anim::$1 (byte~) anim::$2 ← (byte) anim::x_msb << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte~) anim::$3 ← > (word) anim::x (byte~) anim::$4 ← (byte~) anim::$2 | (byte~) anim::$3 @@ -2150,33 +2150,33 @@ anim::@1: scope:[anim] from anim anim::@3 (byte~) anim::$5 ← < (word) anim::x *((byte*) SPRITES_XPOS + (byte) anim::j2) ← (byte~) anim::$5 *((byte*) SPRITES_YPOS + (byte) anim::j2) ← *((byte[197]) sintab_y + (byte) anim::yidx) - (byte/word~) anim::$6 ← (byte) anim::xidx + (byte/signed byte/word/signed word/dword/signed dword) 10 - (byte) anim::xidx ← (byte/word~) anim::$6 + (byte/signed word/word/dword/signed dword~) anim::$6 ← (byte) anim::xidx + (byte/signed byte/word/signed word/dword/signed dword) 10 + (byte) anim::xidx ← (byte/signed word/word/dword/signed dword~) anim::$6 (boolean~) anim::$7 ← (byte) anim::xidx >= (byte) sinlen_x (boolean~) anim::$8 ← ! (boolean~) anim::$7 if((boolean~) anim::$8) goto anim::@2 to:anim::@6 anim::@2: scope:[anim] from anim::@1 anim::@6 - (byte/word~) anim::$10 ← (byte) anim::yidx + (byte/signed byte/word/signed word/dword/signed dword) 8 - (byte) anim::yidx ← (byte/word~) anim::$10 + (byte/signed word/word/dword/signed dword~) anim::$10 ← (byte) anim::yidx + (byte/signed byte/word/signed word/dword/signed dword) 8 + (byte) anim::yidx ← (byte/signed word/word/dword/signed dword~) anim::$10 (boolean~) anim::$11 ← (byte) anim::yidx >= (byte) sinlen_y (boolean~) anim::$12 ← ! (boolean~) anim::$11 if((boolean~) anim::$12) goto anim::@3 to:anim::@7 anim::@6: scope:[anim] from anim::@1 - (byte/signed byte/word/signed word/dword/signed dword~) anim::$9 ← (byte) anim::xidx - (byte) sinlen_x - (byte) anim::xidx ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$9 + (byte~) anim::$9 ← (byte) anim::xidx - (byte) sinlen_x + (byte) anim::xidx ← (byte~) anim::$9 to:anim::@2 anim::@3: scope:[anim] from anim::@2 anim::@7 - (byte/signed byte/word/signed word/dword/signed dword~) anim::$14 ← (byte) anim::j2 - (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) anim::j2 ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$14 + (byte/signed word/word/dword/signed dword~) anim::$14 ← (byte) anim::j2 - (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) anim::j2 ← (byte/signed word/word/dword/signed dword~) anim::$14 (byte) anim::j ← ++ (byte) anim::j (boolean~) anim::$15 ← (byte) anim::j != (byte/signed byte/word/signed word/dword/signed dword) 7 if((boolean~) anim::$15) goto anim::@1 to:anim::@8 anim::@7: scope:[anim] from anim::@2 - (byte/signed byte/word/signed word/dword/signed dword~) anim::$13 ← (byte) anim::yidx - (byte) sinlen_y - (byte) anim::yidx ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$13 + (byte~) anim::$13 ← (byte) anim::yidx - (byte) sinlen_y + (byte) anim::yidx ← (byte~) anim::$13 to:anim::@3 anim::@8: scope:[anim] from anim::@3 *((byte*) SPRITES_XMSB) ← (byte) anim::x_msb @@ -2225,11 +2225,11 @@ place_sprites::@1: scope:[place_sprites] from place_sprites place_sprites::@1 *((byte*) SPRITES_XPOS + (byte) place_sprites::j2) ← (byte) place_sprites::spr_x *((byte*) SPRITES_YPOS + (byte) place_sprites::j2) ← (byte/signed byte/word/signed word/dword/signed dword) 80 *((byte*) SPRITES_COLS + (byte) place_sprites::j) ← (byte) place_sprites::col - (byte/word~) place_sprites::$3 ← (byte) place_sprites::spr_x + (byte/signed byte/word/signed word/dword/signed dword) 32 - (byte) place_sprites::spr_x ← (byte/word~) place_sprites::$3 + (byte/signed word/word/dword/signed dword~) place_sprites::$3 ← (byte) place_sprites::spr_x + (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte) place_sprites::spr_x ← (byte/signed word/word/dword/signed dword~) place_sprites::$3 (byte/signed byte/word/signed word/dword/signed dword~) place_sprites::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 7 ^ (byte/signed byte/word/signed word/dword/signed dword) 5 - (byte~) place_sprites::$5 ← (byte) place_sprites::col ^ (byte/signed byte/word/signed word/dword/signed dword~) place_sprites::$4 - (byte) place_sprites::col ← (byte~) place_sprites::$5 + (byte/word/dword~) place_sprites::$5 ← (byte) place_sprites::col ^ (byte/signed byte/word/signed word/dword/signed dword~) place_sprites::$4 + (byte) place_sprites::col ← (byte/word/dword~) place_sprites::$5 (byte) place_sprites::j2 ← ++ (byte) place_sprites::j2 (byte) place_sprites::j2 ← ++ (byte) place_sprites::j2 (byte) place_sprites::j ← ++ (byte) place_sprites::j @@ -2753,8 +2753,8 @@ init::@1: scope:[init] from init::@1 init::@3 (byte*) progress_cursor#44 ← phi( init::@1/(byte*) progress_cursor#44 init::@3/(byte*) progress_cursor#46 ) (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@3/(byte) init::i#0 ) *((byte*) COLS#0 + (byte) init::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte/word~) init::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte) init::i#2 - *((byte*) COLS#0 + (byte/word~) init::$1) ← (byte/signed byte/word/signed word/dword/signed dword) 11 + (byte/signed word/word/dword/signed dword~) init::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte) init::i#2 + *((byte*) COLS#0 + (byte/signed word/word/dword/signed dword~) init::$1) ← (byte/signed byte/word/signed word/dword/signed dword) 11 (byte) init::i#1 ← ++ (byte) init::i#2 (boolean~) init::$2 ← (byte) init::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 40 if((boolean~) init::$2) goto init::@1 @@ -2906,8 +2906,8 @@ anim::@1: scope:[anim] from anim anim::@3 (byte) anim::x_msb#2 ← phi( anim/(byte) anim::x_msb#0 anim::@3/(byte) anim::x_msb#4 ) (byte) anim::xidx#3 ← phi( anim/(byte) anim::xidx#0 anim::@3/(byte) anim::xidx#5 ) (byte/signed byte/word/signed word/dword/signed dword~) anim::$0 ← ((word)) (byte/signed byte/word/signed word/dword/signed dword) 30 - (byte/word~) anim::$1 ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$0 + *((byte[221]) sintab_x#0 + (byte) anim::xidx#3) - (word) anim::x#0 ← (byte/word~) anim::$1 + (byte/signed word/word/dword/signed dword~) anim::$1 ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$0 + *((byte[221]) sintab_x#0 + (byte) anim::xidx#3) + (word) anim::x#0 ← (byte/signed word/word/dword/signed dword~) anim::$1 (byte~) anim::$2 ← (byte) anim::x_msb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte~) anim::$3 ← > (word) anim::x#0 (byte~) anim::$4 ← (byte~) anim::$2 | (byte~) anim::$3 @@ -2915,8 +2915,8 @@ anim::@1: scope:[anim] from anim anim::@3 (byte~) anim::$5 ← < (word) anim::x#0 *((byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$5 *((byte*) SPRITES_YPOS#0 + (byte) anim::j2#2) ← *((byte[197]) sintab_y#0 + (byte) anim::yidx#3) - (byte/word~) anim::$6 ← (byte) anim::xidx#3 + (byte/signed byte/word/signed word/dword/signed dword) 10 - (byte) anim::xidx#1 ← (byte/word~) anim::$6 + (byte/signed word/word/dword/signed dword~) anim::$6 ← (byte) anim::xidx#3 + (byte/signed byte/word/signed word/dword/signed dword) 10 + (byte) anim::xidx#1 ← (byte/signed word/word/dword/signed dword~) anim::$6 (boolean~) anim::$7 ← (byte) anim::xidx#1 >= (byte) sinlen_x#0 (boolean~) anim::$8 ← ! (boolean~) anim::$7 if((boolean~) anim::$8) goto anim::@2 @@ -2929,8 +2929,8 @@ anim::@2: scope:[anim] from anim::@1 anim::@6 (byte) anim::j#3 ← phi( anim::@1/(byte) anim::j#5 anim::@6/(byte) anim::j#6 ) (byte) anim::j2#4 ← phi( anim::@1/(byte) anim::j2#2 anim::@6/(byte) anim::j2#6 ) (byte) anim::yidx#4 ← phi( anim::@1/(byte) anim::yidx#3 anim::@6/(byte) anim::yidx#7 ) - (byte/word~) anim::$10 ← (byte) anim::yidx#4 + (byte/signed byte/word/signed word/dword/signed dword) 8 - (byte) anim::yidx#1 ← (byte/word~) anim::$10 + (byte/signed word/word/dword/signed dword~) anim::$10 ← (byte) anim::yidx#4 + (byte/signed byte/word/signed word/dword/signed dword) 8 + (byte) anim::yidx#1 ← (byte/signed word/word/dword/signed dword~) anim::$10 (boolean~) anim::$11 ← (byte) anim::yidx#1 >= (byte) sinlen_y#0 (boolean~) anim::$12 ← ! (boolean~) anim::$11 if((boolean~) anim::$12) goto anim::@3 @@ -2943,8 +2943,8 @@ anim::@6: scope:[anim] from anim::@1 (byte) anim::j2#6 ← phi( anim::@1/(byte) anim::j2#2 ) (byte) anim::yidx#7 ← phi( anim::@1/(byte) anim::yidx#3 ) (byte) anim::xidx#4 ← phi( anim::@1/(byte) anim::xidx#1 ) - (byte/signed byte/word/signed word/dword/signed dword~) anim::$9 ← (byte) anim::xidx#4 - (byte) sinlen_x#0 - (byte) anim::xidx#2 ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$9 + (byte~) anim::$9 ← (byte) anim::xidx#4 - (byte) sinlen_x#0 + (byte) anim::xidx#2 ← (byte~) anim::$9 to:anim::@2 anim::@3: scope:[anim] from anim::@2 anim::@7 (byte) sin_idx_y#19 ← phi( anim::@2/(byte) sin_idx_y#22 anim::@7/(byte) sin_idx_y#23 ) @@ -2954,8 +2954,8 @@ anim::@3: scope:[anim] from anim::@2 anim::@7 (byte) anim::xidx#5 ← phi( anim::@2/(byte) anim::xidx#6 anim::@7/(byte) anim::xidx#7 ) (byte) anim::j#2 ← phi( anim::@2/(byte) anim::j#3 anim::@7/(byte) anim::j#4 ) (byte) anim::j2#3 ← phi( anim::@2/(byte) anim::j2#4 anim::@7/(byte) anim::j2#5 ) - (byte/signed byte/word/signed word/dword/signed dword~) anim::$14 ← (byte) anim::j2#3 - (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) anim::j2#1 ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$14 + (byte/signed word/word/dword/signed dword~) anim::$14 ← (byte) anim::j2#3 - (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) anim::j2#1 ← (byte/signed word/word/dword/signed dword~) anim::$14 (byte) anim::j#1 ← ++ (byte) anim::j#2 (boolean~) anim::$15 ← (byte) anim::j#1 != (byte/signed byte/word/signed word/dword/signed dword) 7 if((boolean~) anim::$15) goto anim::@1 @@ -2968,8 +2968,8 @@ anim::@7: scope:[anim] from anim::@2 (byte) anim::j#4 ← phi( anim::@2/(byte) anim::j#3 ) (byte) anim::j2#5 ← phi( anim::@2/(byte) anim::j2#4 ) (byte) anim::yidx#5 ← phi( anim::@2/(byte) anim::yidx#1 ) - (byte/signed byte/word/signed word/dword/signed dword~) anim::$13 ← (byte) anim::yidx#5 - (byte) sinlen_y#0 - (byte) anim::yidx#2 ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$13 + (byte~) anim::$13 ← (byte) anim::yidx#5 - (byte) sinlen_y#0 + (byte) anim::yidx#2 ← (byte~) anim::$13 to:anim::@3 anim::@8: scope:[anim] from anim::@3 (byte) sin_idx_y#14 ← phi( anim::@3/(byte) sin_idx_y#19 ) @@ -3035,11 +3035,11 @@ place_sprites::@1: scope:[place_sprites] from place_sprites place_sprites::@1 *((byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 *((byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte/signed byte/word/signed word/dword/signed dword) 80 *((byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 - (byte/word~) place_sprites::$3 ← (byte) place_sprites::spr_x#2 + (byte/signed byte/word/signed word/dword/signed dword) 32 - (byte) place_sprites::spr_x#1 ← (byte/word~) place_sprites::$3 + (byte/signed word/word/dword/signed dword~) place_sprites::$3 ← (byte) place_sprites::spr_x#2 + (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte) place_sprites::spr_x#1 ← (byte/signed word/word/dword/signed dword~) place_sprites::$3 (byte/signed byte/word/signed word/dword/signed dword~) place_sprites::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 7 ^ (byte/signed byte/word/signed word/dword/signed dword) 5 - (byte~) place_sprites::$5 ← (byte) place_sprites::col#2 ^ (byte/signed byte/word/signed word/dword/signed dword~) place_sprites::$4 - (byte) place_sprites::col#1 ← (byte~) place_sprites::$5 + (byte/word/dword~) place_sprites::$5 ← (byte) place_sprites::col#2 ^ (byte/signed byte/word/signed word/dword/signed dword~) place_sprites::$4 + (byte) place_sprites::col#1 ← (byte/word/dword~) place_sprites::$5 (byte) place_sprites::j2#1 ← ++ (byte) place_sprites::j2#3 (byte) place_sprites::j2#2 ← ++ (byte) place_sprites::j2#1 (byte) place_sprites::j#1 ← ++ (byte) place_sprites::j#2 @@ -3509,12 +3509,12 @@ SYMBOL TABLE SSA (byte*) addMEMtoFAC::mem#2 (void()) anim() (byte/signed byte/word/signed word/dword/signed dword~) anim::$0 -(byte/word~) anim::$1 -(byte/word~) anim::$10 +(byte/signed word/word/dword/signed dword~) anim::$1 +(byte/signed word/word/dword/signed dword~) anim::$10 (boolean~) anim::$11 (boolean~) anim::$12 -(byte/signed byte/word/signed word/dword/signed dword~) anim::$13 -(byte/signed byte/word/signed word/dword/signed dword~) anim::$14 +(byte~) anim::$13 +(byte/signed word/word/dword/signed dword~) anim::$14 (boolean~) anim::$15 (boolean~) anim::$16 (boolean~) anim::$17 @@ -3524,10 +3524,10 @@ SYMBOL TABLE SSA (byte~) anim::$3 (byte~) anim::$4 (byte~) anim::$5 -(byte/word~) anim::$6 +(byte/signed word/word/dword/signed dword~) anim::$6 (boolean~) anim::$7 (boolean~) anim::$8 -(byte/signed byte/word/signed word/dword/signed dword~) anim::$9 +(byte~) anim::$9 (label) anim::@1 (label) anim::@10 (label) anim::@2 @@ -3888,7 +3888,7 @@ SYMBOL TABLE SSA (word) getFAC::w (word) getFAC::w#0 (void()) init() -(byte/word~) init::$1 +(byte/signed word/word/dword/signed dword~) init::$1 (boolean~) init::$2 (byte*~) init::$7 (label) init::@1 @@ -3929,9 +3929,9 @@ SYMBOL TABLE SSA (byte*~) place_sprites::$0 (byte*~) place_sprites::$1 (byte~) place_sprites::$2 -(byte/word~) place_sprites::$3 +(byte/signed word/word/dword/signed dword~) place_sprites::$3 (byte/signed byte/word/signed word/dword/signed dword~) place_sprites::$4 -(byte~) place_sprites::$5 +(byte/word/dword~) place_sprites::$5 (boolean~) place_sprites::$6 (label) place_sprites::@1 (label) place_sprites::@return @@ -4326,24 +4326,24 @@ Alias (byte*) progress_cursor#24 = (byte*) progress_cursor#33 Alias (byte) progress_idx#12 = (byte) progress_idx#26 (byte) progress_idx#25 Alias (byte*) progress_cursor#11 = (byte*) progress_cursor#25 (byte*) progress_cursor#23 Alias (byte) progress_idx#35 = (byte) progress_idx#39 (byte) progress_idx#7 -Alias (word) anim::x#0 = (byte/word~) anim::$1 +Alias (word) anim::x#0 = (byte/signed word/word/dword/signed dword~) anim::$1 Alias (byte) anim::x_msb#1 = (byte~) anim::$4 (byte) anim::x_msb#7 -Alias (byte) anim::xidx#1 = (byte/word~) anim::$6 (byte) anim::xidx#4 -Alias (byte) anim::yidx#1 = (byte/word~) anim::$10 (byte) anim::yidx#5 +Alias (byte) anim::xidx#1 = (byte/signed word/word/dword/signed dword~) anim::$6 (byte) anim::xidx#4 +Alias (byte) anim::yidx#1 = (byte/signed word/word/dword/signed dword~) anim::$10 (byte) anim::yidx#5 Alias (byte) anim::yidx#3 = (byte) anim::yidx#7 Alias (byte) anim::j2#2 = (byte) anim::j2#6 Alias (byte) anim::j#5 = (byte) anim::j#6 Alias (byte) sin_idx_x#24 = (byte) sin_idx_x#25 Alias (byte) sin_idx_y#25 = (byte) sin_idx_y#26 -Alias (byte) anim::xidx#2 = (byte/signed byte/word/signed word/dword/signed dword~) anim::$9 -Alias (byte) anim::j2#1 = (byte/signed byte/word/signed word/dword/signed dword~) anim::$14 +Alias (byte) anim::xidx#2 = (byte~) anim::$9 +Alias (byte) anim::j2#1 = (byte/signed word/word/dword/signed dword~) anim::$14 Alias (byte) anim::j2#4 = (byte) anim::j2#5 Alias (byte) anim::j#3 = (byte) anim::j#4 Alias (byte) anim::xidx#6 = (byte) anim::xidx#7 Alias (byte) anim::x_msb#5 = (byte) anim::x_msb#6 Alias (byte) sin_idx_x#18 = (byte) sin_idx_x#19 Alias (byte) sin_idx_y#22 = (byte) sin_idx_y#23 -Alias (byte) anim::yidx#2 = (byte/signed byte/word/signed word/dword/signed dword~) anim::$13 +Alias (byte) anim::yidx#2 = (byte~) anim::$13 Alias (byte) anim::x_msb#3 = (byte) anim::x_msb#4 Alias (byte) sin_idx_x#10 = (byte) sin_idx_x#14 Alias (byte) sin_idx_y#14 = (byte) sin_idx_y#19 (byte) sin_idx_y#15 @@ -4352,8 +4352,8 @@ Alias (byte) sin_idx_x#11 = (byte) sin_idx_x#15 (byte) sin_idx_x#5 Alias (byte) sin_idx_y#11 = (byte) sin_idx_y#16 (byte) sin_idx_y#5 Alias (byte*) place_sprites::sprites_ptr#0 = (byte*~) place_sprites::$0 Alias (byte) place_sprites::spr_id#0 = (byte~) place_sprites::$2 -Alias (byte) place_sprites::spr_x#1 = (byte/word~) place_sprites::$3 -Alias (byte) place_sprites::col#1 = (byte~) place_sprites::$5 +Alias (byte) place_sprites::spr_x#1 = (byte/signed word/word/dword/signed dword~) place_sprites::$3 +Alias (byte) place_sprites::col#1 = (byte/word/dword~) place_sprites::$5 Alias (byte*) gen_sprites::spr#2 = (byte*) gen_sprites::spr#3 Alias (byte) gen_sprites::i#2 = (byte) gen_sprites::i#3 Alias (byte*) gen_sprites::spr#1 = (byte*~) gen_sprites::$1 @@ -4766,6 +4766,7 @@ Multiple usages for variable. Not optimizing sub-constant (byte*) gen_sprites::s Multiple usages for variable. Not optimizing sub-constant (byte*) gen_chargen_sprite::sprite#4 Fixing inline constructor with getFAC::$0 ← *(memHi#0) w= *(memLo#0) Succesful SSA optimization Pass2FixInlineConstructors +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) init::$1 ← (byte) init::i#2 Eliminating unused constant (const byte) progress_idx#35 Succesful SSA optimization PassNEliminateUnusedVars Eliminating Noop Cast (byte*) prepareMEM::mem#0 ← ((byte*)) (word) setFAC::w#5 @@ -4805,7 +4806,7 @@ Not aliassing across scopes: progress_cursor#34 progress_cursor#22 Not aliassing across scopes: getFAC::return#2 getFAC::return#0 Not aliassing across scopes: gen_sintab::$23 getFAC::return#2 Alias (word) getFAC::return#0 = (word~) getFAC::$0 -Alias (byte) init::i#2 = (byte/word~) init::$1 +Alias (byte) init::i#2 = (byte~) init::$1 Succesful SSA optimization Pass2AliasElimination Not aliassing across scopes: prepareMEM::mem#5 prepareMEM::mem#2 Not aliassing across scopes: setFAC::w#5 setFAC::w#0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.cfg b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.cfg index 6c9cfa073..c6c380d8a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.cfg @@ -249,8 +249,8 @@ mul16u::@return: scope:[mul16u] from mul16u::@1 [125] return [ mul16u::res#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 ] ) to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [126] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) - [127] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) + [126] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) + [127] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) to:mul16u::@7 mul16u::@7: scope:[mul16u] from mul16u::@2 [128] (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:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.log b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.log index cbd213178..57db313d4 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.log @@ -482,8 +482,8 @@ divr8u::@1: (boolean~) divr8u::$2 ← (byte~) divr8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr8u::$3 ← ! (boolean~) divr8u::$2 if((boolean~) divr8u::$3) goto divr8u::@2 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 divr8u::@2: (byte~) divr8u::$5 ← (byte) divr8u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) divr8u::dividend ← (byte~) divr8u::$5 @@ -493,8 +493,8 @@ divr8u::@2: (boolean~) divr8u::$8 ← ! (boolean~) divr8u::$7 if((boolean~) divr8u::$8) goto divr8u::@3 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 divr8u::@3: (byte) divr8u::i ← ++ (byte) divr8u::i (boolean~) divr8u::$10 ← (byte) divr8u::i != (byte/signed byte/word/signed word/dword/signed dword) 8 @@ -518,8 +518,8 @@ divr16u::@1: (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr16u::$4 ← ! (boolean~) divr16u::$3 if((boolean~) divr16u::$4) goto divr16u::@2 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 divr16u::@2: (word~) divr16u::$6 ← (word) divr16u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::dividend ← (word~) divr16u::$6 @@ -587,8 +587,8 @@ div8s::@2: (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 goto div8s::@4 div8s::@3: (byte~) div8s::$10 ← ((byte)) (signed byte) div8s::divisor @@ -641,8 +641,8 @@ div16s::@2: (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 goto div16s::@4 div16s::@3: (word~) div16s::$10 ← ((word)) (signed word) div16s::divisor @@ -710,8 +710,8 @@ proc (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - lval((byte~) mul8s::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + lval((byte~) mul8s::$5) ← (byte~) mul8s::$8 mul8s::@1: (boolean~) mul8s::$9 ← (signed byte) mul8s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul8s::$10 ← ! (boolean~) mul8s::$9 @@ -719,8 +719,8 @@ mul8s::@1: (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - lval((byte~) mul8s::$11) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + lval((byte~) mul8s::$11) ← (byte~) mul8s::$14 mul8s::@2: (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m (signed word) mul8s::return ← (signed word~) mul8s::$15 @@ -740,8 +740,8 @@ proc (signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - lval((byte~) mul8su::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + lval((byte~) mul8su::$5) ← (byte~) mul8su::$8 mul8su::@1: (signed word~) mul8su::$9 ← ((signed word)) (word) mul8su::m (signed word) mul8su::return ← (signed word~) mul8su::$9 @@ -758,8 +758,8 @@ mul16u::@1: if((boolean~) mul16u::$0) goto mul16u::@2 goto mul16u::@3 mul16u::@2: - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 (dword~) mul16u::$4 ← (dword) mul16u::res + (dword) mul16u::mb @@ -923,16 +923,16 @@ sin8s::@2: (byte) sin8s::DIV_6 ← (byte/signed byte/word/signed word/dword/signed dword) 43 (byte~) sin8s::$10 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::DIV_6 (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) sin8s::x3_6 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 - (byte) sin8s::usinx ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 + (byte) sin8s::usinx ← (byte~) sin8s::$11 (byte~) sin8s::$12 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x4 ← (byte~) sin8s::$12 (byte~) sin8s::$13 ← call mulu8_sel (byte) sin8s::x4 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x5 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 - (byte) sin8s::usinx ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 + (byte) sin8s::usinx ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -1100,8 +1100,8 @@ main::@2: (void~) main::$6 ← call print_str (string) " @" (signed word*~) main::$7 ← (signed word*) main::st1 + (byte/signed byte/word/signed word/dword/signed dword) 2 (signed word*) main::st1 ← (signed word*~) main::$7 - (word~) main::$8 ← (word) main::wavelength * (byte/signed byte/word/signed word/dword/signed dword) 2 - (signed word*~) main::$9 ← (signed word[120]) main::sintab1 + (word~) main::$8 + (word/signed dword/dword~) main::$8 ← (word) main::wavelength * (byte/signed byte/word/signed word/dword/signed dword) 2 + (signed word*~) main::$9 ← (signed word[120]) main::sintab1 + (word/signed dword/dword~) main::$8 (boolean~) main::$10 ← (signed word*) main::st1 < (signed word*~) main::$9 if((boolean~) main::$10) goto main::@1 main::@return: @@ -1138,7 +1138,7 @@ SYMBOLS (boolean~) div16s::$6 (signed word~) div16s::$7 (word~) div16s::$8 -(byte~) div16s::$9 +(byte/word/dword~) div16s::$9 (label) div16s::@1 (label) div16s::@2 (label) div16s::@3 @@ -1191,7 +1191,7 @@ SYMBOLS (boolean~) div8s::$6 (signed byte~) div8s::$7 (byte~) div8s::$8 -(byte~) div8s::$9 +(byte/word/dword~) div8s::$9 (label) div8s::@1 (label) div8s::@2 (label) div8s::@3 @@ -1220,7 +1220,7 @@ SYMBOLS (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -1241,12 +1241,12 @@ SYMBOLS (boolean~) divr8u::$10 (boolean~) divr8u::$2 (boolean~) divr8u::$3 -(byte~) divr8u::$4 +(byte/word/dword~) divr8u::$4 (byte~) divr8u::$5 (byte~) divr8u::$6 (boolean~) divr8u::$7 (boolean~) divr8u::$8 -(byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 +(byte~) divr8u::$9 (label) divr8u::@1 (label) divr8u::@2 (label) divr8u::@3 @@ -1268,7 +1268,7 @@ SYMBOLS (void~) main::$5 (void~) main::$6 (signed word*~) main::$7 -(word~) main::$8 +(word/signed dword/dword~) main::$8 (signed word*~) main::$9 (label) main::@1 (label) main::@2 @@ -1303,7 +1303,7 @@ SYMBOLS (signed dword) mul16s::return (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (boolean~) mul16u::$0 -(byte~) mul16u::$1 +(byte/word~) mul16u::$1 (boolean~) mul16u::$2 (boolean~) mul16u::$3 (dword~) mul16u::$4 @@ -1326,7 +1326,7 @@ SYMBOLS (byte~) mul8s::$11 (byte~) mul8s::$12 (byte~) mul8s::$13 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 +(byte~) mul8s::$14 (signed word~) mul8s::$15 (word~) mul8s::$2 (boolean~) mul8s::$3 @@ -1334,7 +1334,7 @@ SYMBOLS (byte~) mul8s::$5 (byte~) mul8s::$6 (byte~) mul8s::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 +(byte~) mul8s::$8 (boolean~) mul8s::$9 (label) mul8s::@1 (label) mul8s::@2 @@ -1352,7 +1352,7 @@ SYMBOLS (byte~) mul8su::$5 (byte~) mul8su::$6 (byte~) mul8su::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 +(byte~) mul8su::$8 (signed word~) mul8su::$9 (label) mul8su::@1 (label) mul8su::@return @@ -1529,11 +1529,11 @@ SYMBOLS (boolean~) sin8s::$0 (boolean~) sin8s::$1 (byte~) sin8s::$10 -(byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 +(byte~) sin8s::$11 (byte~) sin8s::$12 (byte~) sin8s::$13 (byte~) sin8s::$14 -(byte/word~) sin8s::$15 +(byte~) sin8s::$15 (boolean~) sin8s::$16 (boolean~) sin8s::$17 (signed byte~) sin8s::$18 @@ -1626,8 +1626,8 @@ divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4 if((boolean~) divr8u::$8) goto divr8u::@3 to:divr8u::@5 divr8u::@4: scope:[divr8u] from divr8u::@1 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 to:divr8u::@2 divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 (byte) divr8u::i ← ++ (byte) divr8u::i @@ -1636,8 +1636,8 @@ divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 to:divr8u::@6 divr8u::@5: scope:[divr8u] from divr8u::@2 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 to:divr8u::@3 divr8u::@6: scope:[divr8u] from divr8u::@3 (byte) rem8u ← (byte) divr8u::rem @@ -1675,8 +1675,8 @@ divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 if((boolean~) divr16u::$9) goto divr16u::@3 to:divr16u::@5 divr16u::@4: scope:[divr16u] from divr16u::@1 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (byte) divr16u::i ← ++ (byte) divr16u::i @@ -1764,8 +1764,8 @@ div8s::@9: scope:[div8s] from div8s::@2 (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 to:div8s::@4 div8s::@4: scope:[div8s] from div8s::@3 div8s::@9 (byte~) div8s::$11 ← call div8u (byte) div8s::dividendu (byte) div8s::divisoru @@ -1838,8 +1838,8 @@ div16s::@9: scope:[div16s] from div16s::@2 (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 to:div16s::@4 div16s::@4: scope:[div16s] from div16s::@3 div16s::@9 (word~) div16s::$11 ← call div16u (word) div16s::dividendu (word) div16s::divisoru @@ -1937,9 +1937,9 @@ mul8s::@3: scope:[mul8s] from mul8s (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + (byte~) mul8s::$16 ← (byte~) mul8s::$8 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$16 to:mul8s::@1 mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m @@ -1949,9 +1949,9 @@ mul8s::@4: scope:[mul8s] from mul8s::@1 (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + (byte~) mul8s::$17 ← (byte~) mul8s::$14 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$17 to:mul8s::@2 mul8s::@return: scope:[mul8s] from mul8s::@2 mul8s::@5 (signed word) mul8s::return ← (signed word) mul8s::return @@ -1978,9 +1978,9 @@ mul8su::@2: scope:[mul8su] from mul8su (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 - (word) mul8su::m ← (word) mul8su::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + (byte~) mul8su::$10 ← (byte~) mul8su::$8 + (word) mul8su::m ← (word) mul8su::m hi= (byte~) mul8su::$10 to:mul8su::@1 mul8su::@return: scope:[mul8su] from mul8su::@1 mul8su::@3 (signed word) mul8su::return ← (signed word) mul8su::return @@ -1999,8 +1999,8 @@ mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 if((boolean~) mul16u::$0) goto mul16u::@2 to:mul16u::@5 mul16u::@2: scope:[mul16u] from mul16u::@1 mul16u::@6 - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 to:mul16u::@7 @@ -2216,16 +2216,16 @@ sin8s::@2: scope:[sin8s] from sin8s::@1 sin8s::@6 (byte) sin8s::DIV_6 ← (byte/signed byte/word/signed word/dword/signed dword) 43 (byte~) sin8s::$10 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::DIV_6 (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) sin8s::x3_6 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 - (byte) sin8s::usinx ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 + (byte) sin8s::usinx ← (byte~) sin8s::$11 (byte~) sin8s::$12 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x4 ← (byte~) sin8s::$12 (byte~) sin8s::$13 ← call mulu8_sel (byte) sin8s::x4 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x5 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 - (byte) sin8s::usinx ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 + (byte) sin8s::usinx ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -2468,8 +2468,8 @@ main::@2: scope:[main] from main::@1 main::@3 (void~) main::$6 ← call print_str (string) " @" (signed word*~) main::$7 ← (signed word*) main::st1 + (byte/signed byte/word/signed word/dword/signed dword) 2 (signed word*) main::st1 ← (signed word*~) main::$7 - (word~) main::$8 ← (word) main::wavelength * (byte/signed byte/word/signed word/dword/signed dword) 2 - (signed word*~) main::$9 ← (signed word[120]) main::sintab1 + (word~) main::$8 + (word/signed dword/dword~) main::$8 ← (word) main::wavelength * (byte/signed byte/word/signed word/dword/signed dword) 2 + (signed word*~) main::$9 ← (signed word[120]) main::sintab1 + (word/signed dword/dword~) main::$8 (boolean~) main::$10 ← (signed word*) main::st1 < (signed word*~) main::$9 if((boolean~) main::$10) goto main::@1 to:main::@4 @@ -2631,8 +2631,8 @@ divr16u::@4: scope:[divr16u] from divr16u::@1 (word) divr16u::quotient#7 ← phi( divr16u::@1/(word) divr16u::quotient#6 ) (word) divr16u::dividend#7 ← phi( divr16u::@1/(word) divr16u::dividend#3 ) (word) divr16u::rem#7 ← phi( divr16u::@1/(word) divr16u::rem#0 ) - (word~) divr16u::$5 ← (word) divr16u::rem#7 | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem#1 ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem#7 | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem#1 ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#7 ← phi( divr16u::@2/(word) divr16u::divisor#2 divr16u::@5/(word) divr16u::divisor#3 ) @@ -2727,8 +2727,8 @@ mul16u::@2: scope:[mul16u] from mul16u::@1 (dword) mul16u::res#5 ← phi( mul16u::@1/(dword) mul16u::res#4 ) (dword) mul16u::mb#4 ← phi( mul16u::@1/(dword) mul16u::mb#5 ) (word) mul16u::a#3 ← phi( mul16u::@1/(word) mul16u::a#2 ) - (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 to:mul16u::@7 @@ -3174,8 +3174,8 @@ main::@8: scope:[main] from main::@7 (byte*) char_cursor#18 ← (byte*) char_cursor#38 (signed word*~) main::$7 ← (signed word*) main::st1#3 + (byte/signed byte/word/signed word/dword/signed dword) 2 (signed word*) main::st1#1 ← (signed word*~) main::$7 - (word~) main::$8 ← (word) main::wavelength#1 * (byte/signed byte/word/signed word/dword/signed dword) 2 - (signed word*~) main::$9 ← (signed word[120]) main::sintab1#0 + (word~) main::$8 + (word/signed dword/dword~) main::$8 ← (word) main::wavelength#1 * (byte/signed byte/word/signed word/dword/signed dword) 2 + (signed word*~) main::$9 ← (signed word[120]) main::sintab1#0 + (word/signed dword/dword~) main::$8 (boolean~) main::$10 ← (signed word*) main::st1#1 < (signed word*~) main::$9 if((boolean~) main::$10) goto main::@1 to:main::@return @@ -3332,7 +3332,7 @@ SYMBOL TABLE SSA (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -3427,7 +3427,7 @@ SYMBOL TABLE SSA (boolean~) main::$2 (boolean~) main::$3 (signed word*~) main::$7 -(word~) main::$8 +(word/signed dword/dword~) main::$8 (signed word*~) main::$9 (label) main::@1 (label) main::@2 @@ -3468,7 +3468,7 @@ SYMBOL TABLE SSA (word) main::wavelength#8 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (boolean~) mul16u::$0 -(byte~) mul16u::$1 +(byte/word~) mul16u::$1 (boolean~) mul16u::$2 (boolean~) mul16u::$3 (dword~) mul16u::$4 @@ -3791,7 +3791,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Inversing boolean not (boolean~) divr16u::$4 ← (byte~) divr16u::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (boolean~) divr16u::$9 ← (word) divr16u::rem#6 < (word) divr16u::divisor#2 from (boolean~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2 -Inversing boolean not (boolean~) mul16u::$3 ← (byte~) mul16u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) mul16u::$3 ← (byte/word~) mul16u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (boolean~) sin16s::$1 ← (dword) sin16s::x#3 < (dword) PI_u4f28#0 from (boolean~) sin16s::$0 ← (dword) sin16s::x#3 >= (dword) PI_u4f28#0 Inversing boolean not (boolean~) sin16s::$4 ← (dword) sin16s::x#4 < (dword) PI_HALF_u4f28#0 from (boolean~) sin16s::$3 ← (dword) sin16s::x#4 >= (dword) PI_HALF_u4f28#0 Inversing boolean not (boolean~) sin16s::$19 ← (byte) sin16s::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) sin16s::$18 ← (byte) sin16s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -3894,7 +3894,7 @@ Alias (word) divr16u::dividend#3 = (word) divr16u::dividend#7 Alias (word) divr16u::quotient#6 = (word) divr16u::quotient#7 Alias (word) divr16u::divisor#4 = (word) divr16u::divisor#5 Alias (byte) divr16u::i#5 = (byte) divr16u::i#6 -Alias (word) divr16u::rem#1 = (word~) divr16u::$5 +Alias (word) divr16u::rem#1 = (word/dword~) divr16u::$5 Alias (word) divr16u::rem#6 = (word) divr16u::rem#8 Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#3 Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 @@ -4251,7 +4251,7 @@ Simple Condition (boolean~) divr16u::$4 if((byte~) divr16u::$2==(byte/signed byt Simple Condition (boolean~) divr16u::$9 if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 Simple Condition (boolean~) divr16u::$11 if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 Simple Condition (boolean~) mul16u::$0 if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 -Simple Condition (boolean~) mul16u::$3 if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 +Simple Condition (boolean~) mul16u::$3 if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 Simple Condition (boolean~) sin16s_gen::$4 if((word) sin16s_gen::i#1<(word) sin16s_gen::wavelength#0) goto sin16s_gen::@1 Simple Condition (boolean~) sin16s::$1 if((dword) sin16s::x#0<(dword) PI_u4f28#0) goto sin16s::@1 Simple Condition (boolean~) sin16s::$4 if((dword) sin16s::x#4<(dword) PI_HALF_u4f28#0) goto sin16s::@2 @@ -4294,7 +4294,7 @@ Constant (const byte*) print_cls::$0 = SCREEN#0+1000 Constant (const byte*) line_cursor#1 = SCREEN#0 Constant (const signed word[120]) sin16s_gen::sintab#1 = main::sintab1#0 Constant (const word) sin16s_gen::wavelength#0 = main::wavelength#0 -Constant (const word) main::$8 = main::wavelength#0*2 +Constant (const word/signed dword/dword) main::$8 = main::wavelength#0*2 Succesful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a Statement [122] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [124] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [126] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [126] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [128] (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:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 Statement [134] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:59 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [135] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:59 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a @@ -6952,7 +6952,7 @@ Statement [119] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mu Statement [120] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a Statement [122] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [124] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [126] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [126] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [128] (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:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 Statement [134] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:59 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a Statement [135] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:59 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a @@ -7963,10 +7963,10 @@ mul16u: { rts //SEG251 mul16u::@2 b2: - //SEG252 [126] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 + //SEG252 [126] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 lda a and #1 - //SEG253 [127] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 + //SEG253 [127] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b4_from_b2 jmp b7 @@ -8478,7 +8478,7 @@ FINAL SYMBOL TABLE (word) main::wavelength (const word) main::wavelength#0 wavelength = (byte/signed byte/word/signed word/dword/signed dword) 120 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) -(byte~) mul16u::$1 reg byte a 202.0 +(byte/word~) mul16u::$1 reg byte a 202.0 (label) mul16u::@1 (label) mul16u::@2 (label) mul16u::@4 @@ -9391,10 +9391,10 @@ mul16u: { rts //SEG251 mul16u::@2 b2: - //SEG252 [126] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 + //SEG252 [126] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 lda a and #1 - //SEG253 [127] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 + //SEG253 [127] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b4 //SEG254 mul16u::@7 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.sym b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.sym index cec2f1c6d..5f0e4c397 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.sym @@ -90,7 +90,7 @@ (word) main::wavelength (const word) main::wavelength#0 wavelength = (byte/signed byte/word/signed word/dword/signed dword) 120 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) -(byte~) mul16u::$1 reg byte a 202.0 +(byte/word~) mul16u::$1 reg byte a 202.0 (label) mul16u::@1 (label) mul16u::@2 (label) mul16u::@4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16b.cfg b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16b.cfg index c5cdf6d76..d46e4d229 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16b.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16b.cfg @@ -256,8 +256,8 @@ mul16u::@return: scope:[mul16u] from mul16u::@1 [128] return [ mul16u::res#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 ] ) to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [129] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) - [130] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) + [129] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) + [130] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) to:mul16u::@7 mul16u::@7: scope:[mul16u] from mul16u::@2 [131] (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:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16b.log b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16b.log index 5efaf4ced..792d20c1c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16b.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16b.log @@ -546,8 +546,8 @@ divr8u::@1: (boolean~) divr8u::$2 ← (byte~) divr8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr8u::$3 ← ! (boolean~) divr8u::$2 if((boolean~) divr8u::$3) goto divr8u::@2 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 divr8u::@2: (byte~) divr8u::$5 ← (byte) divr8u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) divr8u::dividend ← (byte~) divr8u::$5 @@ -557,8 +557,8 @@ divr8u::@2: (boolean~) divr8u::$8 ← ! (boolean~) divr8u::$7 if((boolean~) divr8u::$8) goto divr8u::@3 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 divr8u::@3: (byte) divr8u::i ← ++ (byte) divr8u::i (boolean~) divr8u::$10 ← (byte) divr8u::i != (byte/signed byte/word/signed word/dword/signed dword) 8 @@ -582,8 +582,8 @@ divr16u::@1: (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr16u::$4 ← ! (boolean~) divr16u::$3 if((boolean~) divr16u::$4) goto divr16u::@2 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 divr16u::@2: (word~) divr16u::$6 ← (word) divr16u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::dividend ← (word~) divr16u::$6 @@ -651,8 +651,8 @@ div8s::@2: (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 goto div8s::@4 div8s::@3: (byte~) div8s::$10 ← ((byte)) (signed byte) div8s::divisor @@ -705,8 +705,8 @@ div16s::@2: (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 goto div16s::@4 div16s::@3: (word~) div16s::$10 ← ((word)) (signed word) div16s::divisor @@ -774,8 +774,8 @@ proc (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - lval((byte~) mul8s::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + lval((byte~) mul8s::$5) ← (byte~) mul8s::$8 mul8s::@1: (boolean~) mul8s::$9 ← (signed byte) mul8s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul8s::$10 ← ! (boolean~) mul8s::$9 @@ -783,8 +783,8 @@ mul8s::@1: (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - lval((byte~) mul8s::$11) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + lval((byte~) mul8s::$11) ← (byte~) mul8s::$14 mul8s::@2: (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m (signed word) mul8s::return ← (signed word~) mul8s::$15 @@ -804,8 +804,8 @@ proc (signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - lval((byte~) mul8su::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + lval((byte~) mul8su::$5) ← (byte~) mul8su::$8 mul8su::@1: (signed word~) mul8su::$9 ← ((signed word)) (word) mul8su::m (signed word) mul8su::return ← (signed word~) mul8su::$9 @@ -822,8 +822,8 @@ mul16u::@1: if((boolean~) mul16u::$0) goto mul16u::@2 goto mul16u::@3 mul16u::@2: - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 (dword~) mul16u::$4 ← (dword) mul16u::res + (dword) mul16u::mb @@ -987,16 +987,16 @@ sin8s::@2: (byte) sin8s::DIV_6 ← (byte/signed byte/word/signed word/dword/signed dword) 43 (byte~) sin8s::$10 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::DIV_6 (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) sin8s::x3_6 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 - (byte) sin8s::usinx ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 + (byte) sin8s::usinx ← (byte~) sin8s::$11 (byte~) sin8s::$12 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x4 ← (byte~) sin8s::$12 (byte~) sin8s::$13 ← call mulu8_sel (byte) sin8s::x4 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x5 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 - (byte) sin8s::usinx ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 + (byte) sin8s::usinx ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -1276,7 +1276,7 @@ SYMBOLS (boolean~) div16s::$6 (signed word~) div16s::$7 (word~) div16s::$8 -(byte~) div16s::$9 +(byte/word/dword~) div16s::$9 (label) div16s::@1 (label) div16s::@2 (label) div16s::@3 @@ -1329,7 +1329,7 @@ SYMBOLS (boolean~) div8s::$6 (signed byte~) div8s::$7 (byte~) div8s::$8 -(byte~) div8s::$9 +(byte/word/dword~) div8s::$9 (label) div8s::@1 (label) div8s::@2 (label) div8s::@3 @@ -1358,7 +1358,7 @@ SYMBOLS (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -1379,12 +1379,12 @@ SYMBOLS (boolean~) divr8u::$10 (boolean~) divr8u::$2 (boolean~) divr8u::$3 -(byte~) divr8u::$4 +(byte/word/dword~) divr8u::$4 (byte~) divr8u::$5 (byte~) divr8u::$6 (boolean~) divr8u::$7 (boolean~) divr8u::$8 -(byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 +(byte~) divr8u::$9 (label) divr8u::@1 (label) divr8u::@2 (label) divr8u::@3 @@ -1445,7 +1445,7 @@ SYMBOLS (signed dword) mul16s::return (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (boolean~) mul16u::$0 -(byte~) mul16u::$1 +(byte/word~) mul16u::$1 (boolean~) mul16u::$2 (boolean~) mul16u::$3 (dword~) mul16u::$4 @@ -1468,7 +1468,7 @@ SYMBOLS (byte~) mul8s::$11 (byte~) mul8s::$12 (byte~) mul8s::$13 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 +(byte~) mul8s::$14 (signed word~) mul8s::$15 (word~) mul8s::$2 (boolean~) mul8s::$3 @@ -1476,7 +1476,7 @@ SYMBOLS (byte~) mul8s::$5 (byte~) mul8s::$6 (byte~) mul8s::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 +(byte~) mul8s::$8 (boolean~) mul8s::$9 (label) mul8s::@1 (label) mul8s::@2 @@ -1494,7 +1494,7 @@ SYMBOLS (byte~) mul8su::$5 (byte~) mul8su::$6 (byte~) mul8su::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 +(byte~) mul8su::$8 (signed word~) mul8su::$9 (label) mul8su::@1 (label) mul8su::@return @@ -1723,11 +1723,11 @@ SYMBOLS (boolean~) sin8s::$0 (boolean~) sin8s::$1 (byte~) sin8s::$10 -(byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 +(byte~) sin8s::$11 (byte~) sin8s::$12 (byte~) sin8s::$13 (byte~) sin8s::$14 -(byte/word~) sin8s::$15 +(byte~) sin8s::$15 (boolean~) sin8s::$16 (boolean~) sin8s::$17 (signed byte~) sin8s::$18 @@ -1820,8 +1820,8 @@ divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4 if((boolean~) divr8u::$8) goto divr8u::@3 to:divr8u::@5 divr8u::@4: scope:[divr8u] from divr8u::@1 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 to:divr8u::@2 divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 (byte) divr8u::i ← ++ (byte) divr8u::i @@ -1830,8 +1830,8 @@ divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 to:divr8u::@6 divr8u::@5: scope:[divr8u] from divr8u::@2 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 to:divr8u::@3 divr8u::@6: scope:[divr8u] from divr8u::@3 (byte) rem8u ← (byte) divr8u::rem @@ -1869,8 +1869,8 @@ divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 if((boolean~) divr16u::$9) goto divr16u::@3 to:divr16u::@5 divr16u::@4: scope:[divr16u] from divr16u::@1 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (byte) divr16u::i ← ++ (byte) divr16u::i @@ -1958,8 +1958,8 @@ div8s::@9: scope:[div8s] from div8s::@2 (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 to:div8s::@4 div8s::@4: scope:[div8s] from div8s::@3 div8s::@9 (byte~) div8s::$11 ← call div8u (byte) div8s::dividendu (byte) div8s::divisoru @@ -2032,8 +2032,8 @@ div16s::@9: scope:[div16s] from div16s::@2 (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 to:div16s::@4 div16s::@4: scope:[div16s] from div16s::@3 div16s::@9 (word~) div16s::$11 ← call div16u (word) div16s::dividendu (word) div16s::divisoru @@ -2131,9 +2131,9 @@ mul8s::@3: scope:[mul8s] from mul8s (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + (byte~) mul8s::$16 ← (byte~) mul8s::$8 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$16 to:mul8s::@1 mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m @@ -2143,9 +2143,9 @@ mul8s::@4: scope:[mul8s] from mul8s::@1 (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + (byte~) mul8s::$17 ← (byte~) mul8s::$14 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$17 to:mul8s::@2 mul8s::@return: scope:[mul8s] from mul8s::@2 mul8s::@5 (signed word) mul8s::return ← (signed word) mul8s::return @@ -2172,9 +2172,9 @@ mul8su::@2: scope:[mul8su] from mul8su (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 - (word) mul8su::m ← (word) mul8su::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + (byte~) mul8su::$10 ← (byte~) mul8su::$8 + (word) mul8su::m ← (word) mul8su::m hi= (byte~) mul8su::$10 to:mul8su::@1 mul8su::@return: scope:[mul8su] from mul8su::@1 mul8su::@3 (signed word) mul8su::return ← (signed word) mul8su::return @@ -2193,8 +2193,8 @@ mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 if((boolean~) mul16u::$0) goto mul16u::@2 to:mul16u::@5 mul16u::@2: scope:[mul16u] from mul16u::@1 mul16u::@6 - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 to:mul16u::@7 @@ -2410,16 +2410,16 @@ sin8s::@2: scope:[sin8s] from sin8s::@1 sin8s::@6 (byte) sin8s::DIV_6 ← (byte/signed byte/word/signed word/dword/signed dword) 43 (byte~) sin8s::$10 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::DIV_6 (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) sin8s::x3_6 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 - (byte) sin8s::usinx ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 + (byte) sin8s::usinx ← (byte~) sin8s::$11 (byte~) sin8s::$12 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x4 ← (byte~) sin8s::$12 (byte~) sin8s::$13 ← call mulu8_sel (byte) sin8s::x4 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x5 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 - (byte) sin8s::usinx ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 + (byte) sin8s::usinx ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -2922,8 +2922,8 @@ divr16u::@4: scope:[divr16u] from divr16u::@1 (word) divr16u::quotient#7 ← phi( divr16u::@1/(word) divr16u::quotient#6 ) (word) divr16u::dividend#7 ← phi( divr16u::@1/(word) divr16u::dividend#3 ) (word) divr16u::rem#7 ← phi( divr16u::@1/(word) divr16u::rem#0 ) - (word~) divr16u::$5 ← (word) divr16u::rem#7 | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem#1 ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem#7 | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem#1 ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#7 ← phi( divr16u::@2/(word) divr16u::divisor#2 divr16u::@5/(word) divr16u::divisor#3 ) @@ -3018,8 +3018,8 @@ mul16u::@2: scope:[mul16u] from mul16u::@1 (dword) mul16u::res#5 ← phi( mul16u::@1/(dword) mul16u::res#4 ) (dword) mul16u::mb#4 ← phi( mul16u::@1/(dword) mul16u::mb#5 ) (word) mul16u::a#3 ← phi( mul16u::@1/(word) mul16u::a#2 ) - (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 to:mul16u::@7 @@ -3829,7 +3829,7 @@ SYMBOL TABLE SSA (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -3980,7 +3980,7 @@ SYMBOL TABLE SSA (word) main::wavelength#1 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (boolean~) mul16u::$0 -(byte~) mul16u::$1 +(byte/word~) mul16u::$1 (boolean~) mul16u::$2 (boolean~) mul16u::$3 (dword~) mul16u::$4 @@ -4464,7 +4464,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Inversing boolean not (boolean~) divr16u::$4 ← (byte~) divr16u::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (boolean~) divr16u::$9 ← (word) divr16u::rem#6 < (word) divr16u::divisor#2 from (boolean~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2 -Inversing boolean not (boolean~) mul16u::$3 ← (byte~) mul16u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) mul16u::$3 ← (byte/word~) mul16u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (boolean~) sin16s::$1 ← (dword) sin16s::x#3 < (dword) PI_u4f28#0 from (boolean~) sin16s::$0 ← (dword) sin16s::x#3 >= (dword) PI_u4f28#0 Inversing boolean not (boolean~) sin16s::$4 ← (dword) sin16s::x#4 < (dword) PI_HALF_u4f28#0 from (boolean~) sin16s::$3 ← (dword) sin16s::x#4 >= (dword) PI_HALF_u4f28#0 Inversing boolean not (boolean~) sin16s::$19 ← (byte) sin16s::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) sin16s::$18 ← (byte) sin16s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -4603,7 +4603,7 @@ Alias (word) divr16u::dividend#3 = (word) divr16u::dividend#7 Alias (word) divr16u::quotient#6 = (word) divr16u::quotient#7 Alias (word) divr16u::divisor#4 = (word) divr16u::divisor#5 Alias (byte) divr16u::i#5 = (byte) divr16u::i#6 -Alias (word) divr16u::rem#1 = (word~) divr16u::$5 +Alias (word) divr16u::rem#1 = (word/dword~) divr16u::$5 Alias (word) divr16u::rem#6 = (word) divr16u::rem#8 Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#3 Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 @@ -5079,7 +5079,7 @@ Simple Condition (boolean~) divr16u::$4 if((byte~) divr16u::$2==(byte/signed byt Simple Condition (boolean~) divr16u::$9 if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 Simple Condition (boolean~) divr16u::$11 if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 Simple Condition (boolean~) mul16u::$0 if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 -Simple Condition (boolean~) mul16u::$3 if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 +Simple Condition (boolean~) mul16u::$3 if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 Simple Condition (boolean~) sin16s_gen::$4 if((word) sin16s_gen::i#1<(word) sin16s_gen::wavelength#0) goto sin16s_gen::@1 Simple Condition (boolean~) sin16s::$1 if((dword) sin16s::x#0<(dword) PI_u4f28#0) goto sin16s::@1 Simple Condition (boolean~) sin16s::$4 if((dword) sin16s::x#4<(dword) PI_HALF_u4f28#0) goto sin16s::@2 @@ -6065,8 +6065,8 @@ mul16u::@return: scope:[mul16u] from mul16u::@1 [128] return [ mul16u::res#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 ] ) to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [129] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) - [130] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) + [129] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) + [130] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) to:mul16u::@7 mul16u::@7: scope:[mul16u] from mul16u::@2 [131] (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:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) @@ -6463,7 +6463,7 @@ VARIABLE REGISTER WEIGHTS (signed word) main::sw#0 6.6000000000000005 (word) main::wavelength (dword()) mul16u((word) mul16u::a , (word) mul16u::b) -(byte~) mul16u::$1 202.0 +(byte/word~) mul16u::$1 202.0 (word) mul16u::a (word) mul16u::a#0 101.0 (word) mul16u::a#1 1.3333333333333333 @@ -7890,11 +7890,11 @@ mul16u: { rts //SEG263 mul16u::@2 b2: - //SEG264 [129] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuz1=vwuz2_band_vbuc1 + //SEG264 [129] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuz1=vwuz2_band_vbuc1 lda a and #1 sta _1 - //SEG265 [130] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuz1_eq_0_then_la1 + //SEG265 [130] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuz1_eq_0_then_la1 lda _1 beq b4_from_b2 jmp b7 @@ -8717,7 +8717,7 @@ Removing always clobbered register reg byte x as potential for zp ZP_BYTE:68 [ s Statement [123] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#17 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:91 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:95 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:106 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:191 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:196 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:200 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:206 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:211 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#17 ] ) always clobbers reg byte a Statement [125] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [127] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [129] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [129] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [131] (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:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 Statement [136] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#2 [ div32u16u::dividend#2 div32u16u::divisor#2 divr16u::dividend#1 ] ( main:2::sin16s_genb:7::div32u16u:63 [ div32u16u::dividend#2 div32u16u::divisor#2 divr16u::dividend#1 ] main:2::sin16s_gen:5::div32u16u:167 [ div32u16u::dividend#2 div32u16u::divisor#2 divr16u::dividend#1 ] ) always clobbers reg byte a Statement [137] (word) divr16u::divisor#0 ← (word) div32u16u::divisor#2 [ div32u16u::dividend#2 div32u16u::divisor#2 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::sin16s_genb:7::div32u16u:63 [ div32u16u::dividend#2 div32u16u::divisor#2 divr16u::dividend#1 divr16u::divisor#0 ] main:2::sin16s_gen:5::div32u16u:167 [ div32u16u::dividend#2 div32u16u::divisor#2 divr16u::dividend#1 divr16u::divisor#0 ] ) always clobbers reg byte a @@ -8837,7 +8837,7 @@ Statement [122] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mu Statement [123] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#17 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:91 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:95 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:106 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:191 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:196 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:200 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:206 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:211 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#17 ] ) always clobbers reg byte a Statement [125] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [127] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [129] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [129] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [131] (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:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 Statement [136] (word) divr16u::dividend#1 ← > (dword) div32u16u::dividend#2 [ div32u16u::dividend#2 div32u16u::divisor#2 divr16u::dividend#1 ] ( main:2::sin16s_genb:7::div32u16u:63 [ div32u16u::dividend#2 div32u16u::divisor#2 divr16u::dividend#1 ] main:2::sin16s_gen:5::div32u16u:167 [ div32u16u::dividend#2 div32u16u::divisor#2 divr16u::dividend#1 ] ) always clobbers reg byte a Statement [137] (word) divr16u::divisor#0 ← (word) div32u16u::divisor#2 [ div32u16u::dividend#2 div32u16u::divisor#2 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::sin16s_genb:7::div32u16u:63 [ div32u16u::dividend#2 div32u16u::divisor#2 divr16u::dividend#1 divr16u::divisor#0 ] main:2::sin16s_gen:5::div32u16u:167 [ div32u16u::dividend#2 div32u16u::divisor#2 divr16u::dividend#1 divr16u::divisor#0 ] ) always clobbers reg byte a @@ -9962,10 +9962,10 @@ mul16u: { rts //SEG263 mul16u::@2 b2: - //SEG264 [129] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 + //SEG264 [129] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 lda a and #1 - //SEG265 [130] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 + //SEG265 [130] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b4_from_b2 jmp b7 @@ -10975,7 +10975,7 @@ FINAL SYMBOL TABLE (word) main::wavelength (const word) main::wavelength#0 wavelength = (byte/signed byte/word/signed word/dword/signed dword) 120 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) -(byte~) mul16u::$1 reg byte a 202.0 +(byte/word~) mul16u::$1 reg byte a 202.0 (label) mul16u::@1 (label) mul16u::@2 (label) mul16u::@4 @@ -11972,10 +11972,10 @@ mul16u: { rts //SEG263 mul16u::@2 b2: - //SEG264 [129] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 + //SEG264 [129] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 lda a and #1 - //SEG265 [130] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 + //SEG265 [130] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:68::mulu16_sel:86::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:91::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:95::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:101::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:68::mulu16_sel:106::mul16u:119 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#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:172::mulu16_sel:191::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:196::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:200::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:206::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:172::mulu16_sel:211::mul16u:119 [ divr16u::rem#11 sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b4 //SEG266 mul16u::@7 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16b.sym b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16b.sym index aa69d2fc0..7f06ad3d4 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16b.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16b.sym @@ -109,7 +109,7 @@ (word) main::wavelength (const word) main::wavelength#0 wavelength = (byte/signed byte/word/signed word/dword/signed dword) 120 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) -(byte~) mul16u::$1 reg byte a 202.0 +(byte/word~) mul16u::$1 reg byte a 202.0 (label) mul16u::@1 (label) mul16u::@2 (label) mul16u::@4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.log b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.log index c7648c7d6..9c53fe4bc 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.log @@ -496,8 +496,8 @@ divr8u::@1: (boolean~) divr8u::$2 ← (byte~) divr8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr8u::$3 ← ! (boolean~) divr8u::$2 if((boolean~) divr8u::$3) goto divr8u::@2 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 divr8u::@2: (byte~) divr8u::$5 ← (byte) divr8u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) divr8u::dividend ← (byte~) divr8u::$5 @@ -507,8 +507,8 @@ divr8u::@2: (boolean~) divr8u::$8 ← ! (boolean~) divr8u::$7 if((boolean~) divr8u::$8) goto divr8u::@3 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 divr8u::@3: (byte) divr8u::i ← ++ (byte) divr8u::i (boolean~) divr8u::$10 ← (byte) divr8u::i != (byte/signed byte/word/signed word/dword/signed dword) 8 @@ -532,8 +532,8 @@ divr16u::@1: (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr16u::$4 ← ! (boolean~) divr16u::$3 if((boolean~) divr16u::$4) goto divr16u::@2 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 divr16u::@2: (word~) divr16u::$6 ← (word) divr16u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::dividend ← (word~) divr16u::$6 @@ -601,8 +601,8 @@ div8s::@2: (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 goto div8s::@4 div8s::@3: (byte~) div8s::$10 ← ((byte)) (signed byte) div8s::divisor @@ -655,8 +655,8 @@ div16s::@2: (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 goto div16s::@4 div16s::@3: (word~) div16s::$10 ← ((word)) (signed word) div16s::divisor @@ -724,8 +724,8 @@ proc (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - lval((byte~) mul8s::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + lval((byte~) mul8s::$5) ← (byte~) mul8s::$8 mul8s::@1: (boolean~) mul8s::$9 ← (signed byte) mul8s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul8s::$10 ← ! (boolean~) mul8s::$9 @@ -733,8 +733,8 @@ mul8s::@1: (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - lval((byte~) mul8s::$11) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + lval((byte~) mul8s::$11) ← (byte~) mul8s::$14 mul8s::@2: (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m (signed word) mul8s::return ← (signed word~) mul8s::$15 @@ -754,8 +754,8 @@ proc (signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - lval((byte~) mul8su::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + lval((byte~) mul8su::$5) ← (byte~) mul8su::$8 mul8su::@1: (signed word~) mul8su::$9 ← ((signed word)) (word) mul8su::m (signed word) mul8su::return ← (signed word~) mul8su::$9 @@ -772,8 +772,8 @@ mul16u::@1: if((boolean~) mul16u::$0) goto mul16u::@2 goto mul16u::@3 mul16u::@2: - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 (dword~) mul16u::$4 ← (dword) mul16u::res + (dword) mul16u::mb @@ -937,16 +937,16 @@ sin8s::@2: (byte) sin8s::DIV_6 ← (byte/signed byte/word/signed word/dword/signed dword) 43 (byte~) sin8s::$10 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::DIV_6 (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) sin8s::x3_6 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 - (byte) sin8s::usinx ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 + (byte) sin8s::usinx ← (byte~) sin8s::$11 (byte~) sin8s::$12 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x4 ← (byte~) sin8s::$12 (byte~) sin8s::$13 ← call mulu8_sel (byte) sin8s::x4 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x5 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 - (byte) sin8s::usinx ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 + (byte) sin8s::usinx ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -1106,8 +1106,8 @@ proc (void()) main() (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 main::@1: (signed byte~) main::$2 ← ((signed byte)) *((byte[]) main::sintabref + (byte) main::i) - (byte/signed byte/word/signed word/dword/signed dword~) main::$3 ← *((signed byte[192]) main::sintab2 + (byte) main::i) - (signed byte~) main::$2 - (signed byte) main::sb ← (byte/signed byte/word/signed word/dword/signed dword~) main::$3 + (signed byte~) main::$3 ← *((signed byte[192]) main::sintab2 + (byte) main::i) - (signed byte~) main::$2 + (signed byte) main::sb ← (signed byte~) main::$3 (boolean~) main::$4 ← (signed byte) main::sb >= (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) main::$5 ← ! (boolean~) main::$4 if((boolean~) main::$5) goto main::@2 @@ -1152,7 +1152,7 @@ SYMBOLS (boolean~) div16s::$6 (signed word~) div16s::$7 (word~) div16s::$8 -(byte~) div16s::$9 +(byte/word/dword~) div16s::$9 (label) div16s::@1 (label) div16s::@2 (label) div16s::@3 @@ -1205,7 +1205,7 @@ SYMBOLS (boolean~) div8s::$6 (signed byte~) div8s::$7 (byte~) div8s::$8 -(byte~) div8s::$9 +(byte/word/dword~) div8s::$9 (label) div8s::@1 (label) div8s::@2 (label) div8s::@3 @@ -1234,7 +1234,7 @@ SYMBOLS (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -1255,12 +1255,12 @@ SYMBOLS (boolean~) divr8u::$10 (boolean~) divr8u::$2 (boolean~) divr8u::$3 -(byte~) divr8u::$4 +(byte/word/dword~) divr8u::$4 (byte~) divr8u::$5 (byte~) divr8u::$6 (boolean~) divr8u::$7 (boolean~) divr8u::$8 -(byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 +(byte~) divr8u::$9 (label) divr8u::@1 (label) divr8u::@2 (label) divr8u::@3 @@ -1276,7 +1276,7 @@ SYMBOLS (void~) main::$0 (void~) main::$1 (signed byte~) main::$2 -(byte/signed byte/word/signed word/dword/signed dword~) main::$3 +(signed byte~) main::$3 (boolean~) main::$4 (boolean~) main::$5 (void~) main::$6 @@ -1317,7 +1317,7 @@ SYMBOLS (signed dword) mul16s::return (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (boolean~) mul16u::$0 -(byte~) mul16u::$1 +(byte/word~) mul16u::$1 (boolean~) mul16u::$2 (boolean~) mul16u::$3 (dword~) mul16u::$4 @@ -1340,7 +1340,7 @@ SYMBOLS (byte~) mul8s::$11 (byte~) mul8s::$12 (byte~) mul8s::$13 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 +(byte~) mul8s::$14 (signed word~) mul8s::$15 (word~) mul8s::$2 (boolean~) mul8s::$3 @@ -1348,7 +1348,7 @@ SYMBOLS (byte~) mul8s::$5 (byte~) mul8s::$6 (byte~) mul8s::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 +(byte~) mul8s::$8 (boolean~) mul8s::$9 (label) mul8s::@1 (label) mul8s::@2 @@ -1366,7 +1366,7 @@ SYMBOLS (byte~) mul8su::$5 (byte~) mul8su::$6 (byte~) mul8su::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 +(byte~) mul8su::$8 (signed word~) mul8su::$9 (label) mul8su::@1 (label) mul8su::@return @@ -1543,11 +1543,11 @@ SYMBOLS (boolean~) sin8s::$0 (boolean~) sin8s::$1 (byte~) sin8s::$10 -(byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 +(byte~) sin8s::$11 (byte~) sin8s::$12 (byte~) sin8s::$13 (byte~) sin8s::$14 -(byte/word~) sin8s::$15 +(byte~) sin8s::$15 (boolean~) sin8s::$16 (boolean~) sin8s::$17 (signed byte~) sin8s::$18 @@ -1640,8 +1640,8 @@ divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4 if((boolean~) divr8u::$8) goto divr8u::@3 to:divr8u::@5 divr8u::@4: scope:[divr8u] from divr8u::@1 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 to:divr8u::@2 divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 (byte) divr8u::i ← ++ (byte) divr8u::i @@ -1650,8 +1650,8 @@ divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 to:divr8u::@6 divr8u::@5: scope:[divr8u] from divr8u::@2 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 to:divr8u::@3 divr8u::@6: scope:[divr8u] from divr8u::@3 (byte) rem8u ← (byte) divr8u::rem @@ -1689,8 +1689,8 @@ divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 if((boolean~) divr16u::$9) goto divr16u::@3 to:divr16u::@5 divr16u::@4: scope:[divr16u] from divr16u::@1 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (byte) divr16u::i ← ++ (byte) divr16u::i @@ -1778,8 +1778,8 @@ div8s::@9: scope:[div8s] from div8s::@2 (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 to:div8s::@4 div8s::@4: scope:[div8s] from div8s::@3 div8s::@9 (byte~) div8s::$11 ← call div8u (byte) div8s::dividendu (byte) div8s::divisoru @@ -1852,8 +1852,8 @@ div16s::@9: scope:[div16s] from div16s::@2 (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 to:div16s::@4 div16s::@4: scope:[div16s] from div16s::@3 div16s::@9 (word~) div16s::$11 ← call div16u (word) div16s::dividendu (word) div16s::divisoru @@ -1951,9 +1951,9 @@ mul8s::@3: scope:[mul8s] from mul8s (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + (byte~) mul8s::$16 ← (byte~) mul8s::$8 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$16 to:mul8s::@1 mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m @@ -1963,9 +1963,9 @@ mul8s::@4: scope:[mul8s] from mul8s::@1 (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + (byte~) mul8s::$17 ← (byte~) mul8s::$14 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$17 to:mul8s::@2 mul8s::@return: scope:[mul8s] from mul8s::@2 mul8s::@5 (signed word) mul8s::return ← (signed word) mul8s::return @@ -1992,9 +1992,9 @@ mul8su::@2: scope:[mul8su] from mul8su (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 - (word) mul8su::m ← (word) mul8su::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + (byte~) mul8su::$10 ← (byte~) mul8su::$8 + (word) mul8su::m ← (word) mul8su::m hi= (byte~) mul8su::$10 to:mul8su::@1 mul8su::@return: scope:[mul8su] from mul8su::@1 mul8su::@3 (signed word) mul8su::return ← (signed word) mul8su::return @@ -2013,8 +2013,8 @@ mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 if((boolean~) mul16u::$0) goto mul16u::@2 to:mul16u::@5 mul16u::@2: scope:[mul16u] from mul16u::@1 mul16u::@6 - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 to:mul16u::@7 @@ -2230,16 +2230,16 @@ sin8s::@2: scope:[sin8s] from sin8s::@1 sin8s::@6 (byte) sin8s::DIV_6 ← (byte/signed byte/word/signed word/dword/signed dword) 43 (byte~) sin8s::$10 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::DIV_6 (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) sin8s::x3_6 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 - (byte) sin8s::usinx ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 + (byte) sin8s::usinx ← (byte~) sin8s::$11 (byte~) sin8s::$12 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x4 ← (byte~) sin8s::$12 (byte~) sin8s::$13 ← call mulu8_sel (byte) sin8s::x4 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x5 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 - (byte) sin8s::usinx ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 + (byte) sin8s::usinx ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -2474,8 +2474,8 @@ main: scope:[main] from to:main::@1 main::@1: scope:[main] from main main::@2 (signed byte~) main::$2 ← ((signed byte)) *((byte[]) main::sintabref + (byte) main::i) - (byte/signed byte/word/signed word/dword/signed dword~) main::$3 ← *((signed byte[192]) main::sintab2 + (byte) main::i) - (signed byte~) main::$2 - (signed byte) main::sb ← (byte/signed byte/word/signed word/dword/signed dword~) main::$3 + (signed byte~) main::$3 ← *((signed byte[192]) main::sintab2 + (byte) main::i) - (signed byte~) main::$2 + (signed byte) main::sb ← (signed byte~) main::$3 (boolean~) main::$4 ← (signed byte) main::sb >= (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) main::$5 ← ! (boolean~) main::$4 if((boolean~) main::$5) goto main::@2 @@ -2644,8 +2644,8 @@ divr16u::@4: scope:[divr16u] from divr16u::@1 (word) divr16u::quotient#7 ← phi( divr16u::@1/(word) divr16u::quotient#6 ) (word) divr16u::dividend#6 ← phi( divr16u::@1/(word) divr16u::dividend#2 ) (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 ) - (word~) divr16u::$5 ← (word) divr16u::rem#6 | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem#1 ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem#6 | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem#1 ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#6 ← phi( divr16u::@2/(word) divr16u::divisor#1 divr16u::@5/(word) divr16u::divisor#2 ) @@ -2874,8 +2874,8 @@ sin8s::@12: scope:[sin8s] from sin8s::@11 (byte) mulu8_sel::return#9 ← phi( sin8s::@11/(byte) mulu8_sel::return#2 ) (byte~) sin8s::$10 ← (byte) mulu8_sel::return#9 (byte) sin8s::x3_6#0 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1#2 - (byte) sin8s::x3_6#0 - (byte) sin8s::usinx#0 ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1#2 - (byte) sin8s::x3_6#0 + (byte) sin8s::usinx#0 ← (byte~) sin8s::$11 (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#1 (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#2 (byte) mulu8_sel::select#3 ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -2903,8 +2903,8 @@ sin8s::@14: scope:[sin8s] from sin8s::@13 (byte) sin8s::x5#0 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128#0 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx#3 + (byte) sin8s::x5_128#0 - (byte) sin8s::usinx#1 ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx#3 + (byte) sin8s::x5_128#0 + (byte) sin8s::usinx#1 ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx#1 >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -3120,8 +3120,8 @@ main::@1: scope:[main] from main::@6 main::@8 (byte*) char_cursor#47 ← phi( main::@6/(byte*) char_cursor#13 main::@8/(byte*) char_cursor#15 ) (byte) main::i#2 ← phi( main::@6/(byte) main::i#0 main::@8/(byte) main::i#1 ) (signed byte~) main::$2 ← ((signed byte)) *((byte[]) main::sintabref#0 + (byte) main::i#2) - (byte/signed byte/word/signed word/dword/signed dword~) main::$3 ← *((signed byte[192]) main::sintab2#0 + (byte) main::i#2) - (signed byte~) main::$2 - (signed byte) main::sb#0 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$3 + (signed byte~) main::$3 ← *((signed byte[192]) main::sintab2#0 + (byte) main::i#2) - (signed byte~) main::$2 + (signed byte) main::sb#0 ← (signed byte~) main::$3 (boolean~) main::$4 ← (signed byte) main::sb#0 >= (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) main::$5 ← ! (boolean~) main::$4 if((boolean~) main::$5) goto main::@2 @@ -3285,7 +3285,7 @@ SYMBOL TABLE SSA (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -3372,7 +3372,7 @@ SYMBOL TABLE SSA (byte*) line_cursor#9 (void()) main() (signed byte~) main::$2 -(byte/signed byte/word/signed word/dword/signed dword~) main::$3 +(signed byte~) main::$3 (boolean~) main::$4 (boolean~) main::$5 (boolean~) main::$9 @@ -3592,11 +3592,11 @@ SYMBOL TABLE SSA (boolean~) sin8s::$0 (boolean~) sin8s::$1 (byte~) sin8s::$10 -(byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 +(byte~) sin8s::$11 (byte~) sin8s::$12 (byte~) sin8s::$13 (byte~) sin8s::$14 -(byte/word~) sin8s::$15 +(byte~) sin8s::$15 (boolean~) sin8s::$16 (boolean~) sin8s::$17 (signed byte~) sin8s::$18 @@ -3825,7 +3825,7 @@ Alias (word) divr16u::dividend#2 = (word) divr16u::dividend#6 Alias (word) divr16u::quotient#6 = (word) divr16u::quotient#7 Alias (word) divr16u::divisor#3 = (word) divr16u::divisor#4 Alias (byte) divr16u::i#5 = (byte) divr16u::i#6 -Alias (word) divr16u::rem#1 = (word~) divr16u::$5 +Alias (word) divr16u::rem#1 = (word/dword~) divr16u::$5 Alias (word) divr16u::rem#5 = (word) divr16u::rem#7 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#2 Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 @@ -3866,13 +3866,13 @@ Alias (byte) mulu8_sel::return#1 = (byte) mulu8_sel::return#8 Alias (byte) sin8s::x3#0 = (byte~) sin8s::$9 (byte) sin8s::x3#1 Alias (byte) mulu8_sel::return#2 = (byte) mulu8_sel::return#9 Alias (byte) sin8s::x3_6#0 = (byte~) sin8s::$10 -Alias (byte) sin8s::usinx#0 = (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 (byte) sin8s::usinx#7 (byte) sin8s::usinx#3 +Alias (byte) sin8s::usinx#0 = (byte~) sin8s::$11 (byte) sin8s::usinx#7 (byte) sin8s::usinx#3 Alias (byte) mulu8_sel::return#10 = (byte) mulu8_sel::return#3 Alias (byte) sin8s::x4#0 = (byte~) sin8s::$12 Alias (byte) mulu8_sel::return#11 = (byte) mulu8_sel::return#4 Alias (byte) sin8s::x5#0 = (byte~) sin8s::$13 Alias (byte) sin8s::x5_128#0 = (byte~) sin8s::$14 -Alias (byte) sin8s::usinx#1 = (byte/word~) sin8s::$15 (byte) sin8s::usinx#5 +Alias (byte) sin8s::usinx#1 = (byte~) sin8s::$15 (byte) sin8s::usinx#5 Alias (word) sin8s::x#4 = (word) sin8s::x#7 Alias (byte) sin8s::isUpper#10 = (byte) sin8s::isUpper#11 Alias (word) sin8s::x#2 = (word~) sin8s::$5 @@ -3902,7 +3902,7 @@ Alias (byte*) char_cursor#40 = (byte*) char_cursor#46 Alias (word) rem16u#15 = (word) rem16u#7 (word) rem16u#31 Alias (byte*) line_cursor#3 = (byte*) line_cursor#7 Alias (byte*) char_cursor#13 = (byte*) char_cursor#30 -Alias (signed byte) main::sb#0 = (byte/signed byte/word/signed word/dword/signed dword~) main::$3 (signed byte) main::sb#3 (signed byte) main::sb#2 +Alias (signed byte) main::sb#0 = (signed byte~) main::$3 (signed byte) main::sb#3 (signed byte) main::sb#2 Alias (byte) main::i#3 = (byte) main::i#4 (byte) main::i#5 Alias (word) rem16u#16 = (word) rem16u#25 (word) rem16u#28 (word) rem16u#22 (word) rem16u#8 Alias (byte*) line_cursor#11 = (byte*) line_cursor#14 (byte*) line_cursor#15 (byte*) line_cursor#8 (byte*) line_cursor#4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.cfg b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.cfg index ef98b1e8c..6add56f2a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.cfg @@ -246,8 +246,8 @@ mul16u::@return: scope:[mul16u] from mul16u::@1 [127] return [ mul16u::res#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 ] ) to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [128] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) - [129] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) + [128] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) + [129] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) to:mul16u::@7 mul16u::@7: scope:[mul16u] from mul16u::@2 [130] (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:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.log b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.log index cb63b4f81..f76cbadb7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.log @@ -485,8 +485,8 @@ divr8u::@1: (boolean~) divr8u::$2 ← (byte~) divr8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr8u::$3 ← ! (boolean~) divr8u::$2 if((boolean~) divr8u::$3) goto divr8u::@2 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 divr8u::@2: (byte~) divr8u::$5 ← (byte) divr8u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) divr8u::dividend ← (byte~) divr8u::$5 @@ -496,8 +496,8 @@ divr8u::@2: (boolean~) divr8u::$8 ← ! (boolean~) divr8u::$7 if((boolean~) divr8u::$8) goto divr8u::@3 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 divr8u::@3: (byte) divr8u::i ← ++ (byte) divr8u::i (boolean~) divr8u::$10 ← (byte) divr8u::i != (byte/signed byte/word/signed word/dword/signed dword) 8 @@ -521,8 +521,8 @@ divr16u::@1: (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr16u::$4 ← ! (boolean~) divr16u::$3 if((boolean~) divr16u::$4) goto divr16u::@2 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 divr16u::@2: (word~) divr16u::$6 ← (word) divr16u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::dividend ← (word~) divr16u::$6 @@ -590,8 +590,8 @@ div8s::@2: (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 goto div8s::@4 div8s::@3: (byte~) div8s::$10 ← ((byte)) (signed byte) div8s::divisor @@ -644,8 +644,8 @@ div16s::@2: (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 goto div16s::@4 div16s::@3: (word~) div16s::$10 ← ((word)) (signed word) div16s::divisor @@ -713,8 +713,8 @@ proc (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - lval((byte~) mul8s::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + lval((byte~) mul8s::$5) ← (byte~) mul8s::$8 mul8s::@1: (boolean~) mul8s::$9 ← (signed byte) mul8s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul8s::$10 ← ! (boolean~) mul8s::$9 @@ -722,8 +722,8 @@ mul8s::@1: (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - lval((byte~) mul8s::$11) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + lval((byte~) mul8s::$11) ← (byte~) mul8s::$14 mul8s::@2: (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m (signed word) mul8s::return ← (signed word~) mul8s::$15 @@ -743,8 +743,8 @@ proc (signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - lval((byte~) mul8su::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + lval((byte~) mul8su::$5) ← (byte~) mul8su::$8 mul8su::@1: (signed word~) mul8su::$9 ← ((signed word)) (word) mul8su::m (signed word) mul8su::return ← (signed word~) mul8su::$9 @@ -761,8 +761,8 @@ mul16u::@1: if((boolean~) mul16u::$0) goto mul16u::@2 goto mul16u::@3 mul16u::@2: - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 (dword~) mul16u::$4 ← (dword) mul16u::res + (dword) mul16u::mb @@ -926,16 +926,16 @@ sin8s::@2: (byte) sin8s::DIV_6 ← (byte/signed byte/word/signed word/dword/signed dword) 43 (byte~) sin8s::$10 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::DIV_6 (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) sin8s::x3_6 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 - (byte) sin8s::usinx ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 + (byte) sin8s::usinx ← (byte~) sin8s::$11 (byte~) sin8s::$12 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x4 ← (byte~) sin8s::$12 (byte~) sin8s::$13 ← call mulu8_sel (byte) sin8s::x4 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x5 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 - (byte) sin8s::usinx ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 + (byte) sin8s::usinx ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -1102,8 +1102,8 @@ main::@1: (signed word) main::sw ← *((signed word*~) main::$5) (byte~) main::$6 ← > (signed word) main::sw (signed byte~) main::$7 ← ((signed byte)) (byte~) main::$6 - (byte/signed byte/word/signed word/dword/signed dword~) main::$8 ← (signed byte) main::sb - (signed byte~) main::$7 - (signed byte) main::sd ← (byte/signed byte/word/signed word/dword/signed dword~) main::$8 + (signed byte~) main::$8 ← (signed byte) main::sb - (signed byte~) main::$7 + (signed byte) main::sd ← (signed byte~) main::$8 (boolean~) main::$9 ← (signed byte) main::sd >= (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) main::$10 ← ! (boolean~) main::$9 if((boolean~) main::$10) goto main::@2 @@ -1148,7 +1148,7 @@ SYMBOLS (boolean~) div16s::$6 (signed word~) div16s::$7 (word~) div16s::$8 -(byte~) div16s::$9 +(byte/word/dword~) div16s::$9 (label) div16s::@1 (label) div16s::@2 (label) div16s::@3 @@ -1201,7 +1201,7 @@ SYMBOLS (boolean~) div8s::$6 (signed byte~) div8s::$7 (byte~) div8s::$8 -(byte~) div8s::$9 +(byte/word/dword~) div8s::$9 (label) div8s::@1 (label) div8s::@2 (label) div8s::@3 @@ -1230,7 +1230,7 @@ SYMBOLS (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -1251,12 +1251,12 @@ SYMBOLS (boolean~) divr8u::$10 (boolean~) divr8u::$2 (boolean~) divr8u::$3 -(byte~) divr8u::$4 +(byte/word/dword~) divr8u::$4 (byte~) divr8u::$5 (byte~) divr8u::$6 (boolean~) divr8u::$7 (boolean~) divr8u::$8 -(byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 +(byte~) divr8u::$9 (label) divr8u::@1 (label) divr8u::@2 (label) divr8u::@3 @@ -1282,7 +1282,7 @@ SYMBOLS (signed word*~) main::$5 (byte~) main::$6 (signed byte~) main::$7 -(byte/signed byte/word/signed word/dword/signed dword~) main::$8 +(signed byte~) main::$8 (boolean~) main::$9 (label) main::@1 (label) main::@2 @@ -1320,7 +1320,7 @@ SYMBOLS (signed dword) mul16s::return (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (boolean~) mul16u::$0 -(byte~) mul16u::$1 +(byte/word~) mul16u::$1 (boolean~) mul16u::$2 (boolean~) mul16u::$3 (dword~) mul16u::$4 @@ -1343,7 +1343,7 @@ SYMBOLS (byte~) mul8s::$11 (byte~) mul8s::$12 (byte~) mul8s::$13 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 +(byte~) mul8s::$14 (signed word~) mul8s::$15 (word~) mul8s::$2 (boolean~) mul8s::$3 @@ -1351,7 +1351,7 @@ SYMBOLS (byte~) mul8s::$5 (byte~) mul8s::$6 (byte~) mul8s::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 +(byte~) mul8s::$8 (boolean~) mul8s::$9 (label) mul8s::@1 (label) mul8s::@2 @@ -1369,7 +1369,7 @@ SYMBOLS (byte~) mul8su::$5 (byte~) mul8su::$6 (byte~) mul8su::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 +(byte~) mul8su::$8 (signed word~) mul8su::$9 (label) mul8su::@1 (label) mul8su::@return @@ -1546,11 +1546,11 @@ SYMBOLS (boolean~) sin8s::$0 (boolean~) sin8s::$1 (byte~) sin8s::$10 -(byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 +(byte~) sin8s::$11 (byte~) sin8s::$12 (byte~) sin8s::$13 (byte~) sin8s::$14 -(byte/word~) sin8s::$15 +(byte~) sin8s::$15 (boolean~) sin8s::$16 (boolean~) sin8s::$17 (signed byte~) sin8s::$18 @@ -1643,8 +1643,8 @@ divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4 if((boolean~) divr8u::$8) goto divr8u::@3 to:divr8u::@5 divr8u::@4: scope:[divr8u] from divr8u::@1 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 to:divr8u::@2 divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 (byte) divr8u::i ← ++ (byte) divr8u::i @@ -1653,8 +1653,8 @@ divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 to:divr8u::@6 divr8u::@5: scope:[divr8u] from divr8u::@2 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 to:divr8u::@3 divr8u::@6: scope:[divr8u] from divr8u::@3 (byte) rem8u ← (byte) divr8u::rem @@ -1692,8 +1692,8 @@ divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 if((boolean~) divr16u::$9) goto divr16u::@3 to:divr16u::@5 divr16u::@4: scope:[divr16u] from divr16u::@1 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (byte) divr16u::i ← ++ (byte) divr16u::i @@ -1781,8 +1781,8 @@ div8s::@9: scope:[div8s] from div8s::@2 (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 to:div8s::@4 div8s::@4: scope:[div8s] from div8s::@3 div8s::@9 (byte~) div8s::$11 ← call div8u (byte) div8s::dividendu (byte) div8s::divisoru @@ -1855,8 +1855,8 @@ div16s::@9: scope:[div16s] from div16s::@2 (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 to:div16s::@4 div16s::@4: scope:[div16s] from div16s::@3 div16s::@9 (word~) div16s::$11 ← call div16u (word) div16s::dividendu (word) div16s::divisoru @@ -1954,9 +1954,9 @@ mul8s::@3: scope:[mul8s] from mul8s (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + (byte~) mul8s::$16 ← (byte~) mul8s::$8 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$16 to:mul8s::@1 mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m @@ -1966,9 +1966,9 @@ mul8s::@4: scope:[mul8s] from mul8s::@1 (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + (byte~) mul8s::$17 ← (byte~) mul8s::$14 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$17 to:mul8s::@2 mul8s::@return: scope:[mul8s] from mul8s::@2 mul8s::@5 (signed word) mul8s::return ← (signed word) mul8s::return @@ -1995,9 +1995,9 @@ mul8su::@2: scope:[mul8su] from mul8su (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 - (word) mul8su::m ← (word) mul8su::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + (byte~) mul8su::$10 ← (byte~) mul8su::$8 + (word) mul8su::m ← (word) mul8su::m hi= (byte~) mul8su::$10 to:mul8su::@1 mul8su::@return: scope:[mul8su] from mul8su::@1 mul8su::@3 (signed word) mul8su::return ← (signed word) mul8su::return @@ -2016,8 +2016,8 @@ mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 if((boolean~) mul16u::$0) goto mul16u::@2 to:mul16u::@5 mul16u::@2: scope:[mul16u] from mul16u::@1 mul16u::@6 - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 to:mul16u::@7 @@ -2233,16 +2233,16 @@ sin8s::@2: scope:[sin8s] from sin8s::@1 sin8s::@6 (byte) sin8s::DIV_6 ← (byte/signed byte/word/signed word/dword/signed dword) 43 (byte~) sin8s::$10 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::DIV_6 (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) sin8s::x3_6 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 - (byte) sin8s::usinx ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 + (byte) sin8s::usinx ← (byte~) sin8s::$11 (byte~) sin8s::$12 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x4 ← (byte~) sin8s::$12 (byte~) sin8s::$13 ← call mulu8_sel (byte) sin8s::x4 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x5 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 - (byte) sin8s::usinx ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 + (byte) sin8s::usinx ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -2484,8 +2484,8 @@ main::@1: scope:[main] from main main::@2 (signed word) main::sw ← *((signed word*~) main::$5) (byte~) main::$6 ← > (signed word) main::sw (signed byte~) main::$7 ← ((signed byte)) (byte~) main::$6 - (byte/signed byte/word/signed word/dword/signed dword~) main::$8 ← (signed byte) main::sb - (signed byte~) main::$7 - (signed byte) main::sd ← (byte/signed byte/word/signed word/dword/signed dword~) main::$8 + (signed byte~) main::$8 ← (signed byte) main::sb - (signed byte~) main::$7 + (signed byte) main::sd ← (signed byte~) main::$8 (boolean~) main::$9 ← (signed byte) main::sd >= (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) main::$10 ← ! (boolean~) main::$9 if((boolean~) main::$10) goto main::@2 @@ -2657,8 +2657,8 @@ divr16u::@4: scope:[divr16u] from divr16u::@1 (word) divr16u::quotient#7 ← phi( divr16u::@1/(word) divr16u::quotient#6 ) (word) divr16u::dividend#8 ← phi( divr16u::@1/(word) divr16u::dividend#4 ) (word) divr16u::rem#8 ← phi( divr16u::@1/(word) divr16u::rem#0 ) - (word~) divr16u::$5 ← (word) divr16u::rem#8 | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem#1 ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem#8 | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem#1 ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#8 ← phi( divr16u::@2/(word) divr16u::divisor#3 divr16u::@5/(word) divr16u::divisor#4 ) @@ -2824,8 +2824,8 @@ mul16u::@2: scope:[mul16u] from mul16u::@1 (dword) mul16u::res#5 ← phi( mul16u::@1/(dword) mul16u::res#4 ) (dword) mul16u::mb#4 ← phi( mul16u::@1/(dword) mul16u::mb#5 ) (word) mul16u::a#3 ← phi( mul16u::@1/(word) mul16u::a#2 ) - (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 to:mul16u::@7 @@ -3156,8 +3156,8 @@ sin8s::@12: scope:[sin8s] from sin8s::@11 (byte) mulu8_sel::return#9 ← phi( sin8s::@11/(byte) mulu8_sel::return#2 ) (byte~) sin8s::$10 ← (byte) mulu8_sel::return#9 (byte) sin8s::x3_6#0 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1#2 - (byte) sin8s::x3_6#0 - (byte) sin8s::usinx#0 ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1#2 - (byte) sin8s::x3_6#0 + (byte) sin8s::usinx#0 ← (byte~) sin8s::$11 (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#1 (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#2 (byte) mulu8_sel::select#3 ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -3185,8 +3185,8 @@ sin8s::@14: scope:[sin8s] from sin8s::@13 (byte) sin8s::x5#0 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128#0 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx#3 + (byte) sin8s::x5_128#0 - (byte) sin8s::usinx#1 ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx#3 + (byte) sin8s::x5_128#0 + (byte) sin8s::usinx#1 ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx#1 >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -3440,8 +3440,8 @@ main::@1: scope:[main] from main::@7 main::@9 (signed word) main::sw#0 ← *((signed word*~) main::$5) (byte~) main::$6 ← > (signed word) main::sw#0 (signed byte~) main::$7 ← ((signed byte)) (byte~) main::$6 - (byte/signed byte/word/signed word/dword/signed dword~) main::$8 ← (signed byte) main::sb#0 - (signed byte~) main::$7 - (signed byte) main::sd#0 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$8 + (signed byte~) main::$8 ← (signed byte) main::sb#0 - (signed byte~) main::$7 + (signed byte) main::sd#0 ← (signed byte~) main::$8 (boolean~) main::$9 ← (signed byte) main::sd#0 >= (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) main::$10 ← ! (boolean~) main::$9 if((boolean~) main::$10) goto main::@2 @@ -3641,7 +3641,7 @@ SYMBOL TABLE SSA (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -3745,7 +3745,7 @@ SYMBOL TABLE SSA (signed word*~) main::$5 (byte~) main::$6 (signed byte~) main::$7 -(byte/signed byte/word/signed word/dword/signed dword~) main::$8 +(signed byte~) main::$8 (boolean~) main::$9 (label) main::@1 (label) main::@10 @@ -3786,7 +3786,7 @@ SYMBOL TABLE SSA (word) main::wavelength#1 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (boolean~) mul16u::$0 -(byte~) mul16u::$1 +(byte/word~) mul16u::$1 (boolean~) mul16u::$2 (boolean~) mul16u::$3 (dword~) mul16u::$4 @@ -4200,11 +4200,11 @@ SYMBOL TABLE SSA (boolean~) sin8s::$0 (boolean~) sin8s::$1 (byte~) sin8s::$10 -(byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 +(byte~) sin8s::$11 (byte~) sin8s::$12 (byte~) sin8s::$13 (byte~) sin8s::$14 -(byte/word~) sin8s::$15 +(byte~) sin8s::$15 (boolean~) sin8s::$16 (boolean~) sin8s::$17 (signed byte~) sin8s::$18 @@ -4337,7 +4337,7 @@ OPTIMIZING CONTROL FLOW GRAPH Inversing boolean not (boolean~) divr16u::$4 ← (byte~) divr16u::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (boolean~) divr16u::$9 ← (word) divr16u::rem#7 < (word) divr16u::divisor#3 from (boolean~) divr16u::$8 ← (word) divr16u::rem#7 >= (word) divr16u::divisor#3 Inversing boolean not (boolean~) mul8u::$3 ← (byte~) mul8u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mul8u::$2 ← (byte~) mul8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 -Inversing boolean not (boolean~) mul16u::$3 ← (byte~) mul16u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) mul16u::$3 ← (byte/word~) mul16u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (boolean~) sin16s::$1 ← (dword) sin16s::x#3 < (dword) PI_u4f28#0 from (boolean~) sin16s::$0 ← (dword) sin16s::x#3 >= (dword) PI_u4f28#0 Inversing boolean not (boolean~) sin16s::$4 ← (dword) sin16s::x#4 < (dword) PI_HALF_u4f28#0 from (boolean~) sin16s::$3 ← (dword) sin16s::x#4 >= (dword) PI_HALF_u4f28#0 Inversing boolean not (boolean~) sin16s::$19 ← (byte) sin16s::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) sin16s::$18 ← (byte) sin16s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -4492,7 +4492,7 @@ Alias (word) divr16u::dividend#4 = (word) divr16u::dividend#8 Alias (word) divr16u::quotient#6 = (word) divr16u::quotient#7 Alias (word) divr16u::divisor#5 = (word) divr16u::divisor#6 Alias (byte) divr16u::i#5 = (byte) divr16u::i#6 -Alias (word) divr16u::rem#1 = (word~) divr16u::$5 +Alias (word) divr16u::rem#1 = (word/dword~) divr16u::$5 Alias (word) divr16u::rem#7 = (word) divr16u::rem#9 Alias (word) divr16u::divisor#3 = (word) divr16u::divisor#4 Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 @@ -4588,13 +4588,13 @@ Alias (byte) mulu8_sel::return#1 = (byte) mulu8_sel::return#8 Alias (byte) sin8s::x3#0 = (byte~) sin8s::$9 (byte) sin8s::x3#1 Alias (byte) mulu8_sel::return#2 = (byte) mulu8_sel::return#9 Alias (byte) sin8s::x3_6#0 = (byte~) sin8s::$10 -Alias (byte) sin8s::usinx#0 = (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 (byte) sin8s::usinx#7 (byte) sin8s::usinx#3 +Alias (byte) sin8s::usinx#0 = (byte~) sin8s::$11 (byte) sin8s::usinx#7 (byte) sin8s::usinx#3 Alias (byte) mulu8_sel::return#10 = (byte) mulu8_sel::return#3 Alias (byte) sin8s::x4#0 = (byte~) sin8s::$12 Alias (byte) mulu8_sel::return#11 = (byte) mulu8_sel::return#4 Alias (byte) sin8s::x5#0 = (byte~) sin8s::$13 Alias (byte) sin8s::x5_128#0 = (byte~) sin8s::$14 -Alias (byte) sin8s::usinx#1 = (byte/word~) sin8s::$15 (byte) sin8s::usinx#5 +Alias (byte) sin8s::usinx#1 = (byte~) sin8s::$15 (byte) sin8s::usinx#5 Alias (word) sin8s::x#4 = (word) sin8s::x#7 Alias (byte) sin8s::isUpper#10 = (byte) sin8s::isUpper#11 Alias (word) sin8s::x#2 = (word~) sin8s::$5 @@ -4629,7 +4629,7 @@ Alias (word) rem16u#12 = (word) rem16u#26 Alias (word) rem16u#13 = (word) rem16u#27 (word) rem16u#47 Alias (byte*) line_cursor#3 = (byte*) line_cursor#7 Alias (byte*) char_cursor#13 = (byte*) char_cursor#30 -Alias (signed byte) main::sd#0 = (byte/signed byte/word/signed word/dword/signed dword~) main::$8 (signed byte) main::sd#3 (signed byte) main::sd#2 +Alias (signed byte) main::sd#0 = (signed byte~) main::$8 (signed byte) main::sd#3 (signed byte) main::sd#2 Alias (byte) main::i#3 = (byte) main::i#4 (byte) main::i#5 Alias (word) rem16u#14 = (word) rem16u#41 (word) rem16u#44 (word) rem16u#37 (word) rem16u#28 Alias (byte*) line_cursor#11 = (byte*) line_cursor#14 (byte*) line_cursor#16 (byte*) line_cursor#8 (byte*) line_cursor#4 @@ -5004,7 +5004,7 @@ Simple Condition (boolean~) divr16u::$11 if((byte) divr16u::i#1!=(byte/signed by Simple Condition (boolean~) mul8u::$0 if((byte) mul8u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2 Simple Condition (boolean~) mul8u::$3 if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4 Simple Condition (boolean~) mul16u::$0 if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 -Simple Condition (boolean~) mul16u::$3 if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 +Simple Condition (boolean~) mul16u::$3 if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 Simple Condition (boolean~) sin16s_gen::$4 if((word) sin16s_gen::i#1<(word) sin16s_gen::wavelength#0) goto sin16s_gen::@1 Simple Condition (boolean~) sin8s_gen::$3 if((word) sin8s_gen::i#1<(word) sin8s_gen::wavelength#0) goto sin8s_gen::@1 Simple Condition (boolean~) sin16s::$1 if((dword) sin16s::x#0<(dword) PI_u4f28#0) goto sin16s::@1 @@ -6008,8 +6008,8 @@ mul16u::@return: scope:[mul16u] from mul16u::@1 [127] return [ mul16u::res#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 ] ) to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [128] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) - [129] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) + [128] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) + [129] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) to:mul16u::@7 mul16u::@7: scope:[mul16u] from mul16u::@2 [130] (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:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) @@ -6483,7 +6483,7 @@ VARIABLE REGISTER WEIGHTS (signed word) main::sw#0 22.0 (word) main::wavelength (dword()) mul16u((word) mul16u::a , (word) mul16u::b) -(byte~) mul16u::$1 202.0 +(byte/word~) mul16u::$1 202.0 (word) mul16u::a (word) mul16u::a#0 101.0 (word) mul16u::a#1 1.3333333333333333 @@ -7984,11 +7984,11 @@ mul16u: { rts //SEG247 mul16u::@2 b2: - //SEG248 [128] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuz1=vwuz2_band_vbuc1 + //SEG248 [128] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuz1=vwuz2_band_vbuc1 lda a and #1 sta _1 - //SEG249 [129] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuz1_eq_0_then_la1 + //SEG249 [129] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuz1_eq_0_then_la1 lda _1 beq b4_from_b2 jmp b7 @@ -8865,7 +8865,7 @@ Removing always clobbered register reg byte x as potential for zp ZP_BYTE:19 [ s Statement [122] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:90 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:100 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:105 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a Statement [124] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [126] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [128] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [128] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [130] (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:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 Statement [136] (word) divr16u::return#3 ← (word) divr16u::return#0 [ divr16u::return#3 rem16u#1 ] ( main:2::sin16s_gen:7::div32u16u:61 [ divr16u::return#3 rem16u#1 ] ) always clobbers reg byte a Statement [137] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen:7::div32u16u:61 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a @@ -8980,7 +8980,7 @@ Statement [121] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mu Statement [122] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:90 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:100 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:105 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a Statement [124] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:7::sin16s:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [126] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [128] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [128] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 [130] (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:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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 Statement [136] (word) divr16u::return#3 ← (word) divr16u::return#0 [ divr16u::return#3 rem16u#1 ] ( main:2::sin16s_gen:7::div32u16u:61 [ divr16u::return#3 rem16u#1 ] ) always clobbers reg byte a Statement [137] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen:7::div32u16u:61 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a @@ -10118,10 +10118,10 @@ mul16u: { rts //SEG247 mul16u::@2 b2: - //SEG248 [128] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 + //SEG248 [128] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 lda a and #1 - //SEG249 [129] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 + //SEG249 [129] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b4_from_b2 jmp b7 @@ -11208,7 +11208,7 @@ FINAL SYMBOL TABLE (word) main::wavelength (const word) main::wavelength#0 wavelength = (byte/word/signed word/dword/signed dword) 192 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) -(byte~) mul16u::$1 reg byte a 202.0 +(byte/word~) mul16u::$1 reg byte a 202.0 (label) mul16u::@1 (label) mul16u::@2 (label) mul16u::@4 @@ -12257,10 +12257,10 @@ mul16u: { rts //SEG247 mul16u::@2 b2: - //SEG248 [128] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 + //SEG248 [128] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 lda a and #1 - //SEG249 [129] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 + //SEG249 [129] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:66::mulu16_sel:85::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:90::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:94::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:100::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#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:66::mulu16_sel:105::mul16u:118 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b4 //SEG250 mul16u::@7 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.sym b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.sym index ff2aba754..f7fd8d3aa 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.sym @@ -115,7 +115,7 @@ (word) main::wavelength (const word) main::wavelength#0 wavelength = (byte/word/signed word/dword/signed dword) 192 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) -(byte~) mul16u::$1 reg byte a 202.0 +(byte/word~) mul16u::$1 reg byte a 202.0 (label) mul16u::@1 (label) mul16u::@2 (label) mul16u::@4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.asm b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.asm index cfe9bae96..9302efcab 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.asm @@ -19,7 +19,7 @@ sin8u_table: { .const min = $a .const max = $ff .label amplitude = max-min - .const sum = min+max + .const sum = ($ffff&min)+max .const mid = (sum>>1)+1 .label step = $12 .label sinx = $11 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.cfg b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.cfg index f31156582..eb7cdd79f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.cfg @@ -83,8 +83,8 @@ sin8u_table::@15: scope:[sin8u_table] from sin8u_table::@1 to:sin8u_table::@16 sin8u_table::@16: scope:[sin8u_table] from sin8u_table::@15 [42] (signed word) sin8u_table::sinx_sc#0 ← (signed word) mul8su::return#2 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 line_cursor#1 ] ) - [43] (byte~) sin8u_table::$20 ← > (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$20 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$20 line_cursor#1 ] ) - [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$20 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) + [43] (byte~) sin8u_table::$21 ← > (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$21 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$21 line_cursor#1 ] ) + [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$21 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) [45] *((byte*) sin8u_table::sintab#2) ← (byte) sin8u_table::sinx_tr#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) [46] (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#2 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::i#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::i#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) [47] (byte*~) char_cursor#121 ← (byte*) line_cursor#1 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::i#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 char_cursor#121 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::i#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 char_cursor#121 line_cursor#1 ] ) @@ -244,8 +244,8 @@ mul8su::@4: scope:[mul8su] from mul8su to:mul8su::@2 mul8su::@2: scope:[mul8su] from mul8su::@4 [120] (byte~) mul8su::$6 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$6 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$6 ] ) - [121] (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) - [122] (word) mul8su::m#1 ← (word) mul8su::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 [ mul8su::m#1 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#1 ] ) + [121] (byte~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) + [122] (word) mul8su::m#1 ← (word) mul8su::m#0 hi= (byte~) mul8su::$10 [ mul8su::m#1 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#1 ] ) to:mul8su::@1 mul8su::@1: scope:[mul8su] from mul8su::@2 mul8su::@4 [123] (word) mul8su::m#2 ← phi( mul8su::@2/(word) mul8su::m#1 mul8su::@4/(word) mul8su::m#0 ) [ mul8su::m#2 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#2 ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.log b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.log index 056765e9e..0a87262ce 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.log @@ -28,7 +28,7 @@ void main() { // max - the maximal value void sin8u_table(byte* sintab, word tabsize, byte min, byte max) { byte amplitude = max-min; - word sum = min+max; + word sum = (word)min+max; byte mid = (byte)((sum>>1)+1); //if( sum & 1 > 0) mid++; // u[4.28] step = PI*2/wavelength @@ -532,8 +532,8 @@ divr8u::@1: (boolean~) divr8u::$2 ← (byte~) divr8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr8u::$3 ← ! (boolean~) divr8u::$2 if((boolean~) divr8u::$3) goto divr8u::@2 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 divr8u::@2: (byte~) divr8u::$5 ← (byte) divr8u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) divr8u::dividend ← (byte~) divr8u::$5 @@ -543,8 +543,8 @@ divr8u::@2: (boolean~) divr8u::$8 ← ! (boolean~) divr8u::$7 if((boolean~) divr8u::$8) goto divr8u::@3 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 divr8u::@3: (byte) divr8u::i ← ++ (byte) divr8u::i (boolean~) divr8u::$10 ← (byte) divr8u::i != (byte/signed byte/word/signed word/dword/signed dword) 8 @@ -568,8 +568,8 @@ divr16u::@1: (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr16u::$4 ← ! (boolean~) divr16u::$3 if((boolean~) divr16u::$4) goto divr16u::@2 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 divr16u::@2: (word~) divr16u::$6 ← (word) divr16u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::dividend ← (word~) divr16u::$6 @@ -637,8 +637,8 @@ div8s::@2: (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 goto div8s::@4 div8s::@3: (byte~) div8s::$10 ← ((byte)) (signed byte) div8s::divisor @@ -691,8 +691,8 @@ div16s::@2: (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 goto div16s::@4 div16s::@3: (word~) div16s::$10 ← ((word)) (signed word) div16s::divisor @@ -760,8 +760,8 @@ proc (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - lval((byte~) mul8s::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + lval((byte~) mul8s::$5) ← (byte~) mul8s::$8 mul8s::@1: (boolean~) mul8s::$9 ← (signed byte) mul8s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul8s::$10 ← ! (boolean~) mul8s::$9 @@ -769,8 +769,8 @@ mul8s::@1: (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - lval((byte~) mul8s::$11) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + lval((byte~) mul8s::$11) ← (byte~) mul8s::$14 mul8s::@2: (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m (signed word) mul8s::return ← (signed word~) mul8s::$15 @@ -790,8 +790,8 @@ proc (signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - lval((byte~) mul8su::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + lval((byte~) mul8su::$5) ← (byte~) mul8su::$8 mul8su::@1: (signed word~) mul8su::$9 ← ((signed word)) (word) mul8su::m (signed word) mul8su::return ← (signed word~) mul8su::$9 @@ -808,8 +808,8 @@ mul16u::@1: if((boolean~) mul16u::$0) goto mul16u::@2 goto mul16u::@3 mul16u::@2: - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 (dword~) mul16u::$4 ← (dword) mul16u::res + (dword) mul16u::mb @@ -973,16 +973,16 @@ sin8s::@2: (byte) sin8s::DIV_6 ← (byte/signed byte/word/signed word/dword/signed dword) 43 (byte~) sin8s::$10 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::DIV_6 (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) sin8s::x3_6 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 - (byte) sin8s::usinx ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 + (byte) sin8s::usinx ← (byte~) sin8s::$11 (byte~) sin8s::$12 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x4 ← (byte~) sin8s::$12 (byte~) sin8s::$13 ← call mulu8_sel (byte) sin8s::x4 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x5 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 - (byte) sin8s::usinx ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 + (byte) sin8s::usinx ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -1142,54 +1142,55 @@ main::@return: return endproc // main() proc (void()) sin8u_table((byte*) sin8u_table::sintab , (word) sin8u_table::tabsize , (byte) sin8u_table::min , (byte) sin8u_table::max) - (byte/signed byte/word/signed word/dword/signed dword~) sin8u_table::$0 ← (byte) sin8u_table::max - (byte) sin8u_table::min - (byte) sin8u_table::amplitude ← (byte/signed byte/word/signed word/dword/signed dword~) sin8u_table::$0 - (byte/word~) sin8u_table::$1 ← (byte) sin8u_table::min + (byte) sin8u_table::max - (word) sin8u_table::sum ← (byte/word~) sin8u_table::$1 - (word~) sin8u_table::$2 ← (word) sin8u_table::sum >> (byte/signed byte/word/signed word/dword/signed dword) 1 - (word~) sin8u_table::$3 ← (word~) sin8u_table::$2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte~) sin8u_table::$4 ← ((byte)) (word~) sin8u_table::$3 - (byte) sin8u_table::mid ← (byte~) sin8u_table::$4 - (word~) sin8u_table::$5 ← call div16u (word) PI2_u4f12 (word) sin8u_table::tabsize - (word) sin8u_table::step ← (word~) sin8u_table::$5 - (void~) sin8u_table::$6 ← call print_str (string) "step:@" - (void~) sin8u_table::$7 ← call print_word (word) sin8u_table::step - (void~) sin8u_table::$8 ← call print_str (string) " min:@" - (void~) sin8u_table::$9 ← call print_byte (byte) sin8u_table::min - (void~) sin8u_table::$10 ← call print_str (string) " max:@" - (void~) sin8u_table::$11 ← call print_byte (byte) sin8u_table::max - (void~) sin8u_table::$12 ← call print_str (string) " ampl:@" - (void~) sin8u_table::$13 ← call print_byte (byte) sin8u_table::amplitude - (void~) sin8u_table::$14 ← call print_str (string) " mid:@" - (void~) sin8u_table::$15 ← call print_byte (byte) sin8u_table::mid - (void~) sin8u_table::$16 ← call print_ln + (byte~) sin8u_table::$0 ← (byte) sin8u_table::max - (byte) sin8u_table::min + (byte) sin8u_table::amplitude ← (byte~) sin8u_table::$0 + (word~) sin8u_table::$1 ← ((word)) (byte) sin8u_table::min + (word~) sin8u_table::$2 ← (word~) sin8u_table::$1 + (byte) sin8u_table::max + (word) sin8u_table::sum ← (word~) sin8u_table::$2 + (word~) sin8u_table::$3 ← (word) sin8u_table::sum >> (byte/signed byte/word/signed word/dword/signed dword) 1 + (word/signed dword/dword~) sin8u_table::$4 ← (word~) sin8u_table::$3 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte~) sin8u_table::$5 ← ((byte)) (word/signed dword/dword~) sin8u_table::$4 + (byte) sin8u_table::mid ← (byte~) sin8u_table::$5 + (word~) sin8u_table::$6 ← call div16u (word) PI2_u4f12 (word) sin8u_table::tabsize + (word) sin8u_table::step ← (word~) sin8u_table::$6 + (void~) sin8u_table::$7 ← call print_str (string) "step:@" + (void~) sin8u_table::$8 ← call print_word (word) sin8u_table::step + (void~) sin8u_table::$9 ← call print_str (string) " min:@" + (void~) sin8u_table::$10 ← call print_byte (byte) sin8u_table::min + (void~) sin8u_table::$11 ← call print_str (string) " max:@" + (void~) sin8u_table::$12 ← call print_byte (byte) sin8u_table::max + (void~) sin8u_table::$13 ← call print_str (string) " ampl:@" + (void~) sin8u_table::$14 ← call print_byte (byte) sin8u_table::amplitude + (void~) sin8u_table::$15 ← call print_str (string) " mid:@" + (void~) sin8u_table::$16 ← call print_byte (byte) sin8u_table::mid + (void~) sin8u_table::$17 ← call print_ln (word) sin8u_table::x ← (byte/signed byte/word/signed word/dword/signed dword) 0 (word) sin8u_table::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 sin8u_table::@1: - (signed byte~) sin8u_table::$17 ← call sin8s (word) sin8u_table::x - (signed byte) sin8u_table::sinx ← (signed byte~) sin8u_table::$17 - (byte/word~) sin8u_table::$18 ← (byte) sin8u_table::amplitude + (byte/signed byte/word/signed word/dword/signed dword) 1 - (signed word~) sin8u_table::$19 ← call mul8su (signed byte) sin8u_table::sinx (byte/word~) sin8u_table::$18 - (signed word) sin8u_table::sinx_sc ← (signed word~) sin8u_table::$19 - (byte~) sin8u_table::$20 ← > (signed word) sin8u_table::sinx_sc - (byte/word~) sin8u_table::$21 ← (byte) sin8u_table::mid + (byte~) sin8u_table::$20 - (byte) sin8u_table::sinx_tr ← (byte/word~) sin8u_table::$21 + (signed byte~) sin8u_table::$18 ← call sin8s (word) sin8u_table::x + (signed byte) sin8u_table::sinx ← (signed byte~) sin8u_table::$18 + (byte/signed word/word/dword/signed dword~) sin8u_table::$19 ← (byte) sin8u_table::amplitude + (byte/signed byte/word/signed word/dword/signed dword) 1 + (signed word~) sin8u_table::$20 ← call mul8su (signed byte) sin8u_table::sinx (byte/signed word/word/dword/signed dword~) sin8u_table::$19 + (signed word) sin8u_table::sinx_sc ← (signed word~) sin8u_table::$20 + (byte~) sin8u_table::$21 ← > (signed word) sin8u_table::sinx_sc + (byte~) sin8u_table::$22 ← (byte) sin8u_table::mid + (byte~) sin8u_table::$21 + (byte) sin8u_table::sinx_tr ← (byte~) sin8u_table::$22 *((byte*) sin8u_table::sintab) ← (byte) sin8u_table::sinx_tr (byte*) sin8u_table::sintab ← ++ (byte*) sin8u_table::sintab - (void~) sin8u_table::$22 ← call print_str (string) "x: @" - (void~) sin8u_table::$23 ← call print_word (word) sin8u_table::x - (void~) sin8u_table::$24 ← call print_str (string) " sin: @" - (void~) sin8u_table::$25 ← call print_sbyte (signed byte) sin8u_table::sinx - (void~) sin8u_table::$26 ← call print_str (string) " scaled: @" - (void~) sin8u_table::$27 ← call print_sword (signed word) sin8u_table::sinx_sc - (void~) sin8u_table::$28 ← call print_str (string) " trans: @" - (void~) sin8u_table::$29 ← call print_byte (byte) sin8u_table::sinx_tr - (void~) sin8u_table::$30 ← call print_ln - (word~) sin8u_table::$31 ← (word) sin8u_table::x + (word) sin8u_table::step - (word) sin8u_table::x ← (word~) sin8u_table::$31 + (void~) sin8u_table::$23 ← call print_str (string) "x: @" + (void~) sin8u_table::$24 ← call print_word (word) sin8u_table::x + (void~) sin8u_table::$25 ← call print_str (string) " sin: @" + (void~) sin8u_table::$26 ← call print_sbyte (signed byte) sin8u_table::sinx + (void~) sin8u_table::$27 ← call print_str (string) " scaled: @" + (void~) sin8u_table::$28 ← call print_sword (signed word) sin8u_table::sinx_sc + (void~) sin8u_table::$29 ← call print_str (string) " trans: @" + (void~) sin8u_table::$30 ← call print_byte (byte) sin8u_table::sinx_tr + (void~) sin8u_table::$31 ← call print_ln + (word~) sin8u_table::$32 ← (word) sin8u_table::x + (word) sin8u_table::step + (word) sin8u_table::x ← (word~) sin8u_table::$32 (word) sin8u_table::i ← ++ (word) sin8u_table::i - (boolean~) sin8u_table::$32 ← (word) sin8u_table::i < (word) sin8u_table::tabsize - if((boolean~) sin8u_table::$32) goto sin8u_table::@1 + (boolean~) sin8u_table::$33 ← (word) sin8u_table::i < (word) sin8u_table::tabsize + if((boolean~) sin8u_table::$33) goto sin8u_table::@1 sin8u_table::@return: return endproc // sin8u_table() @@ -1224,7 +1225,7 @@ SYMBOLS (boolean~) div16s::$6 (signed word~) div16s::$7 (word~) div16s::$8 -(byte~) div16s::$9 +(byte/word/dword~) div16s::$9 (label) div16s::@1 (label) div16s::@2 (label) div16s::@3 @@ -1277,7 +1278,7 @@ SYMBOLS (boolean~) div8s::$6 (signed byte~) div8s::$7 (byte~) div8s::$8 -(byte~) div8s::$9 +(byte/word/dword~) div8s::$9 (label) div8s::@1 (label) div8s::@2 (label) div8s::@3 @@ -1306,7 +1307,7 @@ SYMBOLS (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -1327,12 +1328,12 @@ SYMBOLS (boolean~) divr8u::$10 (boolean~) divr8u::$2 (boolean~) divr8u::$3 -(byte~) divr8u::$4 +(byte/word/dword~) divr8u::$4 (byte~) divr8u::$5 (byte~) divr8u::$6 (boolean~) divr8u::$7 (boolean~) divr8u::$8 -(byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 +(byte~) divr8u::$9 (label) divr8u::@1 (label) divr8u::@2 (label) divr8u::@3 @@ -1376,7 +1377,7 @@ SYMBOLS (signed dword) mul16s::return (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (boolean~) mul16u::$0 -(byte~) mul16u::$1 +(byte/word~) mul16u::$1 (boolean~) mul16u::$2 (boolean~) mul16u::$3 (dword~) mul16u::$4 @@ -1399,7 +1400,7 @@ SYMBOLS (byte~) mul8s::$11 (byte~) mul8s::$12 (byte~) mul8s::$13 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 +(byte~) mul8s::$14 (signed word~) mul8s::$15 (word~) mul8s::$2 (boolean~) mul8s::$3 @@ -1407,7 +1408,7 @@ SYMBOLS (byte~) mul8s::$5 (byte~) mul8s::$6 (byte~) mul8s::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 +(byte~) mul8s::$8 (boolean~) mul8s::$9 (label) mul8s::@1 (label) mul8s::@2 @@ -1425,7 +1426,7 @@ SYMBOLS (byte~) mul8su::$5 (byte~) mul8su::$6 (byte~) mul8su::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 +(byte~) mul8su::$8 (signed word~) mul8su::$9 (label) mul8su::@1 (label) mul8su::@return @@ -1602,11 +1603,11 @@ SYMBOLS (boolean~) sin8s::$0 (boolean~) sin8s::$1 (byte~) sin8s::$10 -(byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 +(byte~) sin8s::$11 (byte~) sin8s::$12 (byte~) sin8s::$13 (byte~) sin8s::$14 -(byte/word~) sin8s::$15 +(byte~) sin8s::$15 (boolean~) sin8s::$16 (boolean~) sin8s::$17 (signed byte~) sin8s::$18 @@ -1653,8 +1654,8 @@ SYMBOLS (word) sin8s_gen::wavelength (word) sin8s_gen::x (void()) sin8u_table((byte*) sin8u_table::sintab , (word) sin8u_table::tabsize , (byte) sin8u_table::min , (byte) sin8u_table::max) -(byte/signed byte/word/signed word/dword/signed dword~) sin8u_table::$0 -(byte/word~) sin8u_table::$1 +(byte~) sin8u_table::$0 +(word~) sin8u_table::$1 (void~) sin8u_table::$10 (void~) sin8u_table::$11 (void~) sin8u_table::$12 @@ -1662,13 +1663,13 @@ SYMBOLS (void~) sin8u_table::$14 (void~) sin8u_table::$15 (void~) sin8u_table::$16 -(signed byte~) sin8u_table::$17 -(byte/word~) sin8u_table::$18 -(signed word~) sin8u_table::$19 +(void~) sin8u_table::$17 +(signed byte~) sin8u_table::$18 +(byte/signed word/word/dword/signed dword~) sin8u_table::$19 (word~) sin8u_table::$2 -(byte~) sin8u_table::$20 -(byte/word~) sin8u_table::$21 -(void~) sin8u_table::$22 +(signed word~) sin8u_table::$20 +(byte~) sin8u_table::$21 +(byte~) sin8u_table::$22 (void~) sin8u_table::$23 (void~) sin8u_table::$24 (void~) sin8u_table::$25 @@ -1678,11 +1679,12 @@ SYMBOLS (void~) sin8u_table::$29 (word~) sin8u_table::$3 (void~) sin8u_table::$30 -(word~) sin8u_table::$31 -(boolean~) sin8u_table::$32 -(byte~) sin8u_table::$4 -(word~) sin8u_table::$5 -(void~) sin8u_table::$6 +(void~) sin8u_table::$31 +(word~) sin8u_table::$32 +(boolean~) sin8u_table::$33 +(word/signed dword/dword~) sin8u_table::$4 +(byte~) sin8u_table::$5 +(word~) sin8u_table::$6 (void~) sin8u_table::$7 (void~) sin8u_table::$8 (void~) sin8u_table::$9 @@ -1748,8 +1750,8 @@ divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4 if((boolean~) divr8u::$8) goto divr8u::@3 to:divr8u::@5 divr8u::@4: scope:[divr8u] from divr8u::@1 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 to:divr8u::@2 divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 (byte) divr8u::i ← ++ (byte) divr8u::i @@ -1758,8 +1760,8 @@ divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 to:divr8u::@6 divr8u::@5: scope:[divr8u] from divr8u::@2 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 to:divr8u::@3 divr8u::@6: scope:[divr8u] from divr8u::@3 (byte) rem8u ← (byte) divr8u::rem @@ -1797,8 +1799,8 @@ divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 if((boolean~) divr16u::$9) goto divr16u::@3 to:divr16u::@5 divr16u::@4: scope:[divr16u] from divr16u::@1 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (byte) divr16u::i ← ++ (byte) divr16u::i @@ -1886,8 +1888,8 @@ div8s::@9: scope:[div8s] from div8s::@2 (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 to:div8s::@4 div8s::@4: scope:[div8s] from div8s::@3 div8s::@9 (byte~) div8s::$11 ← call div8u (byte) div8s::dividendu (byte) div8s::divisoru @@ -1960,8 +1962,8 @@ div16s::@9: scope:[div16s] from div16s::@2 (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 to:div16s::@4 div16s::@4: scope:[div16s] from div16s::@3 div16s::@9 (word~) div16s::$11 ← call div16u (word) div16s::dividendu (word) div16s::divisoru @@ -2059,9 +2061,9 @@ mul8s::@3: scope:[mul8s] from mul8s (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + (byte~) mul8s::$16 ← (byte~) mul8s::$8 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$16 to:mul8s::@1 mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m @@ -2071,9 +2073,9 @@ mul8s::@4: scope:[mul8s] from mul8s::@1 (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + (byte~) mul8s::$17 ← (byte~) mul8s::$14 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$17 to:mul8s::@2 mul8s::@return: scope:[mul8s] from mul8s::@2 mul8s::@5 (signed word) mul8s::return ← (signed word) mul8s::return @@ -2100,9 +2102,9 @@ mul8su::@2: scope:[mul8su] from mul8su (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 - (word) mul8su::m ← (word) mul8su::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + (byte~) mul8su::$10 ← (byte~) mul8su::$8 + (word) mul8su::m ← (word) mul8su::m hi= (byte~) mul8su::$10 to:mul8su::@1 mul8su::@return: scope:[mul8su] from mul8su::@1 mul8su::@3 (signed word) mul8su::return ← (signed word) mul8su::return @@ -2121,8 +2123,8 @@ mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 if((boolean~) mul16u::$0) goto mul16u::@2 to:mul16u::@5 mul16u::@2: scope:[mul16u] from mul16u::@1 mul16u::@6 - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 to:mul16u::@7 @@ -2338,16 +2340,16 @@ sin8s::@2: scope:[sin8s] from sin8s::@1 sin8s::@6 (byte) sin8s::DIV_6 ← (byte/signed byte/word/signed word/dword/signed dword) 43 (byte~) sin8s::$10 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::DIV_6 (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) sin8s::x3_6 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 - (byte) sin8s::usinx ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 + (byte) sin8s::usinx ← (byte~) sin8s::$11 (byte~) sin8s::$12 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x4 ← (byte~) sin8s::$12 (byte~) sin8s::$13 ← call mulu8_sel (byte) sin8s::x4 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) sin8s::x5 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 - (byte) sin8s::usinx ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 + (byte) sin8s::usinx ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -2584,55 +2586,56 @@ main::@return: scope:[main] from main @29: scope:[] from @28 to:@30 sin8u_table: scope:[sin8u_table] from - (byte/signed byte/word/signed word/dword/signed dword~) sin8u_table::$0 ← (byte) sin8u_table::max - (byte) sin8u_table::min - (byte) sin8u_table::amplitude ← (byte/signed byte/word/signed word/dword/signed dword~) sin8u_table::$0 - (byte/word~) sin8u_table::$1 ← (byte) sin8u_table::min + (byte) sin8u_table::max - (word) sin8u_table::sum ← (byte/word~) sin8u_table::$1 - (word~) sin8u_table::$2 ← (word) sin8u_table::sum >> (byte/signed byte/word/signed word/dword/signed dword) 1 - (word~) sin8u_table::$3 ← (word~) sin8u_table::$2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte~) sin8u_table::$4 ← ((byte)) (word~) sin8u_table::$3 - (byte) sin8u_table::mid ← (byte~) sin8u_table::$4 - (word~) sin8u_table::$5 ← call div16u (word) PI2_u4f12 (word) sin8u_table::tabsize - (word) sin8u_table::step ← (word~) sin8u_table::$5 - (void~) sin8u_table::$6 ← call print_str (string) "step:@" - (void~) sin8u_table::$7 ← call print_word (word) sin8u_table::step - (void~) sin8u_table::$8 ← call print_str (string) " min:@" - (void~) sin8u_table::$9 ← call print_byte (byte) sin8u_table::min - (void~) sin8u_table::$10 ← call print_str (string) " max:@" - (void~) sin8u_table::$11 ← call print_byte (byte) sin8u_table::max - (void~) sin8u_table::$12 ← call print_str (string) " ampl:@" - (void~) sin8u_table::$13 ← call print_byte (byte) sin8u_table::amplitude - (void~) sin8u_table::$14 ← call print_str (string) " mid:@" - (void~) sin8u_table::$15 ← call print_byte (byte) sin8u_table::mid - (void~) sin8u_table::$16 ← call print_ln + (byte~) sin8u_table::$0 ← (byte) sin8u_table::max - (byte) sin8u_table::min + (byte) sin8u_table::amplitude ← (byte~) sin8u_table::$0 + (word~) sin8u_table::$1 ← ((word)) (byte) sin8u_table::min + (word~) sin8u_table::$2 ← (word~) sin8u_table::$1 + (byte) sin8u_table::max + (word) sin8u_table::sum ← (word~) sin8u_table::$2 + (word~) sin8u_table::$3 ← (word) sin8u_table::sum >> (byte/signed byte/word/signed word/dword/signed dword) 1 + (word/signed dword/dword~) sin8u_table::$4 ← (word~) sin8u_table::$3 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte~) sin8u_table::$5 ← ((byte)) (word/signed dword/dword~) sin8u_table::$4 + (byte) sin8u_table::mid ← (byte~) sin8u_table::$5 + (word~) sin8u_table::$6 ← call div16u (word) PI2_u4f12 (word) sin8u_table::tabsize + (word) sin8u_table::step ← (word~) sin8u_table::$6 + (void~) sin8u_table::$7 ← call print_str (string) "step:@" + (void~) sin8u_table::$8 ← call print_word (word) sin8u_table::step + (void~) sin8u_table::$9 ← call print_str (string) " min:@" + (void~) sin8u_table::$10 ← call print_byte (byte) sin8u_table::min + (void~) sin8u_table::$11 ← call print_str (string) " max:@" + (void~) sin8u_table::$12 ← call print_byte (byte) sin8u_table::max + (void~) sin8u_table::$13 ← call print_str (string) " ampl:@" + (void~) sin8u_table::$14 ← call print_byte (byte) sin8u_table::amplitude + (void~) sin8u_table::$15 ← call print_str (string) " mid:@" + (void~) sin8u_table::$16 ← call print_byte (byte) sin8u_table::mid + (void~) sin8u_table::$17 ← call print_ln (word) sin8u_table::x ← (byte/signed byte/word/signed word/dword/signed dword) 0 (word) sin8u_table::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:sin8u_table::@1 sin8u_table::@1: scope:[sin8u_table] from sin8u_table sin8u_table::@1 - (signed byte~) sin8u_table::$17 ← call sin8s (word) sin8u_table::x - (signed byte) sin8u_table::sinx ← (signed byte~) sin8u_table::$17 - (byte/word~) sin8u_table::$18 ← (byte) sin8u_table::amplitude + (byte/signed byte/word/signed word/dword/signed dword) 1 - (signed word~) sin8u_table::$19 ← call mul8su (signed byte) sin8u_table::sinx (byte/word~) sin8u_table::$18 - (signed word) sin8u_table::sinx_sc ← (signed word~) sin8u_table::$19 - (byte~) sin8u_table::$20 ← > (signed word) sin8u_table::sinx_sc - (byte/word~) sin8u_table::$21 ← (byte) sin8u_table::mid + (byte~) sin8u_table::$20 - (byte) sin8u_table::sinx_tr ← (byte/word~) sin8u_table::$21 + (signed byte~) sin8u_table::$18 ← call sin8s (word) sin8u_table::x + (signed byte) sin8u_table::sinx ← (signed byte~) sin8u_table::$18 + (byte/signed word/word/dword/signed dword~) sin8u_table::$19 ← (byte) sin8u_table::amplitude + (byte/signed byte/word/signed word/dword/signed dword) 1 + (signed word~) sin8u_table::$20 ← call mul8su (signed byte) sin8u_table::sinx (byte/signed word/word/dword/signed dword~) sin8u_table::$19 + (signed word) sin8u_table::sinx_sc ← (signed word~) sin8u_table::$20 + (byte~) sin8u_table::$21 ← > (signed word) sin8u_table::sinx_sc + (byte~) sin8u_table::$22 ← (byte) sin8u_table::mid + (byte~) sin8u_table::$21 + (byte) sin8u_table::sinx_tr ← (byte~) sin8u_table::$22 *((byte*) sin8u_table::sintab) ← (byte) sin8u_table::sinx_tr (byte*) sin8u_table::sintab ← ++ (byte*) sin8u_table::sintab - (void~) sin8u_table::$22 ← call print_str (string) "x: @" - (void~) sin8u_table::$23 ← call print_word (word) sin8u_table::x - (void~) sin8u_table::$24 ← call print_str (string) " sin: @" - (void~) sin8u_table::$25 ← call print_sbyte (signed byte) sin8u_table::sinx - (void~) sin8u_table::$26 ← call print_str (string) " scaled: @" - (void~) sin8u_table::$27 ← call print_sword (signed word) sin8u_table::sinx_sc - (void~) sin8u_table::$28 ← call print_str (string) " trans: @" - (void~) sin8u_table::$29 ← call print_byte (byte) sin8u_table::sinx_tr - (void~) sin8u_table::$30 ← call print_ln - (word~) sin8u_table::$31 ← (word) sin8u_table::x + (word) sin8u_table::step - (word) sin8u_table::x ← (word~) sin8u_table::$31 + (void~) sin8u_table::$23 ← call print_str (string) "x: @" + (void~) sin8u_table::$24 ← call print_word (word) sin8u_table::x + (void~) sin8u_table::$25 ← call print_str (string) " sin: @" + (void~) sin8u_table::$26 ← call print_sbyte (signed byte) sin8u_table::sinx + (void~) sin8u_table::$27 ← call print_str (string) " scaled: @" + (void~) sin8u_table::$28 ← call print_sword (signed word) sin8u_table::sinx_sc + (void~) sin8u_table::$29 ← call print_str (string) " trans: @" + (void~) sin8u_table::$30 ← call print_byte (byte) sin8u_table::sinx_tr + (void~) sin8u_table::$31 ← call print_ln + (word~) sin8u_table::$32 ← (word) sin8u_table::x + (word) sin8u_table::step + (word) sin8u_table::x ← (word~) sin8u_table::$32 (word) sin8u_table::i ← ++ (word) sin8u_table::i - (boolean~) sin8u_table::$32 ← (word) sin8u_table::i < (word) sin8u_table::tabsize - if((boolean~) sin8u_table::$32) goto sin8u_table::@1 + (boolean~) sin8u_table::$33 ← (word) sin8u_table::i < (word) sin8u_table::tabsize + if((boolean~) sin8u_table::$33) goto sin8u_table::@1 to:sin8u_table::@2 sin8u_table::@2: scope:[sin8u_table] from sin8u_table::@1 to:sin8u_table::@return @@ -2675,7 +2678,6 @@ Eliminating unused variable - keeping the call (void~) print_byte::$1 Eliminating unused variable - keeping the call (void~) print_byte::$3 Eliminating unused variable - keeping the call (void~) main::$0 Eliminating unused variable - keeping the call (void~) main::$1 -Eliminating unused variable - keeping the call (void~) sin8u_table::$6 Eliminating unused variable - keeping the call (void~) sin8u_table::$7 Eliminating unused variable - keeping the call (void~) sin8u_table::$8 Eliminating unused variable - keeping the call (void~) sin8u_table::$9 @@ -2686,7 +2688,7 @@ Eliminating unused variable - keeping the call (void~) sin8u_table::$13 Eliminating unused variable - keeping the call (void~) sin8u_table::$14 Eliminating unused variable - keeping the call (void~) sin8u_table::$15 Eliminating unused variable - keeping the call (void~) sin8u_table::$16 -Eliminating unused variable - keeping the call (void~) sin8u_table::$22 +Eliminating unused variable - keeping the call (void~) sin8u_table::$17 Eliminating unused variable - keeping the call (void~) sin8u_table::$23 Eliminating unused variable - keeping the call (void~) sin8u_table::$24 Eliminating unused variable - keeping the call (void~) sin8u_table::$25 @@ -2695,6 +2697,7 @@ Eliminating unused variable - keeping the call (void~) sin8u_table::$27 Eliminating unused variable - keeping the call (void~) sin8u_table::$28 Eliminating unused variable - keeping the call (void~) sin8u_table::$29 Eliminating unused variable - keeping the call (void~) sin8u_table::$30 +Eliminating unused variable - keeping the call (void~) sin8u_table::$31 Creating constant string variable for inline (const string) print_byte::$4 "0123456789abcdef" Creating constant string variable for inline (const string) sin8u_table::str "step:@" Creating constant string variable for inline (const string) sin8u_table::str1 " min:@" @@ -2837,8 +2840,8 @@ divr16u::@4: scope:[divr16u] from divr16u::@1 (word) divr16u::quotient#7 ← phi( divr16u::@1/(word) divr16u::quotient#6 ) (word) divr16u::dividend#6 ← phi( divr16u::@1/(word) divr16u::dividend#2 ) (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 ) - (word~) divr16u::$5 ← (word) divr16u::rem#6 | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem#1 ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem#6 | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem#1 ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#6 ← phi( divr16u::@2/(word) divr16u::divisor#1 divr16u::@5/(word) divr16u::divisor#2 ) @@ -2974,9 +2977,9 @@ mul8su::@2: scope:[mul8su] from mul8su::@4 (word) mul8su::m#3 ← phi( mul8su::@4/(word) mul8su::m#0 ) (byte~) mul8su::$6 ← > (word) mul8su::m#3 (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b#2 - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 - (word) mul8su::m#1 ← (word) mul8su::m#3 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + (byte~) mul8su::$10 ← (byte~) mul8su::$8 + (word) mul8su::m#1 ← (word) mul8su::m#3 hi= (byte~) mul8su::$10 to:mul8su::@1 mul8su::@return: scope:[mul8su] from mul8su::@1 (signed word) mul8su::return#3 ← phi( mul8su::@1/(signed word) mul8su::return#0 ) @@ -3053,8 +3056,8 @@ sin8s::@12: scope:[sin8s] from sin8s::@11 (byte) mulu8_sel::return#9 ← phi( sin8s::@11/(byte) mulu8_sel::return#2 ) (byte~) sin8s::$10 ← (byte) mulu8_sel::return#9 (byte) sin8s::x3_6#0 ← (byte~) sin8s::$10 - (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 ← (byte) sin8s::x1#2 - (byte) sin8s::x3_6#0 - (byte) sin8s::usinx#0 ← (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 + (byte~) sin8s::$11 ← (byte) sin8s::x1#2 - (byte) sin8s::x3_6#0 + (byte) sin8s::usinx#0 ← (byte~) sin8s::$11 (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#1 (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#2 (byte) mulu8_sel::select#3 ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -3082,8 +3085,8 @@ sin8s::@14: scope:[sin8s] from sin8s::@13 (byte) sin8s::x5#0 ← (byte~) sin8s::$13 (byte~) sin8s::$14 ← (byte) sin8s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) sin8s::x5_128#0 ← (byte~) sin8s::$14 - (byte/word~) sin8s::$15 ← (byte) sin8s::usinx#3 + (byte) sin8s::x5_128#0 - (byte) sin8s::usinx#1 ← (byte/word~) sin8s::$15 + (byte~) sin8s::$15 ← (byte) sin8s::usinx#3 + (byte) sin8s::x5_128#0 + (byte) sin8s::usinx#1 ← (byte~) sin8s::$15 (boolean~) sin8s::$16 ← (byte) sin8s::usinx#1 >= (byte/word/signed word/dword/signed dword) 128 (boolean~) sin8s::$17 ← ! (boolean~) sin8s::$16 if((boolean~) sin8s::$17) goto sin8s::@3 @@ -3396,14 +3399,15 @@ sin8u_table: scope:[sin8u_table] from main::@1 (word) sin8u_table::tabsize#1 ← phi( main::@1/(word) sin8u_table::tabsize#0 ) (byte) sin8u_table::min#1 ← phi( main::@1/(byte) sin8u_table::min#0 ) (byte) sin8u_table::max#1 ← phi( main::@1/(byte) sin8u_table::max#0 ) - (byte/signed byte/word/signed word/dword/signed dword~) sin8u_table::$0 ← (byte) sin8u_table::max#1 - (byte) sin8u_table::min#1 - (byte) sin8u_table::amplitude#0 ← (byte/signed byte/word/signed word/dword/signed dword~) sin8u_table::$0 - (byte/word~) sin8u_table::$1 ← (byte) sin8u_table::min#1 + (byte) sin8u_table::max#1 - (word) sin8u_table::sum#0 ← (byte/word~) sin8u_table::$1 - (word~) sin8u_table::$2 ← (word) sin8u_table::sum#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 - (word~) sin8u_table::$3 ← (word~) sin8u_table::$2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte~) sin8u_table::$4 ← ((byte)) (word~) sin8u_table::$3 - (byte) sin8u_table::mid#0 ← (byte~) sin8u_table::$4 + (byte~) sin8u_table::$0 ← (byte) sin8u_table::max#1 - (byte) sin8u_table::min#1 + (byte) sin8u_table::amplitude#0 ← (byte~) sin8u_table::$0 + (word~) sin8u_table::$1 ← ((word)) (byte) sin8u_table::min#1 + (word~) sin8u_table::$2 ← (word~) sin8u_table::$1 + (byte) sin8u_table::max#1 + (word) sin8u_table::sum#0 ← (word~) sin8u_table::$2 + (word~) sin8u_table::$3 ← (word) sin8u_table::sum#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 + (word/signed dword/dword~) sin8u_table::$4 ← (word~) sin8u_table::$3 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte~) sin8u_table::$5 ← ((byte)) (word/signed dword/dword~) sin8u_table::$4 + (byte) sin8u_table::mid#0 ← (byte~) sin8u_table::$5 (word) div16u::dividend#0 ← (word) PI2_u4f12#0 (word) div16u::divisor#0 ← (word) sin8u_table::tabsize#1 call div16u param-assignment @@ -3420,9 +3424,9 @@ sin8u_table::@3: scope:[sin8u_table] from sin8u_table (byte*) char_cursor#99 ← phi( sin8u_table/(byte*) char_cursor#105 ) (word) rem16u#15 ← phi( sin8u_table/(word) rem16u#4 ) (word) div16u::return#4 ← phi( sin8u_table/(word) div16u::return#2 ) - (word~) sin8u_table::$5 ← (word) div16u::return#4 + (word~) sin8u_table::$6 ← (word) div16u::return#4 (word) rem16u#7 ← (word) rem16u#15 - (word) sin8u_table::step#0 ← (word~) sin8u_table::$5 + (word) sin8u_table::step#0 ← (word~) sin8u_table::$6 (byte*) print_str::str#1 ← (const string) sin8u_table::str call print_str param-assignment to:sin8u_table::@4 @@ -3604,11 +3608,11 @@ sin8u_table::@15: scope:[sin8u_table] from sin8u_table::@1 (byte) sin8u_table::mid#4 ← phi( sin8u_table::@1/(byte) sin8u_table::mid#6 ) (byte) sin8u_table::amplitude#2 ← phi( sin8u_table::@1/(byte) sin8u_table::amplitude#4 ) (signed byte) sin8s::return#4 ← phi( sin8u_table::@1/(signed byte) sin8s::return#2 ) - (signed byte~) sin8u_table::$17 ← (signed byte) sin8s::return#4 - (signed byte) sin8u_table::sinx#0 ← (signed byte~) sin8u_table::$17 - (byte/word~) sin8u_table::$18 ← (byte) sin8u_table::amplitude#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (signed byte~) sin8u_table::$18 ← (signed byte) sin8s::return#4 + (signed byte) sin8u_table::sinx#0 ← (signed byte~) sin8u_table::$18 + (byte/signed word/word/dword/signed dword~) sin8u_table::$19 ← (byte) sin8u_table::amplitude#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 (signed byte) mul8su::a#0 ← (signed byte) sin8u_table::sinx#0 - (byte) mul8su::b#0 ← (byte/word~) sin8u_table::$18 + (byte) mul8su::b#0 ← (byte/signed word/word/dword/signed dword~) sin8u_table::$19 call mul8su param-assignment (signed word) mul8su::return#2 ← (signed word) mul8su::return#1 to:sin8u_table::@16 @@ -3625,11 +3629,11 @@ sin8u_table::@16: scope:[sin8u_table] from sin8u_table::@15 (byte*) sin8u_table::sintab#2 ← phi( sin8u_table::@15/(byte*) sin8u_table::sintab#3 ) (byte) sin8u_table::mid#2 ← phi( sin8u_table::@15/(byte) sin8u_table::mid#4 ) (signed word) mul8su::return#4 ← phi( sin8u_table::@15/(signed word) mul8su::return#2 ) - (signed word~) sin8u_table::$19 ← (signed word) mul8su::return#4 - (signed word) sin8u_table::sinx_sc#0 ← (signed word~) sin8u_table::$19 - (byte~) sin8u_table::$20 ← > (signed word) sin8u_table::sinx_sc#0 - (byte/word~) sin8u_table::$21 ← (byte) sin8u_table::mid#2 + (byte~) sin8u_table::$20 - (byte) sin8u_table::sinx_tr#0 ← (byte/word~) sin8u_table::$21 + (signed word~) sin8u_table::$20 ← (signed word) mul8su::return#4 + (signed word) sin8u_table::sinx_sc#0 ← (signed word~) sin8u_table::$20 + (byte~) sin8u_table::$21 ← > (signed word) sin8u_table::sinx_sc#0 + (byte~) sin8u_table::$22 ← (byte) sin8u_table::mid#2 + (byte~) sin8u_table::$21 + (byte) sin8u_table::sinx_tr#0 ← (byte~) sin8u_table::$22 *((byte*) sin8u_table::sintab#2) ← (byte) sin8u_table::sinx_tr#0 (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#2 (byte*) print_str::str#6 ← (const string) sin8u_table::str5 @@ -3782,11 +3786,11 @@ sin8u_table::@25: scope:[sin8u_table] from sin8u_table::@24 (byte*) line_cursor#20 ← phi( sin8u_table::@24/(byte*) line_cursor#2 ) (byte*) line_cursor#9 ← (byte*) line_cursor#20 (byte*) char_cursor#43 ← (byte*) char_cursor#87 - (word~) sin8u_table::$31 ← (word) sin8u_table::x#4 + (word) sin8u_table::step#2 - (word) sin8u_table::x#1 ← (word~) sin8u_table::$31 + (word~) sin8u_table::$32 ← (word) sin8u_table::x#4 + (word) sin8u_table::step#2 + (word) sin8u_table::x#1 ← (word~) sin8u_table::$32 (word) sin8u_table::i#1 ← ++ (word) sin8u_table::i#2 - (boolean~) sin8u_table::$32 ← (word) sin8u_table::i#1 < (word) sin8u_table::tabsize#2 - if((boolean~) sin8u_table::$32) goto sin8u_table::@1 + (boolean~) sin8u_table::$33 ← (word) sin8u_table::i#1 < (word) sin8u_table::tabsize#2 + if((boolean~) sin8u_table::$33) goto sin8u_table::@1 to:sin8u_table::@return sin8u_table::@return: scope:[sin8u_table] from sin8u_table::@25 (byte*) line_cursor#21 ← phi( sin8u_table::@25/(byte*) line_cursor#9 ) @@ -3962,7 +3966,7 @@ SYMBOL TABLE SSA (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -4089,13 +4093,13 @@ SYMBOL TABLE SSA (signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) (byte~) mul8su::$0 (byte~) mul8su::$1 -(byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 +(byte~) mul8su::$10 (word~) mul8su::$2 (boolean~) mul8su::$3 (boolean~) mul8su::$4 (byte~) mul8su::$6 (byte~) mul8su::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 +(byte~) mul8su::$8 (signed word~) mul8su::$9 (label) mul8su::@1 (label) mul8su::@2 @@ -4375,11 +4379,11 @@ SYMBOL TABLE SSA (boolean~) sin8s::$0 (boolean~) sin8s::$1 (byte~) sin8s::$10 -(byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 +(byte~) sin8s::$11 (byte~) sin8s::$12 (byte~) sin8s::$13 (byte~) sin8s::$14 -(byte/word~) sin8s::$15 +(byte~) sin8s::$15 (boolean~) sin8s::$16 (boolean~) sin8s::$17 (signed byte~) sin8s::$18 @@ -4472,19 +4476,20 @@ SYMBOL TABLE SSA (byte) sin8s::x5_128 (byte) sin8s::x5_128#0 (void()) sin8u_table((byte*) sin8u_table::sintab , (word) sin8u_table::tabsize , (byte) sin8u_table::min , (byte) sin8u_table::max) -(byte/signed byte/word/signed word/dword/signed dword~) sin8u_table::$0 -(byte/word~) sin8u_table::$1 -(signed byte~) sin8u_table::$17 -(byte/word~) sin8u_table::$18 -(signed word~) sin8u_table::$19 +(byte~) sin8u_table::$0 +(word~) sin8u_table::$1 +(signed byte~) sin8u_table::$18 +(byte/signed word/word/dword/signed dword~) sin8u_table::$19 (word~) sin8u_table::$2 -(byte~) sin8u_table::$20 -(byte/word~) sin8u_table::$21 +(signed word~) sin8u_table::$20 +(byte~) sin8u_table::$21 +(byte~) sin8u_table::$22 (word~) sin8u_table::$3 -(word~) sin8u_table::$31 -(boolean~) sin8u_table::$32 -(byte~) sin8u_table::$4 -(word~) sin8u_table::$5 +(word~) sin8u_table::$32 +(boolean~) sin8u_table::$33 +(word/signed dword/dword~) sin8u_table::$4 +(byte~) sin8u_table::$5 +(word~) sin8u_table::$6 (label) sin8u_table::@1 (label) sin8u_table::@10 (label) sin8u_table::@11 @@ -4825,7 +4830,7 @@ Not aliassing across scopes: div16u::dividend#0 PI2_u4f12#0 Not aliassing across scopes: div16u::divisor#0 sin8u_table::tabsize#1 Not aliassing across scopes: div16u::return#2 div16u::return#1 Not aliassing across scopes: rem16u#15 rem16u#4 -Not aliassing across scopes: sin8u_table::$5 div16u::return#4 +Not aliassing across scopes: sin8u_table::$6 div16u::return#4 Not aliassing across scopes: char_cursor#68 char_cursor#2 Not aliassing across scopes: print_word::w#1 sin8u_table::step#1 Not aliassing across scopes: char_cursor#69 char_cursor#13 @@ -4845,10 +4850,10 @@ Not aliassing across scopes: line_cursor#19 line_cursor#2 Not aliassing across scopes: char_cursor#78 char_cursor#4 Not aliassing across scopes: sin8s::x#2 sin8u_table::x#2 Not aliassing across scopes: sin8s::return#2 sin8s::return#1 -Not aliassing across scopes: sin8u_table::$17 sin8s::return#4 +Not aliassing across scopes: sin8u_table::$18 sin8s::return#4 Not aliassing across scopes: mul8su::a#0 sin8u_table::sinx#0 Not aliassing across scopes: mul8su::return#2 mul8su::return#1 -Not aliassing across scopes: sin8u_table::$19 mul8su::return#4 +Not aliassing across scopes: sin8u_table::$20 mul8su::return#4 Not aliassing across scopes: char_cursor#79 char_cursor#2 Not aliassing across scopes: print_word::w#2 sin8u_table::x#3 Not aliassing across scopes: char_cursor#80 char_cursor#13 @@ -4873,7 +4878,7 @@ Alias (word) divr16u::dividend#2 = (word) divr16u::dividend#6 Alias (word) divr16u::quotient#6 = (word) divr16u::quotient#7 Alias (word) divr16u::divisor#3 = (word) divr16u::divisor#4 Alias (byte) divr16u::i#5 = (byte) divr16u::i#6 -Alias (word) divr16u::rem#1 = (word~) divr16u::$5 +Alias (word) divr16u::rem#1 = (word/dword~) divr16u::$5 Alias (word) divr16u::rem#5 = (word) divr16u::rem#7 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#2 Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 @@ -4897,7 +4902,7 @@ Alias (signed byte) mul8su::a#1 = (signed byte) mul8su::a#2 Alias (byte) mul8su::b#1 = (byte) mul8su::b#3 (byte) mul8su::b#2 Alias (word) mul8su::m#0 = (word~) mul8su::$2 (word) mul8su::m#3 Alias (signed word) mul8su::return#0 = (signed word~) mul8su::$9 (signed word) mul8su::return#3 (signed word) mul8su::return#1 -Alias (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 = (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 +Alias (byte~) mul8su::$10 = (byte~) mul8su::$8 Alias (word) rem16u#0 = (word) rem16u#26 (word) rem16u#25 (word) rem16u#22 Alias (word) sin8s::x#3 = (word) sin8s::x#5 Alias (word) sin8s::x#0 = (word~) sin8s::$2 @@ -4909,13 +4914,13 @@ Alias (byte) mulu8_sel::return#1 = (byte) mulu8_sel::return#8 Alias (byte) sin8s::x3#0 = (byte~) sin8s::$9 (byte) sin8s::x3#1 Alias (byte) mulu8_sel::return#2 = (byte) mulu8_sel::return#9 Alias (byte) sin8s::x3_6#0 = (byte~) sin8s::$10 -Alias (byte) sin8s::usinx#0 = (byte/signed byte/word/signed word/dword/signed dword~) sin8s::$11 (byte) sin8s::usinx#7 (byte) sin8s::usinx#3 +Alias (byte) sin8s::usinx#0 = (byte~) sin8s::$11 (byte) sin8s::usinx#7 (byte) sin8s::usinx#3 Alias (byte) mulu8_sel::return#10 = (byte) mulu8_sel::return#3 Alias (byte) sin8s::x4#0 = (byte~) sin8s::$12 Alias (byte) mulu8_sel::return#11 = (byte) mulu8_sel::return#4 Alias (byte) sin8s::x5#0 = (byte~) sin8s::$13 Alias (byte) sin8s::x5_128#0 = (byte~) sin8s::$14 -Alias (byte) sin8s::usinx#1 = (byte/word~) sin8s::$15 (byte) sin8s::usinx#5 +Alias (byte) sin8s::usinx#1 = (byte~) sin8s::$15 (byte) sin8s::usinx#5 Alias (word) sin8s::x#4 = (word) sin8s::x#7 Alias (byte) sin8s::isUpper#10 = (byte) sin8s::isUpper#11 Alias (word) sin8s::x#1 = (word~) sin8s::$5 @@ -4959,9 +4964,9 @@ Alias (byte*) char_cursor#21 = (byte*) char_cursor#65 Alias (word) rem16u#13 = (word) rem16u#5 (word) rem16u#14 (word) rem16u#6 Alias (byte*) char_cursor#22 = (byte*) char_cursor#66 (byte*) char_cursor#67 (byte*) char_cursor#23 Alias (byte*) line_cursor#17 = (byte*) line_cursor#6 (byte*) line_cursor#18 (byte*) line_cursor#7 -Alias (byte) sin8u_table::amplitude#0 = (byte/signed byte/word/signed word/dword/signed dword~) sin8u_table::$0 (byte) sin8u_table::amplitude#19 (byte) sin8u_table::amplitude#17 (byte) sin8u_table::amplitude#14 (byte) sin8u_table::amplitude#11 (byte) sin8u_table::amplitude#8 (byte) sin8u_table::amplitude#5 (byte) sin8u_table::amplitude#3 (byte) sin8u_table::amplitude#1 (byte) sin8u_table::amplitude#15 (byte) sin8u_table::amplitude#12 (byte) sin8u_table::amplitude#9 (byte) sin8u_table::amplitude#6 -Alias (word) sin8u_table::sum#0 = (byte/word~) sin8u_table::$1 -Alias (byte) sin8u_table::mid#0 = (byte~) sin8u_table::$4 (byte) sin8u_table::mid#21 (byte) sin8u_table::mid#19 (byte) sin8u_table::mid#17 (byte) sin8u_table::mid#15 (byte) sin8u_table::mid#13 (byte) sin8u_table::mid#10 (byte) sin8u_table::mid#7 (byte) sin8u_table::mid#5 (byte) sin8u_table::mid#3 (byte) sin8u_table::mid#1 (byte) sin8u_table::mid#11 (byte) sin8u_table::mid#8 +Alias (byte) sin8u_table::amplitude#0 = (byte~) sin8u_table::$0 (byte) sin8u_table::amplitude#19 (byte) sin8u_table::amplitude#17 (byte) sin8u_table::amplitude#14 (byte) sin8u_table::amplitude#11 (byte) sin8u_table::amplitude#8 (byte) sin8u_table::amplitude#5 (byte) sin8u_table::amplitude#3 (byte) sin8u_table::amplitude#1 (byte) sin8u_table::amplitude#15 (byte) sin8u_table::amplitude#12 (byte) sin8u_table::amplitude#9 (byte) sin8u_table::amplitude#6 +Alias (word) sin8u_table::sum#0 = (word~) sin8u_table::$2 +Alias (byte) sin8u_table::mid#0 = (byte~) sin8u_table::$5 (byte) sin8u_table::mid#21 (byte) sin8u_table::mid#19 (byte) sin8u_table::mid#17 (byte) sin8u_table::mid#15 (byte) sin8u_table::mid#13 (byte) sin8u_table::mid#10 (byte) sin8u_table::mid#7 (byte) sin8u_table::mid#5 (byte) sin8u_table::mid#3 (byte) sin8u_table::mid#1 (byte) sin8u_table::mid#11 (byte) sin8u_table::mid#8 Alias (word) div16u::return#2 = (word) div16u::return#4 Alias (byte*) char_cursor#105 = (byte*) char_cursor#99 Alias (byte) sin8u_table::min#1 = (byte) sin8u_table::min#5 (byte) sin8u_table::min#4 (byte) sin8u_table::min#3 (byte) sin8u_table::min#2 @@ -4970,7 +4975,7 @@ Alias (byte*) line_cursor#25 = (byte*) line_cursor#46 (byte*) line_cursor#48 (by Alias (byte*) sin8u_table::sintab#11 = (byte*) sin8u_table::sintab#25 (byte*) sin8u_table::sintab#26 (byte*) sin8u_table::sintab#24 (byte*) sin8u_table::sintab#23 (byte*) sin8u_table::sintab#21 (byte*) sin8u_table::sintab#19 (byte*) sin8u_table::sintab#17 (byte*) sin8u_table::sintab#15 (byte*) sin8u_table::sintab#13 (byte*) sin8u_table::sintab#9 (byte*) sin8u_table::sintab#7 (byte*) sin8u_table::sintab#5 Alias (word) sin8u_table::tabsize#1 = (word) sin8u_table::tabsize#25 (word) sin8u_table::tabsize#24 (word) sin8u_table::tabsize#23 (word) sin8u_table::tabsize#22 (word) sin8u_table::tabsize#21 (word) sin8u_table::tabsize#20 (word) sin8u_table::tabsize#19 (word) sin8u_table::tabsize#18 (word) sin8u_table::tabsize#17 (word) sin8u_table::tabsize#16 (word) sin8u_table::tabsize#15 (word) sin8u_table::tabsize#14 Alias (word) rem16u#15 = (word) rem16u#7 (word) rem16u#47 (word) rem16u#46 (word) rem16u#45 (word) rem16u#44 (word) rem16u#43 (word) rem16u#42 (word) rem16u#41 (word) rem16u#40 (word) rem16u#39 (word) rem16u#38 (word) rem16u#37 -Alias (word) sin8u_table::step#0 = (word~) sin8u_table::$5 (word) sin8u_table::step#1 (word) sin8u_table::step#23 (word) sin8u_table::step#22 (word) sin8u_table::step#21 (word) sin8u_table::step#20 (word) sin8u_table::step#19 (word) sin8u_table::step#18 (word) sin8u_table::step#17 (word) sin8u_table::step#16 (word) sin8u_table::step#15 (word) sin8u_table::step#14 +Alias (word) sin8u_table::step#0 = (word~) sin8u_table::$6 (word) sin8u_table::step#1 (word) sin8u_table::step#23 (word) sin8u_table::step#22 (word) sin8u_table::step#21 (word) sin8u_table::step#20 (word) sin8u_table::step#19 (word) sin8u_table::step#18 (word) sin8u_table::step#17 (word) sin8u_table::step#16 (word) sin8u_table::step#15 (word) sin8u_table::step#14 Alias (byte*) char_cursor#24 = (byte*) char_cursor#68 Alias (byte*) char_cursor#25 = (byte*) char_cursor#69 Alias (byte*) char_cursor#26 = (byte*) char_cursor#70 @@ -4994,11 +4999,11 @@ Alias (word) sin8u_table::step#10 = (word) sin8u_table::step#12 (word) sin8u_tab Alias (word) sin8u_table::i#10 = (word) sin8u_table::i#12 (word) sin8u_table::i#13 (word) sin8u_table::i#11 (word) sin8u_table::i#9 (word) sin8u_table::i#8 (word) sin8u_table::i#7 (word) sin8u_table::i#6 (word) sin8u_table::i#5 (word) sin8u_table::i#4 (word) sin8u_table::i#3 (word) sin8u_table::i#2 Alias (word) sin8u_table::tabsize#10 = (word) sin8u_table::tabsize#12 (word) sin8u_table::tabsize#13 (word) sin8u_table::tabsize#11 (word) sin8u_table::tabsize#9 (word) sin8u_table::tabsize#8 (word) sin8u_table::tabsize#7 (word) sin8u_table::tabsize#6 (word) sin8u_table::tabsize#5 (word) sin8u_table::tabsize#4 (word) sin8u_table::tabsize#3 (word) sin8u_table::tabsize#2 Alias (word) rem16u#16 = (word) rem16u#35 (word) rem16u#36 (word) rem16u#34 (word) rem16u#33 (word) rem16u#32 (word) rem16u#31 (word) rem16u#30 (word) rem16u#29 (word) rem16u#28 (word) rem16u#27 (word) rem16u#24 (word) rem16u#21 (word) rem16u#8 -Alias (signed byte) sin8u_table::sinx#0 = (signed byte~) sin8u_table::$17 (signed byte) sin8u_table::sinx#4 (signed byte) sin8u_table::sinx#3 (signed byte) sin8u_table::sinx#2 (signed byte) sin8u_table::sinx#1 -Alias (byte) mul8su::b#0 = (byte/word~) sin8u_table::$18 +Alias (signed byte) sin8u_table::sinx#0 = (signed byte~) sin8u_table::$18 (signed byte) sin8u_table::sinx#4 (signed byte) sin8u_table::sinx#3 (signed byte) sin8u_table::sinx#2 (signed byte) sin8u_table::sinx#1 +Alias (byte) mul8su::b#0 = (byte/signed word/word/dword/signed dword~) sin8u_table::$19 Alias (signed word) mul8su::return#2 = (signed word) mul8su::return#4 -Alias (signed word) sin8u_table::sinx_sc#0 = (signed word~) sin8u_table::$19 (signed word) sin8u_table::sinx_sc#5 (signed word) sin8u_table::sinx_sc#4 (signed word) sin8u_table::sinx_sc#3 (signed word) sin8u_table::sinx_sc#2 (signed word) sin8u_table::sinx_sc#1 -Alias (byte) sin8u_table::sinx_tr#0 = (byte/word~) sin8u_table::$21 (byte) sin8u_table::sinx_tr#7 (byte) sin8u_table::sinx_tr#6 (byte) sin8u_table::sinx_tr#5 (byte) sin8u_table::sinx_tr#4 (byte) sin8u_table::sinx_tr#3 (byte) sin8u_table::sinx_tr#2 (byte) sin8u_table::sinx_tr#1 +Alias (signed word) sin8u_table::sinx_sc#0 = (signed word~) sin8u_table::$20 (signed word) sin8u_table::sinx_sc#5 (signed word) sin8u_table::sinx_sc#4 (signed word) sin8u_table::sinx_sc#3 (signed word) sin8u_table::sinx_sc#2 (signed word) sin8u_table::sinx_sc#1 +Alias (byte) sin8u_table::sinx_tr#0 = (byte~) sin8u_table::$22 (byte) sin8u_table::sinx_tr#7 (byte) sin8u_table::sinx_tr#6 (byte) sin8u_table::sinx_tr#5 (byte) sin8u_table::sinx_tr#4 (byte) sin8u_table::sinx_tr#3 (byte) sin8u_table::sinx_tr#2 (byte) sin8u_table::sinx_tr#1 Alias (byte*) sin8u_table::sintab#1 = (byte*) sin8u_table::sintab#22 (byte*) sin8u_table::sintab#20 (byte*) sin8u_table::sintab#18 (byte*) sin8u_table::sintab#16 (byte*) sin8u_table::sintab#14 (byte*) sin8u_table::sintab#12 (byte*) sin8u_table::sintab#10 (byte*) sin8u_table::sintab#8 (byte*) sin8u_table::sintab#6 Alias (byte*) char_cursor#35 = (byte*) char_cursor#79 Alias (byte*) char_cursor#36 = (byte*) char_cursor#80 @@ -5010,7 +5015,7 @@ Alias (byte*) char_cursor#41 = (byte*) char_cursor#85 Alias (byte*) char_cursor#42 = (byte*) char_cursor#86 Alias (byte*) line_cursor#10 = (byte*) line_cursor#9 (byte*) line_cursor#20 (byte*) line_cursor#21 Alias (byte*) char_cursor#43 = (byte*) char_cursor#87 (byte*) char_cursor#88 (byte*) char_cursor#44 -Alias (word) sin8u_table::x#1 = (word~) sin8u_table::$31 +Alias (word) sin8u_table::x#1 = (word~) sin8u_table::$32 Alias (byte*) line_cursor#11 = (byte*) line_cursor#22 Alias (byte*) char_cursor#45 = (byte*) char_cursor#89 Alias (word) rem16u#17 = (word) rem16u#9 @@ -5386,7 +5391,7 @@ Simple Condition (boolean~) print_ln::$1 if((byte*) line_cursor#1<(byte*) char_c Simple Condition (boolean~) print_sword::$1 if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 Simple Condition (boolean~) print_sbyte::$1 if((signed byte) print_sbyte::b#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte::@1 Simple Condition (boolean~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 -Simple Condition (boolean~) sin8u_table::$32 if((word) sin8u_table::i#1<(word) sin8u_table::tabsize#0) goto sin8u_table::@1 +Simple Condition (boolean~) sin8u_table::$33 if((word) sin8u_table::i#1<(word) sin8u_table::tabsize#0) goto sin8u_table::@1 Succesful SSA optimization Pass2ConditionalJumpSimplification Constant (const word) rem16u#0 = 0 Constant (const word) divr16u::quotient#0 = 0 @@ -5431,13 +5436,13 @@ Constant (const byte*) line_cursor#15 = SCREEN#0 Constant (const byte[20]) sin8u_table::sintab#0 = main::sintab#0 Constant (const word) sin8u_table::tabsize#0 = main::tabsize#0 Constant (const byte) sin8u_table::amplitude#0 = sin8u_table::max#0-sin8u_table::min#0 -Constant (const word) sin8u_table::sum#0 = sin8u_table::min#0+sin8u_table::max#0 +Constant (const word) sin8u_table::$1 = ((word))sin8u_table::min#0 Constant (const word) div16u::dividend#0 = PI2_u4f12#0 Constant (const byte) print_byte::b#3 = sin8u_table::min#0 Constant (const byte) print_byte::b#4 = sin8u_table::max#0 Succesful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::dividend#1 = div16u::dividend#0 -Constant (const word) sin8u_table::$2 = sin8u_table::sum#0>>1 +Constant (const word) sin8u_table::sum#0 = sin8u_table::$1+sin8u_table::max#0 Constant (const word) div16u::divisor#0 = sin8u_table::tabsize#0 Constant (const byte) print_byte::b#5 = sin8u_table::amplitude#0 Constant (const byte) mul8su::b#0 = sin8u_table::amplitude#0+1 @@ -5445,9 +5450,11 @@ Succesful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::divisor#0 = div16u::divisor#0 Constant (const byte) mul8u::b#0 = ((byte))mul8su::b#0 Constant (const byte) mul8su::$7 = ((byte))mul8su::b#0 -Constant (const word) sin8u_table::$3 = sin8u_table::$2+1 +Constant (const word) sin8u_table::$3 = sin8u_table::sum#0>>1 Succesful SSA optimization Pass2ConstantIdentification -Constant (const byte) sin8u_table::mid#0 = ((byte))sin8u_table::$3 +Constant (const word/signed dword/dword) sin8u_table::$4 = sin8u_table::$3+1 +Succesful SSA optimization Pass2ConstantIdentification +Constant (const byte) sin8u_table::mid#0 = ((byte))sin8u_table::$4 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) print_byte::b#6 = sin8u_table::mid#0 Succesful SSA optimization Pass2ConstantIdentification @@ -5692,10 +5699,11 @@ Constant inlined sin8u_table::i#0 = (byte/signed byte/word/signed word/dword/sig Constant inlined sin8u_table::sintab#0 = (const byte[20]) main::sintab#0 Constant inlined sin8s::isUpper#1 = (byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined sin8s::isUpper#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined sin8u_table::$4 = (const word) sin8u_table::sum#0>>(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined divr16u::quotient#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined sin8u_table::$1 = ((word))(const byte) sin8u_table::min#0 Constant inlined div16u::divisor#0 = (const word) main::tabsize#0 -Constant inlined sin8u_table::$2 = (const word) sin8u_table::sum#0>>(byte/signed byte/word/signed word/dword/signed dword) 1 -Constant inlined sin8u_table::$3 = (const word) sin8u_table::sum#0>>(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined sin8u_table::$3 = (const word) sin8u_table::sum#0>>(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined mul8su::$7 = ((byte))(const byte) mul8su::b#0 Constant inlined mulu8_sel::select#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined div16u::dividend#0 = (const word) PI2_u4f12#0 @@ -6092,8 +6100,8 @@ sin8u_table::@15: scope:[sin8u_table] from sin8u_table::@1 to:sin8u_table::@16 sin8u_table::@16: scope:[sin8u_table] from sin8u_table::@15 [42] (signed word) sin8u_table::sinx_sc#0 ← (signed word) mul8su::return#2 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 line_cursor#1 ] ) - [43] (byte~) sin8u_table::$20 ← > (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$20 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$20 line_cursor#1 ] ) - [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$20 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) + [43] (byte~) sin8u_table::$21 ← > (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$21 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$21 line_cursor#1 ] ) + [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$21 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) [45] *((byte*) sin8u_table::sintab#2) ← (byte) sin8u_table::sinx_tr#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) [46] (byte*) sin8u_table::sintab#1 ← ++ (byte*) sin8u_table::sintab#2 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::i#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::i#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) [47] (byte*~) char_cursor#121 ← (byte*) line_cursor#1 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::i#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 char_cursor#121 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::i#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 char_cursor#121 line_cursor#1 ] ) @@ -6253,8 +6261,8 @@ mul8su::@4: scope:[mul8su] from mul8su to:mul8su::@2 mul8su::@2: scope:[mul8su] from mul8su::@4 [120] (byte~) mul8su::$6 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$6 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$6 ] ) - [121] (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) - [122] (word) mul8su::m#1 ← (word) mul8su::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 [ mul8su::m#1 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#1 ] ) + [121] (byte~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) + [122] (word) mul8su::m#1 ← (word) mul8su::m#0 hi= (byte~) mul8su::$10 [ mul8su::m#1 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#1 ] ) to:mul8su::@1 mul8su::@1: scope:[mul8su] from mul8su::@2 mul8su::@4 [123] (word) mul8su::m#2 ← phi( mul8su::@2/(word) mul8su::m#1 mul8su::@4/(word) mul8su::m#0 ) [ mul8su::m#2 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#2 ] ) @@ -6647,7 +6655,7 @@ VARIABLE REGISTER WEIGHTS (byte[20]) main::sintab (word) main::tabsize (signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) -(byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 4.0 +(byte~) mul8su::$10 4.0 (byte~) mul8su::$6 4.0 (signed byte) mul8su::a (signed byte) mul8su::a#0 2.6 @@ -6784,7 +6792,7 @@ VARIABLE REGISTER WEIGHTS (byte) sin8s::x5_128 (byte) sin8s::x5_128#0 4.0 (void()) sin8u_table((byte*) sin8u_table::sintab , (word) sin8u_table::tabsize , (byte) sin8u_table::min , (byte) sin8u_table::max) -(byte~) sin8u_table::$20 22.0 +(byte~) sin8u_table::$21 22.0 (byte) sin8u_table::amplitude (word) sin8u_table::i (word) sin8u_table::i#1 16.5 @@ -6845,7 +6853,7 @@ Added variable sin8u_table::sinx#0 to zero page equivalence class [ sin8u_table: Added variable mul8su::a#0 to zero page equivalence class [ mul8su::a#0 ] Added variable mul8su::return#2 to zero page equivalence class [ mul8su::return#2 ] Added variable sin8u_table::sinx_sc#0 to zero page equivalence class [ sin8u_table::sinx_sc#0 ] -Added variable sin8u_table::$20 to zero page equivalence class [ sin8u_table::$20 ] +Added variable sin8u_table::$21 to zero page equivalence class [ sin8u_table::$21 ] Added variable sin8u_table::sinx_tr#0 to zero page equivalence class [ sin8u_table::sinx_tr#0 ] Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] @@ -6911,7 +6919,7 @@ Complete equivalence classes [ mul8su::a#0 ] [ mul8su::return#2 ] [ sin8u_table::sinx_sc#0 ] -[ sin8u_table::$20 ] +[ sin8u_table::$21 ] [ sin8u_table::sinx_tr#0 ] [ print_byte::$0 ] [ print_byte::$2 ] @@ -6976,7 +6984,7 @@ Allocated zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] Allocated zp ZP_BYTE:52 [ mul8su::a#0 ] Allocated zp ZP_WORD:53 [ mul8su::return#2 ] Allocated zp ZP_WORD:55 [ sin8u_table::sinx_sc#0 ] -Allocated zp ZP_BYTE:57 [ sin8u_table::$20 ] +Allocated zp ZP_BYTE:57 [ sin8u_table::$21 ] Allocated zp ZP_BYTE:58 [ sin8u_table::sinx_tr#0 ] Allocated zp ZP_BYTE:59 [ print_byte::$0 ] Allocated zp ZP_BYTE:60 [ print_byte::$2 ] @@ -7063,9 +7071,9 @@ sin8u_table: { .const min = $a .const max = $ff .label amplitude = max-min - .const sum = min+max + .const sum = ($ffff&min)+max .const mid = (sum>>1)+1 - .label _20 = $39 + .label _21 = $39 .label step = $30 .label sinx = $33 .label sinx_sc = $37 @@ -7304,13 +7312,13 @@ sin8u_table: { sta sinx_sc lda mul8su.return+1 sta sinx_sc+1 - //SEG106 [43] (byte~) sin8u_table::$20 ← > (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$20 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$20 line_cursor#1 ] ) -- vbuz1=_hi_vwsz2 + //SEG106 [43] (byte~) sin8u_table::$21 ← > (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$21 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$21 line_cursor#1 ] ) -- vbuz1=_hi_vwsz2 lda sinx_sc+1 - sta _20 - //SEG107 [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$20 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) -- vbuz1=vbuc1_plus_vbuz2 + sta _21 + //SEG107 [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$21 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) -- vbuz1=vbuc1_plus_vbuz2 lda #mid clc - adc _20 + adc _21 sta sinx_tr //SEG108 [45] *((byte*) sin8u_table::sintab#2) ← (byte) sin8u_table::sinx_tr#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) -- _deref_pbuz1=vbuz2 lda sinx_tr @@ -7792,12 +7800,12 @@ mul8su: { //SEG270 [120] (byte~) mul8su::$6 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$6 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$6 ] ) -- vbuz1=_hi_vwuz2 lda m+1 sta _6 - //SEG271 [121] (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) -- vbuz1=vbuz2_minus_vbuc1 + //SEG271 [121] (byte~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) -- vbuz1=vbuz2_minus_vbuc1 lda _6 sec sbc #b sta _10 - //SEG272 [122] (word) mul8su::m#1 ← (word) mul8su::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 [ mul8su::m#1 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuz2 + //SEG272 [122] (word) mul8su::m#1 ← (word) mul8su::m#0 hi= (byte~) mul8su::$10 [ mul8su::m#1 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuz2 lda _10 sta m+1 //SEG273 [123] phi from mul8su::@2 mul8su::@4 to mul8su::@1 [phi:mul8su::@2/mul8su::@4->mul8su::@1] @@ -8412,7 +8420,7 @@ print_cls: { } REGISTER UPLIFT POTENTIAL REGISTERS -Equivalence Class zp ZP_BYTE:57 [ sin8u_table::$20 ] has ALU potential. +Equivalence Class zp ZP_BYTE:57 [ sin8u_table::$21 ] has ALU potential. 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 char_cursor#2 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 print_word::w#1 char_cursor#2 ] ) always clobbers reg byte a @@ -8420,7 +8428,7 @@ Statement [35] (word) sin8s::x#2 ← (word) sin8u_table::x#10 [ sin8u_table::ste Statement [41] (signed word) mul8su::return#2 ← (signed word)(word) mul8su::m#2 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 mul8su::return#2 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 mul8su::return#2 line_cursor#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] Statement [42] (signed word) sin8u_table::sinx_sc#0 ← (signed word) mul8su::return#2 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 line_cursor#1 ] ) always clobbers reg byte a -Statement [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$20 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) always clobbers reg byte a +Statement [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$21 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) always clobbers reg byte a Statement [45] *((byte*) sin8u_table::sintab#2) ← (byte) sin8u_table::sinx_tr#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:58 [ sin8u_table::sinx_tr#0 ] @@ -8448,7 +8456,7 @@ Statement [117] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8su::a#0 mul Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ mul8su::a#0 ] Statement [118] (word) mul8su::m#0 ← (word) mul8u::return#2 [ mul8su::a#0 mul8su::m#0 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::a#0 mul8su::m#0 ] ) always clobbers reg byte a Statement [120] (byte~) mul8su::$6 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$6 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$6 ] ) always clobbers reg byte a -Statement [121] (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) always clobbers reg byte a +Statement [121] (byte~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) always clobbers reg byte a Statement [126] (word) mul8u::mb#0 ← ((word)) (byte) mul8u::b#2 [ mul8u::a#6 mul8u::mb#0 ] ( main:2::sin8u_table:7::mul8su:40::mul8u:116 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::a#0 mul8u::a#6 mul8u::mb#0 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:146::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:151::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:155::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:161::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:166::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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 ZP_BYTE:24 [ mul8u::a#3 mul8u::a#6 mul8u::a#8 mul8u::a#2 mul8u::a#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ sin8s::isUpper#10 ] @@ -8496,7 +8504,7 @@ Statement [14] (word) print_word::w#1 ← (word) sin8u_table::step#0 [ sin8u_tab Statement [35] (word) sin8s::x#2 ← (word) sin8u_table::x#10 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8s::x#2 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8s::x#2 line_cursor#1 ] ) always clobbers reg byte a Statement [41] (signed word) mul8su::return#2 ← (signed word)(word) mul8su::m#2 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 mul8su::return#2 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 mul8su::return#2 line_cursor#1 ] ) always clobbers reg byte a Statement [42] (signed word) sin8u_table::sinx_sc#0 ← (signed word) mul8su::return#2 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 line_cursor#1 ] ) always clobbers reg byte a -Statement [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$20 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) always clobbers reg byte a +Statement [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$21 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) always clobbers reg byte a Statement [45] *((byte*) sin8u_table::sintab#2) ← (byte) sin8u_table::sinx_tr#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) always clobbers reg byte a reg byte y Statement [47] (byte*~) char_cursor#121 ← (byte*) line_cursor#1 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::i#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 char_cursor#121 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::i#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 char_cursor#121 line_cursor#1 ] ) always clobbers reg byte a Statement [49] (word) print_word::w#2 ← (word) sin8u_table::x#10 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::i#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 print_word::w#2 char_cursor#2 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::i#10 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 print_word::w#2 char_cursor#2 ] ) always clobbers reg byte a @@ -8518,7 +8526,7 @@ Statement [110] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte:: Statement [117] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8su::a#0 mul8u::return#2 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::a#0 mul8u::return#2 ] ) always clobbers reg byte a Statement [118] (word) mul8su::m#0 ← (word) mul8u::return#2 [ mul8su::a#0 mul8su::m#0 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::a#0 mul8su::m#0 ] ) always clobbers reg byte a Statement [120] (byte~) mul8su::$6 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$6 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$6 ] ) always clobbers reg byte a -Statement [121] (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) always clobbers reg byte a +Statement [121] (byte~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) always clobbers reg byte a Statement [126] (word) mul8u::mb#0 ← ((word)) (byte) mul8u::b#2 [ mul8u::a#6 mul8u::mb#0 ] ( main:2::sin8u_table:7::mul8su:40::mul8u:116 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::a#0 mul8u::a#6 mul8u::mb#0 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:146::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:151::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:155::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:161::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:166::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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 [130] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8u_table:7::mul8su:40::mul8u:116 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::a#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:146::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:151::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:155::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:161::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:166::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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 [132] (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:40::mul8u:116 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::a#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:36::mulu8_sel:146::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:151::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:155::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:161::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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:36::mulu8_sel:166::mul8u:182 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 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 @@ -8584,7 +8592,7 @@ Potential registers zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] : zp ZP_BYTE:51 , reg Potential registers zp ZP_BYTE:52 [ mul8su::a#0 ] : zp ZP_BYTE:52 , reg byte x , reg byte y , Potential registers zp ZP_WORD:53 [ mul8su::return#2 ] : zp ZP_WORD:53 , Potential registers zp ZP_WORD:55 [ sin8u_table::sinx_sc#0 ] : zp ZP_WORD:55 , -Potential registers zp ZP_BYTE:57 [ sin8u_table::$20 ] : zp ZP_BYTE:57 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp ZP_BYTE:57 [ sin8u_table::$21 ] : zp ZP_BYTE:57 , reg byte a , reg byte x , reg byte y , reg byte alu , Potential registers zp ZP_BYTE:58 [ sin8u_table::sinx_tr#0 ] : zp ZP_BYTE:58 , reg byte x , Potential registers zp ZP_BYTE:59 [ print_byte::$0 ] : zp ZP_BYTE:59 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:60 [ print_byte::$2 ] : zp ZP_BYTE:60 , reg byte a , reg byte x , reg byte y , @@ -8622,7 +8630,7 @@ Uplift Scope [print_str] 305.5: zp ZP_WORD:12 [ print_str::str#10 print_str::str Uplift Scope [divr16u] 96.25: zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 37.25: zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:92 [ divr16u::$1 ] 22: zp ZP_BYTE:93 [ divr16u::$2 ] 18.19: zp ZP_BYTE:43 [ divr16u::i#2 divr16u::i#1 ] 7.46: zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] 4: zp ZP_WORD:88 [ divr16u::return#2 ] Uplift Scope [sin8s] 27.5: zp ZP_WORD:30 [ sin8s::x#6 sin8s::x#4 sin8s::x#2 sin8s::x#0 sin8s::x#1 ] 22: zp ZP_BYTE:50 [ sin8s::return#2 ] 13: zp ZP_BYTE:33 [ sin8s::return#0 sin8s::return#5 sin8s::sinx#1 ] 10: zp ZP_BYTE:32 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] 4: zp ZP_WORD:66 [ sin8s::$6 ] 4: zp ZP_BYTE:70 [ sin8s::x2#0 ] 4: zp ZP_BYTE:74 [ sin8s::x3_6#0 ] 4: zp ZP_BYTE:77 [ sin8s::x4#0 ] 4: zp ZP_BYTE:79 [ sin8s::x5#0 ] 4: zp ZP_BYTE:80 [ sin8s::x5_128#0 ] 1: zp ZP_BYTE:72 [ sin8s::x3#0 ] 0.64: zp ZP_BYTE:68 [ sin8s::x1#0 ] 0.33: zp ZP_BYTE:75 [ sin8s::usinx#0 ] 0.06: zp ZP_BYTE:29 [ sin8s::isUpper#10 ] Uplift Scope [mulu8_sel] 24: zp ZP_BYTE:34 [ 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 ZP_BYTE:35 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] 4: zp ZP_BYTE:69 [ mulu8_sel::return#0 ] 4: zp ZP_BYTE:71 [ mulu8_sel::return#1 ] 4: zp ZP_BYTE:73 [ mulu8_sel::return#2 ] 4: zp ZP_BYTE:76 [ mulu8_sel::return#10 ] 4: zp ZP_BYTE:78 [ mulu8_sel::return#11 ] 4: zp ZP_WORD:83 [ mulu8_sel::$0 ] 4: zp ZP_WORD:85 [ mulu8_sel::$1 ] 1.71: zp ZP_BYTE:87 [ mulu8_sel::return#12 ] 0.33: zp ZP_BYTE:36 [ mulu8_sel::select#5 ] -Uplift Scope [sin8u_table] 22: zp ZP_BYTE:57 [ sin8u_table::$20 ] 17.19: zp ZP_WORD:6 [ sin8u_table::i#10 sin8u_table::i#1 ] 8.75: zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 ] 3.75: zp ZP_WORD:4 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] 2.2: zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] 2.2: zp ZP_WORD:55 [ sin8u_table::sinx_sc#0 ] 1.94: zp ZP_BYTE:58 [ sin8u_table::sinx_tr#0 ] 0.27: zp ZP_WORD:48 [ sin8u_table::step#0 ] +Uplift Scope [sin8u_table] 22: zp ZP_BYTE:57 [ sin8u_table::$21 ] 17.19: zp ZP_WORD:6 [ sin8u_table::i#10 sin8u_table::i#1 ] 8.75: zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 ] 3.75: zp ZP_WORD:4 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] 2.2: zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] 2.2: zp ZP_WORD:55 [ sin8u_table::sinx_sc#0 ] 1.94: zp ZP_BYTE:58 [ sin8u_table::sinx_tr#0 ] 0.27: zp ZP_WORD:48 [ sin8u_table::step#0 ] Uplift Scope [print_byte] 39.25: zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#10 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] 4: zp ZP_BYTE:59 [ print_byte::$0 ] 4: zp ZP_BYTE:60 [ print_byte::$2 ] Uplift Scope [mul8su] 22: zp ZP_WORD:53 [ mul8su::return#2 ] 7.33: zp ZP_WORD:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] 4: zp ZP_BYTE:63 [ mul8su::$6 ] 4: zp ZP_BYTE:64 [ mul8su::$10 ] 2.6: zp ZP_BYTE:52 [ mul8su::a#0 ] Uplift Scope [print_word] 36.33: zp ZP_WORD:18 [ print_word::w#3 print_word::w#5 print_word::w#2 print_word::w#1 ] @@ -8644,7 +8652,7 @@ Limited combination testing to 10000 combinations of 1048576 possible. Uplift attempts [mulu8_sel] 10000/196608 (limiting to 10000) Uplifting [mulu8_sel] best 23864 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 ] reg byte a [ mulu8_sel::return#2 ] reg byte a [ mulu8_sel::return#10 ] reg byte a [ mulu8_sel::return#11 ] zp ZP_WORD:83 [ mulu8_sel::$0 ] zp ZP_WORD:85 [ mulu8_sel::$1 ] zp ZP_BYTE:87 [ mulu8_sel::return#12 ] zp ZP_BYTE:36 [ mulu8_sel::select#5 ] Limited combination testing to 10000 combinations of 196608 possible. -Uplifting [sin8u_table] best 23754 combination reg byte a [ sin8u_table::$20 ] zp ZP_WORD:6 [ sin8u_table::i#10 sin8u_table::i#1 ] zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 ] zp ZP_WORD:4 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] zp ZP_WORD:55 [ sin8u_table::sinx_sc#0 ] reg byte x [ sin8u_table::sinx_tr#0 ] zp ZP_WORD:48 [ sin8u_table::step#0 ] +Uplifting [sin8u_table] best 23754 combination reg byte a [ sin8u_table::$21 ] zp ZP_WORD:6 [ sin8u_table::i#10 sin8u_table::i#1 ] zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 ] zp ZP_WORD:4 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] zp ZP_WORD:55 [ sin8u_table::sinx_sc#0 ] reg byte x [ sin8u_table::sinx_tr#0 ] zp ZP_WORD:48 [ sin8u_table::step#0 ] Uplifting [print_byte] best 23746 combination zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#10 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 [mul8su] best 23702 combination zp ZP_WORD:53 [ mul8su::return#2 ] zp ZP_WORD:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] reg byte a [ mul8su::$6 ] reg byte a [ mul8su::$10 ] reg byte y [ mul8su::a#0 ] Uplifting [print_word] best 23702 combination zp ZP_WORD:18 [ print_word::w#3 print_word::w#5 print_word::w#2 print_word::w#1 ] @@ -8762,7 +8770,7 @@ sin8u_table: { .const min = $a .const max = $ff .label amplitude = max-min - .const sum = min+max + .const sum = ($ffff&min)+max .const mid = (sum>>1)+1 .label step = $12 .label sinx = $11 @@ -8986,9 +8994,9 @@ sin8u_table: { b16: //SEG105 [42] (signed word) sin8u_table::sinx_sc#0 ← (signed word) mul8su::return#2 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 line_cursor#1 ] ) // (signed word) sin8u_table::sinx_sc#0 = (signed word) mul8su::return#2 // register copy zp ZP_WORD:15 - //SEG106 [43] (byte~) sin8u_table::$20 ← > (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$20 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$20 line_cursor#1 ] ) -- vbuaa=_hi_vwsz1 + //SEG106 [43] (byte~) sin8u_table::$21 ← > (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$21 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$21 line_cursor#1 ] ) -- vbuaa=_hi_vwsz1 lda sinx_sc+1 - //SEG107 [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$20 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) -- vbuxx=vbuc1_plus_vbuaa + //SEG107 [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$21 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) -- vbuxx=vbuc1_plus_vbuaa clc adc #mid tax @@ -9445,10 +9453,10 @@ mul8su: { b2: //SEG270 [120] (byte~) mul8su::$6 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$6 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$6 ] ) -- vbuaa=_hi_vwuz1 lda m+1 - //SEG271 [121] (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) -- vbuaa=vbuaa_minus_vbuc1 + //SEG271 [121] (byte~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) -- vbuaa=vbuaa_minus_vbuc1 sec sbc #b - //SEG272 [122] (word) mul8su::m#1 ← (word) mul8su::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 [ mul8su::m#1 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuaa + //SEG272 [122] (word) mul8su::m#1 ← (word) mul8su::m#0 hi= (byte~) mul8su::$10 [ mul8su::m#1 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuaa sta m+1 //SEG273 [123] phi from mul8su::@2 mul8su::@4 to mul8su::@1 [phi:mul8su::@2/mul8su::@4->mul8su::@1] b1_from_b2: @@ -10329,7 +10337,7 @@ FINAL SYMBOL TABLE (word) main::tabsize (const word) main::tabsize#0 tabsize = (byte/signed byte/word/signed word/dword/signed dword) 20 (signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) -(byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 reg byte a 4.0 +(byte~) mul8su::$10 reg byte a 4.0 (byte~) mul8su::$6 reg byte a 4.0 (label) mul8su::@1 (label) mul8su::@2 @@ -10515,7 +10523,7 @@ FINAL SYMBOL TABLE (byte) sin8s::x5_128 (byte) sin8s::x5_128#0 reg byte a 4.0 (void()) sin8u_table((byte*) sin8u_table::sintab , (word) sin8u_table::tabsize , (byte) sin8u_table::min , (byte) sin8u_table::max) -(byte~) sin8u_table::$20 reg byte a 22.0 +(byte~) sin8u_table::$21 reg byte a 22.0 (label) sin8u_table::@1 (label) sin8u_table::@10 (label) sin8u_table::@11 @@ -10572,7 +10580,7 @@ FINAL SYMBOL TABLE (const string) sin8u_table::str7 str7 = (string) " scaled: @" (const string) sin8u_table::str8 str8 = (string) " trans: @" (word) sin8u_table::sum -(const word) sin8u_table::sum#0 sum = (const byte) sin8u_table::min#0+(const byte) sin8u_table::max#0 +(const word) sin8u_table::sum#0 sum = ((word))(const byte) sin8u_table::min#0+(const byte) sin8u_table::max#0 (word) sin8u_table::tabsize (word) sin8u_table::x (word) sin8u_table::x#1 x zp ZP_WORD:2 7.333333333333333 @@ -10598,7 +10606,7 @@ zp ZP_WORD:18 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16 reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte a [ sin8s::return#2 ] reg byte y [ mul8su::a#0 ] -reg byte a [ sin8u_table::$20 ] +reg byte a [ sin8u_table::$21 ] reg byte x [ sin8u_table::sinx_tr#0 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] @@ -10666,7 +10674,7 @@ sin8u_table: { .const min = $a .const max = $ff .label amplitude = max-min - .const sum = min+max + .const sum = ($ffff&min)+max .const mid = (sum>>1)+1 .label step = $12 .label sinx = $11 @@ -10837,9 +10845,9 @@ sin8u_table: { //SEG104 sin8u_table::@16 //SEG105 [42] (signed word) sin8u_table::sinx_sc#0 ← (signed word) mul8su::return#2 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 line_cursor#1 ] ) // (signed word) sin8u_table::sinx_sc#0 = (signed word) mul8su::return#2 // register copy zp ZP_WORD:15 - //SEG106 [43] (byte~) sin8u_table::$20 ← > (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$20 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$20 line_cursor#1 ] ) -- vbuaa=_hi_vwsz1 + //SEG106 [43] (byte~) sin8u_table::$21 ← > (signed word) sin8u_table::sinx_sc#0 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$21 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::$21 line_cursor#1 ] ) -- vbuaa=_hi_vwsz1 lda sinx_sc+1 - //SEG107 [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$20 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) -- vbuxx=vbuc1_plus_vbuaa + //SEG107 [44] (byte) sin8u_table::sinx_tr#0 ← (const byte) sin8u_table::mid#0 + (byte~) sin8u_table::$21 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 line_cursor#1 ] ) -- vbuxx=vbuc1_plus_vbuaa clc adc #mid tax @@ -11215,10 +11223,10 @@ mul8su: { //SEG269 mul8su::@2 //SEG270 [120] (byte~) mul8su::$6 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$6 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$6 ] ) -- vbuaa=_hi_vwuz1 lda m+1 - //SEG271 [121] (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) -- vbuaa=vbuaa_minus_vbuc1 + //SEG271 [121] (byte~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0 [ mul8su::m#0 mul8su::$10 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#0 mul8su::$10 ] ) -- vbuaa=vbuaa_minus_vbuc1 sec sbc #b - //SEG272 [122] (word) mul8su::m#1 ← (word) mul8su::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 [ mul8su::m#1 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuaa + //SEG272 [122] (word) mul8su::m#1 ← (word) mul8su::m#0 hi= (byte~) mul8su::$10 [ mul8su::m#1 ] ( main:2::sin8u_table:7::mul8su:40 [ sin8u_table::step#0 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::i#10 sin8u_table::sinx#0 line_cursor#1 mul8su::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuaa sta m+1 //SEG273 [123] phi from mul8su::@2 mul8su::@4 to mul8su::@1 [phi:mul8su::@2/mul8su::@4->mul8su::@1] //SEG274 [123] phi (word) mul8su::m#2 = (word) mul8su::m#1 [phi:mul8su::@2/mul8su::@4->mul8su::@1#0] -- register_copy diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.sym b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.sym index 37825c05b..5697755a5 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.sym @@ -70,7 +70,7 @@ (word) main::tabsize (const word) main::tabsize#0 tabsize = (byte/signed byte/word/signed word/dword/signed dword) 20 (signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) -(byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 reg byte a 4.0 +(byte~) mul8su::$10 reg byte a 4.0 (byte~) mul8su::$6 reg byte a 4.0 (label) mul8su::@1 (label) mul8su::@2 @@ -256,7 +256,7 @@ (byte) sin8s::x5_128 (byte) sin8s::x5_128#0 reg byte a 4.0 (void()) sin8u_table((byte*) sin8u_table::sintab , (word) sin8u_table::tabsize , (byte) sin8u_table::min , (byte) sin8u_table::max) -(byte~) sin8u_table::$20 reg byte a 22.0 +(byte~) sin8u_table::$21 reg byte a 22.0 (label) sin8u_table::@1 (label) sin8u_table::@10 (label) sin8u_table::@11 @@ -313,7 +313,7 @@ (const string) sin8u_table::str7 str7 = (string) " scaled: @" (const string) sin8u_table::str8 str8 = (string) " trans: @" (word) sin8u_table::sum -(const word) sin8u_table::sum#0 sum = (const byte) sin8u_table::min#0+(const byte) sin8u_table::max#0 +(const word) sin8u_table::sum#0 sum = ((word))(const byte) sin8u_table::min#0+(const byte) sin8u_table::max#0 (word) sin8u_table::tabsize (word) sin8u_table::x (word) sin8u_table::x#1 x zp ZP_WORD:2 7.333333333333333 @@ -339,7 +339,7 @@ zp ZP_WORD:18 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16 reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte a [ sin8s::return#2 ] reg byte y [ mul8su::a#0 ] -reg byte a [ sin8u_table::$20 ] +reg byte a [ sin8u_table::$21 ] reg byte x [ sin8u_table::sinx_tr#0 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/summin.cfg b/src/test/java/dk/camelot64/kickc/test/ref/summin.cfg index 2adee0536..6849dfeec 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/summin.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/summin.cfg @@ -24,8 +24,8 @@ main::@2: scope:[main] from main::@1 to:main::@3 main::@3: scope:[main] from main::@2 [13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ] ( main:2 [ main::s1#0 main::s2#0 main::s3#0 ] ) - [14] (byte/word~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) - [15] (byte) main::s4#0 ← (byte/word~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) + [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) + [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) [16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ] ( main:2 [ ] ) to:main::@return main::@return: scope:[main] from main::@3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/summin.log b/src/test/java/dk/camelot64/kickc/test/ref/summin.log index 137631957..8cb125975 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/summin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/summin.log @@ -23,16 +23,16 @@ proc (void()) main() (byte) main::s2 ← (byte~) main::$1 (byte~) main::$2 ← call sum (byte/signed byte/word/signed word/dword/signed dword) 9 (byte/signed byte/word/signed word/dword/signed dword) 13 (byte) main::s3 ← (byte~) main::$2 - (byte/word~) main::$3 ← (byte) main::s1 + (byte) main::s2 - (byte/word~) main::$4 ← (byte/word~) main::$3 + (byte) main::s3 - (byte) main::s4 ← (byte/word~) main::$4 + (byte~) main::$3 ← (byte) main::s1 + (byte) main::s2 + (byte~) main::$4 ← (byte~) main::$3 + (byte) main::s3 + (byte) main::s4 ← (byte~) main::$4 *((byte*) screen) ← (byte) main::s4 main::@return: return endproc // main() proc (byte()) sum((byte) sum::a , (byte) sum::b) - (byte/word~) sum::$0 ← (byte) sum::a + (byte) sum::b - (byte) sum::return ← (byte/word~) sum::$0 + (byte~) sum::$0 ← (byte) sum::a + (byte) sum::b + (byte) sum::return ← (byte~) sum::$0 goto sum::@return sum::@return: (byte) sum::return ← (byte) sum::return @@ -45,8 +45,8 @@ SYMBOLS (byte~) main::$0 (byte~) main::$1 (byte~) main::$2 -(byte/word~) main::$3 -(byte/word~) main::$4 +(byte~) main::$3 +(byte~) main::$4 (label) main::@return (byte) main::s1 (byte) main::s2 @@ -54,7 +54,7 @@ SYMBOLS (byte) main::s4 (byte*) screen (byte()) sum((byte) sum::a , (byte) sum::b) -(byte/word~) sum::$0 +(byte~) sum::$0 (label) sum::@return (byte) sum::a (byte) sum::b @@ -72,9 +72,9 @@ main: scope:[main] from (byte) main::s2 ← (byte~) main::$1 (byte~) main::$2 ← call sum (byte/signed byte/word/signed word/dword/signed dword) 9 (byte/signed byte/word/signed word/dword/signed dword) 13 (byte) main::s3 ← (byte~) main::$2 - (byte/word~) main::$3 ← (byte) main::s1 + (byte) main::s2 - (byte/word~) main::$4 ← (byte/word~) main::$3 + (byte) main::s3 - (byte) main::s4 ← (byte/word~) main::$4 + (byte~) main::$3 ← (byte) main::s1 + (byte) main::s2 + (byte~) main::$4 ← (byte~) main::$3 + (byte) main::s3 + (byte) main::s4 ← (byte~) main::$4 *((byte*) screen) ← (byte) main::s4 to:main::@return main::@return: scope:[main] from main @@ -83,8 +83,8 @@ main::@return: scope:[main] from main @1: scope:[] from @begin to:@2 sum: scope:[sum] from - (byte/word~) sum::$0 ← (byte) sum::a + (byte) sum::b - (byte) sum::return ← (byte/word~) sum::$0 + (byte~) sum::$0 ← (byte) sum::a + (byte) sum::b + (byte) sum::return ← (byte~) sum::$0 to:sum::@return sum::@return: scope:[sum] from sum sum::@1 (byte) sum::return ← (byte) sum::return @@ -146,9 +146,9 @@ main::@3: scope:[main] from main::@2 (byte) sum::return#7 ← phi( main::@2/(byte) sum::return#2 ) (byte~) main::$2 ← (byte) sum::return#7 (byte) main::s3#0 ← (byte~) main::$2 - (byte/word~) main::$3 ← (byte) main::s1#1 + (byte) main::s2#1 - (byte/word~) main::$4 ← (byte/word~) main::$3 + (byte) main::s3#0 - (byte) main::s4#0 ← (byte/word~) main::$4 + (byte~) main::$3 ← (byte) main::s1#1 + (byte) main::s2#1 + (byte~) main::$4 ← (byte~) main::$3 + (byte) main::s3#0 + (byte) main::s4#0 ← (byte~) main::$4 *((byte*) screen#1) ← (byte) main::s4#0 to:main::@return main::@return: scope:[main] from main::@3 @@ -157,8 +157,8 @@ main::@return: scope:[main] from main::@3 sum: scope:[sum] from main main::@1 main::@2 (byte) sum::b#3 ← phi( main/(byte) sum::b#0 main::@1/(byte) sum::b#1 main::@2/(byte) sum::b#2 ) (byte) sum::a#3 ← phi( main/(byte) sum::a#0 main::@1/(byte) sum::a#1 main::@2/(byte) sum::a#2 ) - (byte/word~) sum::$0 ← (byte) sum::a#3 + (byte) sum::b#3 - (byte) sum::return#3 ← (byte/word~) sum::$0 + (byte~) sum::$0 ← (byte) sum::a#3 + (byte) sum::b#3 + (byte) sum::return#3 ← (byte~) sum::$0 to:sum::@return sum::@return: scope:[sum] from sum (byte) sum::return#8 ← phi( sum/(byte) sum::return#3 ) @@ -182,8 +182,8 @@ SYMBOL TABLE SSA (byte~) main::$0 (byte~) main::$1 (byte~) main::$2 -(byte/word~) main::$3 -(byte/word~) main::$4 +(byte~) main::$3 +(byte~) main::$4 (label) main::@1 (label) main::@2 (label) main::@3 @@ -207,7 +207,7 @@ SYMBOL TABLE SSA (byte*) screen#4 (byte*) screen#5 (byte()) sum((byte) sum::a , (byte) sum::b) -(byte/word~) sum::$0 +(byte~) sum::$0 (label) sum::@return (byte) sum::a (byte) sum::a#0 @@ -249,8 +249,8 @@ Alias (byte) sum::return#1 = (byte) sum::return#6 Alias (byte) main::s2#0 = (byte~) main::$1 (byte) main::s2#1 Alias (byte) sum::return#2 = (byte) sum::return#7 Alias (byte) main::s3#0 = (byte~) main::$2 -Alias (byte) main::s4#0 = (byte/word~) main::$4 -Alias (byte) sum::return#3 = (byte/word~) sum::$0 (byte) sum::return#8 (byte) sum::return#4 +Alias (byte) main::s4#0 = (byte~) main::$4 +Alias (byte) sum::return#3 = (byte~) sum::$0 (byte) sum::return#8 (byte) sum::return#4 Alias (byte*) screen#0 = (byte*) screen#5 Succesful SSA optimization Pass2AliasElimination Not aliassing across scopes: screen#1 screen#0 @@ -365,8 +365,8 @@ main::@2: scope:[main] from main::@1 to:main::@3 main::@3: scope:[main] from main::@2 [13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ] ( main:2 [ main::s1#0 main::s2#0 main::s3#0 ] ) - [14] (byte/word~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) - [15] (byte) main::s4#0 ← (byte/word~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) + [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) + [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) [16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ] ( main:2 [ ] ) to:main::@return main::@return: scope:[main] from main::@3 @@ -403,7 +403,7 @@ Found 0 loops in scope [sum] VARIABLE REGISTER WEIGHTS (void()) main() -(byte/word~) main::$3 4.0 +(byte~) main::$3 4.0 (byte) main::s1 (byte) main::s1#0 0.5714285714285714 (byte) main::s2 @@ -547,12 +547,12 @@ main: { //SEG30 [13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ] ( main:2 [ main::s1#0 main::s2#0 main::s3#0 ] ) -- vbuz1=vbuz2 lda sum.return_2 sta s3 - //SEG31 [14] (byte/word~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- vbuz1=vbuz2_plus_vbuz3 + //SEG31 [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- vbuz1=vbuz2_plus_vbuz3 lda s1 clc adc s2 sta _3 - //SEG32 [15] (byte) main::s4#0 ← (byte/word~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) -- vbuz1=vbuz2_plus_vbuz3 + //SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) -- vbuz1=vbuz2_plus_vbuz3 lda _3 clc adc s3 @@ -686,11 +686,11 @@ main: { b3: //SEG30 [13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ] ( main:2 [ main::s1#0 main::s2#0 main::s3#0 ] ) -- vbuz1=vbuaa sta s3 - //SEG31 [14] (byte/word~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- vbuaa=vbuz1_plus_vbuyy + //SEG31 [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- vbuaa=vbuz1_plus_vbuyy tya clc adc s1 - //SEG32 [15] (byte) main::s4#0 ← (byte/word~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) -- vbuaa=vbuaa_plus_vbuz1 + //SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) -- vbuaa=vbuaa_plus_vbuz1 clc adc s3 //SEG33 [16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuaa @@ -745,7 +745,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (void()) main() -(byte/word~) main::$3 reg byte a 4.0 +(byte~) main::$3 reg byte a 4.0 (label) main::@1 (label) main::@2 (label) main::@3 @@ -842,11 +842,11 @@ main: { //SEG29 main::@3 //SEG30 [13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ] ( main:2 [ main::s1#0 main::s2#0 main::s3#0 ] ) -- vbuz1=vbuaa sta s3 - //SEG31 [14] (byte/word~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- vbuaa=vbuz1_plus_vbuyy + //SEG31 [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- vbuaa=vbuz1_plus_vbuyy tya clc adc s1 - //SEG32 [15] (byte) main::s4#0 ← (byte/word~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) -- vbuaa=vbuaa_plus_vbuz1 + //SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) -- vbuaa=vbuaa_plus_vbuz1 clc adc s3 //SEG33 [16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuaa diff --git a/src/test/java/dk/camelot64/kickc/test/ref/summin.sym b/src/test/java/dk/camelot64/kickc/test/ref/summin.sym index dcd1a224d..feb302e0a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/summin.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/summin.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (void()) main() -(byte/word~) main::$3 reg byte a 4.0 +(byte~) main::$3 reg byte a 4.0 (label) main::@1 (label) main::@2 (label) main::@3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-address-of.log b/src/test/java/dk/camelot64/kickc/test/ref/test-address-of.log index 6e8742992..41f7a5523 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-address-of.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-address-of.log @@ -18,8 +18,8 @@ proc (void()) main() main::@1: (byte*~) main::$0 ← & (byte) main::b (byte*) main::bp ← (byte*~) main::$0 - (byte/word~) main::$1 ← *((byte*) main::bp) + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::c ← (byte/word~) main::$1 + (byte/signed word/word/dword/signed dword~) main::$1 ← *((byte*) main::bp) + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::c ← (byte/signed word/word/dword/signed dword~) main::$1 *((byte*) main::SCREEN + (byte) main::b) ← (byte) main::c (byte) main::b ← ++ (byte) main::b (boolean~) main::$2 ← (byte) main::b != (byte/signed byte/word/signed word/dword/signed dword) 11 @@ -32,7 +32,7 @@ endproc // main() SYMBOLS (void()) main() (byte*~) main::$0 -(byte/word~) main::$1 +(byte/signed word/word/dword/signed dword~) main::$1 (boolean~) main::$2 (label) main::@1 (label) main::@return @@ -52,8 +52,8 @@ main: scope:[main] from main::@1: scope:[main] from main main::@1 (byte*~) main::$0 ← & (byte) main::b (byte*) main::bp ← (byte*~) main::$0 - (byte/word~) main::$1 ← *((byte*) main::bp) + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::c ← (byte/word~) main::$1 + (byte/signed word/word/dword/signed dword~) main::$1 ← *((byte*) main::bp) + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::c ← (byte/signed word/word/dword/signed dword~) main::$1 *((byte*) main::SCREEN + (byte) main::b) ← (byte) main::c (byte) main::b ← ++ (byte) main::b (boolean~) main::$2 ← (byte) main::b != (byte/signed byte/word/signed word/dword/signed dword) 11 @@ -86,8 +86,8 @@ main::@1: scope:[main] from main main::@1 (byte) main::b#2 ← phi( main/(byte) main::b#0 main::@1/(byte) main::b#1 ) (byte*~) main::$0 ← & (byte) main::b#2 (byte*) main::bp#0 ← (byte*~) main::$0 - (byte/word~) main::$1 ← *((byte*) main::bp#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) main::c#0 ← (byte/word~) main::$1 + (byte/signed word/word/dword/signed dword~) main::$1 ← *((byte*) main::bp#0) + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::c#0 ← (byte/signed word/word/dword/signed dword~) main::$1 *((byte*) main::SCREEN#1 + (byte) main::b#2) ← (byte) main::c#0 (byte) main::b#1 ← ++ (byte) main::b#2 (boolean~) main::$2 ← (byte) main::b#1 != (byte/signed byte/word/signed word/dword/signed dword) 11 @@ -110,7 +110,7 @@ SYMBOL TABLE SSA (label) @end (void()) main() (byte*~) main::$0 -(byte/word~) main::$1 +(byte/signed word/word/dword/signed dword~) main::$1 (boolean~) main::$2 (label) main::@1 (label) main::@return @@ -130,7 +130,7 @@ OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks Alias (byte*) main::bp#0 = (byte*~) main::$0 -Alias (byte) main::c#0 = (byte/word~) main::$1 +Alias (byte) main::c#0 = (byte/signed word/word/dword/signed dword~) main::$1 Succesful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::SCREEN#1 Succesful SSA optimization Pass2SelfPhiElimination diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.log b/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.log index a7305597e..2efc19e1b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.log @@ -257,8 +257,8 @@ proc (void()) main() (byte) main::a ← (byte/signed byte/word/signed word/dword/signed dword) 7 (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 main::@1: - (byte/signed byte/word/signed word/dword/signed dword~) main::$1 ← (byte/word/signed word/dword/signed dword) 206 - (byte) main::a - (byte) main::b ← (byte/signed byte/word/signed word/dword/signed dword~) main::$1 + (byte/word/signed word/dword/signed dword~) main::$1 ← (byte/word/signed word/dword/signed dword) 206 - (byte) main::a + (byte) main::b ← (byte/word/signed word/dword/signed dword~) main::$1 (byte[5]) main::cs ← { (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/word/signed word/dword/signed dword) 199, (byte/signed byte/word/signed word/dword/signed dword) 55, (byte/word/signed word/dword/signed dword) 151, (byte/signed byte/word/signed word/dword/signed dword) 103 } (byte) main::r ← (byte) '-' (boolean~) main::$2 ← (byte) main::a < (byte) main::b @@ -405,8 +405,8 @@ main::@20: main::@21: (void~) main::$65 ← call printu (byte) main::a (string) "==@" (byte) main::a (byte) main::r (void~) main::$66 ← call print_ln - (byte/word~) main::$67 ← (byte) main::a + (byte/signed byte/word/signed word/dword/signed dword) 48 - (byte) main::a ← (byte/word~) main::$67 + (byte/signed word/word/dword/signed dword~) main::$67 ← (byte) main::a + (byte/signed byte/word/signed word/dword/signed dword) 48 + (byte) main::a ← (byte/signed word/word/dword/signed dword~) main::$67 (byte) main::i ← ++ (byte) main::i (boolean~) main::$68 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 5 if((boolean~) main::$68) goto main::@1 @@ -433,7 +433,7 @@ SYMBOLS (byte*) line_cursor (void()) main() (void~) main::$0 -(byte/signed byte/word/signed word/dword/signed dword~) main::$1 +(byte/word/signed word/dword/signed dword~) main::$1 (void~) main::$10 (boolean~) main::$11 (boolean~) main::$12 @@ -496,7 +496,7 @@ SYMBOLS (boolean~) main::$64 (void~) main::$65 (void~) main::$66 -(byte/word~) main::$67 +(byte/signed word/word/dword/signed dword~) main::$67 (boolean~) main::$68 (void~) main::$7 (boolean~) main::$8 @@ -787,8 +787,8 @@ main: scope:[main] from (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:main::@1 main::@1: scope:[main] from main main::@21 - (byte/signed byte/word/signed word/dword/signed dword~) main::$1 ← (byte/word/signed word/dword/signed dword) 206 - (byte) main::a - (byte) main::b ← (byte/signed byte/word/signed word/dword/signed dword~) main::$1 + (byte/word/signed word/dword/signed dword~) main::$1 ← (byte/word/signed word/dword/signed dword) 206 - (byte) main::a + (byte) main::b ← (byte/word/signed word/dword/signed dword~) main::$1 (byte[5]) main::cs ← { (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/word/signed word/dword/signed dword) 199, (byte/signed byte/word/signed word/dword/signed dword) 55, (byte/word/signed word/dword/signed dword) 151, (byte/signed byte/word/signed word/dword/signed dword) 103 } (byte) main::r ← (byte) '-' (boolean~) main::$2 ← (byte) main::a < (byte) main::b @@ -992,8 +992,8 @@ main::@41: scope:[main] from main::@19 main::@21: scope:[main] from main::@20 main::@42 (void~) main::$65 ← call printu (byte) main::a (string) "==@" (byte) main::a (byte) main::r (void~) main::$66 ← call print_ln - (byte/word~) main::$67 ← (byte) main::a + (byte/signed byte/word/signed word/dword/signed dword) 48 - (byte) main::a ← (byte/word~) main::$67 + (byte/signed word/word/dword/signed dword~) main::$67 ← (byte) main::a + (byte/signed byte/word/signed word/dword/signed dword) 48 + (byte) main::a ← (byte/signed word/word/dword/signed dword~) main::$67 (byte) main::i ← ++ (byte) main::i (boolean~) main::$68 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 5 if((boolean~) main::$68) goto main::@1 @@ -1256,8 +1256,8 @@ main::@1: scope:[main] from main::@45 main::@70 (byte) main::i#42 ← phi( main::@45/(byte) main::i#0 main::@70/(byte) main::i#1 ) (byte*) char_cursor#120 ← phi( main::@45/(byte*) char_cursor#12 main::@70/(byte*) char_cursor#37 ) (byte) main::a#2 ← phi( main::@45/(byte) main::a#0 main::@70/(byte) main::a#1 ) - (byte/signed byte/word/signed word/dword/signed dword~) main::$1 ← (byte/word/signed word/dword/signed dword) 206 - (byte) main::a#2 - (byte) main::b#0 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$1 + (byte/word/signed word/dword/signed dword~) main::$1 ← (byte/word/signed word/dword/signed dword) 206 - (byte) main::a#2 + (byte) main::b#0 ← (byte/word/signed word/dword/signed dword~) main::$1 (byte[5]) main::cs#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/word/signed word/dword/signed dword) 199, (byte/signed byte/word/signed word/dword/signed dword) 55, (byte/word/signed word/dword/signed dword) 151, (byte/signed byte/word/signed word/dword/signed dword) 103 } (byte) main::r#0 ← (byte) '-' (boolean~) main::$2 ← (byte) main::a#2 < (byte) main::b#0 @@ -1951,8 +1951,8 @@ main::@70: scope:[main] from main::@69 (byte*) line_cursor#22 ← phi( main::@69/(byte*) line_cursor#2 ) (byte*) line_cursor#10 ← (byte*) line_cursor#22 (byte*) char_cursor#37 ← (byte*) char_cursor#82 - (byte/word~) main::$67 ← (byte) main::a#42 + (byte/signed byte/word/signed word/dword/signed dword) 48 - (byte) main::a#1 ← (byte/word~) main::$67 + (byte/signed word/word/dword/signed dword~) main::$67 ← (byte) main::a#42 + (byte/signed byte/word/signed word/dword/signed dword) 48 + (byte) main::a#1 ← (byte/signed word/word/dword/signed dword~) main::$67 (byte) main::i#1 ← ++ (byte) main::i#12 (boolean~) main::$68 ← (byte) main::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 5 if((boolean~) main::$68) goto main::@1 @@ -2289,7 +2289,7 @@ SYMBOL TABLE SSA (byte*) line_cursor#89 (byte*) line_cursor#9 (void()) main() -(byte/signed byte/word/signed word/dword/signed dword~) main::$1 +(byte/word/signed word/dword/signed dword~) main::$1 (boolean~) main::$11 (boolean~) main::$12 (boolean~) main::$15 @@ -2328,7 +2328,7 @@ SYMBOL TABLE SSA (boolean~) main::$61 (boolean~) main::$63 (boolean~) main::$64 -(byte/word~) main::$67 +(byte/signed word/word/dword/signed dword~) main::$67 (boolean~) main::$68 (boolean~) main::$8 (boolean~) main::$9 @@ -2984,7 +2984,7 @@ Alias (byte*) char_cursor#55 = (byte*) char_cursor#8 (byte*) char_cursor#9 Alias (byte*) line_cursor#16 = (byte*) char_cursor#10 (byte*) line_cursor#3 (byte*) char_cursor#56 (byte*) line_cursor#4 (byte*) char_cursor#11 Alias (byte*) line_cursor#17 = (byte*) line_cursor#5 Alias (byte*) char_cursor#12 = (byte*) char_cursor#57 -Alias (byte) main::b#0 = (byte/signed byte/word/signed word/dword/signed dword~) main::$1 (byte) main::b#10 +Alias (byte) main::b#0 = (byte/word/signed word/dword/signed dword~) main::$1 (byte) main::b#10 Alias (byte) main::a#3 = (byte) main::a#4 (byte) main::a#44 Alias (byte) main::i#24 = (byte) main::i#25 (byte) main::i#35 Alias (byte*) line_cursor#69 = (byte*) line_cursor#70 (byte*) line_cursor#79 @@ -3095,7 +3095,7 @@ Alias (byte) main::i#12 = (byte) main::i#23 (byte) main::i#34 Alias (byte*) char_cursor#36 = (byte*) char_cursor#81 Alias (byte*) line_cursor#10 = (byte*) line_cursor#22 Alias (byte*) char_cursor#37 = (byte*) char_cursor#82 -Alias (byte) main::a#1 = (byte/word~) main::$67 +Alias (byte) main::a#1 = (byte/signed word/word/dword/signed dword~) main::$67 Alias (byte*) line_cursor#11 = (byte*) line_cursor#23 (byte*) line_cursor#32 Alias (byte*) char_cursor#117 = (byte*) char_cursor#83 (byte*) char_cursor#38 Alias (byte) printu::a#20 = (byte) printu::a#21 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-division.log b/src/test/java/dk/camelot64/kickc/test/ref/test-division.log index 878ca14f8..cd3c8aa98 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-division.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-division.log @@ -458,8 +458,8 @@ divr8u::@1: (boolean~) divr8u::$2 ← (byte~) divr8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr8u::$3 ← ! (boolean~) divr8u::$2 if((boolean~) divr8u::$3) goto divr8u::@2 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 divr8u::@2: (byte~) divr8u::$5 ← (byte) divr8u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) divr8u::dividend ← (byte~) divr8u::$5 @@ -469,8 +469,8 @@ divr8u::@2: (boolean~) divr8u::$8 ← ! (boolean~) divr8u::$7 if((boolean~) divr8u::$8) goto divr8u::@3 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 divr8u::@3: (byte) divr8u::i ← ++ (byte) divr8u::i (boolean~) divr8u::$10 ← (byte) divr8u::i != (byte/signed byte/word/signed word/dword/signed dword) 8 @@ -494,8 +494,8 @@ divr16u::@1: (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) divr16u::$4 ← ! (boolean~) divr16u::$3 if((boolean~) divr16u::$4) goto divr16u::@2 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 divr16u::@2: (word~) divr16u::$6 ← (word) divr16u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::dividend ← (word~) divr16u::$6 @@ -563,8 +563,8 @@ div8s::@2: (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 goto div8s::@4 div8s::@3: (byte~) div8s::$10 ← ((byte)) (signed byte) div8s::divisor @@ -617,8 +617,8 @@ div16s::@2: (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 goto div16s::@4 div16s::@3: (word~) div16s::$10 ← ((word)) (signed word) div16s::divisor @@ -698,8 +698,8 @@ test_16u::@1: (void~) test_16u::$6 ← call print_str (string) " @" (void~) test_16u::$7 ← call print_word (word) rem16u (void~) test_16u::$8 ← call print_ln - (byte/word~) test_16u::$9 ← (byte) test_16u::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) test_16u::i ← (byte/word~) test_16u::$9 + (byte/signed word/word/dword/signed dword~) test_16u::$9 ← (byte) test_16u::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) test_16u::i ← (byte/signed word/word/dword/signed dword~) test_16u::$9 (boolean~) test_16u::$10 ← (byte) test_16u::i != (byte/signed byte/word/signed word/dword/signed dword) 12 if((boolean~) test_16u::$10) goto test_16u::@1 test_16u::@return: @@ -755,8 +755,8 @@ test_16s::@1: (void~) test_16s::$12 ← call print_str (string) " @" (void~) test_16s::$13 ← call print_sword (signed word) rem16s (void~) test_16s::$14 ← call print_ln - (byte/word~) test_16s::$15 ← (byte) test_16s::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) test_16s::i ← (byte/word~) test_16s::$15 + (byte/signed word/word/dword/signed dword~) test_16s::$15 ← (byte) test_16s::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) test_16s::i ← (byte/signed word/word/dword/signed dword~) test_16s::$15 (boolean~) test_16s::$16 ← (byte) test_16s::i != (byte/signed byte/word/signed word/dword/signed dword) 12 if((boolean~) test_16s::$16) goto test_16s::@1 test_16s::@return: @@ -787,7 +787,7 @@ SYMBOLS (boolean~) div16s::$6 (signed word~) div16s::$7 (word~) div16s::$8 -(byte~) div16s::$9 +(byte/word/dword~) div16s::$9 (label) div16s::@1 (label) div16s::@2 (label) div16s::@3 @@ -840,7 +840,7 @@ SYMBOLS (boolean~) div8s::$6 (signed byte~) div8s::$7 (byte~) div8s::$8 -(byte~) div8s::$9 +(byte/word/dword~) div8s::$9 (label) div8s::@1 (label) div8s::@2 (label) div8s::@3 @@ -869,7 +869,7 @@ SYMBOLS (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -890,12 +890,12 @@ SYMBOLS (boolean~) divr8u::$10 (boolean~) divr8u::$2 (boolean~) divr8u::$3 -(byte~) divr8u::$4 +(byte/word/dword~) divr8u::$4 (byte~) divr8u::$5 (byte~) divr8u::$6 (boolean~) divr8u::$7 (boolean~) divr8u::$8 -(byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 +(byte~) divr8u::$9 (label) divr8u::@1 (label) divr8u::@2 (label) divr8u::@3 @@ -999,7 +999,7 @@ SYMBOLS (void~) test_16s::$12 (void~) test_16s::$13 (void~) test_16s::$14 -(byte/word~) test_16s::$15 +(byte/signed word/word/dword/signed dword~) test_16s::$15 (boolean~) test_16s::$16 (signed word/signed dword~) test_16s::$2 (signed byte/signed word/signed dword~) test_16s::$3 @@ -1028,7 +1028,7 @@ SYMBOLS (void~) test_16u::$6 (void~) test_16u::$7 (void~) test_16u::$8 -(byte/word~) test_16u::$9 +(byte/signed word/word/dword/signed dword~) test_16u::$9 (label) test_16u::@1 (label) test_16u::@return (word) test_16u::dividend @@ -1282,8 +1282,8 @@ divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4 if((boolean~) divr8u::$8) goto divr8u::@3 to:divr8u::@5 divr8u::@4: scope:[divr8u] from divr8u::@1 - (byte~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 to:divr8u::@2 divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 (byte) divr8u::i ← ++ (byte) divr8u::i @@ -1292,8 +1292,8 @@ divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 to:divr8u::@6 divr8u::@5: scope:[divr8u] from divr8u::@2 (byte) divr8u::quotient ← ++ (byte) divr8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor - (byte) divr8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 to:divr8u::@3 divr8u::@6: scope:[divr8u] from divr8u::@3 (byte) rem8u ← (byte) divr8u::rem @@ -1331,8 +1331,8 @@ divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 if((boolean~) divr16u::$9) goto divr16u::@3 to:divr16u::@5 divr16u::@4: scope:[divr16u] from divr16u::@1 - (word~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (byte) divr16u::i ← ++ (byte) divr16u::i @@ -1420,8 +1420,8 @@ div8s::@9: scope:[div8s] from div8s::@2 (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$9 to:div8s::@4 div8s::@4: scope:[div8s] from div8s::@3 div8s::@9 (byte~) div8s::$11 ← call div8u (byte) div8s::dividendu (byte) div8s::divisoru @@ -1494,8 +1494,8 @@ div16s::@9: scope:[div16s] from div16s::@2 (signed word~) div16s::$7 ← - (signed word) div16s::divisor (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg ← (byte/word/dword~) div16s::$9 to:div16s::@4 div16s::@4: scope:[div16s] from div16s::@3 div16s::@9 (word~) div16s::$11 ← call div16u (word) div16s::dividendu (word) div16s::divisoru @@ -1594,8 +1594,8 @@ test_16u::@1: scope:[test_16u] from test_16u test_16u::@1 (void~) test_16u::$6 ← call print_str (string) " @" (void~) test_16u::$7 ← call print_word (word) rem16u (void~) test_16u::$8 ← call print_ln - (byte/word~) test_16u::$9 ← (byte) test_16u::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) test_16u::i ← (byte/word~) test_16u::$9 + (byte/signed word/word/dword/signed dword~) test_16u::$9 ← (byte) test_16u::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) test_16u::i ← (byte/signed word/word/dword/signed dword~) test_16u::$9 (boolean~) test_16u::$10 ← (byte) test_16u::i != (byte/signed byte/word/signed word/dword/signed dword) 12 if((boolean~) test_16u::$10) goto test_16u::@1 to:test_16u::@2 @@ -1663,8 +1663,8 @@ test_16s::@1: scope:[test_16s] from test_16s test_16s::@1 (void~) test_16s::$12 ← call print_str (string) " @" (void~) test_16s::$13 ← call print_sword (signed word) rem16s (void~) test_16s::$14 ← call print_ln - (byte/word~) test_16s::$15 ← (byte) test_16s::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) test_16s::i ← (byte/word~) test_16s::$15 + (byte/signed word/word/dword/signed dword~) test_16s::$15 ← (byte) test_16s::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) test_16s::i ← (byte/signed word/word/dword/signed dword~) test_16s::$15 (boolean~) test_16s::$16 ← (byte) test_16s::i != (byte/signed byte/word/signed word/dword/signed dword) 12 if((boolean~) test_16s::$16) goto test_16s::@1 to:test_16s::@2 @@ -2107,8 +2107,8 @@ divr8u::@4: scope:[divr8u] from divr8u::@1 (byte) divr8u::quotient#7 ← phi( divr8u::@1/(byte) divr8u::quotient#6 ) (byte) divr8u::dividend#6 ← phi( divr8u::@1/(byte) divr8u::dividend#2 ) (byte) divr8u::rem#6 ← phi( divr8u::@1/(byte) divr8u::rem#1 ) - (byte~) divr8u::$4 ← (byte) divr8u::rem#6 | (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) divr8u::rem#2 ← (byte~) divr8u::$4 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem#6 | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem#2 ← (byte/word/dword~) divr8u::$4 to:divr8u::@2 divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 (byte) divr8u::divisor#6 ← phi( divr8u::@2/(byte) divr8u::divisor#1 divr8u::@5/(byte) divr8u::divisor#2 ) @@ -2127,8 +2127,8 @@ divr8u::@5: scope:[divr8u] from divr8u::@2 (byte) divr8u::rem#7 ← phi( divr8u::@2/(byte) divr8u::rem#5 ) (byte) divr8u::quotient#4 ← phi( divr8u::@2/(byte) divr8u::quotient#1 ) (byte) divr8u::quotient#2 ← ++ (byte) divr8u::quotient#4 - (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 ← (byte) divr8u::rem#7 - (byte) divr8u::divisor#2 - (byte) divr8u::rem#3 ← (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 + (byte~) divr8u::$9 ← (byte) divr8u::rem#7 - (byte) divr8u::divisor#2 + (byte) divr8u::rem#3 ← (byte~) divr8u::$9 to:divr8u::@3 divr8u::@6: scope:[divr8u] from divr8u::@3 (byte) divr8u::quotient#5 ← phi( divr8u::@3/(byte) divr8u::quotient#8 ) @@ -2190,8 +2190,8 @@ divr16u::@4: scope:[divr16u] from divr16u::@1 (word) divr16u::quotient#7 ← phi( divr16u::@1/(word) divr16u::quotient#6 ) (word) divr16u::dividend#6 ← phi( divr16u::@1/(word) divr16u::dividend#2 ) (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 ) - (word~) divr16u::$5 ← (word) divr16u::rem#6 | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem#1 ← (word~) divr16u::$5 + (word/dword~) divr16u::$5 ← (word) divr16u::rem#6 | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem#1 ← (word/dword~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#6 ← phi( divr16u::@2/(word) divr16u::divisor#1 divr16u::@5/(word) divr16u::divisor#2 ) @@ -2310,8 +2310,8 @@ div8s::@9: scope:[div8s] from div8s::@2 (signed byte~) div8s::$7 ← - (signed byte) div8s::divisor#3 (byte~) div8s::$8 ← ((byte)) (signed byte~) div8s::$7 (byte) div8s::divisoru#2 ← (byte~) div8s::$8 - (byte~) div8s::$9 ← (byte) div8s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8s::neg#2 ← (byte~) div8s::$9 + (byte/word/dword~) div8s::$9 ← (byte) div8s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg#2 ← (byte/word/dword~) div8s::$9 to:div8s::@4 div8s::@4: scope:[div8s] from div8s::@3 div8s::@9 (byte) div8s::neg#6 ← phi( div8s::@3/(byte) div8s::neg#8 div8s::@9/(byte) div8s::neg#2 ) @@ -2422,8 +2422,8 @@ div16s::@9: scope:[div16s] from div16s::@2 (signed word~) div16s::$7 ← - (signed word) div16s::divisor#3 (word~) div16s::$8 ← ((word)) (signed word~) div16s::$7 (word) div16s::divisoru#2 ← (word~) div16s::$8 - (byte~) div16s::$9 ← (byte) div16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div16s::neg#2 ← (byte~) div16s::$9 + (byte/word/dword~) div16s::$9 ← (byte) div16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div16s::neg#2 ← (byte/word/dword~) div16s::$9 to:div16s::@4 div16s::@4: scope:[div16s] from div16s::@3 div16s::@9 (byte) div16s::neg#6 ← phi( div16s::@3/(byte) div16s::neg#8 div16s::@9/(byte) div16s::neg#2 ) @@ -2788,8 +2788,8 @@ test_16u::@11: scope:[test_16u] from test_16u::@10 (byte*) line_cursor#32 ← phi( test_16u::@10/(byte*) line_cursor#2 ) (byte*) line_cursor#13 ← (byte*) line_cursor#32 (byte*) char_cursor#43 ← (byte*) char_cursor#105 - (byte/word~) test_16u::$9 ← (byte) test_16u::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) test_16u::i#1 ← (byte/word~) test_16u::$9 + (byte/signed word/word/dword/signed dword~) test_16u::$9 ← (byte) test_16u::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) test_16u::i#1 ← (byte/signed word/word/dword/signed dword~) test_16u::$9 (boolean~) test_16u::$10 ← (byte) test_16u::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 12 if((boolean~) test_16u::$10) goto test_16u::@1 to:test_16u::@return @@ -3069,8 +3069,8 @@ test_16s::@11: scope:[test_16s] from test_16s::@10 (byte*) line_cursor#36 ← phi( test_16s::@10/(byte*) line_cursor#2 ) (byte*) line_cursor#17 ← (byte*) line_cursor#36 (byte*) char_cursor#61 ← (byte*) char_cursor#123 - (byte/word~) test_16s::$15 ← (byte) test_16s::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) test_16s::i#1 ← (byte/word~) test_16s::$15 + (byte/signed word/word/dword/signed dword~) test_16s::$15 ← (byte) test_16s::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) test_16s::i#1 ← (byte/signed word/word/dword/signed dword~) test_16s::$15 (boolean~) test_16s::$16 ← (byte) test_16s::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 12 if((boolean~) test_16s::$16) goto test_16s::@1 to:test_16s::@return @@ -3297,7 +3297,7 @@ SYMBOL TABLE SSA (boolean~) div16s::$6 (signed word~) div16s::$7 (word~) div16s::$8 -(byte~) div16s::$9 +(byte/word/dword~) div16s::$9 (label) div16s::@1 (label) div16s::@11 (label) div16s::@15 @@ -3395,7 +3395,7 @@ SYMBOL TABLE SSA (boolean~) div8s::$6 (signed byte~) div8s::$7 (byte~) div8s::$8 -(byte~) div8s::$9 +(byte/word/dword~) div8s::$9 (label) div8s::@1 (label) div8s::@11 (label) div8s::@15 @@ -3481,7 +3481,7 @@ SYMBOL TABLE SSA (byte~) divr16u::$2 (boolean~) divr16u::$3 (boolean~) divr16u::$4 -(word~) divr16u::$5 +(word/dword~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (boolean~) divr16u::$8 @@ -3552,12 +3552,12 @@ SYMBOL TABLE SSA (boolean~) divr8u::$10 (boolean~) divr8u::$2 (boolean~) divr8u::$3 -(byte~) divr8u::$4 +(byte/word/dword~) divr8u::$4 (byte~) divr8u::$5 (byte~) divr8u::$6 (boolean~) divr8u::$7 (boolean~) divr8u::$8 -(byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 +(byte~) divr8u::$9 (label) divr8u::@1 (label) divr8u::@2 (label) divr8u::@3 @@ -4032,7 +4032,7 @@ SYMBOL TABLE SSA (void()) test_16s() (signed word/signed dword~) test_16s::$0 (signed word/signed dword~) test_16s::$1 -(byte/word~) test_16s::$15 +(byte/signed word/word/dword/signed dword~) test_16s::$15 (boolean~) test_16s::$16 (signed word/signed dword~) test_16s::$2 (signed byte/signed word/signed dword~) test_16s::$3 @@ -4087,7 +4087,7 @@ SYMBOL TABLE SSA (void()) test_16u() (word~) test_16u::$0 (boolean~) test_16u::$10 -(byte/word~) test_16u::$9 +(byte/signed word/word/dword/signed dword~) test_16u::$9 (label) test_16u::@1 (label) test_16u::@10 (label) test_16u::@11 @@ -4464,11 +4464,11 @@ Alias (byte) divr8u::dividend#2 = (byte) divr8u::dividend#6 Alias (byte) divr8u::quotient#6 = (byte) divr8u::quotient#7 Alias (byte) divr8u::divisor#3 = (byte) divr8u::divisor#4 Alias (byte) divr8u::i#5 = (byte) divr8u::i#6 -Alias (byte) divr8u::rem#2 = (byte~) divr8u::$4 +Alias (byte) divr8u::rem#2 = (byte/word/dword~) divr8u::$4 Alias (byte) divr8u::rem#5 = (byte) divr8u::rem#7 Alias (byte) divr8u::divisor#1 = (byte) divr8u::divisor#2 Alias (byte) divr8u::i#3 = (byte) divr8u::i#4 -Alias (byte) divr8u::rem#3 = (byte/signed byte/word/signed word/dword/signed dword~) divr8u::$9 +Alias (byte) divr8u::rem#3 = (byte~) divr8u::$9 Alias (byte) divr8u::rem#10 = (byte) divr8u::rem#8 Alias (byte) divr8u::return#1 = (byte) divr8u::quotient#5 (byte) divr8u::quotient#8 (byte) divr8u::return#4 (byte) divr8u::return#2 Alias (byte) rem8u#17 = (byte) rem8u#3 (byte) rem8u#4 @@ -4480,7 +4480,7 @@ Alias (word) divr16u::dividend#2 = (word) divr16u::dividend#6 Alias (word) divr16u::quotient#6 = (word) divr16u::quotient#7 Alias (word) divr16u::divisor#3 = (word) divr16u::divisor#4 Alias (byte) divr16u::i#5 = (byte) divr16u::i#6 -Alias (word) divr16u::rem#1 = (word~) divr16u::$5 +Alias (word) divr16u::rem#1 = (word/dword~) divr16u::$5 Alias (word) divr16u::rem#5 = (word) divr16u::rem#7 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#2 Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 @@ -4504,7 +4504,7 @@ Alias (byte) rem8u#42 = (byte) rem8u#51 (byte) rem8u#43 Alias (byte) div8s::neg#3 = (byte) div8s::neg#8 (byte) div8s::neg#5 Alias (byte) div8s::divisoru#1 = (byte~) div8s::$10 Alias (byte) div8s::divisoru#2 = (byte~) div8s::$8 -Alias (byte) div8s::neg#2 = (byte~) div8s::$9 +Alias (byte) div8s::neg#2 = (byte/word/dword~) div8s::$9 Alias (byte) div8u::return#2 = (byte) div8u::return#5 Alias (byte) div8s::neg#4 = (byte) div8s::neg#6 Alias (byte) rem8u#18 = (byte) rem8u#5 (byte) rem8u#19 (byte) rem8u#20 @@ -4529,7 +4529,7 @@ Alias (word) rem16u#41 = (word) rem16u#51 (word) rem16u#42 Alias (byte) div16s::neg#3 = (byte) div16s::neg#8 (byte) div16s::neg#5 Alias (word) div16s::divisoru#1 = (word~) div16s::$10 Alias (word) div16s::divisoru#2 = (word~) div16s::$8 -Alias (byte) div16s::neg#2 = (byte~) div16s::$9 +Alias (byte) div16s::neg#2 = (byte/word/dword~) div16s::$9 Alias (word) div16u::return#2 = (word) div16u::return#5 Alias (byte) div16s::neg#4 = (byte) div16s::neg#6 Alias (word) rem16u#18 = (word) rem16u#5 (word) rem16u#19 (word) rem16u#20 @@ -4595,7 +4595,7 @@ Alias (byte*) char_cursor#103 = (byte*) char_cursor#41 Alias (byte*) char_cursor#104 = (byte*) char_cursor#42 Alias (byte*) line_cursor#13 = (byte*) line_cursor#32 (byte*) line_cursor#33 (byte*) line_cursor#14 Alias (byte*) char_cursor#105 = (byte*) char_cursor#43 (byte*) char_cursor#106 (byte*) char_cursor#44 -Alias (byte) test_16u::i#1 = (byte/word~) test_16u::$9 +Alias (byte) test_16u::i#1 = (byte/signed word/word/dword/signed dword~) test_16u::$9 Alias (signed byte) div8s::return#3 = (signed byte) div8s::return#5 Alias (signed byte) test_8s::dividend#0 = (signed byte) test_8s::dividend#1 Alias (byte*) char_cursor#137 = (byte*) char_cursor#145 @@ -4632,7 +4632,7 @@ Alias (byte*) char_cursor#121 = (byte*) char_cursor#59 Alias (byte*) char_cursor#122 = (byte*) char_cursor#60 Alias (byte*) line_cursor#17 = (byte*) line_cursor#36 (byte*) line_cursor#37 (byte*) line_cursor#18 Alias (byte*) char_cursor#123 = (byte*) char_cursor#61 (byte*) char_cursor#124 (byte*) char_cursor#62 -Alias (byte) test_16s::i#1 = (byte/word~) test_16s::$15 +Alias (byte) test_16s::i#1 = (byte/signed word/word/dword/signed dword~) test_16s::$15 Alias (signed word) rem16s#0 = (signed word) rem16s#20 Alias (byte*) line_cursor#19 = (byte*) line_cursor#38 Alias (byte*) char_cursor#125 = (byte*) char_cursor#63 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.cfg b/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.cfg index e564cb52e..e6d564a78 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.cfg @@ -16,11 +16,11 @@ main::@1: scope:[main] from main main::@18 [6] (byte*) char_cursor#69 ← phi( main::@18/(byte*~) char_cursor#71 main/(const byte*) SCREEN#0 ) [ main::dw#10 char_cursor#69 line_cursor#19 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 ] ) [6] (dword) main::dw#10 ← phi( main::@18/(dword) main::dw#1 main/(dword/signed dword) 305419896 ) [ main::dw#10 char_cursor#69 line_cursor#19 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 ] ) [7] (word~) main::$2 ← > (dword) main::dw#10 [ main::dw#10 char_cursor#69 line_cursor#19 main::$2 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$2 ] ) - [8] (word~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) - [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) + [8] (word/signed dword/dword~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) + [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word/signed dword/dword~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) [10] (word~) main::$5 ← < (dword) main::dw#10 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$5 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$5 ] ) - [11] (word~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) - [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) + [11] (word/signed dword/dword~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) + [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word/signed dword/dword~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) [13] (dword) print_dword::dw#0 ← (dword) main::dw2#10 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 print_dword::dw#0 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 print_dword::dw#0 ] ) [14] call print_dword param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ) to:main::@4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.log b/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.log index 56d42f80e..58351ef35 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.log @@ -233,12 +233,12 @@ main::@1: (dword) main::dw2 ← (dword) main::dw (word~) main::$1 ← > (dword) main::dw2 (word~) main::$2 ← > (dword) main::dw - (word~) main::$3 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 - lval((word~) main::$1) ← (word~) main::$3 + (word/signed dword/dword~) main::$3 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 + lval((word~) main::$1) ← (word/signed dword/dword~) main::$3 (word~) main::$4 ← < (dword) main::dw2 (word~) main::$5 ← < (dword) main::dw - (word~) main::$6 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 - lval((word~) main::$4) ← (word~) main::$6 + (word/signed dword/dword~) main::$6 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 + lval((word~) main::$4) ← (word/signed dword/dword~) main::$6 (void~) main::$7 ← call print_dword (dword) main::dw2 (void~) main::$8 ← call print_char (byte) ' ' (word~) main::$9 ← > (dword) main::dw2 @@ -299,12 +299,12 @@ SYMBOLS (word~) main::$27 (byte~) main::$28 (void~) main::$29 -(word~) main::$3 +(word/signed dword/dword~) main::$3 (void~) main::$30 (boolean~) main::$31 (word~) main::$4 (word~) main::$5 -(word~) main::$6 +(word/signed dword/dword~) main::$6 (void~) main::$7 (void~) main::$8 (word~) main::$9 @@ -562,14 +562,14 @@ main::@1: scope:[main] from main main::@1 (dword) main::dw2 ← (dword) main::dw (word~) main::$1 ← > (dword) main::dw2 (word~) main::$2 ← > (dword) main::dw - (word~) main::$3 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 - (word~) main::$32 ← (word~) main::$3 - (dword) main::dw2 ← (dword) main::dw2 hi= (word~) main::$32 + (word/signed dword/dword~) main::$3 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 + (word/signed dword/dword~) main::$32 ← (word/signed dword/dword~) main::$3 + (dword) main::dw2 ← (dword) main::dw2 hi= (word/signed dword/dword~) main::$32 (word~) main::$4 ← < (dword) main::dw2 (word~) main::$5 ← < (dword) main::dw - (word~) main::$6 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 - (word~) main::$33 ← (word~) main::$6 - (dword) main::dw2 ← (dword) main::dw2 lo= (word~) main::$33 + (word/signed dword/dword~) main::$6 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 + (word/signed dword/dword~) main::$33 ← (word/signed dword/dword~) main::$6 + (dword) main::dw2 ← (dword) main::dw2 lo= (word/signed dword/dword~) main::$33 (void~) main::$7 ← call print_dword (dword) main::dw2 (void~) main::$8 ← call print_char (byte) ' ' (word~) main::$9 ← > (dword) main::dw2 @@ -828,13 +828,13 @@ main::@1: scope:[main] from main::@17 main::@3 (dword) main::dw#2 ← phi( main::@17/(dword) main::dw#1 main::@3/(dword) main::dw#0 ) (dword) main::dw2#0 ← (dword) main::dw#2 (word~) main::$2 ← > (dword) main::dw#2 - (word~) main::$3 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 - (word~) main::$32 ← (word~) main::$3 - (dword) main::dw2#1 ← (dword) main::dw2#0 hi= (word~) main::$32 + (word/signed dword/dword~) main::$3 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 + (word/signed dword/dword~) main::$32 ← (word/signed dword/dword~) main::$3 + (dword) main::dw2#1 ← (dword) main::dw2#0 hi= (word/signed dword/dword~) main::$32 (word~) main::$5 ← < (dword) main::dw#2 - (word~) main::$6 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 - (word~) main::$33 ← (word~) main::$6 - (dword) main::dw2#2 ← (dword) main::dw2#1 lo= (word~) main::$33 + (word/signed dword/dword~) main::$6 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 + (word/signed dword/dword~) main::$33 ← (word/signed dword/dword~) main::$6 + (dword) main::dw2#2 ← (dword) main::dw2#1 lo= (word/signed dword/dword~) main::$33 (dword) print_dword::dw#0 ← (dword) main::dw2#2 call print_dword param-assignment to:main::@4 @@ -1118,12 +1118,12 @@ SYMBOL TABLE SSA (byte~) main::$24 (word~) main::$27 (byte~) main::$28 -(word~) main::$3 +(word/signed dword/dword~) main::$3 (boolean~) main::$31 -(word~) main::$32 -(word~) main::$33 +(word/signed dword/dword~) main::$32 +(word/signed dword/dword~) main::$33 (word~) main::$5 -(word~) main::$6 +(word/signed dword/dword~) main::$6 (word~) main::$9 (label) main::@1 (label) main::@10 @@ -1307,8 +1307,8 @@ Alias (byte*) line_cursor#12 = (byte*) char_cursor#14 (byte*) line_cursor#3 (byt Alias (byte*) line_cursor#13 = (byte*) line_cursor#5 Alias (byte*) char_cursor#16 = (byte*) char_cursor#47 Alias (dword) main::dw#10 = (dword) main::dw2#0 (dword) main::dw#2 (dword) main::dw#16 (dword) main::dw#15 (dword) main::dw#14 (dword) main::dw#13 (dword) main::dw#12 (dword) main::dw#11 (dword) main::dw#9 (dword) main::dw#8 (dword) main::dw#7 (dword) main::dw#6 (dword) main::dw#5 (dword) main::dw#4 (dword) main::dw#3 -Alias (word~) main::$32 = (word~) main::$3 -Alias (word~) main::$33 = (word~) main::$6 +Alias (word/signed dword/dword~) main::$32 = (word/signed dword/dword~) main::$3 +Alias (word/signed dword/dword~) main::$33 = (word/signed dword/dword~) main::$6 Alias (dword) main::dw2#10 = (dword) main::dw2#9 (dword) main::dw2#2 (dword) main::dw2#3 (dword) main::dw2#4 (dword) main::dw2#11 (dword) main::dw2#5 (dword) main::dw2#12 (dword) main::dw2#6 (dword) main::dw2#13 (dword) main::dw2#7 (dword) main::dw2#14 (dword) main::dw2#8 Alias (byte*) line_cursor#19 = (byte*) line_cursor#32 (byte*) line_cursor#33 (byte*) line_cursor#31 (byte*) line_cursor#30 (byte*) line_cursor#29 (byte*) line_cursor#28 (byte*) line_cursor#27 (byte*) line_cursor#26 (byte*) line_cursor#25 (byte*) line_cursor#24 (byte*) line_cursor#23 (byte*) line_cursor#22 (byte*) line_cursor#21 Alias (byte*) char_cursor#17 = (byte*) char_cursor#48 @@ -1703,11 +1703,11 @@ main::@1: scope:[main] from main main::@18 [6] (byte*) char_cursor#69 ← phi( main::@18/(byte*~) char_cursor#71 main/(const byte*) SCREEN#0 ) [ main::dw#10 char_cursor#69 line_cursor#19 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 ] ) [6] (dword) main::dw#10 ← phi( main::@18/(dword) main::dw#1 main/(dword/signed dword) 305419896 ) [ main::dw#10 char_cursor#69 line_cursor#19 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 ] ) [7] (word~) main::$2 ← > (dword) main::dw#10 [ main::dw#10 char_cursor#69 line_cursor#19 main::$2 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$2 ] ) - [8] (word~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) - [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) + [8] (word/signed dword/dword~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) + [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word/signed dword/dword~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) [10] (word~) main::$5 ← < (dword) main::dw#10 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$5 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$5 ] ) - [11] (word~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) - [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) + [11] (word/signed dword/dword~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) + [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word/signed dword/dword~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) [13] (dword) print_dword::dw#0 ← (dword) main::dw2#10 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 print_dword::dw#0 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 print_dword::dw#0 ] ) [14] call print_dword param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ) to:main::@4 @@ -1936,8 +1936,8 @@ VARIABLE REGISTER WEIGHTS (word~) main::$2 22.0 (word~) main::$23 22.0 (word~) main::$27 22.0 -(word~) main::$32 22.0 -(word~) main::$33 22.0 +(word/signed dword/dword~) main::$32 22.0 +(word/signed dword/dword~) main::$33 22.0 (word~) main::$5 22.0 (dword) main::dw (dword) main::dw#1 11.0 @@ -2112,7 +2112,7 @@ main: { sta _2 lda dw+3 sta _2+1 - //SEG18 [8] (word~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) -- vwuz1=vwuz2_plus_vwuc1 + //SEG18 [8] (word/signed dword/dword~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) -- vwuz1=vwuz2_plus_vwuc1 lda _2 clc adc #<$1111 @@ -2120,7 +2120,7 @@ main: { lda _2+1 adc #>$1111 sta _32+1 - //SEG19 [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) -- vduz1=vduz2_sethi_vwuz3 + //SEG19 [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word/signed dword/dword~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) -- vduz1=vduz2_sethi_vwuz3 lda dw sta dw2 lda dw+1 @@ -2134,7 +2134,7 @@ main: { sta _5 lda dw+1 sta _5+1 - //SEG21 [11] (word~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) -- vwuz1=vwuz2_plus_vwuc1 + //SEG21 [11] (word/signed dword/dword~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) -- vwuz1=vwuz2_plus_vwuc1 lda _5 clc adc #<$1111 @@ -2142,7 +2142,7 @@ main: { lda _5+1 adc #>$1111 sta _33+1 - //SEG22 [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) -- vduz1=vduz2_setlo_vwuz3 + //SEG22 [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word/signed dword/dword~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) -- vduz1=vduz2_setlo_vwuz3 lda _33 sta dw2_10 lda _33+1 @@ -2592,10 +2592,10 @@ print_cls: { REGISTER UPLIFT POTENTIAL REGISTERS Equivalence Class zp ZP_WORD:16 [ main::$2 ] has ALU potential. Equivalence Class zp ZP_WORD:24 [ main::$5 ] has ALU potential. -Statement [8] (word~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) always clobbers reg byte a -Statement [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) always clobbers reg byte a -Statement [11] (word~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) always clobbers reg byte a -Statement [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) always clobbers reg byte a +Statement [8] (word/signed dword/dword~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) always clobbers reg byte a +Statement [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word/signed dword/dword~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) always clobbers reg byte a +Statement [11] (word/signed dword/dword~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) always clobbers reg byte a +Statement [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word/signed dword/dword~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) always clobbers reg byte a Statement [13] (dword) print_dword::dw#0 ← (dword) main::dw2#10 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 print_dword::dw#0 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 print_dword::dw#0 ] ) always clobbers reg byte a Statement [17] (word) print_word::w#2 ← > (dword) main::dw2#10 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#2 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#2 char_cursor#12 ] ) always clobbers reg byte a Statement [21] (word) print_word::w#3 ← < (dword) main::dw2#10 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#3 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#3 char_cursor#12 ] ) always clobbers reg byte a @@ -2620,10 +2620,10 @@ Statement [72] (word) print_word::w#0 ← > (dword) print_dword::dw#0 [ char_cur Statement [74] (word) print_word::w#1 ← < (dword) print_dword::dw#0 [ char_cursor#12 print_word::w#1 ] ( main:2::print_dword:14 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_word::w#1 ] ) always clobbers reg byte a Statement [79] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y Statement [81] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a -Statement [8] (word~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) always clobbers reg byte a -Statement [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) always clobbers reg byte a -Statement [11] (word~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) always clobbers reg byte a -Statement [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) always clobbers reg byte a +Statement [8] (word/signed dword/dword~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) always clobbers reg byte a +Statement [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word/signed dword/dword~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) always clobbers reg byte a +Statement [11] (word/signed dword/dword~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) always clobbers reg byte a +Statement [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word/signed dword/dword~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) always clobbers reg byte a Statement [13] (dword) print_dword::dw#0 ← (dword) main::dw2#10 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 print_dword::dw#0 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 print_dword::dw#0 ] ) always clobbers reg byte a Statement [17] (word) print_word::w#2 ← > (dword) main::dw2#10 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#2 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#2 char_cursor#12 ] ) always clobbers reg byte a Statement [21] (word) print_word::w#3 ← < (dword) main::dw2#10 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#3 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#3 char_cursor#12 ] ) always clobbers reg byte a @@ -2771,7 +2771,7 @@ main: { sta _2 lda dw+3 sta _2+1 - //SEG18 [8] (word~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) -- vwuz1=vwuz1_plus_vwuc1 + //SEG18 [8] (word/signed dword/dword~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) -- vwuz1=vwuz1_plus_vwuc1 clc lda _32 adc #<$1111 @@ -2779,7 +2779,7 @@ main: { lda _32+1 adc #>$1111 sta _32+1 - //SEG19 [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) -- vduz1=vduz2_sethi_vwuz3 + //SEG19 [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word/signed dword/dword~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) -- vduz1=vduz2_sethi_vwuz3 lda dw sta dw2 lda dw+1 @@ -2793,7 +2793,7 @@ main: { sta _5 lda dw+1 sta _5+1 - //SEG21 [11] (word~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) -- vwuz1=vwuz1_plus_vwuc1 + //SEG21 [11] (word/signed dword/dword~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) -- vwuz1=vwuz1_plus_vwuc1 clc lda _33 adc #<$1111 @@ -2801,7 +2801,7 @@ main: { lda _33+1 adc #>$1111 sta _33+1 - //SEG22 [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) -- vduz1=vduz1_setlo_vwuz2 + //SEG22 [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word/signed dword/dword~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) -- vduz1=vduz1_setlo_vwuz2 lda _33 sta dw2 lda _33+1 @@ -3351,8 +3351,8 @@ FINAL SYMBOL TABLE (word~) main::$2 $2 zp ZP_WORD:10 22.0 (word~) main::$23 $23 zp ZP_WORD:10 22.0 (word~) main::$27 $27 zp ZP_WORD:10 22.0 -(word~) main::$32 $32 zp ZP_WORD:10 22.0 -(word~) main::$33 $33 zp ZP_WORD:10 22.0 +(word/signed dword/dword~) main::$32 $32 zp ZP_WORD:10 22.0 +(word/signed dword/dword~) main::$33 $33 zp ZP_WORD:10 22.0 (word~) main::$5 $5 zp ZP_WORD:10 22.0 (label) main::@1 (label) main::@10 @@ -3494,7 +3494,7 @@ main: { sta _2 lda dw+3 sta _2+1 - //SEG18 [8] (word~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) -- vwuz1=vwuz1_plus_vwuc1 + //SEG18 [8] (word/signed dword/dword~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) -- vwuz1=vwuz1_plus_vwuc1 clc lda _32 adc #<$1111 @@ -3502,7 +3502,7 @@ main: { lda _32+1 adc #>$1111 sta _32+1 - //SEG19 [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) -- vduz1=vduz2_sethi_vwuz3 + //SEG19 [9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word/signed dword/dword~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ) -- vduz1=vduz2_sethi_vwuz3 lda dw sta dw2 lda dw+1 @@ -3516,7 +3516,7 @@ main: { sta _5 lda dw+1 sta _5+1 - //SEG21 [11] (word~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) -- vwuz1=vwuz1_plus_vwuc1 + //SEG21 [11] (word/signed dword/dword~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) -- vwuz1=vwuz1_plus_vwuc1 clc lda _33 adc #<$1111 @@ -3524,7 +3524,7 @@ main: { lda _33+1 adc #>$1111 sta _33+1 - //SEG22 [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) -- vduz1=vduz1_setlo_vwuz2 + //SEG22 [12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word/signed dword/dword~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ) -- vduz1=vduz1_setlo_vwuz2 lda _33 sta dw2 lda _33+1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.sym b/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.sym index 33e00af1b..35958f7eb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.sym @@ -20,8 +20,8 @@ (word~) main::$2 $2 zp ZP_WORD:10 22.0 (word~) main::$23 $23 zp ZP_WORD:10 22.0 (word~) main::$27 $27 zp ZP_WORD:10 22.0 -(word~) main::$32 $32 zp ZP_WORD:10 22.0 -(word~) main::$33 $33 zp ZP_WORD:10 22.0 +(word/signed dword/dword~) main::$32 $32 zp ZP_WORD:10 22.0 +(word/signed dword/dword~) main::$33 $33 zp ZP_WORD:10 22.0 (word~) main::$5 $5 zp ZP_WORD:10 22.0 (label) main::@1 (label) main::@10 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.cfg b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.cfg index 38b212be3..0d60aca7f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.cfg @@ -294,8 +294,8 @@ mul16u::@return: scope:[mul16u] from mul16u::@1 [141] return [ mul16u::res#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 ] ) to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [142] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) - [143] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) + [142] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) + [143] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) to:mul16u::@7 mul16u::@7: scope:[mul16u] from mul16u::@2 [144] (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:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.log b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.log index 3e494eb95..bab63d780 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.log @@ -526,8 +526,8 @@ proc (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - lval((byte~) mul8s::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + lval((byte~) mul8s::$5) ← (byte~) mul8s::$8 mul8s::@1: (boolean~) mul8s::$9 ← (signed byte) mul8s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul8s::$10 ← ! (boolean~) mul8s::$9 @@ -535,8 +535,8 @@ mul8s::@1: (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - lval((byte~) mul8s::$11) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + lval((byte~) mul8s::$11) ← (byte~) mul8s::$14 mul8s::@2: (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m (signed word) mul8s::return ← (signed word~) mul8s::$15 @@ -556,8 +556,8 @@ proc (signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - lval((byte~) mul8su::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + lval((byte~) mul8su::$5) ← (byte~) mul8su::$8 mul8su::@1: (signed word~) mul8su::$9 ← ((signed word)) (word) mul8su::m (signed word) mul8su::return ← (signed word~) mul8su::$9 @@ -574,8 +574,8 @@ mul16u::@1: if((boolean~) mul16u::$0) goto mul16u::@2 goto mul16u::@3 mul16u::@2: - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 (dword~) mul16u::$4 ← (dword) mul16u::res + (dword) mul16u::mb @@ -665,8 +665,8 @@ mulf_init::@3: *((byte*) mulf_init::sqr2_lo) ← *((byte[512]) mulf_sqr1_lo + (byte) mulf_init::x_255) *((byte*) mulf_init::sqr2_hi) ← *((byte[512]) mulf_sqr1_hi + (byte) mulf_init::x_255) (byte*) mulf_init::sqr2_hi ← ++ (byte*) mulf_init::sqr2_hi - (byte/word~) mulf_init::$12 ← (byte) mulf_init::x_255 + (byte) mulf_init::dir - (byte) mulf_init::x_255 ← (byte/word~) mulf_init::$12 + (byte~) mulf_init::$12 ← (byte) mulf_init::x_255 + (byte) mulf_init::dir + (byte) mulf_init::x_255 ← (byte~) mulf_init::$12 (boolean~) mulf_init::$13 ← (byte) mulf_init::x_255 == (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mulf_init::$14 ← ! (boolean~) mulf_init::$13 if((boolean~) mulf_init::$14) goto mulf_init::@4 @@ -708,8 +708,8 @@ proc (signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) (byte~) mulf8s::$5 ← > (word) mulf8s::m (byte~) mulf8s::$6 ← > (word) mulf8s::m (byte~) mulf8s::$7 ← ((byte)) (signed byte) mulf8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 ← (byte~) mulf8s::$6 - (byte~) mulf8s::$7 - lval((byte~) mulf8s::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 + (byte~) mulf8s::$8 ← (byte~) mulf8s::$6 - (byte~) mulf8s::$7 + lval((byte~) mulf8s::$5) ← (byte~) mulf8s::$8 mulf8s::@1: (boolean~) mulf8s::$9 ← (signed byte) mulf8s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mulf8s::$10 ← ! (boolean~) mulf8s::$9 @@ -717,8 +717,8 @@ mulf8s::@1: (byte~) mulf8s::$11 ← > (word) mulf8s::m (byte~) mulf8s::$12 ← > (word) mulf8s::m (byte~) mulf8s::$13 ← ((byte)) (signed byte) mulf8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 ← (byte~) mulf8s::$12 - (byte~) mulf8s::$13 - lval((byte~) mulf8s::$11) ← (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 + (byte~) mulf8s::$14 ← (byte~) mulf8s::$12 - (byte~) mulf8s::$13 + lval((byte~) mulf8s::$11) ← (byte~) mulf8s::$14 mulf8s::@2: (signed word~) mulf8s::$15 ← ((signed word)) (word) mulf8s::m (signed word) mulf8s::return ← (signed word~) mulf8s::$15 @@ -795,10 +795,10 @@ proc (void()) mul16u_compare() mul16u_compare::@1: (byte) mul16u_compare::j ← (byte/signed byte/word/signed word/dword/signed dword) 0 mul16u_compare::@2: - (word~) mul16u_compare::$0 ← (word) mul16u_compare::a + (word/signed word/dword/signed dword) 3371 - (word) mul16u_compare::a ← (word~) mul16u_compare::$0 - (word~) mul16u_compare::$1 ← (word) mul16u_compare::b + (word/signed word/dword/signed dword) 4093 - (word) mul16u_compare::b ← (word~) mul16u_compare::$1 + (word/signed dword/dword~) mul16u_compare::$0 ← (word) mul16u_compare::a + (word/signed word/dword/signed dword) 3371 + (word) mul16u_compare::a ← (word/signed dword/dword~) mul16u_compare::$0 + (word/signed dword/dword~) mul16u_compare::$1 ← (word) mul16u_compare::b + (word/signed word/dword/signed dword) 4093 + (word) mul16u_compare::b ← (word/signed dword/dword~) mul16u_compare::$1 (dword~) mul16u_compare::$2 ← call muls16u (word) mul16u_compare::a (word) mul16u_compare::b (dword) mul16u_compare::ms ← (dword~) mul16u_compare::$2 (dword~) mul16u_compare::$3 ← call mul16u (word) mul16u_compare::a (word) mul16u_compare::b @@ -849,10 +849,10 @@ proc (void()) mul16s_compare() mul16s_compare::@1: (byte) mul16s_compare::j ← (byte/signed byte/word/signed word/dword/signed dword) 0 mul16s_compare::@2: - (signed word~) mul16s_compare::$2 ← (signed word) mul16s_compare::a + (word/signed word/dword/signed dword) 3371 - (signed word) mul16s_compare::a ← (signed word~) mul16s_compare::$2 - (signed word~) mul16s_compare::$3 ← (signed word) mul16s_compare::b + (word/signed word/dword/signed dword) 4093 - (signed word) mul16s_compare::b ← (signed word~) mul16s_compare::$3 + (signed dword/signed word~) mul16s_compare::$2 ← (signed word) mul16s_compare::a + (word/signed word/dword/signed dword) 3371 + (signed word) mul16s_compare::a ← (signed dword/signed word~) mul16s_compare::$2 + (signed dword/signed word~) mul16s_compare::$3 ← (signed word) mul16s_compare::b + (word/signed word/dword/signed dword) 4093 + (signed word) mul16s_compare::b ← (signed dword/signed word~) mul16s_compare::$3 (signed dword~) mul16s_compare::$4 ← call muls16s (signed word) mul16s_compare::a (signed word) mul16s_compare::b (signed dword) mul16s_compare::ms ← (signed dword~) mul16s_compare::$4 (signed dword~) mul16s_compare::$5 ← call mul16s (signed word) mul16s_compare::a (signed word) mul16s_compare::b @@ -939,8 +939,8 @@ SYMBOLS (boolean~) mul16s_compare::$12 (void~) mul16s_compare::$13 (void~) mul16s_compare::$14 -(signed word~) mul16s_compare::$2 -(signed word~) mul16s_compare::$3 +(signed dword/signed word~) mul16s_compare::$2 +(signed dword/signed word~) mul16s_compare::$3 (signed dword~) mul16s_compare::$4 (signed dword~) mul16s_compare::$5 (boolean~) mul16s_compare::$6 @@ -976,7 +976,7 @@ SYMBOLS (signed dword) mul16s_error::ms (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (boolean~) mul16u::$0 -(byte~) mul16u::$1 +(byte/word~) mul16u::$1 (boolean~) mul16u::$2 (boolean~) mul16u::$3 (dword~) mul16u::$4 @@ -993,8 +993,8 @@ SYMBOLS (dword) mul16u::res (dword) mul16u::return (void()) mul16u_compare() -(word~) mul16u_compare::$0 -(word~) mul16u_compare::$1 +(word/signed dword/dword~) mul16u_compare::$0 +(word/signed dword/dword~) mul16u_compare::$1 (boolean~) mul16u_compare::$10 (void~) mul16u_compare::$11 (void~) mul16u_compare::$12 @@ -1040,7 +1040,7 @@ SYMBOLS (byte~) mul8s::$11 (byte~) mul8s::$12 (byte~) mul8s::$13 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 +(byte~) mul8s::$14 (signed word~) mul8s::$15 (word~) mul8s::$2 (boolean~) mul8s::$3 @@ -1048,7 +1048,7 @@ SYMBOLS (byte~) mul8s::$5 (byte~) mul8s::$6 (byte~) mul8s::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 +(byte~) mul8s::$8 (boolean~) mul8s::$9 (label) mul8s::@1 (label) mul8s::@2 @@ -1066,7 +1066,7 @@ SYMBOLS (byte~) mul8su::$5 (byte~) mul8su::$6 (byte~) mul8su::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 +(byte~) mul8su::$8 (signed word~) mul8su::$9 (label) mul8su::@1 (label) mul8su::@return @@ -1099,7 +1099,7 @@ SYMBOLS (byte~) mulf8s::$11 (byte~) mulf8s::$12 (byte~) mulf8s::$13 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 +(byte~) mulf8s::$14 (signed word~) mulf8s::$15 (word~) mulf8s::$2 (boolean~) mulf8s::$3 @@ -1107,7 +1107,7 @@ SYMBOLS (byte~) mulf8s::$5 (byte~) mulf8s::$6 (byte~) mulf8s::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 +(byte~) mulf8s::$8 (boolean~) mulf8s::$9 (label) mulf8s::@1 (label) mulf8s::@2 @@ -1128,7 +1128,7 @@ SYMBOLS (byte*~) mulf_init::$1 (signed byte/signed word/signed dword~) mulf_init::$10 (byte~) mulf_init::$11 -(byte/word~) mulf_init::$12 +(byte~) mulf_init::$12 (boolean~) mulf_init::$13 (boolean~) mulf_init::$14 (byte*~) mulf_init::$15 @@ -1508,9 +1508,9 @@ mul8s::@3: scope:[mul8s] from mul8s (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + (byte~) mul8s::$16 ← (byte~) mul8s::$8 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$16 to:mul8s::@1 mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m @@ -1520,9 +1520,9 @@ mul8s::@4: scope:[mul8s] from mul8s::@1 (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + (byte~) mul8s::$17 ← (byte~) mul8s::$14 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$17 to:mul8s::@2 mul8s::@return: scope:[mul8s] from mul8s::@2 mul8s::@5 (signed word) mul8s::return ← (signed word) mul8s::return @@ -1549,9 +1549,9 @@ mul8su::@2: scope:[mul8su] from mul8su (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 - (word) mul8su::m ← (word) mul8su::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + (byte~) mul8su::$10 ← (byte~) mul8su::$8 + (word) mul8su::m ← (word) mul8su::m hi= (byte~) mul8su::$10 to:mul8su::@1 mul8su::@return: scope:[mul8su] from mul8su::@1 mul8su::@3 (signed word) mul8su::return ← (signed word) mul8su::return @@ -1570,8 +1570,8 @@ mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 if((boolean~) mul16u::$0) goto mul16u::@2 to:mul16u::@5 mul16u::@2: scope:[mul16u] from mul16u::@1 mul16u::@6 - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 to:mul16u::@7 @@ -1693,8 +1693,8 @@ mulf_init::@3: scope:[mulf_init] from mulf_init::@4 mulf_init::@6 *((byte*) mulf_init::sqr2_lo) ← *((byte[512]) mulf_sqr1_lo + (byte) mulf_init::x_255) *((byte*) mulf_init::sqr2_hi) ← *((byte[512]) mulf_sqr1_hi + (byte) mulf_init::x_255) (byte*) mulf_init::sqr2_hi ← ++ (byte*) mulf_init::sqr2_hi - (byte/word~) mulf_init::$12 ← (byte) mulf_init::x_255 + (byte) mulf_init::dir - (byte) mulf_init::x_255 ← (byte/word~) mulf_init::$12 + (byte~) mulf_init::$12 ← (byte) mulf_init::x_255 + (byte) mulf_init::dir + (byte) mulf_init::x_255 ← (byte~) mulf_init::$12 (boolean~) mulf_init::$13 ← (byte) mulf_init::x_255 == (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mulf_init::$14 ← ! (boolean~) mulf_init::$13 if((boolean~) mulf_init::$14) goto mulf_init::@4 @@ -1755,9 +1755,9 @@ mulf8s::@3: scope:[mulf8s] from mulf8s (byte~) mulf8s::$5 ← > (word) mulf8s::m (byte~) mulf8s::$6 ← > (word) mulf8s::m (byte~) mulf8s::$7 ← ((byte)) (signed byte) mulf8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 ← (byte~) mulf8s::$6 - (byte~) mulf8s::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 ← (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 - (word) mulf8s::m ← (word) mulf8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 + (byte~) mulf8s::$8 ← (byte~) mulf8s::$6 - (byte~) mulf8s::$7 + (byte~) mulf8s::$16 ← (byte~) mulf8s::$8 + (word) mulf8s::m ← (word) mulf8s::m hi= (byte~) mulf8s::$16 to:mulf8s::@1 mulf8s::@2: scope:[mulf8s] from mulf8s::@1 mulf8s::@4 (signed word~) mulf8s::$15 ← ((signed word)) (word) mulf8s::m @@ -1767,9 +1767,9 @@ mulf8s::@4: scope:[mulf8s] from mulf8s::@1 (byte~) mulf8s::$11 ← > (word) mulf8s::m (byte~) mulf8s::$12 ← > (word) mulf8s::m (byte~) mulf8s::$13 ← ((byte)) (signed byte) mulf8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 ← (byte~) mulf8s::$12 - (byte~) mulf8s::$13 - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 ← (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 - (word) mulf8s::m ← (word) mulf8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 + (byte~) mulf8s::$14 ← (byte~) mulf8s::$12 - (byte~) mulf8s::$13 + (byte~) mulf8s::$17 ← (byte~) mulf8s::$14 + (word) mulf8s::m ← (word) mulf8s::m hi= (byte~) mulf8s::$17 to:mulf8s::@2 mulf8s::@return: scope:[mulf8s] from mulf8s::@2 mulf8s::@5 (signed word) mulf8s::return ← (signed word) mulf8s::return @@ -1880,10 +1880,10 @@ mul16u_compare::@1: scope:[mul16u_compare] from mul16u_compare mul16u_compare:: (byte) mul16u_compare::j ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:mul16u_compare::@2 mul16u_compare::@2: scope:[mul16u_compare] from mul16u_compare::@1 mul16u_compare::@4 - (word~) mul16u_compare::$0 ← (word) mul16u_compare::a + (word/signed word/dword/signed dword) 3371 - (word) mul16u_compare::a ← (word~) mul16u_compare::$0 - (word~) mul16u_compare::$1 ← (word) mul16u_compare::b + (word/signed word/dword/signed dword) 4093 - (word) mul16u_compare::b ← (word~) mul16u_compare::$1 + (word/signed dword/dword~) mul16u_compare::$0 ← (word) mul16u_compare::a + (word/signed word/dword/signed dword) 3371 + (word) mul16u_compare::a ← (word/signed dword/dword~) mul16u_compare::$0 + (word/signed dword/dword~) mul16u_compare::$1 ← (word) mul16u_compare::b + (word/signed word/dword/signed dword) 4093 + (word) mul16u_compare::b ← (word/signed dword/dword~) mul16u_compare::$1 (dword~) mul16u_compare::$2 ← call muls16u (word) mul16u_compare::a (word) mul16u_compare::b (dword) mul16u_compare::ms ← (dword~) mul16u_compare::$2 (dword~) mul16u_compare::$3 ← call mul16u (word) mul16u_compare::a (word) mul16u_compare::b @@ -1953,10 +1953,10 @@ mul16s_compare::@1: scope:[mul16s_compare] from mul16s_compare mul16s_compare:: (byte) mul16s_compare::j ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:mul16s_compare::@2 mul16s_compare::@2: scope:[mul16s_compare] from mul16s_compare::@1 mul16s_compare::@4 - (signed word~) mul16s_compare::$2 ← (signed word) mul16s_compare::a + (word/signed word/dword/signed dword) 3371 - (signed word) mul16s_compare::a ← (signed word~) mul16s_compare::$2 - (signed word~) mul16s_compare::$3 ← (signed word) mul16s_compare::b + (word/signed word/dword/signed dword) 4093 - (signed word) mul16s_compare::b ← (signed word~) mul16s_compare::$3 + (signed dword/signed word~) mul16s_compare::$2 ← (signed word) mul16s_compare::a + (word/signed word/dword/signed dword) 3371 + (signed word) mul16s_compare::a ← (signed dword/signed word~) mul16s_compare::$2 + (signed dword/signed word~) mul16s_compare::$3 ← (signed word) mul16s_compare::b + (word/signed word/dword/signed dword) 4093 + (signed word) mul16s_compare::b ← (signed dword/signed word~) mul16s_compare::$3 (signed dword~) mul16s_compare::$4 ← call muls16s (signed word) mul16s_compare::a (signed word) mul16s_compare::b (signed dword) mul16s_compare::ms ← (signed dword~) mul16s_compare::$4 (signed dword~) mul16s_compare::$5 ← call mul16s (signed word) mul16s_compare::a (signed word) mul16s_compare::b @@ -2394,8 +2394,8 @@ mul16u::@2: scope:[mul16u] from mul16u::@1 (dword) mul16u::res#5 ← phi( mul16u::@1/(dword) mul16u::res#4 ) (dword) mul16u::mb#4 ← phi( mul16u::@1/(dword) mul16u::mb#5 ) (word) mul16u::a#4 ← phi( mul16u::@1/(word) mul16u::a#3 ) - (byte~) mul16u::$1 ← (word) mul16u::a#4 & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a#4 & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 to:mul16u::@7 @@ -2553,8 +2553,8 @@ mulf_init::@3: scope:[mulf_init] from mulf_init::@4 mulf_init::@6 *((byte*) mulf_init::sqr2_lo#2) ← *((byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) *((byte*) mulf_init::sqr2_hi#2) ← *((byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 - (byte/word~) mulf_init::$12 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 - (byte) mulf_init::x_255#1 ← (byte/word~) mulf_init::$12 + (byte~) mulf_init::$12 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + (byte) mulf_init::x_255#1 ← (byte~) mulf_init::$12 (boolean~) mulf_init::$13 ← (byte) mulf_init::x_255#1 == (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mulf_init::$14 ← ! (boolean~) mulf_init::$13 if((boolean~) mulf_init::$14) goto mulf_init::@4 @@ -2754,10 +2754,10 @@ mul16u_compare::@2: scope:[mul16u_compare] from mul16u_compare::@1 mul16u_compa (byte) mul16u_compare::j#7 ← phi( mul16u_compare::@1/(byte) mul16u_compare::j#0 mul16u_compare::@4/(byte) mul16u_compare::j#1 ) (word) mul16u_compare::b#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::b#5 mul16u_compare::@4/(word) mul16u_compare::b#6 ) (word) mul16u_compare::a#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::a#5 mul16u_compare::@4/(word) mul16u_compare::a#6 ) - (word~) mul16u_compare::$0 ← (word) mul16u_compare::a#2 + (word/signed word/dword/signed dword) 3371 - (word) mul16u_compare::a#1 ← (word~) mul16u_compare::$0 - (word~) mul16u_compare::$1 ← (word) mul16u_compare::b#2 + (word/signed word/dword/signed dword) 4093 - (word) mul16u_compare::b#1 ← (word~) mul16u_compare::$1 + (word/signed dword/dword~) mul16u_compare::$0 ← (word) mul16u_compare::a#2 + (word/signed word/dword/signed dword) 3371 + (word) mul16u_compare::a#1 ← (word/signed dword/dword~) mul16u_compare::$0 + (word/signed dword/dword~) mul16u_compare::$1 ← (word) mul16u_compare::b#2 + (word/signed word/dword/signed dword) 4093 + (word) mul16u_compare::b#1 ← (word/signed dword/dword~) mul16u_compare::$1 (word) muls16u::a#0 ← (word) mul16u_compare::a#1 (word) muls16u::b#0 ← (word) mul16u_compare::b#1 call muls16u param-assignment @@ -3013,10 +3013,10 @@ mul16s_compare::@2: scope:[mul16s_compare] from mul16s_compare::@1 mul16s_compa (byte) mul16s_compare::j#7 ← phi( mul16s_compare::@1/(byte) mul16s_compare::j#0 mul16s_compare::@4/(byte) mul16s_compare::j#1 ) (signed word) mul16s_compare::b#2 ← phi( mul16s_compare::@1/(signed word) mul16s_compare::b#5 mul16s_compare::@4/(signed word) mul16s_compare::b#6 ) (signed word) mul16s_compare::a#2 ← phi( mul16s_compare::@1/(signed word) mul16s_compare::a#5 mul16s_compare::@4/(signed word) mul16s_compare::a#6 ) - (signed word~) mul16s_compare::$2 ← (signed word) mul16s_compare::a#2 + (word/signed word/dword/signed dword) 3371 - (signed word) mul16s_compare::a#1 ← (signed word~) mul16s_compare::$2 - (signed word~) mul16s_compare::$3 ← (signed word) mul16s_compare::b#2 + (word/signed word/dword/signed dword) 4093 - (signed word) mul16s_compare::b#1 ← (signed word~) mul16s_compare::$3 + (signed dword/signed word~) mul16s_compare::$2 ← (signed word) mul16s_compare::a#2 + (word/signed word/dword/signed dword) 3371 + (signed word) mul16s_compare::a#1 ← (signed dword/signed word~) mul16s_compare::$2 + (signed dword/signed word~) mul16s_compare::$3 ← (signed word) mul16s_compare::b#2 + (word/signed word/dword/signed dword) 4093 + (signed word) mul16s_compare::b#1 ← (signed dword/signed word~) mul16s_compare::$3 (signed word) muls16s::a#0 ← (signed word) mul16s_compare::a#1 (signed word) muls16s::b#0 ← (signed word) mul16s_compare::b#1 call muls16s param-assignment @@ -3598,8 +3598,8 @@ SYMBOL TABLE SSA (signed word/signed dword~) mul16s_compare::$1 (boolean~) mul16s_compare::$11 (boolean~) mul16s_compare::$12 -(signed word~) mul16s_compare::$2 -(signed word~) mul16s_compare::$3 +(signed dword/signed word~) mul16s_compare::$2 +(signed dword/signed word~) mul16s_compare::$3 (signed dword~) mul16s_compare::$4 (signed dword~) mul16s_compare::$5 (boolean~) mul16s_compare::$6 @@ -3725,7 +3725,7 @@ SYMBOL TABLE SSA (const string) mul16s_error::str3 = (string) " / normal:@" (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (boolean~) mul16u::$0 -(byte~) mul16u::$1 +(byte/word~) mul16u::$1 (boolean~) mul16u::$2 (boolean~) mul16u::$3 (dword~) mul16u::$4 @@ -3774,8 +3774,8 @@ SYMBOL TABLE SSA (dword) mul16u::return#5 (dword) mul16u::return#6 (void()) mul16u_compare() -(word~) mul16u_compare::$0 -(word~) mul16u_compare::$1 +(word/signed dword/dword~) mul16u_compare::$0 +(word/signed dword/dword~) mul16u_compare::$1 (boolean~) mul16u_compare::$10 (dword~) mul16u_compare::$2 (dword~) mul16u_compare::$3 @@ -3906,7 +3906,7 @@ SYMBOL TABLE SSA (byte*~) mulf_init::$1 (signed byte/signed word/signed dword~) mulf_init::$10 (byte~) mulf_init::$11 -(byte/word~) mulf_init::$12 +(byte~) mulf_init::$12 (boolean~) mulf_init::$13 (boolean~) mulf_init::$14 (byte*~) mulf_init::$15 @@ -4211,7 +4211,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Inversing boolean not (boolean~) print_sword::$1 ← (signed word) print_sword::w#3 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) print_sword::$0 ← (signed word) print_sword::w#3 < (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (boolean~) print_sdword::$1 ← (signed dword) print_sdword::dw#3 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw#3 < (byte/signed byte/word/signed word/dword/signed dword) 0 -Inversing boolean not (boolean~) mul16u::$3 ← (byte~) mul16u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) mul16u::$3 ← (byte/word~) mul16u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (boolean~) mul16s::$4 ← (signed word) mul16s::a#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mul16s::$3 ← (signed word) mul16s::a#2 < (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (boolean~) mul16s::$10 ← (signed word) mul16s::b#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mul16s::$9 ← (signed word) mul16s::b#2 < (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (boolean~) mulf_init::$4 ← (byte~) mulf_init::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mulf_init::$3 ← (byte~) mulf_init::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -4418,7 +4418,7 @@ Alias (byte*) mulf_init::sqr1_lo#3 = (byte*) mulf_init::sqr1_lo#4 Alias (byte*) mulf_init::sqr1_hi#3 = (byte*) mulf_init::sqr1_hi#4 Alias (byte) mulf_init::c#1 = (byte) mulf_init::c#4 Alias (byte) mulf_init::x_255#0 = (byte~) mulf_init::$11 -Alias (byte) mulf_init::x_255#1 = (byte/word~) mulf_init::$12 (byte) mulf_init::x_255#4 +Alias (byte) mulf_init::x_255#1 = (byte~) mulf_init::$12 (byte) mulf_init::x_255#4 Alias (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#4 Alias (byte*) mulf_init::sqr2_hi#1 = (byte*) mulf_init::sqr2_hi#4 Alias (byte*) BGCOL#1 = (byte*) BGCOL#25 (byte*) BGCOL#23 (byte*) BGCOL#24 @@ -4439,8 +4439,8 @@ Alias (signed word) muls16s::b#3 = (signed word) muls16s::b#6 (signed word) muls Alias (signed dword) muls16s::m#1 = (signed dword~) muls16s::$2 Alias (signed dword) muls16s::return#0 = (signed dword) muls16s::m#4 (signed dword) muls16s::return#3 (signed dword) muls16s::return#1 Alias (signed dword) muls16s::m#2 = (signed dword~) muls16s::$6 -Alias (word) mul16u_compare::a#1 = (word~) mul16u_compare::$0 (word) mul16u_compare::a#3 (word) mul16u_compare::a#9 (word) mul16u_compare::a#10 -Alias (word) mul16u_compare::b#1 = (word~) mul16u_compare::$1 (word) mul16u_compare::b#3 (word) mul16u_compare::b#9 (word) mul16u_compare::b#10 +Alias (word) mul16u_compare::a#1 = (word/signed dword/dword~) mul16u_compare::$0 (word) mul16u_compare::a#3 (word) mul16u_compare::a#9 (word) mul16u_compare::a#10 +Alias (word) mul16u_compare::b#1 = (word/signed dword/dword~) mul16u_compare::$1 (word) mul16u_compare::b#3 (word) mul16u_compare::b#9 (word) mul16u_compare::b#10 Alias (dword) muls16u::return#2 = (dword) muls16u::return#4 Alias (byte) mul16u_compare::j#4 = (byte) mul16u_compare::j#6 (byte) mul16u_compare::j#7 (byte) mul16u_compare::j#5 Alias (byte*) BGCOL#11 = (byte*) BGCOL#13 (byte*) BGCOL#7 (byte*) BGCOL#8 @@ -4483,8 +4483,8 @@ Alias (byte*) line_cursor#12 = (byte*) line_cursor#31 (byte*) line_cursor#32 (by Alias (byte*) char_cursor#40 = (byte*) char_cursor#95 (byte*) char_cursor#96 (byte*) char_cursor#41 Alias (signed word) mul16s_compare::a#0 = (signed word/signed dword~) mul16s_compare::$0 Alias (signed word) mul16s_compare::b#0 = (signed word/signed dword~) mul16s_compare::$1 -Alias (signed word) mul16s_compare::a#1 = (signed word~) mul16s_compare::$2 (signed word) mul16s_compare::a#3 (signed word) mul16s_compare::a#9 (signed word) mul16s_compare::a#10 -Alias (signed word) mul16s_compare::b#1 = (signed word~) mul16s_compare::$3 (signed word) mul16s_compare::b#3 (signed word) mul16s_compare::b#9 (signed word) mul16s_compare::b#10 +Alias (signed word) mul16s_compare::a#1 = (signed dword/signed word~) mul16s_compare::$2 (signed word) mul16s_compare::a#3 (signed word) mul16s_compare::a#9 (signed word) mul16s_compare::a#10 +Alias (signed word) mul16s_compare::b#1 = (signed dword/signed word~) mul16s_compare::$3 (signed word) mul16s_compare::b#3 (signed word) mul16s_compare::b#9 (signed word) mul16s_compare::b#10 Alias (signed dword) muls16s::return#2 = (signed dword) muls16s::return#4 Alias (byte) mul16s_compare::j#4 = (byte) mul16s_compare::j#6 (byte) mul16s_compare::j#7 (byte) mul16s_compare::j#5 Alias (byte*) BGCOL#10 = (byte*) BGCOL#12 (byte*) BGCOL#14 (byte*) BGCOL#9 @@ -4952,7 +4952,7 @@ Simple Condition (boolean~) print_sword::$1 if((signed word) print_sword::w#3>=( Simple Condition (boolean~) print_sdword::$1 if((signed dword) print_sdword::dw#3>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sdword::@1 Simple Condition (boolean~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (boolean~) mul16u::$0 if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 -Simple Condition (boolean~) mul16u::$3 if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 +Simple Condition (boolean~) mul16u::$3 if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 Simple Condition (boolean~) mul16s::$4 if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1 Simple Condition (boolean~) mul16s::$10 if((signed word) mul16s::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@2 Simple Condition (boolean~) mulf_init::$4 if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2 @@ -5919,8 +5919,8 @@ mul16u::@return: scope:[mul16u] from mul16u::@1 [141] return [ mul16u::res#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 ] ) to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [142] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) - [143] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) + [142] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) + [143] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) to:mul16u::@7 mul16u::@7: scope:[mul16u] from mul16u::@2 [144] (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:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) @@ -6423,7 +6423,7 @@ VARIABLE REGISTER WEIGHTS (signed dword) mul16s_error::ms (signed dword) mul16s_error::ms#0 0.3333333333333333 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) -(byte~) mul16u::$1 2002.0 +(byte/word~) mul16u::$1 2002.0 (word) mul16u::a (word) mul16u::a#0 1001.0 (word) mul16u::a#2 101.0 @@ -7784,11 +7784,11 @@ mul16u: { rts //SEG297 mul16u::@2 b2: - //SEG298 [142] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) -- vbuz1=vwuz2_band_vbuc1 + //SEG298 [142] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) -- vbuz1=vwuz2_band_vbuc1 lda a and #1 sta _1 - //SEG299 [143] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) -- vbuz1_eq_0_then_la1 + //SEG299 [143] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) -- vbuz1_eq_0_then_la1 lda _1 beq b4_from_b2 jmp b7 @@ -8814,7 +8814,7 @@ Statement [138] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2 [ mul16u:: Removing always clobbered register reg byte a as potential for zp ZP_BYTE:53 [ mul16u_compare::i#9 mul16u_compare::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:58 [ mul16u_compare::j#2 mul16u_compare::j#1 ] Statement [140] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [142] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [142] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a Statement [144] (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:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a Statement [148] if((signed word) muls16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls16s::@1 [ muls16s::a#0 muls16s::b#0 ] ( main:2::mul16s_compare:11::muls16s:20 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 line_cursor#1 muls16s::a#0 muls16s::b#0 ] ) always clobbers reg byte a Statement [150] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 - (signed word) muls16s::b#0 [ muls16s::a#0 muls16s::b#0 muls16s::i#2 muls16s::m#1 ] ( main:2::mul16s_compare:11::muls16s:20 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 line_cursor#1 muls16s::a#0 muls16s::b#0 muls16s::i#2 muls16s::m#1 ] ) always clobbers reg byte a @@ -8923,7 +8923,7 @@ Statement [133] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s:: Statement [135] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4 [ mul16s::return#0 ] ( main:2::mul16s_compare:11::mul16s:25 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::return#0 ] ) always clobbers reg byte a Statement [138] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::a#6 mul16u::mb#0 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a Statement [140] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [142] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [142] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a Statement [144] (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:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a Statement [148] if((signed word) muls16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls16s::@1 [ muls16s::a#0 muls16s::b#0 ] ( main:2::mul16s_compare:11::muls16s:20 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 line_cursor#1 muls16s::a#0 muls16s::b#0 ] ) always clobbers reg byte a Statement [150] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 - (signed word) muls16s::b#0 [ muls16s::a#0 muls16s::b#0 muls16s::i#2 muls16s::m#1 ] ( main:2::mul16s_compare:11::muls16s:20 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 line_cursor#1 muls16s::a#0 muls16s::b#0 muls16s::i#2 muls16s::m#1 ] ) always clobbers reg byte a @@ -9986,10 +9986,10 @@ mul16u: { rts //SEG297 mul16u::@2 b2: - //SEG298 [142] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 + //SEG298 [142] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 lda a and #1 - //SEG299 [143] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 + //SEG299 [143] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b4_from_b2 jmp b7 @@ -11317,7 +11317,7 @@ FINAL SYMBOL TABLE (const string) mul16s_error::str2 str2 = (string) " slow:@" (const string) mul16s_error::str3 str3 = (string) " / normal:@" (dword()) mul16u((word) mul16u::a , (word) mul16u::b) -(byte~) mul16u::$1 reg byte a 2002.0 +(byte/word~) mul16u::$1 reg byte a 2002.0 (label) mul16u::@1 (label) mul16u::@2 (label) mul16u::@4 @@ -12276,10 +12276,10 @@ mul16u: { rts //SEG297 mul16u::@2 b2: - //SEG298 [142] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 + //SEG298 [142] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) -- vbuaa=vwuz1_band_vbuc1 lda a and #1 - //SEG299 [143] if((byte~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 + //SEG299 [143] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:25::mul16u:122 [ mul16s_compare::i#9 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#2 mul16s_compare::ms#0 line_cursor#1 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:172 [ mul16u_compare::i#9 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#2 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b4 //SEG300 mul16u::@7 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.sym b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.sym index 4ca8321d2..6a44dd410 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.sym @@ -109,7 +109,7 @@ (const string) mul16s_error::str2 str2 = (string) " slow:@" (const string) mul16s_error::str3 str3 = (string) " / normal:@" (dword()) mul16u((word) mul16u::a , (word) mul16u::b) -(byte~) mul16u::$1 reg byte a 2002.0 +(byte/word~) mul16u::$1 reg byte a 2002.0 (label) mul16u::@1 (label) mul16u::@2 (label) mul16u::@4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.cfg b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.cfg index a9f60e9be..f9029740c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.cfg @@ -272,8 +272,8 @@ mul8s::@6: scope:[mul8s] from mul8s to:mul8s::@3 mul8s::@3: scope:[mul8s] from mul8s::@6 [135] (byte~) mul8s::$6 ← > (word) mul8s::m#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ) - [136] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) - [137] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 [ mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ) + [136] (byte~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) + [137] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$16 [ mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ) to:mul8s::@1 mul8s::@1: scope:[mul8s] from mul8s::@3 mul8s::@6 [138] (word) mul8s::m#5 ← phi( mul8s::@3/(word) mul8s::m#1 mul8s::@6/(word) mul8s::m#0 ) [ mul8s::a#0 mul8s::b#0 mul8s::m#5 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#5 ] ) @@ -281,8 +281,8 @@ mul8s::@1: scope:[mul8s] from mul8s::@3 mul8s::@6 to:mul8s::@4 mul8s::@4: scope:[mul8s] from mul8s::@1 [140] (byte~) mul8s::$12 ← > (word) mul8s::m#5 [ mul8s::a#0 mul8s::m#5 mul8s::$12 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::m#5 mul8s::$12 ] ) - [141] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) - [142] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 [ mul8s::m#2 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#2 ] ) + [141] (byte~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) + [142] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17 [ mul8s::m#2 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#2 ] ) to:mul8s::@2 mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 [143] (word) mul8s::m#4 ← phi( mul8s::@1/(word) mul8s::m#5 mul8s::@4/(word) mul8s::m#2 ) [ mul8s::m#4 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#4 ] ) @@ -328,8 +328,8 @@ mulf8s::@6: scope:[mulf8s] from mulf8s to:mulf8s::@3 mulf8s::@3: scope:[mulf8s] from mulf8s::@6 [162] (byte~) mulf8s::$6 ← > (word) mulf8s::m#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ) - [163] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) - [164] (word) mulf8s::m#1 ← (word) mulf8s::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ) + [163] (byte~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) + [164] (word) mulf8s::m#1 ← (word) mulf8s::m#0 hi= (byte~) mulf8s::$16 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ) to:mulf8s::@1 mulf8s::@1: scope:[mulf8s] from mulf8s::@3 mulf8s::@6 [165] (word) mulf8s::m#5 ← phi( mulf8s::@3/(word) mulf8s::m#1 mulf8s::@6/(word) mulf8s::m#0 ) [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#5 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#5 ] ) @@ -337,8 +337,8 @@ mulf8s::@1: scope:[mulf8s] from mulf8s::@3 mulf8s::@6 to:mulf8s::@4 mulf8s::@4: scope:[mulf8s] from mulf8s::@1 [167] (byte~) mulf8s::$12 ← > (word) mulf8s::m#5 [ mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ) - [168] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) - [169] (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 [ mulf8s::m#2 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#2 ] ) + [168] (byte~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) + [169] (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte~) mulf8s::$17 [ mulf8s::m#2 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#2 ] ) to:mulf8s::@2 mulf8s::@2: scope:[mulf8s] from mulf8s::@1 mulf8s::@4 [170] (word) mulf8s::m#4 ← phi( mulf8s::@1/(word) mulf8s::m#5 mulf8s::@4/(word) mulf8s::m#2 ) [ mulf8s::m#4 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#4 ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.log b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.log index f1e324cb9..b0df33282 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.log @@ -616,8 +616,8 @@ proc (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - lval((byte~) mul8s::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + lval((byte~) mul8s::$5) ← (byte~) mul8s::$8 mul8s::@1: (boolean~) mul8s::$9 ← (signed byte) mul8s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul8s::$10 ← ! (boolean~) mul8s::$9 @@ -625,8 +625,8 @@ mul8s::@1: (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - lval((byte~) mul8s::$11) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + lval((byte~) mul8s::$11) ← (byte~) mul8s::$14 mul8s::@2: (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m (signed word) mul8s::return ← (signed word~) mul8s::$15 @@ -646,8 +646,8 @@ proc (signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - lval((byte~) mul8su::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + lval((byte~) mul8su::$5) ← (byte~) mul8su::$8 mul8su::@1: (signed word~) mul8su::$9 ← ((signed word)) (word) mul8su::m (signed word) mul8su::return ← (signed word~) mul8su::$9 @@ -664,8 +664,8 @@ mul16u::@1: if((boolean~) mul16u::$0) goto mul16u::@2 goto mul16u::@3 mul16u::@2: - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 (dword~) mul16u::$4 ← (dword) mul16u::res + (dword) mul16u::mb @@ -755,8 +755,8 @@ mulf_init::@3: *((byte*) mulf_init::sqr2_lo) ← *((byte[512]) mulf_sqr1_lo + (byte) mulf_init::x_255) *((byte*) mulf_init::sqr2_hi) ← *((byte[512]) mulf_sqr1_hi + (byte) mulf_init::x_255) (byte*) mulf_init::sqr2_hi ← ++ (byte*) mulf_init::sqr2_hi - (byte/word~) mulf_init::$12 ← (byte) mulf_init::x_255 + (byte) mulf_init::dir - (byte) mulf_init::x_255 ← (byte/word~) mulf_init::$12 + (byte~) mulf_init::$12 ← (byte) mulf_init::x_255 + (byte) mulf_init::dir + (byte) mulf_init::x_255 ← (byte~) mulf_init::$12 (boolean~) mulf_init::$13 ← (byte) mulf_init::x_255 == (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mulf_init::$14 ← ! (boolean~) mulf_init::$13 if((boolean~) mulf_init::$14) goto mulf_init::@4 @@ -798,8 +798,8 @@ proc (signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) (byte~) mulf8s::$5 ← > (word) mulf8s::m (byte~) mulf8s::$6 ← > (word) mulf8s::m (byte~) mulf8s::$7 ← ((byte)) (signed byte) mulf8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 ← (byte~) mulf8s::$6 - (byte~) mulf8s::$7 - lval((byte~) mulf8s::$5) ← (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 + (byte~) mulf8s::$8 ← (byte~) mulf8s::$6 - (byte~) mulf8s::$7 + lval((byte~) mulf8s::$5) ← (byte~) mulf8s::$8 mulf8s::@1: (boolean~) mulf8s::$9 ← (signed byte) mulf8s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mulf8s::$10 ← ! (boolean~) mulf8s::$9 @@ -807,8 +807,8 @@ mulf8s::@1: (byte~) mulf8s::$11 ← > (word) mulf8s::m (byte~) mulf8s::$12 ← > (word) mulf8s::m (byte~) mulf8s::$13 ← ((byte)) (signed byte) mulf8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 ← (byte~) mulf8s::$12 - (byte~) mulf8s::$13 - lval((byte~) mulf8s::$11) ← (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 + (byte~) mulf8s::$14 ← (byte~) mulf8s::$12 - (byte~) mulf8s::$13 + lval((byte~) mulf8s::$11) ← (byte~) mulf8s::$14 mulf8s::@2: (signed word~) mulf8s::$15 ← ((signed word)) (word) mulf8s::m (signed word) mulf8s::return ← (signed word~) mulf8s::$15 @@ -1076,7 +1076,7 @@ SYMBOLS (signed dword) mul16s::return (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (boolean~) mul16u::$0 -(byte~) mul16u::$1 +(byte/word~) mul16u::$1 (boolean~) mul16u::$2 (boolean~) mul16u::$3 (dword~) mul16u::$4 @@ -1099,7 +1099,7 @@ SYMBOLS (byte~) mul8s::$11 (byte~) mul8s::$12 (byte~) mul8s::$13 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 +(byte~) mul8s::$14 (signed word~) mul8s::$15 (word~) mul8s::$2 (boolean~) mul8s::$3 @@ -1107,7 +1107,7 @@ SYMBOLS (byte~) mul8s::$5 (byte~) mul8s::$6 (byte~) mul8s::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 +(byte~) mul8s::$8 (boolean~) mul8s::$9 (label) mul8s::@1 (label) mul8s::@2 @@ -1174,7 +1174,7 @@ SYMBOLS (byte~) mul8su::$5 (byte~) mul8su::$6 (byte~) mul8su::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 +(byte~) mul8su::$8 (signed word~) mul8su::$9 (label) mul8su::@1 (label) mul8su::@return @@ -1256,7 +1256,7 @@ SYMBOLS (byte~) mulf8s::$11 (byte~) mulf8s::$12 (byte~) mulf8s::$13 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 +(byte~) mulf8s::$14 (signed word~) mulf8s::$15 (word~) mulf8s::$2 (boolean~) mulf8s::$3 @@ -1264,7 +1264,7 @@ SYMBOLS (byte~) mulf8s::$5 (byte~) mulf8s::$6 (byte~) mulf8s::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 +(byte~) mulf8s::$8 (boolean~) mulf8s::$9 (label) mulf8s::@1 (label) mulf8s::@2 @@ -1285,7 +1285,7 @@ SYMBOLS (byte*~) mulf_init::$1 (signed byte/signed word/signed dword~) mulf_init::$10 (byte~) mulf_init::$11 -(byte/word~) mulf_init::$12 +(byte~) mulf_init::$12 (boolean~) mulf_init::$13 (boolean~) mulf_init::$14 (byte*~) mulf_init::$15 @@ -1688,9 +1688,9 @@ mul8s::@3: scope:[mul8s] from mul8s (byte~) mul8s::$5 ← > (word) mul8s::m (byte~) mul8s::$6 ← > (word) mul8s::m (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + (byte~) mul8s::$16 ← (byte~) mul8s::$8 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$16 to:mul8s::@1 mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m @@ -1700,9 +1700,9 @@ mul8s::@4: scope:[mul8s] from mul8s::@1 (byte~) mul8s::$11 ← > (word) mul8s::m (byte~) mul8s::$12 ← > (word) mul8s::m (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 - (word) mul8s::m ← (word) mul8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + (byte~) mul8s::$17 ← (byte~) mul8s::$14 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$17 to:mul8s::@2 mul8s::@return: scope:[mul8s] from mul8s::@2 mul8s::@5 (signed word) mul8s::return ← (signed word) mul8s::return @@ -1729,9 +1729,9 @@ mul8su::@2: scope:[mul8su] from mul8su (byte~) mul8su::$5 ← > (word) mul8su::m (byte~) mul8su::$6 ← > (word) mul8su::m (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$8 - (word) mul8su::m ← (word) mul8su::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8su::$10 + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + (byte~) mul8su::$10 ← (byte~) mul8su::$8 + (word) mul8su::m ← (word) mul8su::m hi= (byte~) mul8su::$10 to:mul8su::@1 mul8su::@return: scope:[mul8su] from mul8su::@1 mul8su::@3 (signed word) mul8su::return ← (signed word) mul8su::return @@ -1750,8 +1750,8 @@ mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 if((boolean~) mul16u::$0) goto mul16u::@2 to:mul16u::@5 mul16u::@2: scope:[mul16u] from mul16u::@1 mul16u::@6 - (byte~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 - (boolean~) mul16u::$2 ← (byte~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 if((boolean~) mul16u::$3) goto mul16u::@4 to:mul16u::@7 @@ -1873,8 +1873,8 @@ mulf_init::@3: scope:[mulf_init] from mulf_init::@4 mulf_init::@6 *((byte*) mulf_init::sqr2_lo) ← *((byte[512]) mulf_sqr1_lo + (byte) mulf_init::x_255) *((byte*) mulf_init::sqr2_hi) ← *((byte[512]) mulf_sqr1_hi + (byte) mulf_init::x_255) (byte*) mulf_init::sqr2_hi ← ++ (byte*) mulf_init::sqr2_hi - (byte/word~) mulf_init::$12 ← (byte) mulf_init::x_255 + (byte) mulf_init::dir - (byte) mulf_init::x_255 ← (byte/word~) mulf_init::$12 + (byte~) mulf_init::$12 ← (byte) mulf_init::x_255 + (byte) mulf_init::dir + (byte) mulf_init::x_255 ← (byte~) mulf_init::$12 (boolean~) mulf_init::$13 ← (byte) mulf_init::x_255 == (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mulf_init::$14 ← ! (boolean~) mulf_init::$13 if((boolean~) mulf_init::$14) goto mulf_init::@4 @@ -1935,9 +1935,9 @@ mulf8s::@3: scope:[mulf8s] from mulf8s (byte~) mulf8s::$5 ← > (word) mulf8s::m (byte~) mulf8s::$6 ← > (word) mulf8s::m (byte~) mulf8s::$7 ← ((byte)) (signed byte) mulf8s::b - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 ← (byte~) mulf8s::$6 - (byte~) mulf8s::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 ← (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 - (word) mulf8s::m ← (word) mulf8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 + (byte~) mulf8s::$8 ← (byte~) mulf8s::$6 - (byte~) mulf8s::$7 + (byte~) mulf8s::$16 ← (byte~) mulf8s::$8 + (word) mulf8s::m ← (word) mulf8s::m hi= (byte~) mulf8s::$16 to:mulf8s::@1 mulf8s::@2: scope:[mulf8s] from mulf8s::@1 mulf8s::@4 (signed word~) mulf8s::$15 ← ((signed word)) (word) mulf8s::m @@ -1947,9 +1947,9 @@ mulf8s::@4: scope:[mulf8s] from mulf8s::@1 (byte~) mulf8s::$11 ← > (word) mulf8s::m (byte~) mulf8s::$12 ← > (word) mulf8s::m (byte~) mulf8s::$13 ← ((byte)) (signed byte) mulf8s::a - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 ← (byte~) mulf8s::$12 - (byte~) mulf8s::$13 - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 ← (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 - (word) mulf8s::m ← (word) mulf8s::m hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 + (byte~) mulf8s::$14 ← (byte~) mulf8s::$12 - (byte~) mulf8s::$13 + (byte~) mulf8s::$17 ← (byte~) mulf8s::$14 + (word) mulf8s::m ← (word) mulf8s::m hi= (byte~) mulf8s::$17 to:mulf8s::@2 mulf8s::@return: scope:[mulf8s] from mulf8s::@2 mulf8s::@5 (signed word) mulf8s::return ← (signed word) mulf8s::return @@ -2707,9 +2707,9 @@ mul8s::@3: scope:[mul8s] from mul8s::@6 (word) mul8s::m#3 ← phi( mul8s::@6/(word) mul8s::m#0 ) (byte~) mul8s::$6 ← > (word) mul8s::m#3 (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b#3 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 - (word) mul8s::m#1 ← (word) mul8s::m#3 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + (byte~) mul8s::$16 ← (byte~) mul8s::$8 + (word) mul8s::m#1 ← (word) mul8s::m#3 hi= (byte~) mul8s::$16 to:mul8s::@1 mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 (word) mul8s::m#4 ← phi( mul8s::@1/(word) mul8s::m#6 mul8s::@4/(word) mul8s::m#2 ) @@ -2721,9 +2721,9 @@ mul8s::@4: scope:[mul8s] from mul8s::@1 (word) mul8s::m#5 ← phi( mul8s::@1/(word) mul8s::m#6 ) (byte~) mul8s::$12 ← > (word) mul8s::m#5 (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a#3 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 - (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 - (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + (byte~) mul8s::$17 ← (byte~) mul8s::$14 + (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17 to:mul8s::@2 mul8s::@return: scope:[mul8s] from mul8s::@2 (signed word) mul8s::return#3 ← phi( mul8s::@2/(signed word) mul8s::return#0 ) @@ -2802,8 +2802,8 @@ mulf_init::@3: scope:[mulf_init] from mulf_init::@4 mulf_init::@6 *((byte*) mulf_init::sqr2_lo#2) ← *((byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) *((byte*) mulf_init::sqr2_hi#2) ← *((byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 - (byte/word~) mulf_init::$12 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 - (byte) mulf_init::x_255#1 ← (byte/word~) mulf_init::$12 + (byte~) mulf_init::$12 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + (byte) mulf_init::x_255#1 ← (byte~) mulf_init::$12 (boolean~) mulf_init::$13 ← (byte) mulf_init::x_255#1 == (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) mulf_init::$14 ← ! (boolean~) mulf_init::$13 if((boolean~) mulf_init::$14) goto mulf_init::@4 @@ -2884,9 +2884,9 @@ mulf8s::@3: scope:[mulf8s] from mulf8s::@6 (word) mulf8s::m#3 ← phi( mulf8s::@6/(word) mulf8s::m#0 ) (byte~) mulf8s::$6 ← > (word) mulf8s::m#3 (byte~) mulf8s::$7 ← ((byte)) (signed byte) mulf8s::b#3 - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 ← (byte~) mulf8s::$6 - (byte~) mulf8s::$7 - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 ← (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 - (word) mulf8s::m#1 ← (word) mulf8s::m#3 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 + (byte~) mulf8s::$8 ← (byte~) mulf8s::$6 - (byte~) mulf8s::$7 + (byte~) mulf8s::$16 ← (byte~) mulf8s::$8 + (word) mulf8s::m#1 ← (word) mulf8s::m#3 hi= (byte~) mulf8s::$16 to:mulf8s::@1 mulf8s::@2: scope:[mulf8s] from mulf8s::@1 mulf8s::@4 (word) mulf8s::m#4 ← phi( mulf8s::@1/(word) mulf8s::m#6 mulf8s::@4/(word) mulf8s::m#2 ) @@ -2898,9 +2898,9 @@ mulf8s::@4: scope:[mulf8s] from mulf8s::@1 (word) mulf8s::m#5 ← phi( mulf8s::@1/(word) mulf8s::m#6 ) (byte~) mulf8s::$12 ← > (word) mulf8s::m#5 (byte~) mulf8s::$13 ← ((byte)) (signed byte) mulf8s::a#3 - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 ← (byte~) mulf8s::$12 - (byte~) mulf8s::$13 - (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 ← (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 - (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 + (byte~) mulf8s::$14 ← (byte~) mulf8s::$12 - (byte~) mulf8s::$13 + (byte~) mulf8s::$17 ← (byte~) mulf8s::$14 + (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte~) mulf8s::$17 to:mulf8s::@2 mulf8s::@return: scope:[mulf8s] from mulf8s::@2 (signed word) mulf8s::return#3 ← phi( mulf8s::@2/(signed word) mulf8s::return#0 ) @@ -4171,16 +4171,16 @@ SYMBOL TABLE SSA (boolean~) mul8s::$10 (byte~) mul8s::$12 (byte~) mul8s::$13 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 +(byte~) mul8s::$14 (signed word~) mul8s::$15 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 +(byte~) mul8s::$16 +(byte~) mul8s::$17 (word~) mul8s::$2 (boolean~) mul8s::$3 (boolean~) mul8s::$4 (byte~) mul8s::$6 (byte~) mul8s::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 +(byte~) mul8s::$8 (boolean~) mul8s::$9 (label) mul8s::@1 (label) mul8s::@2 @@ -4575,16 +4575,16 @@ SYMBOL TABLE SSA (boolean~) mulf8s::$10 (byte~) mulf8s::$12 (byte~) mulf8s::$13 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 +(byte~) mulf8s::$14 (signed word~) mulf8s::$15 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 +(byte~) mulf8s::$16 +(byte~) mulf8s::$17 (word~) mulf8s::$2 (boolean~) mulf8s::$3 (boolean~) mulf8s::$4 (byte~) mulf8s::$6 (byte~) mulf8s::$7 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 +(byte~) mulf8s::$8 (boolean~) mulf8s::$9 (label) mulf8s::@1 (label) mulf8s::@2 @@ -4646,7 +4646,7 @@ SYMBOL TABLE SSA (byte*~) mulf_init::$1 (signed byte/signed word/signed dword~) mulf_init::$10 (byte~) mulf_init::$11 -(byte/word~) mulf_init::$12 +(byte~) mulf_init::$12 (boolean~) mulf_init::$13 (boolean~) mulf_init::$14 (byte*~) mulf_init::$15 @@ -5218,11 +5218,11 @@ Alias (word) mul8u::return#2 = (word) mul8u::return#5 Alias (signed byte) mul8s::a#1 = (signed byte) mul8s::a#2 (signed byte) mul8s::a#5 Alias (signed byte) mul8s::b#1 = (signed byte) mul8s::b#4 (signed byte) mul8s::b#3 Alias (word) mul8s::m#0 = (word~) mul8s::$2 (word) mul8s::m#3 -Alias (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 = (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$8 +Alias (byte~) mul8s::$16 = (byte~) mul8s::$8 Alias (signed word) mul8s::return#0 = (signed word~) mul8s::$15 (signed word) mul8s::return#3 (signed word) mul8s::return#1 Alias (word) mul8s::m#5 = (word) mul8s::m#6 Alias (signed byte) mul8s::a#3 = (signed byte) mul8s::a#4 -Alias (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 = (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$14 +Alias (byte~) mul8s::$17 = (byte~) mul8s::$14 Alias (byte*) mulf_init::sqr1_hi#0 = (byte*~) mulf_init::$0 Alias (byte*) mulf_init::sqr1_lo#0 = (byte*~) mulf_init::$1 Alias (word) mulf_init::sqr#1 = (word~) mulf_init::$7 @@ -5232,7 +5232,7 @@ Alias (byte*) mulf_init::sqr1_lo#3 = (byte*) mulf_init::sqr1_lo#4 Alias (byte*) mulf_init::sqr1_hi#3 = (byte*) mulf_init::sqr1_hi#4 Alias (byte) mulf_init::c#1 = (byte) mulf_init::c#4 Alias (byte) mulf_init::x_255#0 = (byte~) mulf_init::$11 -Alias (byte) mulf_init::x_255#1 = (byte/word~) mulf_init::$12 (byte) mulf_init::x_255#4 +Alias (byte) mulf_init::x_255#1 = (byte~) mulf_init::$12 (byte) mulf_init::x_255#4 Alias (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#4 Alias (byte*) mulf_init::sqr2_hi#1 = (byte*) mulf_init::sqr2_hi#4 Alias (word) mulf8u::return#0 = (word) mulf8u::return#4 (word) mulf8u::return#1 @@ -5242,11 +5242,11 @@ Alias (word) mulf8u::return#2 = (word) mulf8u::return#5 Alias (signed byte) mulf8s::a#1 = (signed byte) mulf8s::a#2 (signed byte) mulf8s::a#5 Alias (signed byte) mulf8s::b#1 = (signed byte) mulf8s::b#4 (signed byte) mulf8s::b#3 Alias (word) mulf8s::m#0 = (word~) mulf8s::$2 (word) mulf8s::m#3 -Alias (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 = (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$8 +Alias (byte~) mulf8s::$16 = (byte~) mulf8s::$8 Alias (signed word) mulf8s::return#0 = (signed word~) mulf8s::$15 (signed word) mulf8s::return#3 (signed word) mulf8s::return#1 Alias (word) mulf8s::m#5 = (word) mulf8s::m#6 Alias (signed byte) mulf8s::a#3 = (signed byte) mulf8s::a#4 -Alias (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 = (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$14 +Alias (byte~) mulf8s::$17 = (byte~) mulf8s::$14 Alias (byte*) BGCOL#1 = (byte*) BGCOL#24 (byte*) BGCOL#21 (byte*) BGCOL#16 (byte*) BGCOL#37 (byte*) BGCOL#38 Alias (byte*) line_cursor#27 = (byte*) line_cursor#5 (byte*) line_cursor#57 (byte*) line_cursor#47 Alias (byte*) char_cursor#139 = (byte*) char_cursor#21 (byte*) char_cursor#85 (byte*) char_cursor#152 @@ -7072,8 +7072,8 @@ mul8s::@6: scope:[mul8s] from mul8s to:mul8s::@3 mul8s::@3: scope:[mul8s] from mul8s::@6 [135] (byte~) mul8s::$6 ← > (word) mul8s::m#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ) - [136] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) - [137] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 [ mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ) + [136] (byte~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) + [137] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$16 [ mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ) to:mul8s::@1 mul8s::@1: scope:[mul8s] from mul8s::@3 mul8s::@6 [138] (word) mul8s::m#5 ← phi( mul8s::@3/(word) mul8s::m#1 mul8s::@6/(word) mul8s::m#0 ) [ mul8s::a#0 mul8s::b#0 mul8s::m#5 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#5 ] ) @@ -7081,8 +7081,8 @@ mul8s::@1: scope:[mul8s] from mul8s::@3 mul8s::@6 to:mul8s::@4 mul8s::@4: scope:[mul8s] from mul8s::@1 [140] (byte~) mul8s::$12 ← > (word) mul8s::m#5 [ mul8s::a#0 mul8s::m#5 mul8s::$12 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::m#5 mul8s::$12 ] ) - [141] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) - [142] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 [ mul8s::m#2 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#2 ] ) + [141] (byte~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) + [142] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17 [ mul8s::m#2 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#2 ] ) to:mul8s::@2 mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 [143] (word) mul8s::m#4 ← phi( mul8s::@1/(word) mul8s::m#5 mul8s::@4/(word) mul8s::m#2 ) [ mul8s::m#4 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#4 ] ) @@ -7128,8 +7128,8 @@ mulf8s::@6: scope:[mulf8s] from mulf8s to:mulf8s::@3 mulf8s::@3: scope:[mulf8s] from mulf8s::@6 [162] (byte~) mulf8s::$6 ← > (word) mulf8s::m#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ) - [163] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) - [164] (word) mulf8s::m#1 ← (word) mulf8s::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ) + [163] (byte~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) + [164] (word) mulf8s::m#1 ← (word) mulf8s::m#0 hi= (byte~) mulf8s::$16 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ) to:mulf8s::@1 mulf8s::@1: scope:[mulf8s] from mulf8s::@3 mulf8s::@6 [165] (word) mulf8s::m#5 ← phi( mulf8s::@3/(word) mulf8s::m#1 mulf8s::@6/(word) mulf8s::m#0 ) [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#5 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#5 ] ) @@ -7137,8 +7137,8 @@ mulf8s::@1: scope:[mulf8s] from mulf8s::@3 mulf8s::@6 to:mulf8s::@4 mulf8s::@4: scope:[mulf8s] from mulf8s::@1 [167] (byte~) mulf8s::$12 ← > (word) mulf8s::m#5 [ mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ) - [168] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) - [169] (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 [ mulf8s::m#2 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#2 ] ) + [168] (byte~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) + [169] (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte~) mulf8s::$17 [ mulf8s::m#2 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#2 ] ) to:mulf8s::@2 mulf8s::@2: scope:[mulf8s] from mulf8s::@1 mulf8s::@4 [170] (word) mulf8s::m#4 ← phi( mulf8s::@1/(word) mulf8s::m#5 mulf8s::@4/(word) mulf8s::m#2 ) [ mulf8s::m#4 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#4 ] ) @@ -7713,8 +7713,8 @@ VARIABLE REGISTER WEIGHTS (void()) main() (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) (byte~) mul8s::$12 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 4.0 +(byte~) mul8s::$16 4.0 +(byte~) mul8s::$17 4.0 (byte~) mul8s::$6 4.0 (signed byte) mul8s::a (signed byte) mul8s::a#0 7.357142857142858 @@ -7811,8 +7811,8 @@ VARIABLE REGISTER WEIGHTS (byte[512]) mula_sqr2_lo (signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) (byte~) mulf8s::$12 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 4.0 +(byte~) mulf8s::$16 4.0 +(byte~) mulf8s::$17 4.0 (byte~) mulf8s::$6 4.0 (signed byte) mulf8s::a (signed byte) mulf8s::a#0 7.357142857142858 @@ -9033,12 +9033,12 @@ mul8s: { //SEG279 [135] (byte~) mul8s::$6 ← > (word) mul8s::m#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ) -- vbuz1=_hi_vwuz2 lda m+1 sta _6 - //SEG280 [136] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) -- vbuz1=vbuz2_minus_vbuz3 + //SEG280 [136] (byte~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) -- vbuz1=vbuz2_minus_vbuz3 lda _6 sec sbc b sta _16 - //SEG281 [137] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 [ mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuz2 + //SEG281 [137] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$16 [ mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuz2 lda _16 sta m+1 //SEG282 [138] phi from mul8s::@3 mul8s::@6 to mul8s::@1 [phi:mul8s::@3/mul8s::@6->mul8s::@1] @@ -9058,12 +9058,12 @@ mul8s: { //SEG287 [140] (byte~) mul8s::$12 ← > (word) mul8s::m#5 [ mul8s::a#0 mul8s::m#5 mul8s::$12 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::m#5 mul8s::$12 ] ) -- vbuz1=_hi_vwuz2 lda m+1 sta _12 - //SEG288 [141] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) -- vbuz1=vbuz2_minus_vbuz3 + //SEG288 [141] (byte~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) -- vbuz1=vbuz2_minus_vbuz3 lda _12 sec sbc a sta _17 - //SEG289 [142] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 [ mul8s::m#2 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#2 ] ) -- vwuz1=vwuz1_sethi_vbuz2 + //SEG289 [142] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17 [ mul8s::m#2 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#2 ] ) -- vwuz1=vwuz1_sethi_vbuz2 lda _17 sta m+1 //SEG290 [143] phi from mul8s::@1 mul8s::@4 to mul8s::@2 [phi:mul8s::@1/mul8s::@4->mul8s::@2] @@ -9197,12 +9197,12 @@ mulf8s: { //SEG331 [162] (byte~) mulf8s::$6 ← > (word) mulf8s::m#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ) -- vbuz1=_hi_vwuz2 lda m+1 sta _6 - //SEG332 [163] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) -- vbuz1=vbuz2_minus_vbuz3 + //SEG332 [163] (byte~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) -- vbuz1=vbuz2_minus_vbuz3 lda _6 sec sbc b sta _16 - //SEG333 [164] (word) mulf8s::m#1 ← (word) mulf8s::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuz2 + //SEG333 [164] (word) mulf8s::m#1 ← (word) mulf8s::m#0 hi= (byte~) mulf8s::$16 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuz2 lda _16 sta m+1 //SEG334 [165] phi from mulf8s::@3 mulf8s::@6 to mulf8s::@1 [phi:mulf8s::@3/mulf8s::@6->mulf8s::@1] @@ -9222,12 +9222,12 @@ mulf8s: { //SEG339 [167] (byte~) mulf8s::$12 ← > (word) mulf8s::m#5 [ mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ) -- vbuz1=_hi_vwuz2 lda m+1 sta _12 - //SEG340 [168] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) -- vbuz1=vbuz2_minus_vbuz3 + //SEG340 [168] (byte~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) -- vbuz1=vbuz2_minus_vbuz3 lda _12 sec sbc a sta _17 - //SEG341 [169] (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 [ mulf8s::m#2 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#2 ] ) -- vwuz1=vwuz1_sethi_vbuz2 + //SEG341 [169] (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte~) mulf8s::$17 [ mulf8s::m#2 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#2 ] ) -- vwuz1=vwuz1_sethi_vbuz2 lda _17 sta m+1 //SEG342 [170] phi from mulf8s::@1 mulf8s::@4 to mulf8s::@2 [phi:mulf8s::@1/mulf8s::@4->mulf8s::@2] @@ -10422,9 +10422,9 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:72 [ m Removing always clobbered register reg byte a as potential for zp ZP_BYTE:73 [ mul8s::b#0 ] Statement [133] (word) mul8s::m#0 ← (word) mul8u::return#2 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 ] ) always clobbers reg byte a Statement [135] (byte~) mul8s::$6 ← > (word) mul8s::m#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ) always clobbers reg byte a -Statement [136] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) always clobbers reg byte a +Statement [136] (byte~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) always clobbers reg byte a Statement [140] (byte~) mul8s::$12 ← > (word) mul8s::m#5 [ mul8s::a#0 mul8s::m#5 mul8s::$12 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::m#5 mul8s::$12 ] ) always clobbers reg byte a -Statement [141] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) always clobbers reg byte a +Statement [141] (byte~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) always clobbers reg byte a Statement [146] (word) mul8u::mb#0 ← ((word)) (byte) mul8u::b#2 [ mul8u::a#6 mul8u::mb#0 ] ( main:2::mul8s_compare:15::mul8s:32::mul8u:131 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8u::a#6 mul8u::mb#0 ] main:2::mul8u_compare:13::mul8u:205 [ line_cursor#10 char_cursor#30 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 ZP_BYTE:21 [ mul8u::a#3 mul8u::a#6 mul8u::a#8 mul8u::a#2 mul8u::a#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ mul8u_compare::a#7 mul8u_compare::a#1 ] @@ -10436,9 +10436,9 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:66 [ m Removing always clobbered register reg byte a as potential for zp ZP_BYTE:67 [ mulf8s::b#0 ] Statement [160] (word) mulf8s::m#0 ← (word) mulf8u::return#2 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 ] ) always clobbers reg byte a Statement [162] (byte~) mulf8s::$6 ← > (word) mulf8s::m#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ) always clobbers reg byte a -Statement [163] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) always clobbers reg byte a +Statement [163] (byte~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) always clobbers reg byte a Statement [167] (byte~) mulf8s::$12 ← > (word) mulf8s::m#5 [ mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ) always clobbers reg byte a -Statement [168] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) always clobbers reg byte a +Statement [168] (byte~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) always clobbers reg byte a Statement asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x stamemA 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 ZP_BYTE:2 [ mul8s_compare::a#7 mul8s_compare::a#1 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] @@ -10540,18 +10540,18 @@ Statement [124] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte:: Statement [132] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8s::a#0 mul8s::b#0 mul8u::return#2 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8u::return#2 ] ) always clobbers reg byte a Statement [133] (word) mul8s::m#0 ← (word) mul8u::return#2 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 ] ) always clobbers reg byte a Statement [135] (byte~) mul8s::$6 ← > (word) mul8s::m#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ) always clobbers reg byte a -Statement [136] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) always clobbers reg byte a +Statement [136] (byte~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) always clobbers reg byte a Statement [140] (byte~) mul8s::$12 ← > (word) mul8s::m#5 [ mul8s::a#0 mul8s::m#5 mul8s::$12 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::m#5 mul8s::$12 ] ) always clobbers reg byte a -Statement [141] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) always clobbers reg byte a +Statement [141] (byte~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) always clobbers reg byte a Statement [146] (word) mul8u::mb#0 ← ((word)) (byte) mul8u::b#2 [ mul8u::a#6 mul8u::mb#0 ] ( main:2::mul8s_compare:15::mul8s:32::mul8u:131 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8u::a#6 mul8u::mb#0 ] main:2::mul8u_compare:13::mul8u:205 [ line_cursor#10 char_cursor#30 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 [150] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::mul8s_compare:15::mul8s:32::mul8u:131 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::mul8u_compare:13::mul8u:205 [ line_cursor#10 char_cursor#30 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 [152] (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:32::mul8u:131 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::mul8u_compare:13::mul8u:205 [ line_cursor#10 char_cursor#30 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 [159] (word) mulf8u::return#2 ← (word) mulf8u::return#0 [ mulf8s::a#0 mulf8s::b#0 mulf8u::return#2 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8u::return#2 ] ) always clobbers reg byte a Statement [160] (word) mulf8s::m#0 ← (word) mulf8u::return#2 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 ] ) always clobbers reg byte a Statement [162] (byte~) mulf8s::$6 ← > (word) mulf8s::m#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ) always clobbers reg byte a -Statement [163] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) always clobbers reg byte a +Statement [163] (byte~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) always clobbers reg byte a Statement [167] (byte~) mulf8s::$12 ← > (word) mulf8s::m#5 [ mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ) always clobbers reg byte a -Statement [168] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) always clobbers reg byte a +Statement [168] (byte~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) always clobbers reg byte a Statement asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x stamemA sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x Statement [176] (word) mulf8u::return#0 ← *((const byte*) mulf8u::memB#0) w= *((const byte*) mulf8u::memA#0) [ mulf8u::return#0 ] ( main:2::mul8s_compare:15::mulf8s:27::mulf8u:158 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8u::return#0 ] main:2::mul8u_compare:13::mulf8u:200 [ line_cursor#10 char_cursor#30 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#0 ] ) always clobbers reg byte a Statement [180] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 - (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#1 ] ( main:2::mul8s_compare:15::muls8s:22 [ mul8s_compare::a#7 mul8s_compare::b#10 line_cursor#1 muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#1 ] ) always clobbers reg byte a @@ -11532,11 +11532,11 @@ mul8s: { b3: //SEG279 [135] (byte~) mul8s::$6 ← > (word) mul8s::m#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ) -- vbuaa=_hi_vwuz1 lda m+1 - //SEG280 [136] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) -- vbuaa=vbuaa_minus_vbuyy + //SEG280 [136] (byte~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) -- vbuaa=vbuaa_minus_vbuyy sty $ff sec sbc $ff - //SEG281 [137] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 [ mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuaa + //SEG281 [137] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$16 [ mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuaa sta m+1 //SEG282 [138] phi from mul8s::@3 mul8s::@6 to mul8s::@1 [phi:mul8s::@3/mul8s::@6->mul8s::@1] b1_from_b3: @@ -11553,10 +11553,10 @@ mul8s: { b4: //SEG287 [140] (byte~) mul8s::$12 ← > (word) mul8s::m#5 [ mul8s::a#0 mul8s::m#5 mul8s::$12 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::m#5 mul8s::$12 ] ) -- vbuaa=_hi_vwuz1 lda m+1 - //SEG288 [141] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) -- vbuaa=vbuaa_minus_vbuz1 + //SEG288 [141] (byte~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) -- vbuaa=vbuaa_minus_vbuz1 sec sbc a - //SEG289 [142] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 [ mul8s::m#2 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#2 ] ) -- vwuz1=vwuz1_sethi_vbuaa + //SEG289 [142] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17 [ mul8s::m#2 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#2 ] ) -- vwuz1=vwuz1_sethi_vbuaa sta m+1 //SEG290 [143] phi from mul8s::@1 mul8s::@4 to mul8s::@2 [phi:mul8s::@1/mul8s::@4->mul8s::@2] b2_from_b1: @@ -11670,10 +11670,10 @@ mulf8s: { b3: //SEG331 [162] (byte~) mulf8s::$6 ← > (word) mulf8s::m#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ) -- vbuaa=_hi_vwuz1 lda m+1 - //SEG332 [163] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) -- vbuaa=vbuaa_minus_vbuz1 + //SEG332 [163] (byte~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) -- vbuaa=vbuaa_minus_vbuz1 sec sbc b - //SEG333 [164] (word) mulf8s::m#1 ← (word) mulf8s::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuaa + //SEG333 [164] (word) mulf8s::m#1 ← (word) mulf8s::m#0 hi= (byte~) mulf8s::$16 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuaa sta m+1 //SEG334 [165] phi from mulf8s::@3 mulf8s::@6 to mulf8s::@1 [phi:mulf8s::@3/mulf8s::@6->mulf8s::@1] b1_from_b3: @@ -11691,11 +11691,11 @@ mulf8s: { b4: //SEG339 [167] (byte~) mulf8s::$12 ← > (word) mulf8s::m#5 [ mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ) -- vbuaa=_hi_vwuz1 lda m+1 - //SEG340 [168] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) -- vbuaa=vbuaa_minus_vbuyy + //SEG340 [168] (byte~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) -- vbuaa=vbuaa_minus_vbuyy sty $ff sec sbc $ff - //SEG341 [169] (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 [ mulf8s::m#2 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#2 ] ) -- vwuz1=vwuz1_sethi_vbuaa + //SEG341 [169] (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte~) mulf8s::$17 [ mulf8s::m#2 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#2 ] ) -- vwuz1=vwuz1_sethi_vbuaa sta m+1 //SEG342 [170] phi from mulf8s::@1 mulf8s::@4 to mulf8s::@2 [phi:mulf8s::@1/mulf8s::@4->mulf8s::@2] b2_from_b1: @@ -13222,8 +13222,8 @@ FINAL SYMBOL TABLE (label) main::@return (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) (byte~) mul8s::$12 reg byte a 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 reg byte a 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 reg byte a 4.0 +(byte~) mul8s::$16 reg byte a 4.0 +(byte~) mul8s::$17 reg byte a 4.0 (byte~) mul8s::$6 reg byte a 4.0 (label) mul8s::@1 (label) mul8s::@2 @@ -13399,8 +13399,8 @@ FINAL SYMBOL TABLE (const byte[512]) mula_sqr2_lo#0 mula_sqr2_lo = { fill( 512, 0) } (signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) (byte~) mulf8s::$12 reg byte a 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 reg byte a 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 reg byte a 4.0 +(byte~) mulf8s::$16 reg byte a 4.0 +(byte~) mulf8s::$17 reg byte a 4.0 (byte~) mulf8s::$6 reg byte a 4.0 (label) mulf8s::@1 (label) mulf8s::@2 @@ -14235,11 +14235,11 @@ mul8s: { //SEG278 mul8s::@3 //SEG279 [135] (byte~) mul8s::$6 ← > (word) mul8s::m#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$6 ] ) -- vbuaa=_hi_vwuz1 lda m+1 - //SEG280 [136] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) -- vbuaa=vbuaa_minus_vbuyy + //SEG280 [136] (byte~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) -- vbuaa=vbuaa_minus_vbuyy sty $ff sec sbc $ff - //SEG281 [137] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 [ mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuaa + //SEG281 [137] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$16 [ mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::b#0 mul8s::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuaa sta m+1 //SEG282 [138] phi from mul8s::@3 mul8s::@6 to mul8s::@1 [phi:mul8s::@3/mul8s::@6->mul8s::@1] //SEG283 [138] phi (word) mul8s::m#5 = (word) mul8s::m#1 [phi:mul8s::@3/mul8s::@6->mul8s::@1#0] -- register_copy @@ -14251,10 +14251,10 @@ mul8s: { //SEG286 mul8s::@4 //SEG287 [140] (byte~) mul8s::$12 ← > (word) mul8s::m#5 [ mul8s::a#0 mul8s::m#5 mul8s::$12 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::a#0 mul8s::m#5 mul8s::$12 ] ) -- vbuaa=_hi_vwuz1 lda m+1 - //SEG288 [141] (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) -- vbuaa=vbuaa_minus_vbuz1 + //SEG288 [141] (byte~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#5 mul8s::$17 ] ) -- vbuaa=vbuaa_minus_vbuz1 sec sbc a - //SEG289 [142] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 [ mul8s::m#2 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#2 ] ) -- vwuz1=vwuz1_sethi_vbuaa + //SEG289 [142] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17 [ mul8s::m#2 ] ( main:2::mul8s_compare:15::mul8s:32 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 line_cursor#1 mul8s::m#2 ] ) -- vwuz1=vwuz1_sethi_vbuaa sta m+1 //SEG290 [143] phi from mul8s::@1 mul8s::@4 to mul8s::@2 [phi:mul8s::@1/mul8s::@4->mul8s::@2] //SEG291 [143] phi (word) mul8s::m#4 = (word) mul8s::m#5 [phi:mul8s::@1/mul8s::@4->mul8s::@2#0] -- register_copy @@ -14346,10 +14346,10 @@ mulf8s: { //SEG330 mulf8s::@3 //SEG331 [162] (byte~) mulf8s::$6 ← > (word) mulf8s::m#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ) -- vbuaa=_hi_vwuz1 lda m+1 - //SEG332 [163] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) -- vbuaa=vbuaa_minus_vbuz1 + //SEG332 [163] (byte~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ) -- vbuaa=vbuaa_minus_vbuz1 sec sbc b - //SEG333 [164] (word) mulf8s::m#1 ← (word) mulf8s::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuaa + //SEG333 [164] (word) mulf8s::m#1 ← (word) mulf8s::m#0 hi= (byte~) mulf8s::$16 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ) -- vwuz1=vwuz1_sethi_vbuaa sta m+1 //SEG334 [165] phi from mulf8s::@3 mulf8s::@6 to mulf8s::@1 [phi:mulf8s::@3/mulf8s::@6->mulf8s::@1] //SEG335 [165] phi (word) mulf8s::m#5 = (word) mulf8s::m#1 [phi:mulf8s::@3/mulf8s::@6->mulf8s::@1#0] -- register_copy @@ -14362,11 +14362,11 @@ mulf8s: { //SEG338 mulf8s::@4 //SEG339 [167] (byte~) mulf8s::$12 ← > (word) mulf8s::m#5 [ mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ) -- vbuaa=_hi_vwuz1 lda m+1 - //SEG340 [168] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) -- vbuaa=vbuaa_minus_vbuyy + //SEG340 [168] (byte~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] ) -- vbuaa=vbuaa_minus_vbuyy sty $ff sec sbc $ff - //SEG341 [169] (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 [ mulf8s::m#2 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#2 ] ) -- vwuz1=vwuz1_sethi_vbuaa + //SEG341 [169] (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte~) mulf8s::$17 [ mulf8s::m#2 ] ( main:2::mul8s_compare:15::mulf8s:27 [ mul8s_compare::a#7 mul8s_compare::b#10 mul8s_compare::ms#0 line_cursor#1 mulf8s::m#2 ] ) -- vwuz1=vwuz1_sethi_vbuaa sta m+1 //SEG342 [170] phi from mulf8s::@1 mulf8s::@4 to mulf8s::@2 [phi:mulf8s::@1/mulf8s::@4->mulf8s::@2] //SEG343 [170] phi (word) mulf8s::m#4 = (word) mulf8s::m#5 [phi:mulf8s::@1/mulf8s::@4->mulf8s::@2#0] -- register_copy diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.sym b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.sym index c07e6371e..ba1574ba3 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.sym @@ -34,8 +34,8 @@ (label) main::@return (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) (byte~) mul8s::$12 reg byte a 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$16 reg byte a 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) mul8s::$17 reg byte a 4.0 +(byte~) mul8s::$16 reg byte a 4.0 +(byte~) mul8s::$17 reg byte a 4.0 (byte~) mul8s::$6 reg byte a 4.0 (label) mul8s::@1 (label) mul8s::@2 @@ -211,8 +211,8 @@ (const byte[512]) mula_sqr2_lo#0 mula_sqr2_lo = { fill( 512, 0) } (signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) (byte~) mulf8s::$12 reg byte a 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 reg byte a 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 reg byte a 4.0 +(byte~) mulf8s::$16 reg byte a 4.0 +(byte~) mulf8s::$17 reg byte a 4.0 (byte~) mulf8s::$6 reg byte a 4.0 (label) mulf8s::@1 (label) mulf8s::@2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.log b/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.log index 28aa9787a..9c67481f0 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.log @@ -25,9 +25,9 @@ proc (void()) main() (byte[]) main::bs ← { (byte) 'c', (byte) 'm' } (byte) main::b ← (byte/signed byte/word/signed word/dword/signed dword) 4 (word) main::w ← { (byte) main::b, (byte/signed byte/word/signed word/dword/signed dword) 0 } - (word~) main::$0 ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1 } + (word) main::w - (word~) main::$1 ← (word~) main::$0 + { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 } - (word) main::w2 ← (word~) main::$1 + (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1 } + (word) main::w + (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 + { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 } + (word) main::w2 ← (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1 (byte*) main::sc ← (word) main::w2 *((byte*) main::sc) ← *((byte[]) main::bs + (byte/signed byte/word/signed word/dword/signed dword) 1) (byte*) main::pos ← (word/signed word/dword/signed dword) 1281 @@ -47,8 +47,8 @@ endproc // main() SYMBOLS (void()) main() -(word~) main::$0 -(word~) main::$1 +(byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 +(byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1 (boolean~) main::$2 (boolean~) main::$3 (label) main::@1 @@ -72,9 +72,9 @@ main: scope:[main] from (byte[]) main::bs ← { (byte) 'c', (byte) 'm' } (byte) main::b ← (byte/signed byte/word/signed word/dword/signed dword) 4 (word) main::w ← { (byte) main::b, (byte/signed byte/word/signed word/dword/signed dword) 0 } - (word~) main::$0 ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1 } + (word) main::w - (word~) main::$1 ← (word~) main::$0 + { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 } - (word) main::w2 ← (word~) main::$1 + (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1 } + (word) main::w + (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 + { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 } + (word) main::w2 ← (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1 (byte*) main::sc ← ((byte*)) (word) main::w2 *((byte*) main::sc) ← *((byte[]) main::bs + (byte/signed byte/word/signed word/dword/signed dword) 1) (byte*) main::pos ← ((byte*)) (word/signed word/dword/signed dword) 1281 @@ -114,9 +114,9 @@ main: scope:[main] from @1 (byte[]) main::bs#0 ← { (byte) 'c', (byte) 'm' } (byte) main::b#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4 (word) main::w#0 ← { (byte) main::b#0, (byte/signed byte/word/signed word/dword/signed dword) 0 } - (word~) main::$0 ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1 } + (word) main::w#0 - (word~) main::$1 ← (word~) main::$0 + { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 } - (word) main::w2#0 ← (word~) main::$1 + (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1 } + (word) main::w#0 + (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 + { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 } + (word) main::w2#0 ← (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1 (byte*) main::sc#0 ← ((byte*)) (word) main::w2#0 *((byte*) main::sc#0) ← *((byte[]) main::bs#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) (byte*) main::pos#0 ← ((byte*)) (word/signed word/dword/signed dword) 1281 @@ -149,8 +149,8 @@ SYMBOL TABLE SSA (label) @begin (label) @end (void()) main() -(word~) main::$0 -(word~) main::$1 +(byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 +(byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1 (boolean~) main::$2 (boolean~) main::$3 (label) main::@1 @@ -178,7 +178,7 @@ Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (boolean~) main::$3 ← *((byte*) main::pos#0) != (byte) 'm' from (boolean~) main::$2 ← *((byte*) main::pos#0) == (byte) 'm' Succesful SSA optimization Pass2UnaryNotSimplification -Alias (word) main::w2#0 = (word~) main::$1 +Alias (word) main::w2#0 = (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1 Alias (byte*) main::bgcol#0 = (byte*) main::bgcol#1 (byte*) main::bgcol#2 Succesful SSA optimization Pass2AliasElimination Simple Condition (boolean~) main::$3 if(*((byte*) main::pos#0)!=(byte) 'm') goto main::@1 @@ -194,15 +194,19 @@ Fixing inline constructor with main::$4 ← main::b#0 w= 0 Fixing inline constructor with main::$5 ← 1 w= 1 Fixing inline constructor with main::$6 ← 0 w= 0 Succesful SSA optimization Pass2FixInlineConstructors +Inferred type updated to word/signed word/dword/signed dword in (word~) main::$4 ← (const byte) main::b#0 w= (byte/signed byte/word/signed word/dword/signed dword) 0 +Inferred type updated to word/signed word/dword/signed dword in (word~) main::$5 ← (byte/signed byte/word/signed word/dword/signed dword) 1 w= (byte/signed byte/word/signed word/dword/signed dword) 1 +Inferred type updated to word/signed dword/dword in (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 ← (word/signed word/dword/signed dword~) main::$5 + (word) main::w#0 +Inferred type updated to byte/signed byte/word/signed word/dword/signed dword in (word~) main::$6 ← (byte/signed byte/word/signed word/dword/signed dword) 0 w= (byte/signed byte/word/signed word/dword/signed dword) 0 Eliminating Noop Cast (byte*) main::sc#0 ← ((byte*)) (word) main::w2#0 Succesful SSA optimization Pass2NopCastElimination -Alias (word) main::w#0 = (word~) main::$4 +Alias (word) main::w#0 = (word/signed word/dword/signed dword~) main::$4 Succesful SSA optimization Pass2AliasElimination Constant (const word) main::w#0 = main::b#0*256+0 -Constant (const word) main::$5 = 1*256+1 -Constant (const word) main::$6 = 0*256+0 +Constant (const word/signed word/dword/signed dword) main::$5 = 1*256+1 +Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$6 = 0*256+0 Succesful SSA optimization Pass2ConstantIdentification -Constant (const word) main::$0 = main::$5+main::w#0 +Constant (const word/signed dword/dword) main::$0 = main::$5+main::w#0 Succesful SSA optimization Pass2ConstantIdentification Constant (const word) main::w2#0 = main::$0+main::$6 Succesful SSA optimization Pass2ConstantIdentification diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unused-method.log b/src/test/java/dk/camelot64/kickc/test/ref/unused-method.log index 6ca2477f3..f8cd83c17 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unused-method.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/unused-method.log @@ -16,8 +16,8 @@ main::@return: return endproc // main() proc (byte()) sum((byte) sum::b1 , (byte) sum::b2) - (byte/word~) sum::$0 ← (byte) sum::b1 + (byte) sum::b2 - (byte) sum::return ← (byte/word~) sum::$0 + (byte~) sum::$0 ← (byte) sum::b1 + (byte) sum::b2 + (byte) sum::return ← (byte~) sum::$0 goto sum::@return sum::@return: (byte) sum::return ← (byte) sum::return @@ -30,7 +30,7 @@ SYMBOLS (label) main::@return (byte*) main::screen (byte()) sum((byte) sum::b1 , (byte) sum::b2) -(byte/word~) sum::$0 +(byte~) sum::$0 (label) sum::@return (byte) sum::b1 (byte) sum::b2 @@ -50,8 +50,8 @@ main::@return: scope:[main] from main @1: scope:[] from @begin to:@2 sum: scope:[sum] from - (byte/word~) sum::$0 ← (byte) sum::b1 + (byte) sum::b2 - (byte) sum::return ← (byte/word~) sum::$0 + (byte~) sum::$0 ← (byte) sum::b1 + (byte) sum::b2 + (byte) sum::return ← (byte~) sum::$0 to:sum::@return sum::@return: scope:[sum] from sum sum::@1 (byte) sum::return ← (byte) sum::return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.log b/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.log index 5c6eacb5f..476daa8ae 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.log @@ -50,14 +50,14 @@ proc (void()) main() (byte) main::col ← (byte/signed byte/word/signed word/dword/signed dword) 2 (byte*) main::COLS ← (word/dword/signed dword) 55296 (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte/signed byte/word/signed word/dword/signed dword) 3 - (byte/word~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 + (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte/signed word/word/dword/signed dword/signed byte~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 + (byte/signed byte/word/signed word/dword/signed dword) 3 (byte~) main::$2 ← call s - (byte/word~) main::$3 ← (byte/word~) main::$1 + (byte~) main::$2 - (byte) main::e ← (byte/word~) main::$3 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte/signed word/word/dword/signed dword/signed byte~) main::$1 + (byte~) main::$2 + (byte) main::e ← (byte/signed word/word/dword/signed dword~) main::$3 (word/signed word/dword/signed dword~) main::$4 ← (word/signed word/dword/signed dword) 2000 + (word/signed word/dword/signed dword) 2000 - (word~) main::$5 ← (word/signed word/dword/signed dword~) main::$4 + (word) d - (word~) main::$6 ← (word~) main::$5 + (byte) b - (word) main::f ← (word~) main::$6 + (word/signed dword/dword~) main::$5 ← (word/signed word/dword/signed dword~) main::$4 + (word) d + (word/signed dword/dword~) main::$6 ← (word/signed dword/dword~) main::$5 + (byte) b + (word) main::f ← (word/signed dword/dword~) main::$6 (byte) b ← ++ (byte) b (byte[]) main::g ← { (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 6 } (byte[]) main::h ← (string) "goodbye sky " @@ -94,12 +94,12 @@ SYMBOLS (word) d (void()) main() (byte/signed byte/word/signed word/dword/signed dword~) main::$0 -(byte/word~) main::$1 +(byte/signed word/word/dword/signed dword/signed byte~) main::$1 (byte~) main::$2 -(byte/word~) main::$3 +(byte/signed word/word/dword/signed dword~) main::$3 (word/signed word/dword/signed dword~) main::$4 -(word~) main::$5 -(word~) main::$6 +(word/signed dword/dword~) main::$5 +(word/signed dword/dword~) main::$6 (signed byte/signed word/signed dword~) main::$7 (boolean~) main::$8 (label) main::@1 @@ -136,14 +136,14 @@ main: scope:[main] from (byte) main::col ← (byte/signed byte/word/signed word/dword/signed dword) 2 (byte*) main::COLS ← ((byte*)) (word/dword/signed dword) 55296 (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte/signed byte/word/signed word/dword/signed dword) 3 - (byte/word~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 + (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte/signed word/word/dword/signed dword/signed byte~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 + (byte/signed byte/word/signed word/dword/signed dword) 3 (byte~) main::$2 ← call s - (byte/word~) main::$3 ← (byte/word~) main::$1 + (byte~) main::$2 - (byte) main::e ← (byte/word~) main::$3 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte/signed word/word/dword/signed dword/signed byte~) main::$1 + (byte~) main::$2 + (byte) main::e ← (byte/signed word/word/dword/signed dword~) main::$3 (word/signed word/dword/signed dword~) main::$4 ← (word/signed word/dword/signed dword) 2000 + (word/signed word/dword/signed dword) 2000 - (word~) main::$5 ← (word/signed word/dword/signed dword~) main::$4 + (word) d - (word~) main::$6 ← (word~) main::$5 + (byte) b - (word) main::f ← (word~) main::$6 + (word/signed dword/dword~) main::$5 ← (word/signed word/dword/signed dword~) main::$4 + (word) d + (word/signed dword/dword~) main::$6 ← (word/signed dword/dword~) main::$5 + (byte) b + (word) main::f ← (word/signed dword/dword~) main::$6 (byte) b ← ++ (byte) b (byte[]) main::g ← { (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 6 } (byte[]) main::h ← (string) "goodbye sky " @@ -185,17 +185,17 @@ Eliminating unused variable (byte[]) msg and assignment [4] (byte[]) msg ← (st Eliminating unused variable (byte[]) arr and assignment [5] (byte[]) arr ← { (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 9 } Eliminating unused variable (byte) c and assignment [6] (byte) c ← (byte/signed byte/word/signed word/dword/signed dword) 1 Eliminating unused variable (byte) c2 and assignment [7] (byte) c2 ← (byte/signed byte/word/signed word/dword/signed dword) 1 -Eliminating unused variable (byte) main::e and assignment [15] (byte) main::e ← (byte/word~) main::$3 -Eliminating unused variable (word) main::f and assignment [19] (word) main::f ← (word~) main::$6 +Eliminating unused variable (byte) main::e and assignment [15] (byte) main::e ← (byte/signed word/word/dword/signed dword~) main::$3 +Eliminating unused variable (word) main::f and assignment [19] (word) main::f ← (word/signed dword/dword~) main::$6 Eliminating unused variable (byte[]) main::g and assignment [21] (byte[]) main::g ← { (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 6 } Eliminating unused variable (byte[]) main::h and assignment [22] (byte[]) main::h ← (string) "goodbye sky " Eliminating unused variable (signed byte) main::x and assignment [25] (signed byte) main::x ← (signed byte/signed word/signed dword~) main::$7 -Eliminating unused variable (byte/word~) main::$3 and assignment [9] (byte/word~) main::$3 ← (byte/word~) main::$1 + (byte~) main::$2 -Eliminating unused variable (word~) main::$6 and assignment [12] (word~) main::$6 ← (word~) main::$5 + (byte) b +Eliminating unused variable (byte/signed word/word/dword/signed dword~) main::$3 and assignment [9] (byte/signed word/word/dword/signed dword~) main::$3 ← (byte/signed word/word/dword/signed dword/signed byte~) main::$1 + (byte~) main::$2 +Eliminating unused variable (word/signed dword/dword~) main::$6 and assignment [12] (word/signed dword/dword~) main::$6 ← (word/signed dword/dword~) main::$5 + (byte) b Eliminating unused variable (signed byte/signed word/signed dword~) main::$7 and assignment [15] (signed byte/signed word/signed dword~) main::$7 ← - (byte/signed byte/word/signed word/dword/signed dword) 13 -Eliminating unused variable (byte/word~) main::$1 and assignment [7] (byte/word~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 + (byte/signed byte/word/signed word/dword/signed dword) 3 +Eliminating unused variable (byte/signed word/word/dword/signed dword/signed byte~) main::$1 and assignment [7] (byte/signed word/word/dword/signed dword/signed byte~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 + (byte/signed byte/word/signed word/dword/signed dword) 3 Eliminating unused variable - keeping the call (byte~) main::$2 -Eliminating unused variable (word~) main::$5 and assignment [10] (word~) main::$5 ← (word/signed word/dword/signed dword~) main::$4 + (word) d +Eliminating unused variable (word/signed dword/dword~) main::$5 and assignment [10] (word/signed dword/dword~) main::$5 ← (word/signed word/dword/signed dword~) main::$4 + (word) d Eliminating unused variable (word) d and assignment [3] (word) d ← (word/signed word/dword/signed dword) 1000 Eliminating unused variable (byte/signed byte/word/signed word/dword/signed dword~) main::$0 and assignment [6] (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte/signed byte/word/signed word/dword/signed dword) 3 Eliminating unused variable (word/signed word/dword/signed dword~) main::$4 and assignment [8] (word/signed word/dword/signed dword~) main::$4 ← (word/signed word/dword/signed dword) 2000 + (word/signed word/dword/signed dword) 2000 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/var-register.log b/src/test/java/dk/camelot64/kickc/test/ref/var-register.log index 2e4b94dae..dc47744ec 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/var-register.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/var-register.log @@ -25,8 +25,8 @@ main::@1: main::@2: (byte) main::a ← (byte/signed byte/word/signed word/dword/signed dword) 0 main::@3: - (byte/word~) main::$0 ← (byte) main::a + (byte) main::x - (byte) main::val1 ← (byte/word~) main::$0 + (byte~) main::$0 ← (byte) main::a + (byte) main::x + (byte) main::val1 ← (byte~) main::$0 (void~) main::$1 ← call print (byte) main::y (byte) main::val1 (byte) main::a ← ++ (byte) main::a (boolean~) main::$2 ← (byte) main::a != (byte/signed byte/word/signed word/dword/signed dword) 101 @@ -50,7 +50,7 @@ endproc // print() SYMBOLS (void()) main() -(byte/word~) main::$0 +(byte~) main::$0 (void~) main::$1 (boolean~) main::$2 (boolean~) main::$3 @@ -83,8 +83,8 @@ main::@2: scope:[main] from main::@1 main::@4 (byte) main::a ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 - (byte/word~) main::$0 ← (byte) main::a + (byte) main::x - (byte) main::val1 ← (byte/word~) main::$0 + (byte~) main::$0 ← (byte) main::a + (byte) main::x + (byte) main::val1 ← (byte~) main::$0 (void~) main::$1 ← call print (byte) main::y (byte) main::val1 (byte) main::a ← ++ (byte) main::a (boolean~) main::$2 ← (byte) main::a != (byte/signed byte/word/signed word/dword/signed dword) 101 @@ -147,8 +147,8 @@ main::@3: scope:[main] from main::@2 main::@7 (byte) main::y#2 ← phi( main::@2/(byte) main::y#4 main::@7/(byte) main::y#5 ) (byte) main::x#2 ← phi( main::@2/(byte) main::x#4 main::@7/(byte) main::x#5 ) (byte) main::a#2 ← phi( main::@2/(byte) main::a#0 main::@7/(byte) main::a#1 ) - (byte/word~) main::$0 ← (byte) main::a#2 + (byte) main::x#2 - (byte) main::val1#0 ← (byte/word~) main::$0 + (byte~) main::$0 ← (byte) main::a#2 + (byte) main::x#2 + (byte) main::val1#0 ← (byte~) main::$0 (byte) print::idx#0 ← (byte) main::y#2 (byte) print::val#0 ← (byte) main::val1#0 call print param-assignment @@ -199,7 +199,7 @@ SYMBOL TABLE SSA (label) @begin (label) @end (void()) main() -(byte/word~) main::$0 +(byte~) main::$0 (boolean~) main::$2 (boolean~) main::$3 (boolean~) main::$4 @@ -251,7 +251,7 @@ Not aliassing across scopes: print::idx#0 main::y#2 Not aliassing across scopes: print::val#0 main::val1#0 Not aliassing across scopes: print::val#1 print::val#0 Not aliassing across scopes: print::idx#1 print::idx#0 -Alias (byte) main::val1#0 = (byte/word~) main::$0 +Alias (byte) main::val1#0 = (byte~) main::$0 Alias (byte) main::a#2 = (byte) main::a#3 Alias (byte) main::x#2 = (byte) main::x#5 (byte) main::x#6 (byte) main::x#3 Alias (byte) main::y#2 = (byte) main::y#5 (byte) main::y#3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/voronoi.cfg b/src/test/java/dk/camelot64/kickc/test/ref/voronoi.cfg index db0f68105..6feb56054 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/voronoi.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/voronoi.cfg @@ -26,51 +26,51 @@ main::@return: scope:[main] from main::@5 [11] return [ ] ( main:2 [ ] ) to:@return animate: scope:[animate] from main::@4 - [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) - [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) + [12] (byte/signed word/word/dword/signed dword~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) + [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$0 [ ] ( main:2::animate:9 [ ] ) [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) to:animate::@7 animate::@7: scope:[animate] from animate [15] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) to:animate::@1 animate::@1: scope:[animate] from animate animate::@7 - [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) - [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) + [16] (byte/signed word/word/dword/signed dword~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) + [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$3 [ ] ( main:2::animate:9 [ ] ) [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) to:animate::@8 animate::@8: scope:[animate] from animate::@1 [19] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) to:animate::@2 animate::@2: scope:[animate] from animate::@1 animate::@8 - [20] (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) - [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) + [20] (byte/signed word/word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) + [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed word/word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) to:animate::@9 animate::@9: scope:[animate] from animate::@2 [23] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40 [ ] ( main:2::animate:9 [ ] ) to:animate::@3 animate::@3: scope:[animate] from animate::@2 animate::@9 - [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) - [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) + [24] (byte/signed word/word/dword/signed dword~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) + [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed word/word/dword/signed dword~) animate::$9 [ ] ( main:2::animate:9 [ ] ) [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) to:animate::@10 animate::@10: scope:[animate] from animate::@3 [27] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) to:animate::@4 animate::@4: scope:[animate] from animate::@10 animate::@3 - [28] (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) - [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) + [28] (byte/signed word/word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) + [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) to:animate::@11 animate::@11: scope:[animate] from animate::@4 [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] ) - [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) - [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15 [ ] ( main:2::animate:9 [ ] ) + [32] (byte/signed word/word/dword/signed dword~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) + [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$15 [ ] ( main:2::animate:9 [ ] ) [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) to:animate::@12 animate::@12: scope:[animate] from animate::@11 - [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) - [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) + [35] (byte/signed word/word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) + [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 [37] return [ ] ( main:2::animate:9 [ ] ) @@ -132,8 +132,8 @@ findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 [64] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] ) to:findcol::@14 findcol::@14: scope:[findcol] from findcol::@5 - [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) - [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) + [65] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) + [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) to:findcol::@7 findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 [67] (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] ) @@ -155,8 +155,8 @@ findcol::@21: scope:[findcol] from findcol::@7 [74] (byte~) findcol::mindiff#15 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#10 findcol::mindiff#15 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#10 findcol::mindiff#15 ] ) to:findcol::@8 findcol::@6: scope:[findcol] from findcol::@5 - [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) - [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) + [75] (byte~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) + [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) to:findcol::@7 findcol::@4: scope:[findcol] from findcol::@2 [77] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/voronoi.log b/src/test/java/dk/camelot64/kickc/test/ref/voronoi.log index 48ac5dc85..0af4519b0 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/voronoi.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/voronoi.log @@ -118,47 +118,47 @@ main::@return: return endproc // main() proc (void()) animate() - (byte/word~) animate::$0 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0 + (byte/signed word/word/dword/signed dword~) animate::$0 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$0 (boolean~) animate::$1 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 40 (boolean~) animate::$2 ← ! (boolean~) animate::$1 if((boolean~) animate::$2) goto animate::@1 *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 animate::@1: - (byte/word~) animate::$3 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3 + (byte/signed word/word/dword/signed dword~) animate::$3 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$3 (boolean~) animate::$4 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 25 (boolean~) animate::$5 ← ! (boolean~) animate::$4 if((boolean~) animate::$5) goto animate::@2 *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 animate::@2: - (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 + (byte/signed word/word/dword/signed dword~) animate::$6 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed word/word/dword/signed dword~) animate::$6 (boolean~) animate::$7 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) == (byte/word/signed word/dword/signed dword) 255 (boolean~) animate::$8 ← ! (boolean~) animate::$7 if((boolean~) animate::$8) goto animate::@3 *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40 animate::@3: - (byte/word~) animate::$9 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9 + (byte/signed word/word/dword/signed dword~) animate::$9 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed word/word/dword/signed dword~) animate::$9 (boolean~) animate::$10 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) == (byte/signed byte/word/signed word/dword/signed dword) 25 (boolean~) animate::$11 ← ! (boolean~) animate::$10 if((boolean~) animate::$11) goto animate::@4 *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 animate::@4: - (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 + (byte/signed word/word/dword/signed dword~) animate::$12 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$12 (boolean~) animate::$13 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) == (byte/word/signed word/dword/signed dword) 255 (boolean~) animate::$14 ← ! (boolean~) animate::$13 if((boolean~) animate::$14) goto animate::@5 *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 - (byte/word~) animate::$15 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 - *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15 + (byte/signed word/word/dword/signed dword~) animate::$15 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 + *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$15 (boolean~) animate::$16 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) >= (byte/signed byte/word/signed word/dword/signed dword) 40 (boolean~) animate::$17 ← ! (boolean~) animate::$16 if((boolean~) animate::$17) goto animate::@6 - (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 - *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 + (byte/signed word/word/dword/signed dword~) animate::$18 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 + *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$18 animate::@6: animate::@5: animate::@return: @@ -215,24 +215,24 @@ findcol::@2: (boolean~) findcol::$4 ← (byte) findcol::x < (byte) findcol::xp (boolean~) findcol::$5 ← ! (boolean~) findcol::$4 if((boolean~) findcol::$5) goto findcol::@4 - (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 ← (byte) findcol::xp - (byte) findcol::x - (byte) findcol::diff ← (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 + (byte~) findcol::$6 ← (byte) findcol::xp - (byte) findcol::x + (byte) findcol::diff ← (byte~) findcol::$6 goto findcol::@5 findcol::@4: - (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 ← (byte) findcol::x - (byte) findcol::xp - (byte) findcol::diff ← (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 + (byte~) findcol::$7 ← (byte) findcol::x - (byte) findcol::xp + (byte) findcol::diff ← (byte~) findcol::$7 findcol::@5: (boolean~) findcol::$8 ← (byte) findcol::y < (byte) findcol::yp (boolean~) findcol::$9 ← ! (boolean~) findcol::$8 if((boolean~) findcol::$9) goto findcol::@6 - (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp - (byte) findcol::y - (byte/word~) findcol::$11 ← (byte) findcol::diff + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 - (byte) findcol::diff ← (byte/word~) findcol::$11 + (byte~) findcol::$10 ← (byte) findcol::yp - (byte) findcol::y + (byte~) findcol::$11 ← (byte) findcol::diff + (byte~) findcol::$10 + (byte) findcol::diff ← (byte~) findcol::$11 goto findcol::@7 findcol::@6: - (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y - (byte) findcol::yp - (byte/word~) findcol::$13 ← (byte) findcol::diff + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 - (byte) findcol::diff ← (byte/word~) findcol::$13 + (byte~) findcol::$12 ← (byte) findcol::y - (byte) findcol::yp + (byte~) findcol::$13 ← (byte) findcol::diff + (byte~) findcol::$12 + (byte) findcol::diff ← (byte~) findcol::$13 findcol::@7: (boolean~) findcol::$14 ← (byte) findcol::diff < (byte) findcol::mindiff (boolean~) findcol::$15 ← ! (boolean~) findcol::$14 @@ -259,25 +259,25 @@ SYMBOLS (byte[]) XPOS (byte[]) YPOS (void()) animate() -(byte/word~) animate::$0 +(byte/signed word/word/dword/signed dword~) animate::$0 (boolean~) animate::$1 (boolean~) animate::$10 (boolean~) animate::$11 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$12 +(byte/signed word/word/dword/signed dword~) animate::$12 (boolean~) animate::$13 (boolean~) animate::$14 -(byte/word~) animate::$15 +(byte/signed word/word/dword/signed dword~) animate::$15 (boolean~) animate::$16 (boolean~) animate::$17 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$18 +(byte/signed word/word/dword/signed dword~) animate::$18 (boolean~) animate::$2 -(byte/word~) animate::$3 +(byte/signed word/word/dword/signed dword~) animate::$3 (boolean~) animate::$4 (boolean~) animate::$5 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$6 +(byte/signed word/word/dword/signed dword~) animate::$6 (boolean~) animate::$7 (boolean~) animate::$8 -(byte/word~) animate::$9 +(byte/signed word/word/dword/signed dword~) animate::$9 (label) animate::@1 (label) animate::@2 (label) animate::@3 @@ -288,10 +288,10 @@ SYMBOLS (byte()) findcol((byte) findcol::x , (byte) findcol::y) (boolean~) findcol::$0 (boolean~) findcol::$1 -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 -(byte/word~) findcol::$11 -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 -(byte/word~) findcol::$13 +(byte~) findcol::$10 +(byte~) findcol::$11 +(byte~) findcol::$12 +(byte~) findcol::$13 (boolean~) findcol::$14 (boolean~) findcol::$15 (boolean~) findcol::$16 @@ -299,8 +299,8 @@ SYMBOLS (boolean~) findcol::$3 (boolean~) findcol::$4 (boolean~) findcol::$5 -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 +(byte~) findcol::$6 +(byte~) findcol::$7 (boolean~) findcol::$8 (boolean~) findcol::$9 (label) findcol::@1 @@ -375,15 +375,15 @@ main::@return: scope:[main] from main::@2 @1: scope:[] from @begin to:@2 animate: scope:[animate] from - (byte/word~) animate::$0 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0 + (byte/signed word/word/dword/signed dword~) animate::$0 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$0 (boolean~) animate::$1 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 40 (boolean~) animate::$2 ← ! (boolean~) animate::$1 if((boolean~) animate::$2) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte/word~) animate::$3 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3 + (byte/signed word/word/dword/signed dword~) animate::$3 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$3 (boolean~) animate::$4 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 25 (boolean~) animate::$5 ← ! (boolean~) animate::$4 if((boolean~) animate::$5) goto animate::@2 @@ -392,8 +392,8 @@ animate::@7: scope:[animate] from animate *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 + (byte/signed word/word/dword/signed dword~) animate::$6 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed word/word/dword/signed dword~) animate::$6 (boolean~) animate::$7 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) == (byte/word/signed word/dword/signed dword) 255 (boolean~) animate::$8 ← ! (boolean~) animate::$7 if((boolean~) animate::$8) goto animate::@3 @@ -402,8 +402,8 @@ animate::@8: scope:[animate] from animate::@1 *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte/word~) animate::$9 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9 + (byte/signed word/word/dword/signed dword~) animate::$9 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed word/word/dword/signed dword~) animate::$9 (boolean~) animate::$10 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) == (byte/signed byte/word/signed word/dword/signed dword) 25 (boolean~) animate::$11 ← ! (boolean~) animate::$10 if((boolean~) animate::$11) goto animate::@4 @@ -412,8 +412,8 @@ animate::@9: scope:[animate] from animate::@2 *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 + (byte/signed word/word/dword/signed dword~) animate::$12 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$12 (boolean~) animate::$13 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) == (byte/word/signed word/dword/signed dword) 255 (boolean~) animate::$14 ← ! (boolean~) animate::$13 if((boolean~) animate::$14) goto animate::@5 @@ -425,8 +425,8 @@ animate::@5: scope:[animate] from animate::@4 animate::@6 to:animate::@return animate::@11: scope:[animate] from animate::@4 *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 - (byte/word~) animate::$15 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 - *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15 + (byte/signed word/word/dword/signed dword~) animate::$15 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 + *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$15 (boolean~) animate::$16 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) >= (byte/signed byte/word/signed word/dword/signed dword) 40 (boolean~) animate::$17 ← ! (boolean~) animate::$16 if((boolean~) animate::$17) goto animate::@6 @@ -434,8 +434,8 @@ animate::@11: scope:[animate] from animate::@4 animate::@6: scope:[animate] from animate::@11 animate::@12 to:animate::@5 animate::@12: scope:[animate] from animate::@11 - (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 - *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 + (byte/signed word/word/dword/signed dword~) animate::$18 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 + *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$18 to:animate::@6 animate::@return: scope:[animate] from animate::@5 return @@ -522,12 +522,12 @@ findcol::@return: scope:[findcol] from findcol::@10 findcol::@17 findcol::@18 findcol::@11: scope:[findcol] from to:findcol::@3 findcol::@4: scope:[findcol] from findcol::@13 findcol::@2 - (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 ← (byte) findcol::x - (byte) findcol::xp - (byte) findcol::diff ← (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 + (byte~) findcol::$7 ← (byte) findcol::x - (byte) findcol::xp + (byte) findcol::diff ← (byte~) findcol::$7 to:findcol::@5 findcol::@12: scope:[findcol] from findcol::@2 - (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 ← (byte) findcol::xp - (byte) findcol::x - (byte) findcol::diff ← (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 + (byte~) findcol::$6 ← (byte) findcol::xp - (byte) findcol::x + (byte) findcol::diff ← (byte~) findcol::$6 to:findcol::@5 findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 (boolean~) findcol::$8 ← (byte) findcol::y < (byte) findcol::yp @@ -537,14 +537,14 @@ findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 findcol::@13: scope:[findcol] from to:findcol::@4 findcol::@6: scope:[findcol] from findcol::@15 findcol::@5 - (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y - (byte) findcol::yp - (byte/word~) findcol::$13 ← (byte) findcol::diff + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 - (byte) findcol::diff ← (byte/word~) findcol::$13 + (byte~) findcol::$12 ← (byte) findcol::y - (byte) findcol::yp + (byte~) findcol::$13 ← (byte) findcol::diff + (byte~) findcol::$12 + (byte) findcol::diff ← (byte~) findcol::$13 to:findcol::@7 findcol::@14: scope:[findcol] from findcol::@5 - (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp - (byte) findcol::y - (byte/word~) findcol::$11 ← (byte) findcol::diff + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 - (byte) findcol::diff ← (byte/word~) findcol::$11 + (byte~) findcol::$10 ← (byte) findcol::yp - (byte) findcol::y + (byte~) findcol::$11 ← (byte) findcol::diff + (byte~) findcol::$10 + (byte) findcol::diff ← (byte~) findcol::$11 to:findcol::@7 findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 (boolean~) findcol::$14 ← (byte) findcol::diff < (byte) findcol::mindiff @@ -644,15 +644,15 @@ main::@return: scope:[main] from main::@5 return to:@return animate: scope:[animate] from main::@4 - (byte/word~) animate::$0 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0 + (byte/signed word/word/dword/signed dword~) animate::$0 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$0 (boolean~) animate::$1 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 40 (boolean~) animate::$2 ← ! (boolean~) animate::$1 if((boolean~) animate::$2) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte/word~) animate::$3 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3 + (byte/signed word/word/dword/signed dword~) animate::$3 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$3 (boolean~) animate::$4 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 25 (boolean~) animate::$5 ← ! (boolean~) animate::$4 if((boolean~) animate::$5) goto animate::@2 @@ -661,8 +661,8 @@ animate::@7: scope:[animate] from animate *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 + (byte/signed word/word/dword/signed dword~) animate::$6 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed word/word/dword/signed dword~) animate::$6 (boolean~) animate::$7 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) == (byte/word/signed word/dword/signed dword) 255 (boolean~) animate::$8 ← ! (boolean~) animate::$7 if((boolean~) animate::$8) goto animate::@3 @@ -671,8 +671,8 @@ animate::@8: scope:[animate] from animate::@1 *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte/word~) animate::$9 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9 + (byte/signed word/word/dword/signed dword~) animate::$9 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed word/word/dword/signed dword~) animate::$9 (boolean~) animate::$10 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) == (byte/signed byte/word/signed word/dword/signed dword) 25 (boolean~) animate::$11 ← ! (boolean~) animate::$10 if((boolean~) animate::$11) goto animate::@4 @@ -681,8 +681,8 @@ animate::@9: scope:[animate] from animate::@2 *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 + (byte/signed word/word/dword/signed dword~) animate::$12 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$12 (boolean~) animate::$13 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) == (byte/word/signed word/dword/signed dword) 255 (boolean~) animate::$14 ← ! (boolean~) animate::$13 if((boolean~) animate::$14) goto animate::@5 @@ -694,8 +694,8 @@ animate::@5: scope:[animate] from animate::@4 to:animate::@return animate::@11: scope:[animate] from animate::@4 *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 - (byte/word~) animate::$15 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 - *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15 + (byte/signed word/word/dword/signed dword~) animate::$15 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$15 (boolean~) animate::$16 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) >= (byte/signed byte/word/signed word/dword/signed dword) 40 (boolean~) animate::$17 ← ! (boolean~) animate::$16 if((boolean~) animate::$17) goto animate::@6 @@ -703,8 +703,8 @@ animate::@11: scope:[animate] from animate::@4 animate::@6: scope:[animate] from animate::@11 to:animate::@return animate::@12: scope:[animate] from animate::@11 - (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 - *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 + (byte/signed word/word/dword/signed dword~) animate::$18 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$18 to:animate::@return animate::@return: scope:[animate] from animate::@12 animate::@5 animate::@6 return @@ -849,8 +849,8 @@ findcol::@4: scope:[findcol] from findcol::@2 (byte) findcol::y#7 ← phi( findcol::@2/(byte) findcol::y#10 ) (byte) findcol::xp#2 ← phi( findcol::@2/(byte) findcol::xp#1 ) (byte) findcol::x#3 ← phi( findcol::@2/(byte) findcol::x#2 ) - (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 ← (byte) findcol::x#3 - (byte) findcol::xp#2 - (byte) findcol::diff#0 ← (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 + (byte~) findcol::$7 ← (byte) findcol::x#3 - (byte) findcol::xp#2 + (byte) findcol::diff#0 ← (byte~) findcol::$7 to:findcol::@5 findcol::@12: scope:[findcol] from findcol::@2 (byte) findcol::mincol#8 ← phi( findcol::@2/(byte) findcol::mincol#10 ) @@ -861,8 +861,8 @@ findcol::@12: scope:[findcol] from findcol::@2 (byte) findcol::y#6 ← phi( findcol::@2/(byte) findcol::y#10 ) (byte) findcol::x#4 ← phi( findcol::@2/(byte) findcol::x#2 ) (byte) findcol::xp#3 ← phi( findcol::@2/(byte) findcol::xp#1 ) - (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 ← (byte) findcol::xp#3 - (byte) findcol::x#4 - (byte) findcol::diff#1 ← (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 + (byte~) findcol::$6 ← (byte) findcol::xp#3 - (byte) findcol::x#4 + (byte) findcol::diff#1 ← (byte~) findcol::$6 to:findcol::@5 findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 (byte) findcol::mincol#7 ← phi( findcol::@12/(byte) findcol::mincol#8 findcol::@4/(byte) findcol::mincol#9 ) @@ -886,9 +886,9 @@ findcol::@6: scope:[findcol] from findcol::@5 (byte) findcol::diff#4 ← phi( findcol::@5/(byte) findcol::diff#8 ) (byte) findcol::yp#3 ← phi( findcol::@5/(byte) findcol::yp#2 ) (byte) findcol::y#3 ← phi( findcol::@5/(byte) findcol::y#2 ) - (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#3 - (byte) findcol::yp#3 - (byte/word~) findcol::$13 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 - (byte) findcol::diff#2 ← (byte/word~) findcol::$13 + (byte~) findcol::$12 ← (byte) findcol::y#3 - (byte) findcol::yp#3 + (byte~) findcol::$13 ← (byte) findcol::diff#4 + (byte~) findcol::$12 + (byte) findcol::diff#2 ← (byte~) findcol::$13 to:findcol::@7 findcol::@14: scope:[findcol] from findcol::@5 (byte) findcol::mincol#5 ← phi( findcol::@5/(byte) findcol::mincol#7 ) @@ -899,9 +899,9 @@ findcol::@14: scope:[findcol] from findcol::@5 (byte) findcol::diff#5 ← phi( findcol::@5/(byte) findcol::diff#8 ) (byte) findcol::y#4 ← phi( findcol::@5/(byte) findcol::y#2 ) (byte) findcol::yp#4 ← phi( findcol::@5/(byte) findcol::yp#2 ) - (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#4 - (byte) findcol::y#4 - (byte/word~) findcol::$11 ← (byte) findcol::diff#5 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 - (byte) findcol::diff#3 ← (byte/word~) findcol::$11 + (byte~) findcol::$10 ← (byte) findcol::yp#4 - (byte) findcol::y#4 + (byte~) findcol::$11 ← (byte) findcol::diff#5 + (byte~) findcol::$10 + (byte) findcol::diff#3 ← (byte~) findcol::$11 to:findcol::@7 findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 (byte) findcol::y#13 ← phi( findcol::@14/(byte) findcol::y#4 findcol::@6/(byte) findcol::y#3 ) @@ -983,25 +983,25 @@ SYMBOL TABLE SSA (byte[]) YPOS (byte[]) YPOS#0 (void()) animate() -(byte/word~) animate::$0 +(byte/signed word/word/dword/signed dword~) animate::$0 (boolean~) animate::$1 (boolean~) animate::$10 (boolean~) animate::$11 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$12 +(byte/signed word/word/dword/signed dword~) animate::$12 (boolean~) animate::$13 (boolean~) animate::$14 -(byte/word~) animate::$15 +(byte/signed word/word/dword/signed dword~) animate::$15 (boolean~) animate::$16 (boolean~) animate::$17 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$18 +(byte/signed word/word/dword/signed dword~) animate::$18 (boolean~) animate::$2 -(byte/word~) animate::$3 +(byte/signed word/word/dword/signed dword~) animate::$3 (boolean~) animate::$4 (boolean~) animate::$5 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$6 +(byte/signed word/word/dword/signed dword~) animate::$6 (boolean~) animate::$7 (boolean~) animate::$8 -(byte/word~) animate::$9 +(byte/signed word/word/dword/signed dword~) animate::$9 (label) animate::@1 (label) animate::@10 (label) animate::@11 @@ -1018,10 +1018,10 @@ SYMBOL TABLE SSA (byte()) findcol((byte) findcol::x , (byte) findcol::y) (boolean~) findcol::$0 (boolean~) findcol::$1 -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 -(byte/word~) findcol::$11 -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 -(byte/word~) findcol::$13 +(byte~) findcol::$10 +(byte~) findcol::$11 +(byte~) findcol::$12 +(byte~) findcol::$13 (boolean~) findcol::$14 (boolean~) findcol::$15 (boolean~) findcol::$16 @@ -1029,8 +1029,8 @@ SYMBOL TABLE SSA (boolean~) findcol::$3 (boolean~) findcol::$4 (boolean~) findcol::$5 -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 +(byte~) findcol::$6 +(byte~) findcol::$7 (boolean~) findcol::$8 (boolean~) findcol::$9 (label) findcol::@1 @@ -1291,8 +1291,8 @@ Alias (byte) findcol::mindiff#6 = (byte) findcol::mindiff#7 (byte) findcol::mind Alias (byte) findcol::i#10 = (byte) findcol::i#11 (byte) findcol::i#9 Alias (byte) numpoints#7 = (byte) numpoints#8 (byte) numpoints#9 Alias (byte) findcol::mincol#10 = (byte) findcol::mincol#9 (byte) findcol::mincol#8 -Alias (byte) findcol::diff#0 = (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 -Alias (byte) findcol::diff#1 = (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 +Alias (byte) findcol::diff#0 = (byte~) findcol::$7 +Alias (byte) findcol::diff#1 = (byte~) findcol::$6 Alias (byte) findcol::y#2 = (byte) findcol::y#3 (byte) findcol::y#4 Alias (byte) findcol::yp#2 = (byte) findcol::yp#3 (byte) findcol::yp#4 Alias (byte) findcol::diff#4 = (byte) findcol::diff#8 (byte) findcol::diff#5 @@ -1301,8 +1301,8 @@ Alias (byte) findcol::i#6 = (byte) findcol::i#7 (byte) findcol::i#8 Alias (byte) numpoints#4 = (byte) numpoints#5 (byte) numpoints#6 Alias (byte) findcol::x#11 = (byte) findcol::x#12 (byte) findcol::x#13 Alias (byte) findcol::mincol#5 = (byte) findcol::mincol#6 (byte) findcol::mincol#7 -Alias (byte) findcol::diff#2 = (byte/word~) findcol::$13 -Alias (byte) findcol::diff#3 = (byte/word~) findcol::$11 +Alias (byte) findcol::diff#2 = (byte~) findcol::$13 +Alias (byte) findcol::diff#3 = (byte~) findcol::$11 Alias (byte) findcol::diff#6 = (byte) findcol::diff#7 (byte) findcol::mindiff#1 Alias (byte) findcol::i#4 = (byte) findcol::i#5 Alias (byte) numpoints#2 = (byte) numpoints#3 @@ -1610,51 +1610,51 @@ main::@return: scope:[main] from main::@5 [11] return [ ] ( main:2 [ ] ) to:@return animate: scope:[animate] from main::@4 - [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) - [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) + [12] (byte/signed word/word/dword/signed dword~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) + [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$0 [ ] ( main:2::animate:9 [ ] ) [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) to:animate::@7 animate::@7: scope:[animate] from animate [15] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) to:animate::@1 animate::@1: scope:[animate] from animate animate::@7 - [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) - [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) + [16] (byte/signed word/word/dword/signed dword~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) + [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$3 [ ] ( main:2::animate:9 [ ] ) [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) to:animate::@8 animate::@8: scope:[animate] from animate::@1 [19] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) to:animate::@2 animate::@2: scope:[animate] from animate::@1 animate::@8 - [20] (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) - [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) + [20] (byte/signed word/word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) + [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed word/word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) to:animate::@9 animate::@9: scope:[animate] from animate::@2 [23] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40 [ ] ( main:2::animate:9 [ ] ) to:animate::@3 animate::@3: scope:[animate] from animate::@2 animate::@9 - [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) - [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) + [24] (byte/signed word/word/dword/signed dword~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) + [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed word/word/dword/signed dword~) animate::$9 [ ] ( main:2::animate:9 [ ] ) [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) to:animate::@10 animate::@10: scope:[animate] from animate::@3 [27] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) to:animate::@4 animate::@4: scope:[animate] from animate::@10 animate::@3 - [28] (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) - [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) + [28] (byte/signed word/word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) + [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) to:animate::@11 animate::@11: scope:[animate] from animate::@4 [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] ) - [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) - [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15 [ ] ( main:2::animate:9 [ ] ) + [32] (byte/signed word/word/dword/signed dword~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) + [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$15 [ ] ( main:2::animate:9 [ ] ) [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) to:animate::@12 animate::@12: scope:[animate] from animate::@11 - [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) - [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) + [35] (byte/signed word/word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) + [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 [37] return [ ] ( main:2::animate:9 [ ] ) @@ -1716,8 +1716,8 @@ findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 [64] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] ) to:findcol::@14 findcol::@14: scope:[findcol] from findcol::@5 - [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) - [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) + [65] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) + [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) to:findcol::@7 findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 [67] (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] ) @@ -1739,8 +1739,8 @@ findcol::@21: scope:[findcol] from findcol::@7 [74] (byte~) findcol::mindiff#15 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#10 findcol::mindiff#15 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#10 findcol::mindiff#15 ] ) to:findcol::@8 findcol::@6: scope:[findcol] from findcol::@5 - [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) - [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) + [75] (byte~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) + [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) to:findcol::@7 findcol::@4: scope:[findcol] from findcol::@2 [77] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ) @@ -1848,16 +1848,16 @@ VARIABLE REGISTER WEIGHTS (byte[]) XPOS (byte[]) YPOS (void()) animate() -(byte/word~) animate::$0 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$12 4.0 -(byte/word~) animate::$15 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$18 4.0 -(byte/word~) animate::$3 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$6 4.0 -(byte/word~) animate::$9 4.0 +(byte/signed word/word/dword/signed dword~) animate::$0 4.0 +(byte/signed word/word/dword/signed dword~) animate::$12 4.0 +(byte/signed word/word/dword/signed dword~) animate::$15 4.0 +(byte/signed word/word/dword/signed dword~) animate::$18 4.0 +(byte/signed word/word/dword/signed dword~) animate::$3 4.0 +(byte/signed word/word/dword/signed dword~) animate::$6 4.0 +(byte/signed word/word/dword/signed dword~) animate::$9 4.0 (byte()) findcol((byte) findcol::x , (byte) findcol::y) -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 20002.0 -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 20002.0 +(byte~) findcol::$10 20002.0 +(byte~) findcol::$12 20002.0 (byte) findcol::diff (byte) findcol::diff#0 20002.0 (byte) findcol::diff#1 20002.0 @@ -2051,11 +2051,11 @@ animate: { .label _12 = $11 .label _15 = $12 .label _18 = $13 - //SEG24 [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuz1=_deref_pbuc1_plus_1 + //SEG24 [12] (byte/signed word/word/dword/signed dword~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuz1=_deref_pbuc1_plus_1 ldy XPOS+0 iny sty _0 - //SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 + //SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 lda _0 sta XPOS+0 //SEG26 [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 @@ -2071,11 +2071,11 @@ animate: { jmp b1 //SEG29 animate::@1 b1: - //SEG30 [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuz1=_deref_pbuc1_plus_1 + //SEG30 [16] (byte/signed word/word/dword/signed dword~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuz1=_deref_pbuc1_plus_1 ldy YPOS+0 iny sty _3 - //SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 + //SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 lda _3 sta YPOS+0 //SEG32 [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 @@ -2091,11 +2091,11 @@ animate: { jmp b2 //SEG35 animate::@2 b2: - //SEG36 [20] (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuz1=_deref_pbuc1_minus_1 + //SEG36 [20] (byte/signed word/word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuz1=_deref_pbuc1_minus_1 ldx XPOS+1 dex stx _6 - //SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 + //SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed word/word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 lda _6 sta XPOS+1 //SEG38 [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 @@ -2111,11 +2111,11 @@ animate: { jmp b3 //SEG41 animate::@3 b3: - //SEG42 [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuz1=_deref_pbuc1_plus_1 + //SEG42 [24] (byte/signed word/word/dword/signed dword~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuz1=_deref_pbuc1_plus_1 ldy YPOS+2 iny sty _9 - //SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 + //SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed word/word/dword/signed dword~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 lda _9 sta YPOS+2 //SEG44 [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 @@ -2131,11 +2131,11 @@ animate: { jmp b4 //SEG47 animate::@4 b4: - //SEG48 [28] (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuz1=_deref_pbuc1_minus_1 + //SEG48 [28] (byte/signed word/word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuz1=_deref_pbuc1_minus_1 ldx YPOS+3 dex stx _12 - //SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 + //SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 lda _12 sta YPOS+3 //SEG50 [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 @@ -2148,12 +2148,12 @@ animate: { //SEG52 [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 lda #$19 sta YPOS+3 - //SEG53 [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) -- vbuz1=_deref_pbuc1_plus_vbuc2 + //SEG53 [32] (byte/signed word/word/dword/signed dword~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) -- vbuz1=_deref_pbuc1_plus_vbuc2 lda XPOS+3 clc adc #7 sta _15 - //SEG54 [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 + //SEG54 [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$15 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 lda _15 sta XPOS+3 //SEG55 [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_lt_vbuc2_then_la1 @@ -2163,12 +2163,12 @@ animate: { jmp b12 //SEG56 animate::@12 b12: - //SEG57 [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) -- vbuz1=_deref_pbuc1_minus_vbuc2 + //SEG57 [35] (byte/signed word/word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) -- vbuz1=_deref_pbuc1_minus_vbuc2 lda XPOS+3 sec sbc #$28 sta _18 - //SEG58 [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 + //SEG58 [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 lda _18 sta XPOS+3 jmp breturn @@ -2355,12 +2355,12 @@ findcol: { jmp b14 //SEG113 findcol::@14 b14: - //SEG114 [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) -- vbuz1=vbuz2_minus_vbuz3 + //SEG114 [65] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) -- vbuz1=vbuz2_minus_vbuz3 lda yp sec sbc y sta _10 - //SEG115 [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) -- vbuz1=vbuz2_plus_vbuz3 + //SEG115 [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) -- vbuz1=vbuz2_plus_vbuz3 lda diff clc adc _10 @@ -2420,12 +2420,12 @@ findcol: { jmp b8_from_b21 //SEG138 findcol::@6 b6: - //SEG139 [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) -- vbuz1=vbuz2_minus_vbuz3 + //SEG139 [75] (byte~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) -- vbuz1=vbuz2_minus_vbuz3 lda y sec sbc yp sta _12 - //SEG140 [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) -- vbuz1=vbuz2_plus_vbuz3 + //SEG140 [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) -- vbuz1=vbuz2_plus_vbuz3 lda diff clc adc _12 @@ -2496,9 +2496,9 @@ Statement [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dwo Statement [27] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a Statement [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a Statement [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a -Statement [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) always clobbers reg byte a +Statement [32] (byte/signed word/word/dword/signed dword~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) always clobbers reg byte a Statement [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a -Statement [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) always clobbers reg byte a +Statement [35] (byte/signed word/word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) always clobbers reg byte a Statement [49] (byte*) render::colline#1 ← (byte*) render::colline#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ render::y#4 render::colline#1 ] ( main:2::render:7 [ render::y#4 render::colline#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ render::y#4 render::y#1 ] Statement [62] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) always clobbers reg byte a @@ -2509,11 +2509,11 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ fi Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ findcol::yp#0 ] -Statement [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) always clobbers reg byte a +Statement [65] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] -Statement [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) always clobbers reg byte a -Statement [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) always clobbers reg byte a -Statement [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) always clobbers reg byte a +Statement [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) always clobbers reg byte a +Statement [75] (byte~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) always clobbers reg byte a +Statement [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) always clobbers reg byte a Statement [77] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ) always clobbers reg byte a Statement [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] ( main:2::initscreen:5 [ initscreen::screen#2 ] ) always clobbers reg byte a reg byte y Statement [82] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto initscreen::@1 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) always clobbers reg byte a @@ -2527,15 +2527,15 @@ Statement [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dwo Statement [27] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a Statement [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a Statement [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a -Statement [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) always clobbers reg byte a +Statement [32] (byte/signed word/word/dword/signed dword~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) always clobbers reg byte a Statement [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a -Statement [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) always clobbers reg byte a +Statement [35] (byte/signed word/word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) always clobbers reg byte a Statement [49] (byte*) render::colline#1 ← (byte*) render::colline#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ render::y#4 render::colline#1 ] ( main:2::render:7 [ render::y#4 render::colline#1 ] ) always clobbers reg byte a Statement [62] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) always clobbers reg byte a -Statement [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) always clobbers reg byte a -Statement [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) always clobbers reg byte a -Statement [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) always clobbers reg byte a -Statement [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) always clobbers reg byte a +Statement [65] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) always clobbers reg byte a +Statement [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) always clobbers reg byte a +Statement [75] (byte~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) always clobbers reg byte a +Statement [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) always clobbers reg byte a Statement [77] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ) always clobbers reg byte a Statement [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] ( main:2::initscreen:5 [ initscreen::screen#2 ] ) always clobbers reg byte a reg byte y Statement [82] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto initscreen::@1 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) always clobbers reg byte a @@ -2670,10 +2670,10 @@ main: { } //SEG23 animate animate: { - //SEG24 [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuxx=_deref_pbuc1_plus_1 + //SEG24 [12] (byte/signed word/word/dword/signed dword~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuxx=_deref_pbuc1_plus_1 ldx XPOS+0 inx - //SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx + //SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx stx XPOS+0 //SEG26 [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 lda XPOS+0 @@ -2688,10 +2688,10 @@ animate: { jmp b1 //SEG29 animate::@1 b1: - //SEG30 [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuxx=_deref_pbuc1_plus_1 + //SEG30 [16] (byte/signed word/word/dword/signed dword~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuxx=_deref_pbuc1_plus_1 ldx YPOS+0 inx - //SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx + //SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx stx YPOS+0 //SEG32 [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 lda YPOS+0 @@ -2706,10 +2706,10 @@ animate: { jmp b2 //SEG35 animate::@2 b2: - //SEG36 [20] (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuxx=_deref_pbuc1_minus_1 + //SEG36 [20] (byte/signed word/word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuxx=_deref_pbuc1_minus_1 ldx XPOS+1 dex - //SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx + //SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed word/word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx stx XPOS+1 //SEG38 [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 lda XPOS+1 @@ -2724,10 +2724,10 @@ animate: { jmp b3 //SEG41 animate::@3 b3: - //SEG42 [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuxx=_deref_pbuc1_plus_1 + //SEG42 [24] (byte/signed word/word/dword/signed dword~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuxx=_deref_pbuc1_plus_1 ldx YPOS+2 inx - //SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx + //SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed word/word/dword/signed dword~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx stx YPOS+2 //SEG44 [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 lda YPOS+2 @@ -2742,10 +2742,10 @@ animate: { jmp b4 //SEG47 animate::@4 b4: - //SEG48 [28] (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuxx=_deref_pbuc1_minus_1 + //SEG48 [28] (byte/signed word/word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuxx=_deref_pbuc1_minus_1 ldx YPOS+3 dex - //SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx + //SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx stx YPOS+3 //SEG50 [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 lda YPOS+3 @@ -2757,11 +2757,11 @@ animate: { //SEG52 [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 lda #$19 sta YPOS+3 - //SEG53 [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) -- vbuaa=_deref_pbuc1_plus_vbuc2 + //SEG53 [32] (byte/signed word/word/dword/signed dword~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) -- vbuaa=_deref_pbuc1_plus_vbuc2 lda XPOS+3 clc adc #7 - //SEG54 [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa + //SEG54 [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$15 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa sta XPOS+3 //SEG55 [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_lt_vbuc2_then_la1 lda XPOS+3 @@ -2770,11 +2770,11 @@ animate: { jmp b12 //SEG56 animate::@12 b12: - //SEG57 [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) -- vbuaa=_deref_pbuc1_minus_vbuc2 + //SEG57 [35] (byte/signed word/word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) -- vbuaa=_deref_pbuc1_minus_vbuc2 lda XPOS+3 sec sbc #$28 - //SEG58 [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa + //SEG58 [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa sta XPOS+3 jmp breturn //SEG59 animate::@return @@ -2938,11 +2938,11 @@ findcol: { jmp b14 //SEG113 findcol::@14 b14: - //SEG114 [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) -- vbuaa=vbuz1_minus_vbuz2 + //SEG114 [65] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) -- vbuaa=vbuz1_minus_vbuz2 lda yp sec sbc y - //SEG115 [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) -- vbuaa=vbuz1_plus_vbuaa + //SEG115 [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) -- vbuaa=vbuz1_plus_vbuaa clc adc diff //SEG116 [67] phi from findcol::@14 findcol::@6 to findcol::@7 [phi:findcol::@14/findcol::@6->findcol::@7] @@ -2994,11 +2994,11 @@ findcol: { jmp b8_from_b21 //SEG138 findcol::@6 b6: - //SEG139 [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) -- vbuaa=vbuz1_minus_vbuz2 + //SEG139 [75] (byte~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) -- vbuaa=vbuz1_minus_vbuz2 lda y sec sbc yp - //SEG140 [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) -- vbuaa=vbuz1_plus_vbuaa + //SEG140 [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) -- vbuaa=vbuz1_plus_vbuaa clc adc diff jmp b7_from_b6 @@ -3179,13 +3179,13 @@ FINAL SYMBOL TABLE (byte[]) YPOS (const byte[]) YPOS#0 YPOS = { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 14, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 22 } (void()) animate() -(byte/word~) animate::$0 reg byte x 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$12 reg byte x 4.0 -(byte/word~) animate::$15 reg byte a 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$18 reg byte a 4.0 -(byte/word~) animate::$3 reg byte x 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$6 reg byte x 4.0 -(byte/word~) animate::$9 reg byte x 4.0 +(byte/signed word/word/dword/signed dword~) animate::$0 reg byte x 4.0 +(byte/signed word/word/dword/signed dword~) animate::$12 reg byte x 4.0 +(byte/signed word/word/dword/signed dword~) animate::$15 reg byte a 4.0 +(byte/signed word/word/dword/signed dword~) animate::$18 reg byte a 4.0 +(byte/signed word/word/dword/signed dword~) animate::$3 reg byte x 4.0 +(byte/signed word/word/dword/signed dword~) animate::$6 reg byte x 4.0 +(byte/signed word/word/dword/signed dword~) animate::$9 reg byte x 4.0 (label) animate::@1 (label) animate::@10 (label) animate::@11 @@ -3198,8 +3198,8 @@ FINAL SYMBOL TABLE (label) animate::@9 (label) animate::@return (byte()) findcol((byte) findcol::x , (byte) findcol::y) -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 reg byte a 20002.0 -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 reg byte a 20002.0 +(byte~) findcol::$10 reg byte a 20002.0 +(byte~) findcol::$12 reg byte a 20002.0 (label) findcol::@1 (label) findcol::@12 (label) findcol::@14 @@ -3340,10 +3340,10 @@ main: { } //SEG23 animate animate: { - //SEG24 [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuxx=_deref_pbuc1_plus_1 + //SEG24 [12] (byte/signed word/word/dword/signed dword~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuxx=_deref_pbuc1_plus_1 ldx XPOS+0 inx - //SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx + //SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx stx XPOS+0 //SEG26 [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 txa @@ -3355,10 +3355,10 @@ animate: { sta XPOS+0 //SEG29 animate::@1 b1: - //SEG30 [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuxx=_deref_pbuc1_plus_1 + //SEG30 [16] (byte/signed word/word/dword/signed dword~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuxx=_deref_pbuc1_plus_1 ldx YPOS+0 inx - //SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx + //SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed word/word/dword/signed dword~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx stx YPOS+0 //SEG32 [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 txa @@ -3370,10 +3370,10 @@ animate: { sta YPOS+0 //SEG35 animate::@2 b2: - //SEG36 [20] (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuxx=_deref_pbuc1_minus_1 + //SEG36 [20] (byte/signed word/word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuxx=_deref_pbuc1_minus_1 ldx XPOS+1 dex - //SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx + //SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed word/word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx stx XPOS+1 //SEG38 [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 txa @@ -3385,10 +3385,10 @@ animate: { sta XPOS+1 //SEG41 animate::@3 b3: - //SEG42 [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuxx=_deref_pbuc1_plus_1 + //SEG42 [24] (byte/signed word/word/dword/signed dword~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuxx=_deref_pbuc1_plus_1 ldx YPOS+2 inx - //SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx + //SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed word/word/dword/signed dword~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx stx YPOS+2 //SEG44 [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 txa @@ -3400,10 +3400,10 @@ animate: { sta YPOS+2 //SEG47 animate::@4 b4: - //SEG48 [28] (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuxx=_deref_pbuc1_minus_1 + //SEG48 [28] (byte/signed word/word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuxx=_deref_pbuc1_minus_1 ldx YPOS+3 dex - //SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx + //SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx stx YPOS+3 //SEG50 [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 txa @@ -3413,20 +3413,20 @@ animate: { //SEG52 [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 lda #$19 sta YPOS+3 - //SEG53 [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) -- vbuaa=_deref_pbuc1_plus_vbuc2 + //SEG53 [32] (byte/signed word/word/dword/signed dword~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) -- vbuaa=_deref_pbuc1_plus_vbuc2 lda XPOS+3 clc adc #7 - //SEG54 [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa + //SEG54 [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$15 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa sta XPOS+3 //SEG55 [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_lt_vbuc2_then_la1 cmp #$28 bcc breturn //SEG56 animate::@12 - //SEG57 [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) -- vbuaa=_deref_pbuc1_minus_vbuc2 + //SEG57 [35] (byte/signed word/word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) -- vbuaa=_deref_pbuc1_minus_vbuc2 sec sbc #$28 - //SEG58 [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa + //SEG58 [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed word/word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa sta XPOS+3 //SEG59 animate::@return breturn: @@ -3561,11 +3561,11 @@ findcol: { cmp yp bcs b6 //SEG113 findcol::@14 - //SEG114 [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) -- vbuaa=vbuz1_minus_vbuz2 + //SEG114 [65] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) -- vbuaa=vbuz1_minus_vbuz2 lda yp sec sbc y - //SEG115 [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) -- vbuaa=vbuz1_plus_vbuaa + //SEG115 [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) -- vbuaa=vbuz1_plus_vbuaa clc adc diff //SEG116 [67] phi from findcol::@14 findcol::@6 to findcol::@7 [phi:findcol::@14/findcol::@6->findcol::@7] @@ -3607,11 +3607,11 @@ findcol: { jmp b8 //SEG138 findcol::@6 b6: - //SEG139 [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) -- vbuaa=vbuz1_minus_vbuz2 + //SEG139 [75] (byte~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) -- vbuaa=vbuz1_minus_vbuz2 lda y sec sbc yp - //SEG140 [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) -- vbuaa=vbuz1_plus_vbuaa + //SEG140 [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) -- vbuaa=vbuz1_plus_vbuaa clc adc diff jmp b7 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/voronoi.sym b/src/test/java/dk/camelot64/kickc/test/ref/voronoi.sym index 7e5d1b98c..037430ea1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/voronoi.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/voronoi.sym @@ -14,13 +14,13 @@ (byte[]) YPOS (const byte[]) YPOS#0 YPOS = { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 14, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 22 } (void()) animate() -(byte/word~) animate::$0 reg byte x 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$12 reg byte x 4.0 -(byte/word~) animate::$15 reg byte a 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$18 reg byte a 4.0 -(byte/word~) animate::$3 reg byte x 4.0 -(byte/signed byte/word/signed word/dword/signed dword~) animate::$6 reg byte x 4.0 -(byte/word~) animate::$9 reg byte x 4.0 +(byte/signed word/word/dword/signed dword~) animate::$0 reg byte x 4.0 +(byte/signed word/word/dword/signed dword~) animate::$12 reg byte x 4.0 +(byte/signed word/word/dword/signed dword~) animate::$15 reg byte a 4.0 +(byte/signed word/word/dword/signed dword~) animate::$18 reg byte a 4.0 +(byte/signed word/word/dword/signed dword~) animate::$3 reg byte x 4.0 +(byte/signed word/word/dword/signed dword~) animate::$6 reg byte x 4.0 +(byte/signed word/word/dword/signed dword~) animate::$9 reg byte x 4.0 (label) animate::@1 (label) animate::@10 (label) animate::@11 @@ -33,8 +33,8 @@ (label) animate::@9 (label) animate::@return (byte()) findcol((byte) findcol::x , (byte) findcol::y) -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 reg byte a 20002.0 -(byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 reg byte a 20002.0 +(byte~) findcol::$10 reg byte a 20002.0 +(byte~) findcol::$12 reg byte a 20002.0 (label) findcol::@1 (label) findcol::@12 (label) findcol::@14 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/wordexpr.log b/src/test/java/dk/camelot64/kickc/test/ref/wordexpr.log index 33f368da3..2af26e495 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/wordexpr.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/wordexpr.log @@ -15,8 +15,8 @@ proc (void()) main() (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 main::@1: (word/signed word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 8 - (word~) main::$1 ← (word) main::b + (word/signed word/dword/signed dword~) main::$0 - (word) main::b ← (word~) main::$1 + (word/signed dword/dword~) main::$1 ← (word) main::b + (word/signed word/dword/signed dword~) main::$0 + (word) main::b ← (word/signed dword/dword~) main::$1 (byte) main::i ← ++ (byte) main::i (boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 11 if((boolean~) main::$2) goto main::@1 @@ -28,7 +28,7 @@ endproc // main() SYMBOLS (void()) main() (word/signed word/dword/signed dword~) main::$0 -(word~) main::$1 +(word/signed dword/dword~) main::$1 (boolean~) main::$2 (label) main::@1 (label) main::@return @@ -44,8 +44,8 @@ main: scope:[main] from to:main::@1 main::@1: scope:[main] from main main::@1 (word/signed word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 8 - (word~) main::$1 ← (word) main::b + (word/signed word/dword/signed dword~) main::$0 - (word) main::b ← (word~) main::$1 + (word/signed dword/dword~) main::$1 ← (word) main::b + (word/signed word/dword/signed dword~) main::$0 + (word) main::b ← (word/signed dword/dword~) main::$1 (byte) main::i ← ++ (byte) main::i (boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 11 if((boolean~) main::$2) goto main::@1 @@ -76,8 +76,8 @@ main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) (word) main::b#2 ← phi( main/(word) main::b#0 main::@1/(word) main::b#1 ) (word/signed word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 8 - (word~) main::$1 ← (word) main::b#2 + (word/signed word/dword/signed dword~) main::$0 - (word) main::b#1 ← (word~) main::$1 + (word/signed dword/dword~) main::$1 ← (word) main::b#2 + (word/signed word/dword/signed dword~) main::$0 + (word) main::b#1 ← (word/signed dword/dword~) main::$1 (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 11 if((boolean~) main::$2) goto main::@1 @@ -99,7 +99,7 @@ SYMBOL TABLE SSA (label) @end (void()) main() (word/signed word/dword/signed dword~) main::$0 -(word~) main::$1 +(word/signed dword/dword~) main::$1 (boolean~) main::$2 (label) main::@1 (label) main::@return @@ -115,7 +115,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks -Alias (word) main::b#1 = (word~) main::$1 +Alias (word) main::b#1 = (word/signed dword/dword~) main::$1 Succesful SSA optimization Pass2AliasElimination Simple Condition (boolean~) main::$2 if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1 Succesful SSA optimization Pass2ConditionalJumpSimplification diff --git a/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.cfg b/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.cfg index b38833238..bbc383265 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.cfg @@ -37,15 +37,15 @@ main::@return: scope:[main] from main::@4 [22] return [ ] ( main:2 [ ] ) to:@return sum2: scope:[sum2] from main::@3 - [23] (byte/word~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) - [24] (byte) sum2::return#1 ← (byte/word~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) + [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) + [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) to:sum2::@return sum2::@return: scope:[sum2] from sum2 [25] return [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) to:@return sum: scope:[sum] from main::@1 - [26] (byte/word~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) - [27] (byte) sum::return#1 ← (byte/word~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) + [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) + [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) to:sum::@return sum::@return: scope:[sum] from sum [28] return [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.log b/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.log index ab43555df..d2ab94d0f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.log @@ -25,13 +25,13 @@ STATEMENTS proc (void()) main() (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 main::@1: - (byte/word~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) main::$1 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte~) main::$2 ← call sum (byte) main::i (byte/word~) main::$0 (byte/word~) main::$1 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte~) main::$2 ← call sum (byte) main::i (byte/signed word/word/dword/signed dword~) main::$0 (byte/signed word/word/dword/signed dword~) main::$1 *((byte*) SCREEN + (byte) main::i) ← (byte~) main::$2 - (byte/word~) main::$3 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) main::$4 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte~) main::$5 ← call sum2 (byte) main::i (byte/word~) main::$3 (byte/word~) main::$4 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte/signed word/word/dword/signed dword~) main::$4 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte~) main::$5 ← call sum2 (byte) main::i (byte/signed word/word/dword/signed dword~) main::$3 (byte/signed word/word/dword/signed dword~) main::$4 *((byte*) SCREEN2 + (byte) main::i) ← (byte~) main::$5 (byte) main::i ← ++ (byte) main::i (boolean~) main::$6 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 11 @@ -40,18 +40,18 @@ main::@return: return endproc // main() proc (byte()) sum((byte) sum::a , (byte) sum::b , (byte) sum::c) - (byte/word~) sum::$0 ← (byte) sum::a + (byte) sum::b - (byte/word~) sum::$1 ← (byte/word~) sum::$0 + (byte) sum::c - (byte) sum::return ← (byte/word~) sum::$1 + (byte~) sum::$0 ← (byte) sum::a + (byte) sum::b + (byte~) sum::$1 ← (byte~) sum::$0 + (byte) sum::c + (byte) sum::return ← (byte~) sum::$1 goto sum::@return sum::@return: (byte) sum::return ← (byte) sum::return return (byte) sum::return endproc // sum() proc (byte()) sum2((byte) sum2::a , (byte) sum2::b , (byte) sum2::c) - (byte/word~) sum2::$0 ← (byte) sum2::a + (byte) sum2::b - (byte/word~) sum2::$1 ← (byte/word~) sum2::$0 + (byte) sum2::c - (byte) sum2::return ← (byte/word~) sum2::$1 + (byte~) sum2::$0 ← (byte) sum2::a + (byte) sum2::b + (byte~) sum2::$1 ← (byte~) sum2::$0 + (byte) sum2::c + (byte) sum2::return ← (byte~) sum2::$1 goto sum2::@return sum2::@return: (byte) sum2::return ← (byte) sum2::return @@ -64,27 +64,27 @@ SYMBOLS (byte*) SCREEN (byte*) SCREEN2 (void()) main() -(byte/word~) main::$0 -(byte/word~) main::$1 +(byte/signed word/word/dword/signed dword~) main::$0 +(byte/signed word/word/dword/signed dword~) main::$1 (byte~) main::$2 -(byte/word~) main::$3 -(byte/word~) main::$4 +(byte/signed word/word/dword/signed dword~) main::$3 +(byte/signed word/word/dword/signed dword~) main::$4 (byte~) main::$5 (boolean~) main::$6 (label) main::@1 (label) main::@return (byte) main::i (byte()) sum((byte) sum::a , (byte) sum::b , (byte) sum::c) -(byte/word~) sum::$0 -(byte/word~) sum::$1 +(byte~) sum::$0 +(byte~) sum::$1 (label) sum::@return (byte) sum::a (byte) sum::b (byte) sum::c (byte) sum::return (byte()) sum2((byte) sum2::a , (byte) sum2::b , (byte) sum2::c) -(byte/word~) sum2::$0 -(byte/word~) sum2::$1 +(byte~) sum2::$0 +(byte~) sum2::$1 (label) sum2::@return (byte) sum2::a (byte) sum2::b @@ -103,13 +103,13 @@ main: scope:[main] from (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte/word~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) main::$1 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte~) main::$2 ← call sum (byte) main::i (byte/word~) main::$0 (byte/word~) main::$1 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte~) main::$2 ← call sum (byte) main::i (byte/signed word/word/dword/signed dword~) main::$0 (byte/signed word/word/dword/signed dword~) main::$1 *((byte*) SCREEN + (byte) main::i) ← (byte~) main::$2 - (byte/word~) main::$3 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) main::$4 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte~) main::$5 ← call sum2 (byte) main::i (byte/word~) main::$3 (byte/word~) main::$4 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte/signed word/word/dword/signed dword~) main::$4 ← (byte) main::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte~) main::$5 ← call sum2 (byte) main::i (byte/signed word/word/dword/signed dword~) main::$3 (byte/signed word/word/dword/signed dword~) main::$4 *((byte*) SCREEN2 + (byte) main::i) ← (byte~) main::$5 (byte) main::i ← ++ (byte) main::i (boolean~) main::$6 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 11 @@ -123,9 +123,9 @@ main::@return: scope:[main] from main::@2 @1: scope:[] from @begin to:@2 sum: scope:[sum] from - (byte/word~) sum::$0 ← (byte) sum::a + (byte) sum::b - (byte/word~) sum::$1 ← (byte/word~) sum::$0 + (byte) sum::c - (byte) sum::return ← (byte/word~) sum::$1 + (byte~) sum::$0 ← (byte) sum::a + (byte) sum::b + (byte~) sum::$1 ← (byte~) sum::$0 + (byte) sum::c + (byte) sum::return ← (byte~) sum::$1 to:sum::@return sum::@return: scope:[sum] from sum sum::@1 (byte) sum::return ← (byte) sum::return @@ -136,9 +136,9 @@ sum::@1: scope:[sum] from @2: scope:[] from @1 to:@3 sum2: scope:[sum2] from - (byte/word~) sum2::$0 ← (byte) sum2::a + (byte) sum2::b - (byte/word~) sum2::$1 ← (byte/word~) sum2::$0 + (byte) sum2::c - (byte) sum2::return ← (byte/word~) sum2::$1 + (byte~) sum2::$0 ← (byte) sum2::a + (byte) sum2::b + (byte~) sum2::$1 ← (byte~) sum2::$0 + (byte) sum2::c + (byte) sum2::return ← (byte~) sum2::$1 to:sum2::@return sum2::@return: scope:[sum2] from sum2 sum2::@1 (byte) sum2::return ← (byte) sum2::return @@ -179,11 +179,11 @@ main::@1: scope:[main] from main main::@4 (byte*) SCREEN2#3 ← phi( main/(byte*) SCREEN2#4 main::@4/(byte*) SCREEN2#1 ) (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#3 main::@4/(byte*) SCREEN#4 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@4/(byte) main::i#1 ) - (byte/word~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 (byte) sum::a#0 ← (byte) main::i#2 - (byte) sum::b#0 ← (byte/word~) main::$0 - (byte) sum::c#0 ← (byte/word~) main::$1 + (byte) sum::b#0 ← (byte/signed word/word/dword/signed dword~) main::$0 + (byte) sum::c#0 ← (byte/signed word/word/dword/signed dword~) main::$1 call sum param-assignment (byte) sum::return#0 ← (byte) sum::return#2 to:main::@3 @@ -194,11 +194,11 @@ main::@3: scope:[main] from main::@1 (byte) sum::return#3 ← phi( main::@1/(byte) sum::return#0 ) (byte~) main::$2 ← (byte) sum::return#3 *((byte*) SCREEN#1 + (byte) main::i#3) ← (byte~) main::$2 - (byte/word~) main::$3 ← (byte) main::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte/word~) main::$4 ← (byte) main::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte/signed word/word/dword/signed dword~) main::$4 ← (byte) main::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 2 (byte) sum2::a#0 ← (byte) main::i#3 - (byte) sum2::b#0 ← (byte/word~) main::$3 - (byte) sum2::c#0 ← (byte/word~) main::$4 + (byte) sum2::b#0 ← (byte/signed word/word/dword/signed dword~) main::$3 + (byte) sum2::c#0 ← (byte/signed word/word/dword/signed dword~) main::$4 call sum2 param-assignment (byte) sum2::return#0 ← (byte) sum2::return#2 to:main::@4 @@ -220,9 +220,9 @@ sum: scope:[sum] from main::@1 (byte) sum::c#1 ← phi( main::@1/(byte) sum::c#0 ) (byte) sum::b#1 ← phi( main::@1/(byte) sum::b#0 ) (byte) sum::a#1 ← phi( main::@1/(byte) sum::a#0 ) - (byte/word~) sum::$0 ← (byte) sum::a#1 + (byte) sum::b#1 - (byte/word~) sum::$1 ← (byte/word~) sum::$0 + (byte) sum::c#1 - (byte) sum::return#1 ← (byte/word~) sum::$1 + (byte~) sum::$0 ← (byte) sum::a#1 + (byte) sum::b#1 + (byte~) sum::$1 ← (byte~) sum::$0 + (byte) sum::c#1 + (byte) sum::return#1 ← (byte~) sum::$1 to:sum::@return sum::@return: scope:[sum] from sum (byte) sum::return#4 ← phi( sum/(byte) sum::return#1 ) @@ -233,9 +233,9 @@ sum2: scope:[sum2] from main::@3 (byte) sum2::c#1 ← phi( main::@3/(byte) sum2::c#0 ) (byte) sum2::b#1 ← phi( main::@3/(byte) sum2::b#0 ) (byte) sum2::a#1 ← phi( main::@3/(byte) sum2::a#0 ) - (byte/word~) sum2::$0 ← (byte) sum2::a#1 + (byte) sum2::b#1 - (byte/word~) sum2::$1 ← (byte/word~) sum2::$0 + (byte) sum2::c#1 - (byte) sum2::return#1 ← (byte/word~) sum2::$1 + (byte~) sum2::$0 ← (byte) sum2::a#1 + (byte) sum2::b#1 + (byte~) sum2::$1 ← (byte~) sum2::$0 + (byte) sum2::c#1 + (byte) sum2::return#1 ← (byte~) sum2::$1 to:sum2::@return sum2::@return: scope:[sum2] from sum2 (byte) sum2::return#4 ← phi( sum2/(byte) sum2::return#1 ) @@ -272,11 +272,11 @@ SYMBOL TABLE SSA (byte*) SCREEN2#4 (byte*) SCREEN2#5 (void()) main() -(byte/word~) main::$0 -(byte/word~) main::$1 +(byte/signed word/word/dword/signed dword~) main::$0 +(byte/signed word/word/dword/signed dword~) main::$1 (byte~) main::$2 -(byte/word~) main::$3 -(byte/word~) main::$4 +(byte/signed word/word/dword/signed dword~) main::$3 +(byte/signed word/word/dword/signed dword~) main::$4 (byte~) main::$5 (boolean~) main::$6 (label) main::@1 @@ -290,8 +290,8 @@ SYMBOL TABLE SSA (byte) main::i#3 (byte) main::i#4 (byte()) sum((byte) sum::a , (byte) sum::b , (byte) sum::c) -(byte/word~) sum::$0 -(byte/word~) sum::$1 +(byte~) sum::$0 +(byte~) sum::$1 (label) sum::@return (byte) sum::a (byte) sum::a#0 @@ -309,8 +309,8 @@ SYMBOL TABLE SSA (byte) sum::return#3 (byte) sum::return#4 (byte()) sum2((byte) sum2::a , (byte) sum2::b , (byte) sum2::c) -(byte/word~) sum2::$0 -(byte/word~) sum2::$1 +(byte~) sum2::$0 +(byte~) sum2::$1 (label) sum2::@return (byte) sum2::a (byte) sum2::a#0 @@ -345,17 +345,17 @@ Not aliassing across scopes: sum::c#1 sum::c#0 Not aliassing across scopes: sum2::a#1 sum2::a#0 Not aliassing across scopes: sum2::b#1 sum2::b#0 Not aliassing across scopes: sum2::c#1 sum2::c#0 -Alias (byte) sum::b#0 = (byte/word~) main::$0 -Alias (byte) sum::c#0 = (byte/word~) main::$1 +Alias (byte) sum::b#0 = (byte/signed word/word/dword/signed dword~) main::$0 +Alias (byte) sum::c#0 = (byte/signed word/word/dword/signed dword~) main::$1 Alias (byte) sum::return#0 = (byte) sum::return#3 Alias (byte*) SCREEN#1 = (byte*) SCREEN#2 (byte*) SCREEN#4 Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#4 Alias (byte*) SCREEN2#1 = (byte*) SCREEN2#2 (byte*) SCREEN2#3 -Alias (byte) sum2::b#0 = (byte/word~) main::$3 -Alias (byte) sum2::c#0 = (byte/word~) main::$4 +Alias (byte) sum2::b#0 = (byte/signed word/word/dword/signed dword~) main::$3 +Alias (byte) sum2::c#0 = (byte/signed word/word/dword/signed dword~) main::$4 Alias (byte) sum2::return#0 = (byte) sum2::return#3 -Alias (byte) sum::return#1 = (byte/word~) sum::$1 (byte) sum::return#4 (byte) sum::return#2 -Alias (byte) sum2::return#1 = (byte/word~) sum2::$1 (byte) sum2::return#4 (byte) sum2::return#2 +Alias (byte) sum::return#1 = (byte~) sum::$1 (byte) sum::return#4 (byte) sum::return#2 +Alias (byte) sum2::return#1 = (byte~) sum2::$1 (byte) sum2::return#4 (byte) sum2::return#2 Alias (byte*) SCREEN#0 = (byte*) SCREEN#5 Alias (byte*) SCREEN2#0 = (byte*) SCREEN2#5 Succesful SSA optimization Pass2AliasElimination @@ -490,15 +490,15 @@ main::@return: scope:[main] from main::@4 [22] return [ ] ( main:2 [ ] ) to:@return sum2: scope:[sum2] from main::@3 - [23] (byte/word~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) - [24] (byte) sum2::return#1 ← (byte/word~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) + [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) + [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) to:sum2::@return sum2::@return: scope:[sum2] from sum2 [25] return [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) to:@return sum: scope:[sum] from main::@1 - [26] (byte/word~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) - [27] (byte) sum::return#1 ← (byte/word~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) + [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) + [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) to:sum::@return sum::@return: scope:[sum] from sum [28] return [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) @@ -542,7 +542,7 @@ VARIABLE REGISTER WEIGHTS (byte) main::i#1 16.5 (byte) main::i#2 7.333333333333333 (byte()) sum((byte) sum::a , (byte) sum::b , (byte) sum::c) -(byte/word~) sum::$0 4.0 +(byte~) sum::$0 4.0 (byte) sum::a (byte) sum::a#0 13.0 (byte) sum::b @@ -553,7 +553,7 @@ VARIABLE REGISTER WEIGHTS (byte) sum::return#0 22.0 (byte) sum::return#1 4.333333333333333 (byte()) sum2((byte) sum2::a , (byte) sum2::b , (byte) sum2::c) -(byte/word~) sum2::$0 4.0 +(byte~) sum2::$0 4.0 (byte) sum2::a (byte) sum2::a#0 13.0 (byte) sum2::b @@ -727,12 +727,12 @@ sum2: { .label c = 9 .label return = $b .label return_1 = $e - //SEG36 [23] (byte/word~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) -- vbuz1=vbuz2_plus_vbuz3 + //SEG36 [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) -- vbuz1=vbuz2_plus_vbuz3 lda a clc adc b sta _0 - //SEG37 [24] (byte) sum2::return#1 ← (byte/word~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) -- vbuz1=vbuz2_plus_vbuz3 + //SEG37 [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) -- vbuz1=vbuz2_plus_vbuz3 lda _0 clc adc c @@ -751,12 +751,12 @@ sum: { .label c = 4 .label return = 6 .label return_1 = $10 - //SEG41 [26] (byte/word~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) -- vbuz1=vbuz2_plus_vbuz3 + //SEG41 [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) -- vbuz1=vbuz2_plus_vbuz3 lda a clc adc b sta _0 - //SEG42 [27] (byte) sum::return#1 ← (byte/word~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) -- vbuz1=vbuz2_plus_vbuz3 + //SEG42 [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) -- vbuz1=vbuz2_plus_vbuz3 lda _0 clc adc c @@ -774,18 +774,18 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ ma Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ sum::b#0 ] Statement [14] (byte) sum2::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum2::b#0 sum2::c#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ sum2::b#0 ] -Statement [23] (byte/word~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) always clobbers reg byte a +Statement [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ sum2::c#0 ] -Statement [24] (byte) sum2::return#1 ← (byte/word~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) always clobbers reg byte a -Statement [26] (byte/word~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) always clobbers reg byte a +Statement [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) always clobbers reg byte a +Statement [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ sum::c#0 ] -Statement [27] (byte) sum::return#1 ← (byte/word~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) always clobbers reg byte a +Statement [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) always clobbers reg byte a Statement [7] (byte) sum::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum::b#0 sum::c#0 ] ( main:2 [ main::i#2 sum::b#0 sum::c#0 ] ) always clobbers reg byte a Statement [14] (byte) sum2::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum2::b#0 sum2::c#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 ] ) always clobbers reg byte a -Statement [23] (byte/word~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) always clobbers reg byte a -Statement [24] (byte) sum2::return#1 ← (byte/word~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) always clobbers reg byte a -Statement [26] (byte/word~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) always clobbers reg byte a -Statement [27] (byte) sum::return#1 ← (byte/word~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) always clobbers reg byte a +Statement [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) always clobbers reg byte a +Statement [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) always clobbers reg byte a +Statement [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) always clobbers reg byte a +Statement [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:3 [ sum::b#0 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:4 [ sum::c#0 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , @@ -912,11 +912,11 @@ main: { } //SEG35 sum2 sum2: { - //SEG36 [23] (byte/word~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) -- vbuaa=vbuaa_plus_vbuyy + //SEG36 [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) -- vbuaa=vbuaa_plus_vbuyy sty $ff clc adc $ff - //SEG37 [24] (byte) sum2::return#1 ← (byte/word~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) -- vbuaa=vbuaa_plus_vbuxx + //SEG37 [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) -- vbuaa=vbuaa_plus_vbuxx stx $ff clc adc $ff @@ -928,11 +928,11 @@ sum2: { } //SEG40 sum sum: { - //SEG41 [26] (byte/word~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) -- vbuaa=vbuaa_plus_vbuyy + //SEG41 [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) -- vbuaa=vbuaa_plus_vbuyy sty $ff clc adc $ff - //SEG42 [27] (byte) sum::return#1 ← (byte/word~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) -- vbuaa=vbuaa_plus_vbuxx + //SEG42 [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) -- vbuaa=vbuaa_plus_vbuxx stx $ff clc adc $ff @@ -993,7 +993,7 @@ FINAL SYMBOL TABLE (byte) main::i#1 i zp ZP_BYTE:2 16.5 (byte) main::i#2 i zp ZP_BYTE:2 7.333333333333333 (byte()) sum((byte) sum::a , (byte) sum::b , (byte) sum::c) -(byte/word~) sum::$0 reg byte a 4.0 +(byte~) sum::$0 reg byte a 4.0 (label) sum::@return (byte) sum::a (byte) sum::a#0 reg byte a 13.0 @@ -1005,7 +1005,7 @@ FINAL SYMBOL TABLE (byte) sum::return#0 reg byte a 22.0 (byte) sum::return#1 reg byte a 4.333333333333333 (byte()) sum2((byte) sum2::a , (byte) sum2::b , (byte) sum2::c) -(byte/word~) sum2::$0 reg byte a 4.0 +(byte~) sum2::$0 reg byte a 4.0 (label) sum2::@return (byte) sum2::a (byte) sum2::a#0 reg byte a 13.0 @@ -1114,11 +1114,11 @@ main: { } //SEG35 sum2 sum2: { - //SEG36 [23] (byte/word~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) -- vbuaa=vbuaa_plus_vbuyy + //SEG36 [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) -- vbuaa=vbuaa_plus_vbuyy sty $ff clc adc $ff - //SEG37 [24] (byte) sum2::return#1 ← (byte/word~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) -- vbuaa=vbuaa_plus_vbuxx + //SEG37 [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) -- vbuaa=vbuaa_plus_vbuxx stx $ff clc adc $ff @@ -1128,11 +1128,11 @@ sum2: { } //SEG40 sum sum: { - //SEG41 [26] (byte/word~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) -- vbuaa=vbuaa_plus_vbuyy + //SEG41 [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) -- vbuaa=vbuaa_plus_vbuyy sty $ff clc adc $ff - //SEG42 [27] (byte) sum::return#1 ← (byte/word~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) -- vbuaa=vbuaa_plus_vbuxx + //SEG42 [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) -- vbuaa=vbuaa_plus_vbuxx stx $ff clc adc $ff diff --git a/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.sym b/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.sym index 824a06359..86aae8f8b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.sym @@ -16,7 +16,7 @@ (byte) main::i#1 i zp ZP_BYTE:2 16.5 (byte) main::i#2 i zp ZP_BYTE:2 7.333333333333333 (byte()) sum((byte) sum::a , (byte) sum::b , (byte) sum::c) -(byte/word~) sum::$0 reg byte a 4.0 +(byte~) sum::$0 reg byte a 4.0 (label) sum::@return (byte) sum::a (byte) sum::a#0 reg byte a 13.0 @@ -28,7 +28,7 @@ (byte) sum::return#0 reg byte a 22.0 (byte) sum::return#1 reg byte a 4.333333333333333 (byte()) sum2((byte) sum2::a , (byte) sum2::b , (byte) sum2::c) -(byte/word~) sum2::$0 reg byte a 4.0 +(byte~) sum2::$0 reg byte a 4.0 (label) sum2::@return (byte) sum2::a (byte) sum2::a#0 reg byte a 13.0