From 64c690f9256128c6167c72da346c1bbc1b663125 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Mon, 21 Aug 2017 08:27:34 +0200 Subject: [PATCH] Improved ZP register ASM naming further. (issue with allocation not choosing optimal registers in some cases - a few tests left failing) --- .../dk/camelot64/kickc/asm/AsmFragment.java | 53 +- .../dk/camelot64/kickc/icl/Registers.java | 49 +- .../java/dk/camelot64/kickc/icl/Scope.java | 4 + .../java/dk/camelot64/kickc/icl/Variable.java | 77 +- .../kickc/passes/Pass4CodeGeneration.java | 18 +- .../kickc/passes/Pass4RegistersFinalize.java | 63 +- .../dk/camelot64/kickc/test/ref/bresenham.log | 60 +- .../dk/camelot64/kickc/test/ref/bresenham.sym | 24 +- .../dk/camelot64/kickc/test/ref/fibmem.log | 20 +- .../camelot64/kickc/test/ref/flipper-rex2.asm | 8 +- .../camelot64/kickc/test/ref/flipper-rex2.log | 172 ++-- .../camelot64/kickc/test/ref/flipper-rex2.sym | 22 +- .../kickc/test/ref/forclassicmin.log | 6 +- .../camelot64/kickc/test/ref/forrangemin.log | 10 +- .../dk/camelot64/kickc/test/ref/ifmin.log | 6 +- .../dk/camelot64/kickc/test/ref/loopmin.log | 10 +- .../dk/camelot64/kickc/test/ref/loopnest.log | 12 +- .../dk/camelot64/kickc/test/ref/loopnest2.log | 55 +- .../dk/camelot64/kickc/test/ref/loopnest2.sym | 18 +- .../dk/camelot64/kickc/test/ref/loopsplit.log | 10 +- .../dk/camelot64/kickc/test/ref/minus.log | 12 +- .../dk/camelot64/kickc/test/ref/ptrtest.asm | 10 +- .../dk/camelot64/kickc/test/ref/ptrtest.log | 106 +-- .../dk/camelot64/kickc/test/ref/ptrtest.sym | 10 +- .../camelot64/kickc/test/ref/ptrtestmin.log | 10 +- .../dk/camelot64/kickc/test/ref/voronoi.asm | 41 +- .../dk/camelot64/kickc/test/ref/voronoi.log | 849 +++++++++--------- .../dk/camelot64/kickc/test/ref/voronoi.sym | 58 +- .../camelot64/kickc/test/ref/zpparammin.asm | 4 +- .../camelot64/kickc/test/ref/zpparammin.log | 114 +-- .../camelot64/kickc/test/ref/zpparammin.sym | 6 +- 31 files changed, 965 insertions(+), 952 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/asm/AsmFragment.java b/src/main/java/dk/camelot64/kickc/asm/AsmFragment.java index 4df79c735..5d9d729ac 100644 --- a/src/main/java/dk/camelot64/kickc/asm/AsmFragment.java +++ b/src/main/java/dk/camelot64/kickc/asm/AsmFragment.java @@ -23,7 +23,9 @@ public class AsmFragment { */ private Map bindings; - /** The scope containing the fragment. Used when referenginv symbols defined in other scopes. */ + /** + * The scope containing the fragment. Used when referenginv symbols defined in other scopes. + */ private ScopeRef scope; /** @@ -227,9 +229,7 @@ public class AsmFragment { if (value instanceof VariableRef) { value = program.getScope().getVariable((VariableRef) value); } - if (value instanceof Variable) { - value = ((Variable) value).getAllocation(); - } else if (value instanceof PointerDereferenceSimple) { + if (value instanceof PointerDereferenceSimple) { PointerDereferenceSimple deref = (PointerDereferenceSimple) value; return "_star_" + bind(deref.getPointer()); } else if (value instanceof PointerDereferenceIndexed) { @@ -237,14 +237,21 @@ public class AsmFragment { return bind(deref.getPointer()) + "_staridx_" + bind(deref.getIndex()); } - // Find value if it is already bound - for (String name : bindings.keySet()) { - if (value.equals(bindings.get(name))) { - return name; + if (value instanceof Variable) { + Registers.Register register = ((Variable) value).getAllocation(); + + // Find value if it is already bound + for (String name : bindings.keySet()) { + Value bound = bindings.get(name); + if(bound instanceof Variable) { + Registers.Register boundRegister = ((Variable) bound).getAllocation(); + if(boundRegister!=null && boundRegister.equals(register)) { + return name; + } + } } - } - if (value instanceof Registers.Register) { - Registers.Register register = (Registers.Register) value; + + // Create a new suitable name if (Registers.RegisterType.ZP_BYTE.equals(register.getType())) { String name = "zpby" + nextZpByteIdx++; bindings.put(name, value); @@ -307,20 +314,16 @@ public class AsmFragment { throw new RuntimeException("Binding '" + name + "' not found in fragment " + signature + ".asm"); } String bound; - if (boundValue instanceof Registers.Register) { - Registers.Register register = (Registers.Register) boundValue; - if (register instanceof Registers.RegisterZp) { - Registers.RegisterZp zpReg = (Registers.RegisterZp) register; - if(zpReg.getName()!=null) { - Variable variable = zpReg.getVariable(); - Scope varScope = variable.getScope(); - if(!varScope.getRef().equals(scope) && varScope.getRef().getFullName().length()>0) { - bound = varScope.getFullName()+"."+zpReg.getName().replace('@', 'b').replace(':', '_').replace("#", "_"); - } else { - bound = zpReg.getName().replace('@', 'b').replace(':', '_').replace("#", "_"); - } - } else { - bound = String.format("$%x", zpReg.getZp()); + if (boundValue instanceof Variable) { + Variable boundVar = (Variable) boundValue; + Registers.Register register = boundVar.getAllocation(); + if (register != null && register instanceof Registers.RegisterZp) { + Scope varScope = boundVar.getScope(); + String asmName = boundVar.getAsmName() == null ? boundVar.getLocalName() : boundVar.getAsmName(); + if (!varScope.getRef().equals(scope) && varScope.getRef().getFullName().length() > 0) { + bound = varScope.getFullName() + "." + asmName.replace('@', 'b').replace(':', '_').replace("#", "_"); + } else { + bound = asmName.replace('@', 'b').replace(':', '_').replace("#", "_"); } } else { throw new RuntimeException("Register Type not implemented " + register); diff --git a/src/main/java/dk/camelot64/kickc/icl/Registers.java b/src/main/java/dk/camelot64/kickc/icl/Registers.java index e7827e539..8803bcb31 100644 --- a/src/main/java/dk/camelot64/kickc/icl/Registers.java +++ b/src/main/java/dk/camelot64/kickc/icl/Registers.java @@ -39,30 +39,14 @@ public class Registers { /** The ZP address used for the byte. */ private int zp; - /** The name used as a label for the register in the ASM code. */ - private String name; - - /** The variable represented by the register. */ - private Variable variable; - - public RegisterZp(int zp, String name, Variable variable) { + public RegisterZp(int zp) { this.zp = zp; - this.name = name; - this.variable = variable; } public int getZp() { return zp; } - public String getName() { - return name; - } - - public Variable getVariable() { - return variable; - } - @Override public boolean isZp() { return true; @@ -70,7 +54,7 @@ public class Registers { @Override public String toString() { - return "zp "+getType().toString()+":"+zp+(name==null?"":(" "+name)); + return "zp "+getType().toString()+":"+zp; } @Override @@ -82,20 +66,15 @@ public class Registers { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + RegisterZp that = (RegisterZp) o; - if (zp != that.zp) return false; - return name != null ? name.equals(that.name) : that.name == null; + + return zp == that.zp; } @Override public int hashCode() { - int result = zp; - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } - - public void setName(String name) { - this.name = name; + return zp; } } @@ -103,8 +82,8 @@ public class Registers { /** A zero page address used as a register for a single byte variable. */ public static class RegisterZpByte extends RegisterZp { - public RegisterZpByte(int zp, String name, Variable variable) { - super(zp, name, variable); + public RegisterZpByte(int zp) { + super(zp); } @Override @@ -118,8 +97,8 @@ public class Registers { /** Two zero page addresses used as a register for a single word variable. */ public static class RegisterZpWord extends RegisterZp { - public RegisterZpWord(int zp, String name, Variable variable) { - super(zp, name, variable); + public RegisterZpWord(int zp) { + super(zp); } @Override @@ -132,8 +111,8 @@ public class Registers { /** A zero page address used as a register for a boolean variable. */ public static class RegisterZpBool extends RegisterZp { - public RegisterZpBool(int zp, String name, Variable variable) { - super(zp, name, variable); + public RegisterZpBool(int zp) { + super(zp); } @Override @@ -147,8 +126,8 @@ public class Registers { /** A zro page address pair used as a register containing a pointer to a byte. */ public static class RegisterZpPointerByte extends RegisterZp { - public RegisterZpPointerByte(int zp, String name, Variable variable) { - super(zp, name, variable); + public RegisterZpPointerByte(int zp) { + super(zp); } @Override diff --git a/src/main/java/dk/camelot64/kickc/icl/Scope.java b/src/main/java/dk/camelot64/kickc/icl/Scope.java index f5fd871b4..cbde071e1 100644 --- a/src/main/java/dk/camelot64/kickc/icl/Scope.java +++ b/src/main/java/dk/camelot64/kickc/icl/Scope.java @@ -273,6 +273,10 @@ public abstract class Scope implements Symbol { if (symbolClass == null || symbolClass.isInstance(symbol)) { res.append(symbol.toString(program)); if (symbol instanceof Variable) { + String asmName = ((Variable) symbol).getAsmName(); + if(asmName!=null) { + res.append(" "+asmName); + } Registers.Register register = ((Variable) symbol).getAllocation(); if (register != null) { res.append(" " + register); diff --git a/src/main/java/dk/camelot64/kickc/icl/Variable.java b/src/main/java/dk/camelot64/kickc/icl/Variable.java index e2b6ec159..81894dd28 100644 --- a/src/main/java/dk/camelot64/kickc/icl/Variable.java +++ b/src/main/java/dk/camelot64/kickc/icl/Variable.java @@ -21,6 +21,9 @@ public abstract class Variable implements Symbol { /** If the variable is assigned to an ASM register, this contains the register. If null the variable has no allocation (yet). Constants are never assigned to registers. */ private Registers.Register allocation; + /** A short name used for the variable in ASM code. If possible variable names of ZP variables are shortened in ASM code. This is possible, when all versions of the var use the same register. */ + private String asmName; + /** If the variable is a constant this is the constant value. If null the variable is not considered constant.*/ private Constant constant; @@ -82,6 +85,14 @@ public abstract class Variable implements Symbol { this.allocation = allocation; } + public String getAsmName() { + return asmName; + } + + public void setAsmName(String asmName) { + this.asmName = asmName; + } + public Constant getConstant() { return constant; } @@ -96,29 +107,6 @@ public abstract class Variable implements Symbol { @JsonIgnore public abstract boolean isIntermediate(); - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Variable variable = (Variable) o; - if (inferredType != variable.inferredType) return false; - if (name != null ? !name.equals(variable.name) : variable.name != null) return false; - if (scope != null ? !scope.equals(variable.scope) : variable.scope != null) return false; - if (type != null ? !type.equals(variable.type) : variable.type != null) return false; - if (allocation != null ? !allocation.equals(variable.allocation) : variable.allocation != null) return false; - return constant != null ? constant.equals(variable.constant) : variable.constant == null; - } - - @Override - public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + (scope != null ? scope.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (inferredType ? 1 : 0); - result = 31 * result + (allocation != null ? allocation.hashCode() : 0); - result = 31 * result + (constant != null ? constant.hashCode() : 0); - return result; - } public Scope getScope() { return scope; @@ -133,6 +121,37 @@ public abstract class Variable implements Symbol { } } + @JsonIgnore + public VariableRef getRef() { + return new VariableRef(this); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Variable variable = (Variable) o; + if (inferredType != variable.inferredType) return false; + if (name != null ? !name.equals(variable.name) : variable.name != null) return false; + if (scope != null ? !scope.equals(variable.scope) : variable.scope != null) return false; + if (type != null ? !type.equals(variable.type) : variable.type != null) return false; + if (allocation != null ? !allocation.equals(variable.allocation) : variable.allocation != null) return false; + if (asmName != null ? !asmName.equals(variable.asmName) : variable.asmName != null) return false; + return constant != null ? constant.equals(variable.constant) : variable.constant == null; + } + + @Override + public int hashCode() { + int result = name != null ? name.hashCode() : 0; + result = 31 * result + (scope != null ? scope.hashCode() : 0); + result = 31 * result + (type != null ? type.hashCode() : 0); + result = 31 * result + (inferredType ? 1 : 0); + result = 31 * result + (allocation != null ? allocation.hashCode() : 0); + result = 31 * result + (asmName != null ? asmName.hashCode() : 0); + result = 31 * result + (constant != null ? constant.hashCode() : 0); + return result; + } + @Override public String toString() { return toString(null); @@ -140,11 +159,13 @@ public abstract class Variable implements Symbol { @Override public String toString(Program program) { - return "(" + type.getTypeName() + (inferredType ? "~" : "") + ") " + getFullName(); + String s = new StringBuilder() + .append("(") + .append(type.getTypeName()) + .append(inferredType ? "~" : "") + .append(") ") + .append(getFullName()).toString(); + return s; } - @JsonIgnore - public VariableRef getRef() { - return new VariableRef(this); - } } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 0e81439ed..cdc618aef 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -56,7 +56,7 @@ public class Pass4CodeGeneration { ControlFlowBlock defaultSuccessor = getGraph().getDefaultSuccessor(block); if (defaultSuccessor != null) { if (defaultSuccessor.hasPhiBlock()) { - genBlockPhiTransition(asm, block, defaultSuccessor); + genBlockPhiTransition(asm, block, defaultSuccessor, defaultSuccessor.getPhiBlock()); } asm.addInstruction("JMP", AsmAddressingMode.ABS, defaultSuccessor.getLabel().getLocalName().replace('@', 'b').replace(':', '_')); } @@ -79,10 +79,10 @@ public class Pass4CodeGeneration { Registers.Register register = scopeVar.getAllocation(); if(register!=null && register.isZp()) { Registers.RegisterZp registerZp = (Registers.RegisterZp) register; - String registerZpName = registerZp.getName(); - if(registerZpName !=null && !added.contains(registerZpName)) { - asm.addLabelDecl(registerZpName, registerZp.getZp()); - added.add(registerZpName); + String asmName = scopeVar.getAsmName(); + if(asmName !=null && !added.contains(asmName)) { + asm.addLabelDecl(asmName, registerZp.getZp()); + added.add(asmName); } } } @@ -159,7 +159,7 @@ public class Pass4CodeGeneration { if (genCallPhiEntry) { ControlFlowBlock callSuccessor = getGraph().getCallSuccessor(block); if (callSuccessor != null && callSuccessor.hasPhiBlock()) { - genBlockPhiTransition(asm, block, callSuccessor); + genBlockPhiTransition(asm, block, callSuccessor, call); } } asm.addInstruction("jsr", AsmAddressingMode.ABS, call.getProcedure().getFullName()); @@ -208,14 +208,14 @@ public class Pass4CodeGeneration { }); for (ControlFlowBlock predecessor : predecessors) { if (block.getLabel().equals(predecessor.getConditionalSuccessor())) { - genBlockPhiTransition(asm, predecessor, block); + genBlockPhiTransition(asm, predecessor, block, block.getPhiBlock()); asm.addInstruction("JMP", AsmAddressingMode.ABS, block.getLabel().getLocalName().replace('@', 'b').replace(':', '_')); } } } } - private void genBlockPhiTransition(AsmProgram asm, ControlFlowBlock fromBlock, ControlFlowBlock toBlock) { + private void genBlockPhiTransition(AsmProgram asm, ControlFlowBlock fromBlock, ControlFlowBlock toBlock, Statement scopeStatement) { Statement toFirstStatement = toBlock.getStatements().get(0); asm.startSegment(toFirstStatement.getIndex(), "[" + toFirstStatement.getIndex() + "]" + " phi from " + fromBlock.getLabel().getFullName() + " to " + toBlock.getLabel().getFullName()); asm.addLabel((toBlock.getLabel().getLocalName() + "_from_" + fromBlock.getLabel().getLocalName()).replace('@', 'b').replace(':', '_')); @@ -233,7 +233,7 @@ public class Pass4CodeGeneration { }); for (StatementPhiBlock.PhiRValue phiRValue : phiRValues) { if (phiRValue.getPredecessor().equals(fromBlock.getLabel())) { - genAsmMove(asm, phiVariable.getVariable(), phiRValue.getrValue(), phiBlock); + genAsmMove(asm, phiVariable.getVariable(), phiRValue.getrValue(), scopeStatement); break; } } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4RegistersFinalize.java b/src/main/java/dk/camelot64/kickc/passes/Pass4RegistersFinalize.java index 6ae79b9ef..78491abe4 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4RegistersFinalize.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4RegistersFinalize.java @@ -2,9 +2,7 @@ package dk.camelot64.kickc.passes; import dk.camelot64.kickc.icl.*; -import java.util.Collection; -import java.util.LinkedHashSet; -import java.util.Set; +import java.util.*; /** * Move register allocation from equivalence classes to RegisterAllocation. @@ -23,46 +21,52 @@ public class Pass4RegistersFinalize extends Pass2Base { } liveRangeEquivalenceClassSet.storeRegisterAllocation(); if (reallocateZp) { - shortenZpRegisterNames(liveRangeEquivalenceClassSet); + shortenZpRegisterNames(); } } /** * Shorten register names for ZP registers if possible - * - * @param equivalenceClassSet */ - private void shortenZpRegisterNames(LiveRangeEquivalenceClassSet equivalenceClassSet) { + private void shortenZpRegisterNames() { Collection allScopes = getProgram().getScope().getAllScopes(true); allScopes.add(getProgram().getScope()); for (Scope scope : allScopes) { - Set used = new LinkedHashSet<>(); - // Find all names without "#" + // Create initial short names - and remember the ones without "#" for (Variable variable : scope.getAllVariables(false)) { if (variable.getAllocation() != null && variable.getAllocation().isZp()) { - Registers.RegisterZp regZp = (Registers.RegisterZp) variable.getAllocation(); - String regZpName = regZp.getName(); - if (!regZpName.contains("#")) { - used.add(regZpName); - } + variable.setAsmName(variable.getLocalName()); + } else { + variable.setAsmName(null); } } - // For all names with "#" try to shorten + // Find short asm names for all variables if possible + Map shortNames = new LinkedHashMap<>(); for (Variable variable : scope.getAllVariables(false)) { - if (variable.getAllocation() != null && variable.getAllocation().isZp()) { - Registers.RegisterZp regZp = (Registers.RegisterZp) variable.getAllocation(); - String regZpName = regZp.getName(); - if (regZpName.contains("#")) { - regZpName = regZpName.substring(0, regZpName.indexOf("#")); - if (!used.contains(regZpName)) { - regZp.setName(regZpName); - used.add(regZpName); + Registers.Register allocation = variable.getAllocation(); + if (allocation != null && allocation.isZp()) { + String asmName = variable.getAsmName(); + if (asmName.contains("#")) { + String shortName = asmName.substring(0, variable.getAsmName().indexOf("#")); + if (shortNames.get(shortName) == null || shortNames.get(shortName).equals(allocation)) { + // Short name is usable! + variable.setAsmName(shortName); + shortNames.put(shortName, allocation); + continue; } } + if (shortNames.get(asmName) == null || shortNames.get(asmName).equals(allocation)) { + // Try the full name instead + variable.setAsmName(asmName); + shortNames.put(asmName, allocation); + continue; + } else { + // Be unhappy (if tyhis triggers in the future extend with ability to create new names by adding suffixes) + throw new RuntimeException("ASM name already used "+asmName); + } } } - } } @@ -95,28 +99,27 @@ public class Pass4RegistersFinalize extends Pass2Base { /** * Create a new register for a specific variable type. * - * @param varType The variable type to create a register for. + * @param variable The variable to create a register for. * The register type created uses one or more zero page locations based on the variable type * @return The new zeropage register */ private Registers.Register allocateNewRegisterZp(Variable variable) { SymbolType varType = variable.getType(); - String name = variable.getLocalName(); if (varType.equals(SymbolTypeBasic.BYTE)) { - return new Registers.RegisterZpByte(currentZp++, name, variable); + return new Registers.RegisterZpByte(currentZp++); } else if (varType.equals(SymbolTypeBasic.WORD)) { Registers.RegisterZpWord registerZpWord = - new Registers.RegisterZpWord(currentZp, name, variable); + new Registers.RegisterZpWord(currentZp); currentZp = currentZp + 2; return registerZpWord; } else if (varType.equals(SymbolTypeBasic.BOOLEAN)) { - return new Registers.RegisterZpBool(currentZp++, name, variable); + return new Registers.RegisterZpBool(currentZp++); } else if (varType.equals(SymbolTypeBasic.VOID)) { // No need to setRegister register for VOID value return null; } else if (varType instanceof SymbolTypePointer) { Registers.RegisterZpPointerByte registerZpPointerByte = - new Registers.RegisterZpPointerByte(currentZp, name, variable); + new Registers.RegisterZpPointerByte(currentZp); currentZp = currentZp + 2; return registerZpPointerByte; } else { diff --git a/src/main/java/dk/camelot64/kickc/test/ref/bresenham.log b/src/main/java/dk/camelot64/kickc/test/ref/bresenham.log index 33210a286..58bef2742 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/bresenham.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/bresenham.log @@ -1502,10 +1502,10 @@ Complete equivalence classes [ main::x#2 main::x#1 ] [ main::e#3 main::e#5 main::e#1 main::e#2 ] [ main::y#2 main::y#4 main::y#1 ] -Allocated zp ZP_PTR_BYTE:2 cursor#3 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] -Allocated zp ZP_BYTE:4 x#2 [ main::x#2 main::x#1 ] -Allocated zp ZP_BYTE:5 e#3 [ main::e#3 main::e#5 main::e#1 main::e#2 ] -Allocated zp ZP_BYTE:6 y#2 [ main::y#2 main::y#4 main::y#1 ] +Allocated zp ZP_PTR_BYTE:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] +Allocated zp ZP_BYTE:4 [ main::x#2 main::x#1 ] +Allocated zp ZP_BYTE:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] +Allocated zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] INITIAL ASM //SEG0 Global ZP labels //SEG1 @begin @@ -1611,12 +1611,12 @@ main: { } Statement [2] *((byte*) main::cursor#3) ← (byte) 81 [ main::cursor#3 main::x#2 main::e#3 main::y#2 ] always clobbers reg byte a reg byte y -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 x [ main::x#2 main::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 x [ main::x#2 main::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 e [ main::e#3 main::e#5 main::e#1 main::e#2 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 e [ main::e#3 main::e#5 main::e#1 main::e#2 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 y [ main::y#2 main::y#4 main::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 y [ main::y#2 main::y#4 main::y#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::x#2 main::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ main::x#2 main::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] Statement [5] (byte) main::e#1 ← (byte) main::e#3 + (byte) 24 [ main::x#1 main::e#1 main::y#2 main::cursor#1 ] always clobbers reg byte a Statement [8] (byte*) main::cursor#2 ← (byte*) main::cursor#1 + (byte) 40 [ main::x#1 main::e#1 main::cursor#2 main::y#1 ] always clobbers reg byte a Statement [9] (byte) main::e#2 ← (byte) main::e#1 - (byte) 39 [ main::x#1 main::cursor#2 main::e#2 main::y#1 ] always clobbers reg byte a @@ -1625,20 +1625,18 @@ Statement [5] (byte) main::e#1 ← (byte) main::e#3 + (byte) 24 [ main::x#1 main Statement [8] (byte*) main::cursor#2 ← (byte*) main::cursor#1 + (byte) 40 [ main::x#1 main::e#1 main::cursor#2 main::y#1 ] always clobbers reg byte a Statement [9] (byte) main::e#2 ← (byte) main::e#1 - (byte) 39 [ main::x#1 main::cursor#2 main::e#2 main::y#1 ] always clobbers reg byte a REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_PTR_BYTE:2 cursor [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] : zp ZP_PTR_BYTE:2 cursor , -Potential registers zp ZP_BYTE:4 x [ main::x#2 main::x#1 ] : zp ZP_BYTE:4 x , reg byte x , -Potential registers zp ZP_BYTE:5 e [ main::e#3 main::e#5 main::e#1 main::e#2 ] : zp ZP_BYTE:5 e , reg byte x , -Potential registers zp ZP_BYTE:6 y [ main::y#2 main::y#4 main::y#1 ] : zp ZP_BYTE:6 y , reg byte x , +Potential registers zp ZP_PTR_BYTE:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] : zp ZP_PTR_BYTE:2 , +Potential registers zp ZP_BYTE:4 [ main::x#2 main::x#1 ] : zp ZP_BYTE:4 , reg byte x , +Potential registers zp ZP_BYTE:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] : zp ZP_BYTE:5 , reg byte x , +Potential registers zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] : zp ZP_BYTE:6 , reg byte x , REGISTER UPLIFT SCOPES -Uplift Scope [main] 55: zp ZP_BYTE:5 e [ main::e#3 main::e#5 main::e#1 main::e#2 ] 46.75: zp ZP_PTR_BYTE:2 cursor [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] 29.33: zp ZP_BYTE:6 y [ main::y#2 main::y#4 main::y#1 ] 14.67: zp ZP_BYTE:4 x [ main::x#2 main::x#1 ] +Uplift Scope [main] 55: zp ZP_BYTE:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] 46.75: zp ZP_PTR_BYTE:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] 29.33: zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] 14.67: zp ZP_BYTE:4 [ main::x#2 main::x#1 ] Uplift Scope [] -Uplifting [main] best 1315 combination reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ] zp ZP_PTR_BYTE:2 cursor [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] zp ZP_BYTE:6 y [ main::y#2 main::y#4 main::y#1 ] zp ZP_BYTE:4 x [ main::x#2 main::x#1 ] +Uplifting [main] best 1315 combination reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ] zp ZP_PTR_BYTE:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] zp ZP_BYTE:4 [ main::x#2 main::x#1 ] Uplifting [] best 1315 combination -Allocated (was zp ZP_PTR_BYTE:2 cursor) zp ZP_PTR_BYTE:2 cursor#3 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] -Allocated (was zp ZP_BYTE:4 x) zp ZP_BYTE:4 x#2 [ main::x#2 main::x#1 ] -Allocated (was zp ZP_BYTE:6 y) zp ZP_BYTE:5 y#2 [ main::y#2 main::y#4 main::y#1 ] +Allocated (was zp ZP_BYTE:6) zp ZP_BYTE:5 [ main::y#2 main::y#4 main::y#1 ] Removing instruction jmp bend Removing instruction jmp b1 Removing instruction jmp b3 @@ -2035,33 +2033,33 @@ FINAL SYMBOL TABLE (label) main::@3 (label) main::@return (byte*) main::cursor -(byte*) main::cursor#1 zp ZP_PTR_BYTE:2 cursor 8.25 -(byte*) main::cursor#2 zp ZP_PTR_BYTE:2 cursor 11.0 -(byte*) main::cursor#3 zp ZP_PTR_BYTE:2 cursor 11.0 -(byte*) main::cursor#5 zp ZP_PTR_BYTE:2 cursor 16.5 +(byte*) main::cursor#1 cursor zp ZP_PTR_BYTE:2 8.25 +(byte*) main::cursor#2 cursor zp ZP_PTR_BYTE:2 11.0 +(byte*) main::cursor#3 cursor zp ZP_PTR_BYTE:2 11.0 +(byte*) main::cursor#5 cursor zp ZP_PTR_BYTE:2 16.5 (byte) main::e (byte) main::e#1 reg byte x 11.0 (byte) main::e#2 reg byte x 22.0 (byte) main::e#3 reg byte x 5.5 (byte) main::e#5 reg byte x 16.5 (byte) main::x -(byte) main::x#1 zp ZP_BYTE:4 x 3.666666666666667 -(byte) main::x#2 zp ZP_BYTE:4 x 11.0 +(byte) main::x#1 x zp ZP_BYTE:4 3.666666666666667 +(byte) main::x#2 x zp ZP_BYTE:4 11.0 (byte) main::x0 (byte) main::x1 (byte) main::xd (byte) main::y -(byte) main::y#1 zp ZP_BYTE:5 y 7.333333333333333 -(byte) main::y#2 zp ZP_BYTE:5 y 5.5 -(byte) main::y#4 zp ZP_BYTE:5 y 16.5 +(byte) main::y#1 y zp ZP_BYTE:5 7.333333333333333 +(byte) main::y#2 y zp ZP_BYTE:5 5.5 +(byte) main::y#4 y zp ZP_BYTE:5 16.5 (byte) main::y0 (byte) main::y1 (byte) main::yd -zp ZP_PTR_BYTE:2 cursor [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] -zp ZP_BYTE:4 x [ main::x#2 main::x#1 ] +zp ZP_PTR_BYTE:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] +zp ZP_BYTE:4 [ main::x#2 main::x#1 ] reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ] -zp ZP_BYTE:5 y [ main::y#2 main::y#4 main::y#1 ] +zp ZP_BYTE:5 [ main::y#2 main::y#4 main::y#1 ] FINAL CODE //SEG0 Global ZP labels diff --git a/src/main/java/dk/camelot64/kickc/test/ref/bresenham.sym b/src/main/java/dk/camelot64/kickc/test/ref/bresenham.sym index dd264d0a9..ba1f39698 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/bresenham.sym +++ b/src/main/java/dk/camelot64/kickc/test/ref/bresenham.sym @@ -8,30 +8,30 @@ (label) main::@3 (label) main::@return (byte*) main::cursor -(byte*) main::cursor#1 zp ZP_PTR_BYTE:2 cursor 8.25 -(byte*) main::cursor#2 zp ZP_PTR_BYTE:2 cursor 11.0 -(byte*) main::cursor#3 zp ZP_PTR_BYTE:2 cursor 11.0 -(byte*) main::cursor#5 zp ZP_PTR_BYTE:2 cursor 16.5 +(byte*) main::cursor#1 cursor zp ZP_PTR_BYTE:2 8.25 +(byte*) main::cursor#2 cursor zp ZP_PTR_BYTE:2 11.0 +(byte*) main::cursor#3 cursor zp ZP_PTR_BYTE:2 11.0 +(byte*) main::cursor#5 cursor zp ZP_PTR_BYTE:2 16.5 (byte) main::e (byte) main::e#1 reg byte x 11.0 (byte) main::e#2 reg byte x 22.0 (byte) main::e#3 reg byte x 5.5 (byte) main::e#5 reg byte x 16.5 (byte) main::x -(byte) main::x#1 zp ZP_BYTE:4 x 3.666666666666667 -(byte) main::x#2 zp ZP_BYTE:4 x 11.0 +(byte) main::x#1 x zp ZP_BYTE:4 3.666666666666667 +(byte) main::x#2 x zp ZP_BYTE:4 11.0 (byte) main::x0 (byte) main::x1 (byte) main::xd (byte) main::y -(byte) main::y#1 zp ZP_BYTE:5 y 7.333333333333333 -(byte) main::y#2 zp ZP_BYTE:5 y 5.5 -(byte) main::y#4 zp ZP_BYTE:5 y 16.5 +(byte) main::y#1 y zp ZP_BYTE:5 7.333333333333333 +(byte) main::y#2 y zp ZP_BYTE:5 5.5 +(byte) main::y#4 y zp ZP_BYTE:5 16.5 (byte) main::y0 (byte) main::y1 (byte) main::yd -zp ZP_PTR_BYTE:2 cursor [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] -zp ZP_BYTE:4 x [ main::x#2 main::x#1 ] +zp ZP_PTR_BYTE:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] +zp ZP_BYTE:4 [ main::x#2 main::x#1 ] reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ] -zp ZP_BYTE:5 y [ main::y#2 main::y#4 main::y#1 ] +zp ZP_BYTE:5 [ main::y#2 main::y#4 main::y#1 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/fibmem.log b/src/main/java/dk/camelot64/kickc/test/ref/fibmem.log index 199bb6147..0615004dc 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/fibmem.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/fibmem.log @@ -590,10 +590,10 @@ Complete equivalence classes [ main::$1 ] [ main::$3 ] [ main::$4 ] -Allocated zp ZP_BYTE:2 i#2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 $1 [ main::$1 ] -Allocated zp ZP_BYTE:4 $3 [ main::$3 ] -Allocated zp ZP_BYTE:5 $4 [ main::$4 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::$1 ] +Allocated zp ZP_BYTE:4 [ main::$3 ] +Allocated zp ZP_BYTE:5 [ main::$4 ] INITIAL ASM //SEG0 Global ZP labels //SEG1 @begin @@ -661,15 +661,15 @@ Statement [1] *((word) 4352) ← (byte) 0 [ ] always clobbers reg byte a Statement [2] *((word) 4353) ← (byte) 1 [ ] always clobbers reg byte a Statement [1] *((word) 4352) ← (byte) 0 [ ] always clobbers reg byte a Statement [2] *((word) 4353) ← (byte) 1 [ ] always clobbers reg byte a -Equivalence Class zp ZP_BYTE:4 $3 [ main::$3 ] has ALU potential. +Equivalence Class zp ZP_BYTE:4 [ main::$3 ] has ALU potential. REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 i , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 $1 [ main::$1 ] : zp ZP_BYTE:3 $1 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:4 $3 [ main::$3 ] : zp ZP_BYTE:4 $3 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp ZP_BYTE:5 $4 [ main::$4 ] : zp ZP_BYTE:5 $4 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , 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 , +Potential registers zp ZP_BYTE:4 [ main::$3 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp ZP_BYTE:5 [ main::$4 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 27.5: zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:4 $3 [ main::$3 ] 22: zp ZP_BYTE:5 $4 [ main::$4 ] 11: zp ZP_BYTE:3 $1 [ main::$1 ] +Uplift Scope [main] 27.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:4 [ main::$3 ] 22: zp ZP_BYTE:5 [ main::$4 ] 11: zp ZP_BYTE:3 [ main::$1 ] Uplift Scope [] Uplifting [main] best 362 combination reg byte x [ main::i#2 main::i#1 ] reg byte alu [ main::$3 ] reg byte a [ main::$4 ] reg byte a [ main::$1 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.asm b/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.asm index 8381e9545..7b6b6a72e 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.asm +++ b/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.asm @@ -54,9 +54,9 @@ plot: { } flip: { .label c = 5 - .label y = 4 + .label r = 4 lda #$10 - sta plot.y + sta r ldy #$f ldx #$0 b1: @@ -74,8 +74,8 @@ flip: { lda c bne b2 dey - dec plot.y - lda plot.y + dec r + lda r bne b1 ldx #$0 b3: diff --git a/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.log b/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.log index fe84a425c..3eb5d5e16 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.log @@ -4340,22 +4340,22 @@ Complete equivalence classes [ plot::$3 ] [ flip::$0 ] [ flip::$4 ] -Allocated zp ZP_BYTE:2 c#2 [ main::c#2 main::c#1 ] -Allocated zp ZP_PTR_BYTE:3 line#2 [ plot::line#2 plot::line#1 ] -Allocated zp ZP_BYTE:5 y#2 [ plot::y#2 plot::y#1 ] -Allocated zp ZP_BYTE:6 i#2 [ plot::i#2 plot::i#3 plot::i#1 ] -Allocated zp ZP_BYTE:7 x#2 [ plot::x#2 plot::x#1 ] -Allocated zp ZP_BYTE:8 r#2 [ flip::r#2 flip::r#1 ] -Allocated zp ZP_BYTE:9 srcIdx#2 [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] -Allocated zp ZP_BYTE:10 dstIdx#3 [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] -Allocated zp ZP_BYTE:11 c#2 [ flip::c#2 flip::c#1 ] -Allocated zp ZP_BYTE:12 i#2 [ flip::i#2 flip::i#1 ] -Allocated zp ZP_BYTE:13 i#2 [ prepare::i#2 prepare::i#1 ] -Allocated zp ZP_BYTE:14 $1 [ main::$1 ] -Allocated zp ZP_BYTE:15 $3 [ main::$3 ] -Allocated zp ZP_BYTE:16 $3 [ plot::$3 ] -Allocated zp ZP_BYTE:17 $0 [ flip::$0 ] -Allocated zp ZP_BYTE:18 $4 [ flip::$4 ] +Allocated zp ZP_BYTE:2 [ main::c#2 main::c#1 ] +Allocated zp ZP_PTR_BYTE:3 [ plot::line#2 plot::line#1 ] +Allocated zp ZP_BYTE:5 [ plot::y#2 plot::y#1 ] +Allocated zp ZP_BYTE:6 [ plot::i#2 plot::i#3 plot::i#1 ] +Allocated zp ZP_BYTE:7 [ plot::x#2 plot::x#1 ] +Allocated zp ZP_BYTE:8 [ flip::r#2 flip::r#1 ] +Allocated zp ZP_BYTE:9 [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] +Allocated zp ZP_BYTE:10 [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] +Allocated zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] +Allocated zp ZP_BYTE:12 [ flip::i#2 flip::i#1 ] +Allocated zp ZP_BYTE:13 [ prepare::i#2 prepare::i#1 ] +Allocated zp ZP_BYTE:14 [ main::$1 ] +Allocated zp ZP_BYTE:15 [ main::$3 ] +Allocated zp ZP_BYTE:16 [ plot::$3 ] +Allocated zp ZP_BYTE:17 [ flip::$0 ] +Allocated zp ZP_BYTE:18 [ flip::$4 ] INITIAL ASM //SEG0 Global ZP labels //SEG1 @begin @@ -4658,48 +4658,48 @@ prepare: { } Statement [20] (byte*) plot::line#1 ← (byte*) plot::line#2 + (byte) 40 [ plot::i#1 plot::line#1 plot::y#2 ] always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 i [ plot::i#2 plot::i#3 plot::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 y [ plot::y#2 plot::y#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ plot::i#2 plot::i#3 plot::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ plot::y#2 plot::y#1 ] Statement [29] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte) 16 [ flip::srcIdx#1 flip::dstIdx#1 flip::c#2 flip::r#2 ] always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 srcIdx [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 c [ flip::c#2 flip::c#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 r [ flip::r#2 flip::r#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ flip::r#2 flip::r#1 ] Statement [20] (byte*) plot::line#1 ← (byte*) plot::line#2 + (byte) 40 [ plot::i#1 plot::line#1 plot::y#2 ] always clobbers reg byte a Statement [29] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte) 16 [ flip::srcIdx#1 flip::dstIdx#1 flip::c#2 flip::r#2 ] always clobbers reg byte a REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 c [ main::c#2 main::c#1 ] : zp ZP_BYTE:2 c , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_PTR_BYTE:3 line [ plot::line#2 plot::line#1 ] : zp ZP_PTR_BYTE:3 line , -Potential registers zp ZP_BYTE:5 y [ plot::y#2 plot::y#1 ] : zp ZP_BYTE:5 y , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:6 i [ plot::i#2 plot::i#3 plot::i#1 ] : zp ZP_BYTE:6 i , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:7 x [ plot::x#2 plot::x#1 ] : zp ZP_BYTE:7 x , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:8 r [ flip::r#2 flip::r#1 ] : zp ZP_BYTE:8 r , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:9 srcIdx [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] : zp ZP_BYTE:9 srcIdx , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:10 dstIdx [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] : zp ZP_BYTE:10 dstIdx , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:11 c [ flip::c#2 flip::c#1 ] : zp ZP_BYTE:11 c , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:12 i [ flip::i#2 flip::i#1 ] : zp ZP_BYTE:12 i , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:13 i [ prepare::i#2 prepare::i#1 ] : zp ZP_BYTE:13 i , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:14 $1 [ main::$1 ] : zp ZP_BYTE:14 $1 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:15 $3 [ main::$3 ] : zp ZP_BYTE:15 $3 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:16 $3 [ plot::$3 ] : zp ZP_BYTE:16 $3 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:17 $0 [ flip::$0 ] : zp ZP_BYTE:17 $0 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:18 $4 [ flip::$4 ] : zp ZP_BYTE:18 $4 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::c#2 main::c#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_PTR_BYTE:3 [ plot::line#2 plot::line#1 ] : zp ZP_PTR_BYTE:3 , +Potential registers zp ZP_BYTE:5 [ plot::y#2 plot::y#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ plot::i#2 plot::i#3 plot::i#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ plot::x#2 plot::x#1 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:8 [ flip::r#2 flip::r#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:10 [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:12 [ flip::i#2 flip::i#1 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:13 [ prepare::i#2 prepare::i#1 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:14 [ main::$1 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:15 [ main::$3 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:16 [ plot::$3 ] : zp ZP_BYTE:16 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:17 [ flip::$0 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:18 [ flip::$4 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [flip] 2,002: zp ZP_BYTE:17 $0 [ flip::$0 ] 1,901.9: zp ZP_BYTE:11 c [ flip::c#2 flip::c#1 ] 1,746.33: zp ZP_BYTE:10 dstIdx [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] 1,537.1: zp ZP_BYTE:9 srcIdx [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] 286.17: zp ZP_BYTE:12 i [ flip::i#2 flip::i#1 ] 202: zp ZP_BYTE:18 $4 [ flip::$4 ] 173.94: zp ZP_BYTE:8 r [ flip::r#2 flip::r#1 ] -Uplift Scope [plot] 2,252.25: zp ZP_BYTE:7 x [ plot::x#2 plot::x#1 ] 2,002: zp ZP_BYTE:16 $3 [ plot::$3 ] 1,587.17: zp ZP_BYTE:6 i [ plot::i#2 plot::i#3 plot::i#1 ] 239.19: zp ZP_PTR_BYTE:3 line [ plot::line#2 plot::line#1 ] 176.75: zp ZP_BYTE:5 y [ plot::y#2 plot::y#1 ] -Uplift Scope [main] 2,002: zp ZP_BYTE:14 $1 [ main::$1 ] 2,002: zp ZP_BYTE:15 $3 [ main::$3 ] 191.9: zp ZP_BYTE:2 c [ main::c#2 main::c#1 ] -Uplift Scope [prepare] 38.5: zp ZP_BYTE:13 i [ prepare::i#2 prepare::i#1 ] +Uplift Scope [flip] 2,002: zp ZP_BYTE:17 [ flip::$0 ] 1,901.9: zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] 1,746.33: zp ZP_BYTE:10 [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] 1,537.1: zp ZP_BYTE:9 [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] 286.17: zp ZP_BYTE:12 [ flip::i#2 flip::i#1 ] 202: zp ZP_BYTE:18 [ flip::$4 ] 173.94: zp ZP_BYTE:8 [ flip::r#2 flip::r#1 ] +Uplift Scope [plot] 2,252.25: zp ZP_BYTE:7 [ plot::x#2 plot::x#1 ] 2,002: zp ZP_BYTE:16 [ plot::$3 ] 1,587.17: zp ZP_BYTE:6 [ plot::i#2 plot::i#3 plot::i#1 ] 239.19: zp ZP_PTR_BYTE:3 [ plot::line#2 plot::line#1 ] 176.75: zp ZP_BYTE:5 [ plot::y#2 plot::y#1 ] +Uplift Scope [main] 2,002: zp ZP_BYTE:14 [ main::$1 ] 2,002: zp ZP_BYTE:15 [ main::$3 ] 191.9: zp ZP_BYTE:2 [ main::c#2 main::c#1 ] +Uplift Scope [prepare] 38.5: zp ZP_BYTE:13 [ prepare::i#2 prepare::i#1 ] Uplift Scope [] -Uplifting [flip] best 180564 combination reg byte a [ flip::$0 ] zp ZP_BYTE:11 c [ flip::c#2 flip::c#1 ] reg byte y [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] reg byte x [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] reg byte x [ flip::i#2 flip::i#1 ] reg byte a [ flip::$4 ] zp ZP_BYTE:8 r [ flip::r#2 flip::r#1 ] -Uplifting [plot] best 150164 combination reg byte y [ plot::x#2 plot::x#1 ] reg byte a [ plot::$3 ] reg byte x [ plot::i#2 plot::i#3 plot::i#1 ] zp ZP_PTR_BYTE:3 line [ plot::line#2 plot::line#1 ] zp ZP_BYTE:5 y [ plot::y#2 plot::y#1 ] +Uplifting [flip] best 180564 combination reg byte a [ flip::$0 ] zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] reg byte y [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] reg byte x [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] reg byte x [ flip::i#2 flip::i#1 ] reg byte a [ flip::$4 ] zp ZP_BYTE:8 [ flip::r#2 flip::r#1 ] +Uplifting [plot] best 150164 combination reg byte y [ plot::x#2 plot::x#1 ] reg byte a [ plot::$3 ] reg byte x [ plot::i#2 plot::i#3 plot::i#1 ] zp ZP_PTR_BYTE:3 [ plot::line#2 plot::line#1 ] zp ZP_BYTE:5 [ plot::y#2 plot::y#1 ] Uplifting [main] best 129564 combination reg byte a [ main::$1 ] reg byte a [ main::$3 ] reg byte x [ main::c#2 main::c#1 ] Uplifting [prepare] best 129424 combination reg byte x [ prepare::i#2 prepare::i#1 ] Uplifting [] best 129424 combination -Coalescing zero page register [ zp ZP_BYTE:5 y [ plot::y#2 plot::y#1 ] ] with [ zp ZP_BYTE:8 r [ flip::r#2 flip::r#1 ] ] -Allocated (was zp ZP_PTR_BYTE:3 line) zp ZP_PTR_BYTE:2 line#2 [ plot::line#2 plot::line#1 ] -Allocated (was zp ZP_BYTE:5 y) zp ZP_BYTE:4 y#2 [ plot::y#2 plot::y#1 flip::r#2 flip::r#1 ] -Allocated (was zp ZP_BYTE:11 c) zp ZP_BYTE:5 c#2 [ flip::c#2 flip::c#1 ] +Coalescing zero page register [ zp ZP_BYTE:5 [ plot::y#2 plot::y#1 ] ] with [ zp ZP_BYTE:8 [ flip::r#2 flip::r#1 ] ] +Allocated (was zp ZP_PTR_BYTE:3) zp ZP_PTR_BYTE:2 [ plot::line#2 plot::line#1 ] +Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ plot::y#2 plot::y#1 flip::r#2 flip::r#1 ] +Allocated (was zp ZP_BYTE:11) zp ZP_BYTE:5 [ flip::c#2 flip::c#1 ] Removing instruction jmp bend Removing instruction jmp b3 Removing instruction jmp b4 @@ -4856,12 +4856,12 @@ plot: { //SEG58 flip flip: { .label c = 5 - .label y = 4 + .label r = 4 //SEG59 [24] phi from flip to flip::@1 b1_from_flip: //SEG60 [24] phi (byte) flip::r#2 = (byte) 16 -- zpby1=coby1 lda #$10 - sta plot.y + sta r //SEG61 [24] phi (byte) flip::dstIdx#5 = (byte) 15 -- yby=coby1 ldy #$f //SEG62 [24] phi (byte) flip::srcIdx#3 = (byte) 0 -- xby=coby1 @@ -4910,9 +4910,9 @@ flip: { //SEG84 [32] (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#2 ] -- yby=_dec_yby dey //SEG85 [33] (byte) flip::r#1 ← -- (byte) flip::r#2 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1=_dec_zpby1 - dec plot.y + dec r //SEG86 [34] if((byte) flip::r#1!=(byte) 0) goto flip::@1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1_neq_0_then_la1 - lda plot.y + lda r bne b1_from_b4 //SEG87 [35] phi from flip::@4 to flip::@3 b3_from_b4: @@ -5113,12 +5113,12 @@ plot: { //SEG58 flip flip: { .label c = 5 - .label y = 4 + .label r = 4 //SEG59 [24] phi from flip to flip::@1 b1_from_flip: //SEG60 [24] phi (byte) flip::r#2 = (byte) 16 -- zpby1=coby1 lda #$10 - sta plot.y + sta r //SEG61 [24] phi (byte) flip::dstIdx#5 = (byte) 15 -- yby=coby1 ldy #$f //SEG62 [24] phi (byte) flip::srcIdx#3 = (byte) 0 -- xby=coby1 @@ -5164,9 +5164,9 @@ flip: { //SEG84 [32] (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#2 ] -- yby=_dec_yby dey //SEG85 [33] (byte) flip::r#1 ← -- (byte) flip::r#2 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1=_dec_zpby1 - dec plot.y + dec r //SEG86 [34] if((byte) flip::r#1!=(byte) 0) goto flip::@1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1_neq_0_then_la1 - lda plot.y + lda r bne b1 //SEG87 [35] phi from flip::@4 to flip::@3 b3_from_b4: @@ -5355,11 +5355,11 @@ plot: { //SEG58 flip flip: { .label c = 5 - .label y = 4 + .label r = 4 //SEG59 [24] phi from flip to flip::@1 //SEG60 [24] phi (byte) flip::r#2 = (byte) 16 -- zpby1=coby1 lda #$10 - sta plot.y + sta r //SEG61 [24] phi (byte) flip::dstIdx#5 = (byte) 15 -- yby=coby1 ldy #$f //SEG62 [24] phi (byte) flip::srcIdx#3 = (byte) 0 -- xby=coby1 @@ -5404,9 +5404,9 @@ flip: { //SEG84 [32] (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#2 ] -- yby=_dec_yby dey //SEG85 [33] (byte) flip::r#1 ← -- (byte) flip::r#2 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1=_dec_zpby1 - dec plot.y + dec r //SEG86 [34] if((byte) flip::r#1!=(byte) 0) goto flip::@1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1_neq_0_then_la1 - lda plot.y + lda r bne b1 //SEG87 [35] phi from flip::@4 to flip::@3 //SEG88 [35] phi (byte) flip::i#2 = (byte) 0 -- xby=coby1 @@ -5578,11 +5578,11 @@ plot: { //SEG58 flip flip: { .label c = 5 - .label y = 4 + .label r = 4 //SEG59 [24] phi from flip to flip::@1 //SEG60 [24] phi (byte) flip::r#2 = (byte) 16 -- zpby1=coby1 lda #$10 - sta plot.y + sta r //SEG61 [24] phi (byte) flip::dstIdx#5 = (byte) 15 -- yby=coby1 ldy #$f //SEG62 [24] phi (byte) flip::srcIdx#3 = (byte) 0 -- xby=coby1 @@ -5625,9 +5625,9 @@ flip: { //SEG84 [32] (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#2 ] -- yby=_dec_yby dey //SEG85 [33] (byte) flip::r#1 ← -- (byte) flip::r#2 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1=_dec_zpby1 - dec plot.y + dec r //SEG86 [34] if((byte) flip::r#1!=(byte) 0) goto flip::@1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1_neq_0_then_la1 - lda plot.y + lda r bne b1 //SEG87 [35] phi from flip::@4 to flip::@3 //SEG88 [35] phi (byte) flip::i#2 = (byte) 0 -- xby=coby1 @@ -5791,11 +5791,11 @@ plot: { //SEG58 flip flip: { .label c = 5 - .label y = 4 + .label r = 4 //SEG59 [24] phi from flip to flip::@1 //SEG60 [24] phi (byte) flip::r#2 = (byte) 16 -- zpby1=coby1 lda #$10 - sta plot.y + sta r //SEG61 [24] phi (byte) flip::dstIdx#5 = (byte) 15 -- yby=coby1 ldy #$f //SEG62 [24] phi (byte) flip::srcIdx#3 = (byte) 0 -- xby=coby1 @@ -5838,9 +5838,9 @@ flip: { //SEG84 [32] (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#2 ] -- yby=_dec_yby dey //SEG85 [33] (byte) flip::r#1 ← -- (byte) flip::r#2 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1=_dec_zpby1 - dec plot.y + dec r //SEG86 [34] if((byte) flip::r#1!=(byte) 0) goto flip::@1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1_neq_0_then_la1 - lda plot.y + lda r bne b1 //SEG87 [35] phi from flip::@4 to flip::@3 //SEG88 [35] phi (byte) flip::i#2 = (byte) 0 -- xby=coby1 @@ -6002,11 +6002,11 @@ plot: { //SEG58 flip flip: { .label c = 5 - .label y = 4 + .label r = 4 //SEG59 [24] phi from flip to flip::@1 //SEG60 [24] phi (byte) flip::r#2 = (byte) 16 -- zpby1=coby1 lda #$10 - sta plot.y + sta r //SEG61 [24] phi (byte) flip::dstIdx#5 = (byte) 15 -- yby=coby1 ldy #$f //SEG62 [24] phi (byte) flip::srcIdx#3 = (byte) 0 -- xby=coby1 @@ -6049,9 +6049,9 @@ flip: { //SEG84 [32] (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#2 ] -- yby=_dec_yby dey //SEG85 [33] (byte) flip::r#1 ← -- (byte) flip::r#2 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1=_dec_zpby1 - dec plot.y + dec r //SEG86 [34] if((byte) flip::r#1!=(byte) 0) goto flip::@1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1_neq_0_then_la1 - lda plot.y + lda r bne b1 //SEG87 [35] phi from flip::@4 to flip::@3 //SEG88 [35] phi (byte) flip::i#2 = (byte) 0 -- xby=coby1 @@ -6111,8 +6111,8 @@ FINAL SYMBOL TABLE (label) flip::@4 (label) flip::@return (byte) flip::c -(byte) flip::c#1 zp ZP_BYTE:5 c 1501.5 -(byte) flip::c#2 zp ZP_BYTE:5 c 400.4 +(byte) flip::c#1 c zp ZP_BYTE:5 1501.5 +(byte) flip::c#2 c zp ZP_BYTE:5 400.4 (byte) flip::dstIdx (byte) flip::dstIdx#1 reg byte y 701.0 (byte) flip::dstIdx#2 reg byte y 67.33333333333333 @@ -6122,8 +6122,8 @@ FINAL SYMBOL TABLE (byte) flip::i#1 reg byte x 151.5 (byte) flip::i#2 reg byte x 134.66666666666666 (byte) flip::r -(byte) flip::r#1 zp ZP_BYTE:4 y 151.5 -(byte) flip::r#2 zp ZP_BYTE:4 y 22.444444444444443 +(byte) flip::r#1 r zp ZP_BYTE:4 151.5 +(byte) flip::r#2 r zp ZP_BYTE:4 22.444444444444443 (byte) flip::srcIdx (byte) flip::srcIdx#1 reg byte x 300.42857142857144 (byte) flip::srcIdx#2 reg byte x 1034.6666666666667 @@ -6152,14 +6152,14 @@ FINAL SYMBOL TABLE (byte) plot::i#2 reg byte x 1034.6666666666667 (byte) plot::i#3 reg byte x 202.0 (byte*) plot::line -(byte*) plot::line#1 zp ZP_PTR_BYTE:2 line 67.33333333333333 -(byte*) plot::line#2 zp ZP_PTR_BYTE:2 line 171.85714285714283 +(byte*) plot::line#1 line zp ZP_PTR_BYTE:2 67.33333333333333 +(byte*) plot::line#2 line zp ZP_PTR_BYTE:2 171.85714285714283 (byte) plot::x (byte) plot::x#1 reg byte y 1501.5 (byte) plot::x#2 reg byte y 750.75 (byte) plot::y -(byte) plot::y#1 zp ZP_BYTE:4 y 151.5 -(byte) plot::y#2 zp ZP_BYTE:4 y 25.25 +(byte) plot::y#1 y zp ZP_BYTE:4 151.5 +(byte) plot::y#2 y zp ZP_BYTE:4 25.25 (void()) prepare() (label) prepare::@1 (label) prepare::@return @@ -6168,13 +6168,13 @@ FINAL SYMBOL TABLE (byte) prepare::i#2 reg byte x 22.0 reg byte x [ main::c#2 main::c#1 ] -zp ZP_PTR_BYTE:2 line [ plot::line#2 plot::line#1 ] -zp ZP_BYTE:4 y [ plot::y#2 plot::y#1 flip::r#2 flip::r#1 ] +zp ZP_PTR_BYTE:2 [ plot::line#2 plot::line#1 ] +zp ZP_BYTE:4 [ plot::y#2 plot::y#1 flip::r#2 flip::r#1 ] reg byte x [ plot::i#2 plot::i#3 plot::i#1 ] reg byte y [ plot::x#2 plot::x#1 ] reg byte x [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] reg byte y [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] -zp ZP_BYTE:5 c [ flip::c#2 flip::c#1 ] +zp ZP_BYTE:5 [ flip::c#2 flip::c#1 ] reg byte x [ flip::i#2 flip::i#1 ] reg byte x [ prepare::i#2 prepare::i#1 ] reg byte a [ main::$1 ] @@ -6299,11 +6299,11 @@ plot: { //SEG58 flip flip: { .label c = 5 - .label y = 4 + .label r = 4 //SEG59 [24] phi from flip to flip::@1 //SEG60 [24] phi (byte) flip::r#2 = (byte) 16 -- zpby1=coby1 lda #$10 - sta plot.y + sta r //SEG61 [24] phi (byte) flip::dstIdx#5 = (byte) 15 -- yby=coby1 ldy #$f //SEG62 [24] phi (byte) flip::srcIdx#3 = (byte) 0 -- xby=coby1 @@ -6346,9 +6346,9 @@ flip: { //SEG84 [32] (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#2 ] -- yby=_dec_yby dey //SEG85 [33] (byte) flip::r#1 ← -- (byte) flip::r#2 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1=_dec_zpby1 - dec plot.y + dec r //SEG86 [34] if((byte) flip::r#1!=(byte) 0) goto flip::@1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] -- zpby1_neq_0_then_la1 - lda plot.y + lda r bne b1 //SEG87 [35] phi from flip::@4 to flip::@3 //SEG88 [35] phi (byte) flip::i#2 = (byte) 0 -- xby=coby1 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.sym b/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.sym index d116b2305..90de3d0c2 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.sym +++ b/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.sym @@ -13,8 +13,8 @@ (label) flip::@4 (label) flip::@return (byte) flip::c -(byte) flip::c#1 zp ZP_BYTE:5 c 1501.5 -(byte) flip::c#2 zp ZP_BYTE:5 c 400.4 +(byte) flip::c#1 c zp ZP_BYTE:5 1501.5 +(byte) flip::c#2 c zp ZP_BYTE:5 400.4 (byte) flip::dstIdx (byte) flip::dstIdx#1 reg byte y 701.0 (byte) flip::dstIdx#2 reg byte y 67.33333333333333 @@ -24,8 +24,8 @@ (byte) flip::i#1 reg byte x 151.5 (byte) flip::i#2 reg byte x 134.66666666666666 (byte) flip::r -(byte) flip::r#1 zp ZP_BYTE:4 y 151.5 -(byte) flip::r#2 zp ZP_BYTE:4 y 22.444444444444443 +(byte) flip::r#1 r zp ZP_BYTE:4 151.5 +(byte) flip::r#2 r zp ZP_BYTE:4 22.444444444444443 (byte) flip::srcIdx (byte) flip::srcIdx#1 reg byte x 300.42857142857144 (byte) flip::srcIdx#2 reg byte x 1034.6666666666667 @@ -54,14 +54,14 @@ (byte) plot::i#2 reg byte x 1034.6666666666667 (byte) plot::i#3 reg byte x 202.0 (byte*) plot::line -(byte*) plot::line#1 zp ZP_PTR_BYTE:2 line 67.33333333333333 -(byte*) plot::line#2 zp ZP_PTR_BYTE:2 line 171.85714285714283 +(byte*) plot::line#1 line zp ZP_PTR_BYTE:2 67.33333333333333 +(byte*) plot::line#2 line zp ZP_PTR_BYTE:2 171.85714285714283 (byte) plot::x (byte) plot::x#1 reg byte y 1501.5 (byte) plot::x#2 reg byte y 750.75 (byte) plot::y -(byte) plot::y#1 zp ZP_BYTE:4 y 151.5 -(byte) plot::y#2 zp ZP_BYTE:4 y 25.25 +(byte) plot::y#1 y zp ZP_BYTE:4 151.5 +(byte) plot::y#2 y zp ZP_BYTE:4 25.25 (void()) prepare() (label) prepare::@1 (label) prepare::@return @@ -70,13 +70,13 @@ (byte) prepare::i#2 reg byte x 22.0 reg byte x [ main::c#2 main::c#1 ] -zp ZP_PTR_BYTE:2 line [ plot::line#2 plot::line#1 ] -zp ZP_BYTE:4 y [ plot::y#2 plot::y#1 flip::r#2 flip::r#1 ] +zp ZP_PTR_BYTE:2 [ plot::line#2 plot::line#1 ] +zp ZP_BYTE:4 [ plot::y#2 plot::y#1 flip::r#2 flip::r#1 ] reg byte x [ plot::i#2 plot::i#3 plot::i#1 ] reg byte y [ plot::x#2 plot::x#1 ] reg byte x [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] reg byte y [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] -zp ZP_BYTE:5 c [ flip::c#2 flip::c#1 ] +zp ZP_BYTE:5 [ flip::c#2 flip::c#1 ] reg byte x [ flip::i#2 flip::i#1 ] reg byte x [ prepare::i#2 prepare::i#1 ] reg byte a [ main::$1 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/forclassicmin.log b/src/main/java/dk/camelot64/kickc/test/ref/forclassicmin.log index b7eb4e953..2ae1dff79 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/forclassicmin.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/forclassicmin.log @@ -468,7 +468,7 @@ Initial phi equivalence classes [ main::i#2 main::i#1 ] Complete equivalence classes [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 i#2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM //SEG0 Global ZP labels //SEG1 @begin @@ -514,10 +514,10 @@ main: { } REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 i , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 38.5: zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] +Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplift Scope [] Uplifting [main] best 290 combination reg byte x [ main::i#2 main::i#1 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/forrangemin.log b/src/main/java/dk/camelot64/kickc/test/ref/forrangemin.log index 496527605..12e412a46 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/forrangemin.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/forrangemin.log @@ -753,8 +753,8 @@ Initial phi equivalence classes Complete equivalence classes [ main::i#2 main::i#1 ] [ main::j#2 main::j#1 ] -Allocated zp ZP_BYTE:2 i#2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 j#2 [ main::j#2 main::j#1 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::j#2 main::j#1 ] INITIAL ASM //SEG0 Global ZP labels //SEG1 @begin @@ -822,11 +822,11 @@ main: { } REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 i , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 j [ main::j#2 main::j#1 ] : zp ZP_BYTE:3 j , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::j#2 main::j#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 38.5: zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] 38.5: zp ZP_BYTE:3 j [ main::j#2 main::j#1 ] +Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 38.5: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] Uplift Scope [] Uplifting [main] best 505 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::j#2 main::j#1 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/ifmin.log b/src/main/java/dk/camelot64/kickc/test/ref/ifmin.log index f9e15f99a..2b1721667 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/ifmin.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/ifmin.log @@ -596,7 +596,7 @@ Initial phi equivalence classes [ main::i#2 main::i#1 ] Complete equivalence classes [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 i#2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM //SEG0 Global ZP labels //SEG1 @begin @@ -648,10 +648,10 @@ main: { } REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 i , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 31.17: zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] +Uplift Scope [main] 31.17: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplift Scope [] Uplifting [main] best 335 combination reg byte x [ main::i#2 main::i#1 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/loopmin.log b/src/main/java/dk/camelot64/kickc/test/ref/loopmin.log index ddf844899..b66cb5fdd 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/loopmin.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/loopmin.log @@ -440,8 +440,8 @@ Initial phi equivalence classes Complete equivalence classes [ i#2 i#1 ] [ s#2 s#4 s#1 ] -Allocated zp ZP_BYTE:2 i#2 [ i#2 i#1 ] -Allocated zp ZP_BYTE:3 s#2 [ s#2 s#4 s#1 ] +Allocated zp ZP_BYTE:2 [ i#2 i#1 ] +Allocated zp ZP_BYTE:3 [ s#2 s#4 s#1 ] INITIAL ASM //SEG0 Global ZP labels .label i = 2 @@ -497,11 +497,11 @@ b2: bend: REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 i [ i#2 i#1 ] : zp ZP_BYTE:2 i , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 s [ s#2 s#4 s#1 ] : zp ZP_BYTE:3 s , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ i#2 i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ s#2 s#4 s#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [] 49.5: zp ZP_BYTE:3 s [ s#2 s#4 s#1 ] 27.5: zp ZP_BYTE:2 i [ i#2 i#1 ] +Uplift Scope [] 49.5: zp ZP_BYTE:3 [ s#2 s#4 s#1 ] 27.5: zp ZP_BYTE:2 [ i#2 i#1 ] Uplifting [] best 435 combination reg byte a [ s#2 s#4 s#1 ] reg byte x [ i#2 i#1 ] Removing instruction jmp b1 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/loopnest.log b/src/main/java/dk/camelot64/kickc/test/ref/loopnest.log index 1b323e135..b02ffe853 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/loopnest.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/loopnest.log @@ -781,8 +781,8 @@ Initial phi equivalence classes Complete equivalence classes [ main::i#2 main::i#1 ] [ nest::j#2 nest::j#1 ] -Allocated zp ZP_BYTE:2 i#2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 j#2 [ nest::j#2 nest::j#1 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ nest::j#2 nest::j#1 ] INITIAL ASM //SEG0 Global ZP labels //SEG1 @begin @@ -854,12 +854,12 @@ nest: { } REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 i , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 j [ nest::j#2 nest::j#1 ] : zp ZP_BYTE:3 j , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ nest::j#2 nest::j#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [nest] 303: zp ZP_BYTE:3 j [ nest::j#2 nest::j#1 ] -Uplift Scope [main] 19.64: zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] +Uplift Scope [nest] 303: zp ZP_BYTE:3 [ nest::j#2 nest::j#1 ] +Uplift Scope [main] 19.64: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplift Scope [] Uplifting [nest] best 2536 combination reg byte x [ nest::j#2 nest::j#1 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/loopnest2.log b/src/main/java/dk/camelot64/kickc/test/ref/loopnest2.log index e2ec9a10a..e320dbc8e 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/loopnest2.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/loopnest2.log @@ -2040,12 +2040,12 @@ Complete equivalence classes [ nest1::j#2 nest1::j#1 ] [ nest2::i#2 nest2::i#1 ] [ nest2::j#2 nest2::j#1 ] -Allocated zp ZP_BYTE:2 i#2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 j#2 [ main::j#2 main::j#1 ] -Allocated zp ZP_BYTE:4 i#2 [ nest1::i#2 nest1::i#1 ] -Allocated zp ZP_BYTE:5 j#2 [ nest1::j#2 nest1::j#1 ] -Allocated zp ZP_BYTE:6 i#2 [ nest2::i#2 nest2::i#1 ] -Allocated zp ZP_BYTE:7 j#2 [ nest2::j#2 nest2::j#1 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::j#2 main::j#1 ] +Allocated zp ZP_BYTE:4 [ nest1::i#2 nest1::i#1 ] +Allocated zp ZP_BYTE:5 [ nest1::j#2 nest1::j#1 ] +Allocated zp ZP_BYTE:6 [ nest2::i#2 nest2::i#1 ] +Allocated zp ZP_BYTE:7 [ nest2::j#2 nest2::j#1 ] INITIAL ASM //SEG0 Global ZP labels //SEG1 @begin @@ -2211,26 +2211,23 @@ nest2: { } REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 i , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 j [ main::j#2 main::j#1 ] : zp ZP_BYTE:3 j , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:4 i [ nest1::i#2 nest1::i#1 ] : zp ZP_BYTE:4 i , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:5 j [ nest1::j#2 nest1::j#1 ] : zp ZP_BYTE:5 j , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:6 i [ nest2::i#2 nest2::i#1 ] : zp ZP_BYTE:6 i , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:7 j [ nest2::j#2 nest2::j#1 ] : zp ZP_BYTE:7 j , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::j#2 main::j#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ nest1::i#2 nest1::i#1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:5 [ nest1::j#2 nest1::j#1 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ nest2::i#2 nest2::i#1 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ nest2::j#2 nest2::j#1 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [nest2] 3,000,003: zp ZP_BYTE:7 j [ nest2::j#2 nest2::j#1 ] 190,001.9: zp ZP_BYTE:6 i [ nest2::i#2 nest2::i#1 ] -Uplift Scope [nest1] 17,001.7: zp ZP_BYTE:5 j [ nest1::j#2 nest1::j#1 ] 1,655.5: zp ZP_BYTE:4 i [ nest1::i#2 nest1::i#1 ] -Uplift Scope [main] 162.72: zp ZP_BYTE:3 j [ main::j#2 main::j#1 ] 17.55: zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] +Uplift Scope [nest2] 3,000,003: zp ZP_BYTE:7 [ nest2::j#2 nest2::j#1 ] 190,001.9: zp ZP_BYTE:6 [ nest2::i#2 nest2::i#1 ] +Uplift Scope [nest1] 17,001.7: zp ZP_BYTE:5 [ nest1::j#2 nest1::j#1 ] 1,655.5: zp ZP_BYTE:4 [ nest1::i#2 nest1::i#1 ] +Uplift Scope [main] 162.72: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] 17.55: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplift Scope [] Uplifting [nest2] best 23646452 combination reg byte y [ nest2::j#2 nest2::j#1 ] reg byte x [ nest2::i#2 nest2::i#1 ] -Uplifting [nest1] best 23566452 combination reg byte a [ nest1::j#2 nest1::j#1 ] zp ZP_BYTE:4 i [ nest1::i#2 nest1::i#1 ] -Uplifting [main] best 23566452 combination zp ZP_BYTE:3 j [ main::j#2 main::j#1 ] zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] +Uplifting [nest1] best 23566452 combination reg byte a [ nest1::j#2 nest1::j#1 ] zp ZP_BYTE:4 [ nest1::i#2 nest1::i#1 ] +Uplifting [main] best 23566452 combination zp ZP_BYTE:3 [ main::j#2 main::j#1 ] zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplifting [] best 23566452 combination -Allocated (was zp ZP_BYTE:2 i) zp ZP_BYTE:2 i#2 [ main::i#2 main::i#1 ] -Allocated (was zp ZP_BYTE:3 j) zp ZP_BYTE:3 j#2 [ main::j#2 main::j#1 ] -Allocated (was zp ZP_BYTE:4 i) zp ZP_BYTE:4 i#2 [ nest1::i#2 nest1::i#1 ] Removing instruction jmp bend Removing instruction jmp b1 Removing instruction jmp b2 @@ -2808,11 +2805,11 @@ FINAL SYMBOL TABLE (label) main::@5 (label) main::@return (byte) main::i -(byte) main::i#1 zp ZP_BYTE:2 i 16.5 -(byte) main::i#2 zp ZP_BYTE:2 i 1.0476190476190477 +(byte) main::i#1 i zp ZP_BYTE:2 16.5 +(byte) main::i#2 i zp ZP_BYTE:2 1.0476190476190477 (byte) main::j -(byte) main::j#1 zp ZP_BYTE:3 j 151.5 -(byte) main::j#2 zp ZP_BYTE:3 j 11.222222222222221 +(byte) main::j#1 j zp ZP_BYTE:3 151.5 +(byte) main::j#2 j zp ZP_BYTE:3 11.222222222222221 (void()) nest1() (label) nest1::@1 (label) nest1::@2 @@ -2820,8 +2817,8 @@ FINAL SYMBOL TABLE (label) nest1::@5 (label) nest1::@return (byte) nest1::i -(byte) nest1::i#1 zp ZP_BYTE:4 i 1501.5 -(byte) nest1::i#2 zp ZP_BYTE:4 i 154.0 +(byte) nest1::i#1 i zp ZP_BYTE:4 1501.5 +(byte) nest1::i#2 i zp ZP_BYTE:4 154.0 (byte) nest1::j (byte) nest1::j#1 reg byte a 15001.5 (byte) nest1::j#2 reg byte a 2000.2 @@ -2837,9 +2834,9 @@ FINAL SYMBOL TABLE (byte) nest2::j#1 reg byte y 1500001.5 (byte) nest2::j#2 reg byte y 1500001.5 -zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] -zp ZP_BYTE:3 j [ main::j#2 main::j#1 ] -zp ZP_BYTE:4 i [ nest1::i#2 nest1::i#1 ] +zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +zp ZP_BYTE:3 [ main::j#2 main::j#1 ] +zp ZP_BYTE:4 [ nest1::i#2 nest1::i#1 ] reg byte a [ nest1::j#2 nest1::j#1 ] reg byte x [ nest2::i#2 nest2::i#1 ] reg byte y [ nest2::j#2 nest2::j#1 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/loopnest2.sym b/src/main/java/dk/camelot64/kickc/test/ref/loopnest2.sym index 1a0aed1ff..c4c06add9 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/loopnest2.sym +++ b/src/main/java/dk/camelot64/kickc/test/ref/loopnest2.sym @@ -8,11 +8,11 @@ (label) main::@5 (label) main::@return (byte) main::i -(byte) main::i#1 zp ZP_BYTE:2 i 16.5 -(byte) main::i#2 zp ZP_BYTE:2 i 1.0476190476190477 +(byte) main::i#1 i zp ZP_BYTE:2 16.5 +(byte) main::i#2 i zp ZP_BYTE:2 1.0476190476190477 (byte) main::j -(byte) main::j#1 zp ZP_BYTE:3 j 151.5 -(byte) main::j#2 zp ZP_BYTE:3 j 11.222222222222221 +(byte) main::j#1 j zp ZP_BYTE:3 151.5 +(byte) main::j#2 j zp ZP_BYTE:3 11.222222222222221 (void()) nest1() (label) nest1::@1 (label) nest1::@2 @@ -20,8 +20,8 @@ (label) nest1::@5 (label) nest1::@return (byte) nest1::i -(byte) nest1::i#1 zp ZP_BYTE:4 i 1501.5 -(byte) nest1::i#2 zp ZP_BYTE:4 i 154.0 +(byte) nest1::i#1 i zp ZP_BYTE:4 1501.5 +(byte) nest1::i#2 i zp ZP_BYTE:4 154.0 (byte) nest1::j (byte) nest1::j#1 reg byte a 15001.5 (byte) nest1::j#2 reg byte a 2000.2 @@ -37,9 +37,9 @@ (byte) nest2::j#1 reg byte y 1500001.5 (byte) nest2::j#2 reg byte y 1500001.5 -zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] -zp ZP_BYTE:3 j [ main::j#2 main::j#1 ] -zp ZP_BYTE:4 i [ nest1::i#2 nest1::i#1 ] +zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +zp ZP_BYTE:3 [ main::j#2 main::j#1 ] +zp ZP_BYTE:4 [ nest1::i#2 nest1::i#1 ] reg byte a [ nest1::j#2 nest1::j#1 ] reg byte x [ nest2::i#2 nest2::i#1 ] reg byte y [ nest2::j#2 nest2::j#1 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/loopsplit.log b/src/main/java/dk/camelot64/kickc/test/ref/loopsplit.log index e27b9df06..30f352118 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/loopsplit.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/loopsplit.log @@ -614,8 +614,8 @@ Initial phi equivalence classes Complete equivalence classes [ main::i#2 main::i#1 ] [ main::s#3 main::s#1 main::s#2 ] -Allocated zp ZP_BYTE:2 i#2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 s#3 [ main::s#3 main::s#1 main::s#2 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::s#3 main::s#1 main::s#2 ] INITIAL ASM //SEG0 Global ZP labels //SEG1 @begin @@ -679,11 +679,11 @@ main: { } REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 i , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 s [ main::s#3 main::s#1 main::s#2 ] : zp ZP_BYTE:3 s , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::s#3 main::s#1 main::s#2 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 55: zp ZP_BYTE:3 s [ main::s#3 main::s#1 main::s#2 ] 44: zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] +Uplift Scope [main] 55: zp ZP_BYTE:3 [ main::s#3 main::s#1 main::s#2 ] 44: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplift Scope [] Uplifting [main] best 380 combination reg byte y [ main::s#3 main::s#1 main::s#2 ] reg byte x [ main::i#2 main::i#1 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/minus.log b/src/main/java/dk/camelot64/kickc/test/ref/minus.log index d4699b102..0f965ce20 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/minus.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/minus.log @@ -332,8 +332,8 @@ Added variable $1 to zero page equivalence class [ $1 ] Complete equivalence classes [ i#2 i#1 ] [ $1 ] -Allocated zp ZP_BYTE:2 i#2 [ i#2 i#1 ] -Allocated zp ZP_BYTE:3 $1 [ $1 ] +Allocated zp ZP_BYTE:2 [ i#2 i#1 ] +Allocated zp ZP_BYTE:3 [ $1 ] INITIAL ASM //SEG0 Global ZP labels .label $1 = 3 @@ -372,14 +372,14 @@ b1: bend: Statement [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 i [ i#2 i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ i#2 i#1 ] Statement [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] always clobbers reg byte a REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 i [ i#2 i#1 ] : zp ZP_BYTE:2 i , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 $1 [ $1 ] : zp ZP_BYTE:3 $1 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ i#2 i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ $1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [] 31.17: zp ZP_BYTE:2 i [ i#2 i#1 ] 22: zp ZP_BYTE:3 $1 [ $1 ] +Uplift Scope [] 31.17: zp ZP_BYTE:2 [ i#2 i#1 ] 22: zp ZP_BYTE:3 [ $1 ] Uplifting [] best 285 combination reg byte x [ i#2 i#1 ] reg byte a [ $1 ] Removing instruction jmp b1 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.asm b/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.asm index 09eba0c55..f0aeb3978 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.asm +++ b/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.asm @@ -31,9 +31,9 @@ lvaluevar: { rvaluevar: { .label screen = 2 lda #<$400 - sta lvaluevar.screen + sta screen lda #>$400 - sta lvaluevar.screen+$1 + sta screen+$1 ldx #$2 b1: cpx #$a @@ -41,10 +41,10 @@ rvaluevar: { rts b2: ldy #$0 - lda (lvaluevar.screen),y - inc lvaluevar.screen + lda (screen),y + inc screen bne !+ - inc lvaluevar.screen+$1 + inc screen+$1 !: inx jmp b1 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.log b/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.log index 3f8d2e953..d7836eea5 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.log @@ -2002,16 +2002,16 @@ Complete equivalence classes [ rvalue::b#0 ] [ rvalue::b#1 ] [ rvalue::b#2 ] -Allocated zp ZP_BYTE:2 i#2 [ lvaluevar::i#2 lvaluevar::i#1 ] -Allocated zp ZP_PTR_BYTE:3 screen#2 [ lvaluevar::screen#2 lvaluevar::screen#1 ] -Allocated zp ZP_BYTE:5 i#2 [ rvaluevar::i#2 rvaluevar::i#1 ] -Allocated zp ZP_PTR_BYTE:6 screen#2 [ rvaluevar::screen#2 rvaluevar::screen#1 ] -Allocated zp ZP_BYTE:8 i#2 [ rvalue::i#2 rvalue::i#1 ] -Allocated zp ZP_BYTE:9 i#2 [ lvalue::i#2 lvalue::i#1 ] -Allocated zp ZP_BYTE:10 b#0 [ rvaluevar::b#0 ] -Allocated zp ZP_BYTE:11 b#0 [ rvalue::b#0 ] -Allocated zp ZP_BYTE:12 b#1 [ rvalue::b#1 ] -Allocated zp ZP_BYTE:13 b#2 [ rvalue::b#2 ] +Allocated zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] +Allocated zp ZP_PTR_BYTE:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] +Allocated zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] +Allocated zp ZP_PTR_BYTE:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] +Allocated zp ZP_BYTE:8 [ rvalue::i#2 rvalue::i#1 ] +Allocated zp ZP_BYTE:9 [ lvalue::i#2 lvalue::i#1 ] +Allocated zp ZP_BYTE:10 [ rvaluevar::b#0 ] +Allocated zp ZP_BYTE:11 [ rvalue::b#0 ] +Allocated zp ZP_BYTE:12 [ rvalue::b#1 ] +Allocated zp ZP_BYTE:13 [ rvalue::b#2 ] INITIAL ASM //SEG0 Global ZP labels //SEG1 @begin @@ -2220,48 +2220,48 @@ lvalue: { } Statement [9] *((byte*) lvaluevar::screen#2) ← (byte) 4 [ lvaluevar::i#2 lvaluevar::screen#2 ] always clobbers reg byte a reg byte y -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 i [ lvaluevar::i#2 lvaluevar::i#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 i [ lvaluevar::i#2 lvaluevar::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] Statement [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] always clobbers reg byte a reg byte y -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 i [ rvaluevar::i#2 rvaluevar::i#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 i [ rvaluevar::i#2 rvaluevar::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] Statement [25] *((word) 1024) ← (byte) 1 [ ] always clobbers reg byte a Statement [26] *((word) 1025) ← (byte) 2 [ ] always clobbers reg byte a Statement [30] *((word) 1024 + (byte) lvalue::i#2) ← (byte) 3 [ lvalue::i#2 ] always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 i [ lvalue::i#2 lvalue::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ lvalue::i#2 lvalue::i#1 ] Statement [9] *((byte*) lvaluevar::screen#2) ← (byte) 4 [ lvaluevar::i#2 lvaluevar::screen#2 ] always clobbers reg byte a reg byte y Statement [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] always clobbers reg byte a reg byte y Statement [25] *((word) 1024) ← (byte) 1 [ ] always clobbers reg byte a Statement [26] *((word) 1025) ← (byte) 2 [ ] always clobbers reg byte a Statement [30] *((word) 1024 + (byte) lvalue::i#2) ← (byte) 3 [ lvalue::i#2 ] always clobbers reg byte a REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 i [ lvaluevar::i#2 lvaluevar::i#1 ] : zp ZP_BYTE:2 i , reg byte x , -Potential registers zp ZP_PTR_BYTE:3 screen [ lvaluevar::screen#2 lvaluevar::screen#1 ] : zp ZP_PTR_BYTE:3 screen , -Potential registers zp ZP_BYTE:5 i [ rvaluevar::i#2 rvaluevar::i#1 ] : zp ZP_BYTE:5 i , reg byte x , -Potential registers zp ZP_PTR_BYTE:6 screen [ rvaluevar::screen#2 rvaluevar::screen#1 ] : zp ZP_PTR_BYTE:6 screen , -Potential registers zp ZP_BYTE:8 i [ rvalue::i#2 rvalue::i#1 ] : zp ZP_BYTE:8 i , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:9 i [ lvalue::i#2 lvalue::i#1 ] : zp ZP_BYTE:9 i , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:10 b [ rvaluevar::b#0 ] : zp ZP_BYTE:10 b , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:11 b [ rvalue::b#0 ] : zp ZP_BYTE:11 b , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:12 b#1 [ rvalue::b#1 ] : zp ZP_BYTE:12 b#1 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:13 b#2 [ rvalue::b#2 ] : zp ZP_BYTE:13 b#2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] : zp ZP_BYTE:2 , reg byte x , +Potential registers zp ZP_PTR_BYTE:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] : zp ZP_PTR_BYTE:3 , +Potential registers zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] : zp ZP_BYTE:5 , reg byte x , +Potential registers zp ZP_PTR_BYTE:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] : zp ZP_PTR_BYTE:6 , +Potential registers zp ZP_BYTE:8 [ rvalue::i#2 rvalue::i#1 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ lvalue::i#2 lvalue::i#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:10 [ rvaluevar::b#0 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:11 [ rvalue::b#0 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:12 [ rvalue::b#1 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:13 [ rvalue::b#2 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [rvalue] ∞: zp ZP_BYTE:11 b [ rvalue::b#0 ] ∞: zp ZP_BYTE:12 b#1 [ rvalue::b#1 ] ∞: zp ZP_BYTE:13 b#2 [ rvalue::b#2 ] 36.67: zp ZP_BYTE:8 i [ rvalue::i#2 rvalue::i#1 ] -Uplift Scope [rvaluevar] ∞: zp ZP_BYTE:10 b [ rvaluevar::b#0 ] 30.25: zp ZP_BYTE:5 i [ rvaluevar::i#2 rvaluevar::i#1 ] 22: zp ZP_PTR_BYTE:6 screen [ rvaluevar::screen#2 rvaluevar::screen#1 ] -Uplift Scope [lvaluevar] 30.25: zp ZP_BYTE:2 i [ lvaluevar::i#2 lvaluevar::i#1 ] 22: zp ZP_PTR_BYTE:3 screen [ lvaluevar::screen#2 lvaluevar::screen#1 ] -Uplift Scope [lvalue] 36.67: zp ZP_BYTE:9 i [ lvalue::i#2 lvalue::i#1 ] +Uplift Scope [rvalue] ∞: zp ZP_BYTE:11 [ rvalue::b#0 ] ∞: zp ZP_BYTE:12 [ rvalue::b#1 ] ∞: zp ZP_BYTE:13 [ rvalue::b#2 ] 36.67: zp ZP_BYTE:8 [ rvalue::i#2 rvalue::i#1 ] +Uplift Scope [rvaluevar] ∞: zp ZP_BYTE:10 [ rvaluevar::b#0 ] 30.25: zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] 22: zp ZP_PTR_BYTE:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] +Uplift Scope [lvaluevar] 30.25: zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] 22: zp ZP_PTR_BYTE:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] +Uplift Scope [lvalue] 36.67: zp ZP_BYTE:9 [ lvalue::i#2 lvalue::i#1 ] Uplift Scope [main] Uplift Scope [] Uplifting [rvalue] best 2055 combination reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ] -Uplifting [rvaluevar] best 1895 combination reg byte a [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ZP_PTR_BYTE:6 screen [ rvaluevar::screen#2 rvaluevar::screen#1 ] -Uplifting [lvaluevar] best 1775 combination reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] zp ZP_PTR_BYTE:3 screen [ lvaluevar::screen#2 lvaluevar::screen#1 ] +Uplifting [rvaluevar] best 1895 combination reg byte a [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ZP_PTR_BYTE:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] +Uplifting [lvaluevar] best 1775 combination reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] zp ZP_PTR_BYTE:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] Uplifting [lvalue] best 1615 combination reg byte x [ lvalue::i#2 lvalue::i#1 ] Uplifting [main] best 1615 combination Uplifting [] best 1615 combination -Coalescing zero page register [ zp ZP_PTR_BYTE:3 screen [ lvaluevar::screen#2 lvaluevar::screen#1 ] ] with [ zp ZP_PTR_BYTE:6 screen [ rvaluevar::screen#2 rvaluevar::screen#1 ] ] -Allocated (was zp ZP_PTR_BYTE:3 screen) zp ZP_PTR_BYTE:2 screen#2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ] +Coalescing zero page register [ zp ZP_PTR_BYTE:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] ] with [ zp ZP_PTR_BYTE:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] ] +Allocated (was zp ZP_PTR_BYTE:3) zp ZP_PTR_BYTE:2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ] Removing instruction jmp bend Removing instruction jmp b1 Removing instruction jmp b2 @@ -2352,9 +2352,9 @@ rvaluevar: { b1_from_rvaluevar: //SEG31 [12] phi (byte*) rvaluevar::screen#2 = (word) 1024 -- zpptrby1=cowo1 lda #<$400 - sta lvaluevar.screen + sta screen lda #>$400 - sta lvaluevar.screen+$1 + sta screen+$1 //SEG32 [12] phi (byte) rvaluevar::i#2 = (byte) 2 -- xby=coby1 ldx #$2 //SEG33 rvaluevar::@1 @@ -2370,11 +2370,11 @@ rvaluevar: { b2: //SEG38 [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- aby=_star_zpptrby1 ldy #$0 - lda (lvaluevar.screen),y + lda (screen),y //SEG39 [16] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 [ rvaluevar::screen#1 rvaluevar::i#2 ] -- zpptrby1=_inc_zpptrby1 - inc lvaluevar.screen + inc screen bne !+ - inc lvaluevar.screen+$1 + inc screen+$1 !: //SEG40 [17] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] -- xby=_inc_xby inx @@ -2533,9 +2533,9 @@ rvaluevar: { //SEG30 [12] phi from rvaluevar to rvaluevar::@1 //SEG31 [12] phi (byte*) rvaluevar::screen#2 = (word) 1024 -- zpptrby1=cowo1 lda #<$400 - sta lvaluevar.screen + sta screen lda #>$400 - sta lvaluevar.screen+$1 + sta screen+$1 //SEG32 [12] phi (byte) rvaluevar::i#2 = (byte) 2 -- xby=coby1 ldx #$2 //SEG33 rvaluevar::@1 @@ -2550,11 +2550,11 @@ rvaluevar: { b2: //SEG38 [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- aby=_star_zpptrby1 ldy #$0 - lda (lvaluevar.screen),y + lda (screen),y //SEG39 [16] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 [ rvaluevar::screen#1 rvaluevar::i#2 ] -- zpptrby1=_inc_zpptrby1 - inc lvaluevar.screen + inc screen bne !+ - inc lvaluevar.screen+$1 + inc screen+$1 !: //SEG40 [17] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] -- xby=_inc_xby inx @@ -2641,8 +2641,8 @@ FINAL SYMBOL TABLE (byte) lvaluevar::i#1 reg byte x 22.0 (byte) lvaluevar::i#2 reg byte x 8.25 (byte*) lvaluevar::screen -(byte*) lvaluevar::screen#1 zp ZP_PTR_BYTE:2 screen 11.0 -(byte*) lvaluevar::screen#2 zp ZP_PTR_BYTE:2 screen 11.0 +(byte*) lvaluevar::screen#1 screen zp ZP_PTR_BYTE:2 11.0 +(byte*) lvaluevar::screen#2 screen zp ZP_PTR_BYTE:2 11.0 (void()) main() (label) main::@1 (label) main::@2 @@ -2670,11 +2670,11 @@ FINAL SYMBOL TABLE (byte) rvaluevar::i#1 reg byte x 22.0 (byte) rvaluevar::i#2 reg byte x 8.25 (byte*) rvaluevar::screen -(byte*) rvaluevar::screen#1 zp ZP_PTR_BYTE:2 screen 11.0 -(byte*) rvaluevar::screen#2 zp ZP_PTR_BYTE:2 screen 11.0 +(byte*) rvaluevar::screen#1 screen zp ZP_PTR_BYTE:2 11.0 +(byte*) rvaluevar::screen#2 screen zp ZP_PTR_BYTE:2 11.0 reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] -zp ZP_PTR_BYTE:2 screen [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ] +zp ZP_PTR_BYTE:2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] reg byte x [ rvalue::i#2 rvalue::i#1 ] reg byte x [ lvalue::i#2 lvalue::i#1 ] @@ -2749,9 +2749,9 @@ rvaluevar: { //SEG30 [12] phi from rvaluevar to rvaluevar::@1 //SEG31 [12] phi (byte*) rvaluevar::screen#2 = (word) 1024 -- zpptrby1=cowo1 lda #<$400 - sta lvaluevar.screen + sta screen lda #>$400 - sta lvaluevar.screen+$1 + sta screen+$1 //SEG32 [12] phi (byte) rvaluevar::i#2 = (byte) 2 -- xby=coby1 ldx #$2 //SEG33 rvaluevar::@1 @@ -2766,11 +2766,11 @@ rvaluevar: { b2: //SEG38 [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- aby=_star_zpptrby1 ldy #$0 - lda (lvaluevar.screen),y + lda (screen),y //SEG39 [16] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 [ rvaluevar::screen#1 rvaluevar::i#2 ] -- zpptrby1=_inc_zpptrby1 - inc lvaluevar.screen + inc screen bne !+ - inc lvaluevar.screen+$1 + inc screen+$1 !: //SEG40 [17] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] -- xby=_inc_xby inx diff --git a/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.sym b/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.sym index 3c893f56b..03a6a2042 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.sym +++ b/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.sym @@ -17,8 +17,8 @@ (byte) lvaluevar::i#1 reg byte x 22.0 (byte) lvaluevar::i#2 reg byte x 8.25 (byte*) lvaluevar::screen -(byte*) lvaluevar::screen#1 zp ZP_PTR_BYTE:2 screen 11.0 -(byte*) lvaluevar::screen#2 zp ZP_PTR_BYTE:2 screen 11.0 +(byte*) lvaluevar::screen#1 screen zp ZP_PTR_BYTE:2 11.0 +(byte*) lvaluevar::screen#2 screen zp ZP_PTR_BYTE:2 11.0 (void()) main() (label) main::@1 (label) main::@2 @@ -46,11 +46,11 @@ (byte) rvaluevar::i#1 reg byte x 22.0 (byte) rvaluevar::i#2 reg byte x 8.25 (byte*) rvaluevar::screen -(byte*) rvaluevar::screen#1 zp ZP_PTR_BYTE:2 screen 11.0 -(byte*) rvaluevar::screen#2 zp ZP_PTR_BYTE:2 screen 11.0 +(byte*) rvaluevar::screen#1 screen zp ZP_PTR_BYTE:2 11.0 +(byte*) rvaluevar::screen#2 screen zp ZP_PTR_BYTE:2 11.0 reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] -zp ZP_PTR_BYTE:2 screen [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ] +zp ZP_PTR_BYTE:2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] reg byte x [ rvalue::i#2 rvalue::i#1 ] reg byte x [ lvalue::i#2 lvalue::i#1 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/ptrtestmin.log b/src/main/java/dk/camelot64/kickc/test/ref/ptrtestmin.log index 4e75c62cf..139979291 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/ptrtestmin.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/ptrtestmin.log @@ -484,8 +484,8 @@ Added variable main::b#0 to zero page equivalence class [ main::b#0 ] Complete equivalence classes [ main::i#2 main::i#1 ] [ main::b#0 ] -Allocated zp ZP_BYTE:2 i#2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 b#0 [ main::b#0 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::b#0 ] INITIAL ASM //SEG0 Global ZP labels //SEG1 @begin @@ -531,11 +531,11 @@ main: { } REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 i , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 b [ main::b#0 ] : zp ZP_BYTE:3 b , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::b#0 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] ∞: zp ZP_BYTE:3 b [ main::b#0 ] 36.67: zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] +Uplift Scope [main] ∞: zp ZP_BYTE:3 [ main::b#0 ] 36.67: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplift Scope [] Uplifting [main] best 235 combination reg byte a [ main::b#0 ] reg byte x [ main::i#2 main::i#1 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/voronoi.asm b/src/main/java/dk/camelot64/kickc/test/ref/voronoi.asm index 8b1a49413..411f758b9 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/voronoi.asm +++ b/src/main/java/dk/camelot64/kickc/test/ref/voronoi.asm @@ -2,34 +2,34 @@ jsr main main: { lda #$1 - sta render.y + sta addpoint.c ldy #$5 lda #$0 sta numpoints lda #$5 jsr addpoint lda #$2 - sta render.y + sta addpoint.c ldy #$8 lda #$f jsr addpoint lda #$3 - sta render.y + sta addpoint.c ldy #$e lda #$6 jsr addpoint lda #$4 - sta render.y + sta addpoint.c ldy #$2 lda #$22 jsr addpoint lda #$5 - sta render.y + sta addpoint.c ldy #$11 lda #$15 jsr addpoint lda #$7 - sta render.y + sta addpoint.c ldy #$16 lda #$1f jsr addpoint @@ -144,8 +144,9 @@ render: { findcol: { .label x = 9 .label y = 10 - .label diff = 7 + .label xp = 7 .label yp = 11 + .label diff = 7 .label mindiff = 6 ldy #$0 lda #$ff @@ -153,11 +154,11 @@ findcol: { ldx #$0 b1: lda $1000,x - sta diff + sta xp lda $1100,x sta yp lda x - cmp diff + cmp xp bne b2 lda y cmp yp @@ -167,7 +168,7 @@ findcol: { rts b2: lda x - cmp diff + cmp xp bcs b4 lda diff sec @@ -212,37 +213,37 @@ findcol: { jmp b5 } initscreen: { - .label colline = 3 + .label screen = 3 lda #<$400 - sta render.colline + sta screen lda #>$400 - sta render.colline+$1 + sta screen+$1 b1: ldy #$0 lda #$e6 - sta (render.colline),y - inc render.colline + sta (screen),y + inc screen bne !+ - inc render.colline+$1 + inc screen+$1 !: - lda render.colline+$1 + lda screen+$1 cmp #>$7e8 bcc b1 bne !+ - lda render.colline + lda screen cmp #<$7e8 bcc b1 !: rts } addpoint: { - .label y = 2 + .label c = 2 ldx numpoints sta $1000,x tya ldy numpoints sta $1100,y - lda render.y + lda c ldx numpoints sta $1200,x inc numpoints diff --git a/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log b/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log index 5213d2cd9..09692c2de 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log @@ -8417,46 +8417,46 @@ Complete equivalence classes [ findcol::yp#0 ] [ findcol::$12 ] [ findcol::$14 ] -Allocated zp ZP_BYTE:2 y#2 [ render::y#2 render::y#1 ] -Allocated zp ZP_PTR_BYTE:3 colline#2 [ render::colline#2 render::colline#1 ] -Allocated zp ZP_BYTE:5 x#2 [ render::x#2 render::x#1 ] -Allocated zp ZP_BYTE:6 i#12 [ findcol::i#12 findcol::i#1 ] -Allocated zp ZP_BYTE:7 mindiff#10 [ findcol::mindiff#10 findcol::mindiff#13 ] -Allocated zp ZP_BYTE:8 return#0 [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] -Allocated zp ZP_BYTE:9 diff#4 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] -Allocated zp ZP_BYTE:10 mindiff#11 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] -Allocated zp ZP_PTR_BYTE:11 screen#2 [ initscreen::screen#2 initscreen::screen#1 ] -Allocated zp ZP_BYTE:13 x#6 [ addpoint::x#6 ] -Allocated zp ZP_BYTE:14 numpoints#19 [ numpoints#19 numpoints#1 ] -Allocated zp ZP_BYTE:15 y#6 [ addpoint::y#6 ] -Allocated zp ZP_BYTE:16 c#6 [ addpoint::c#6 ] -Allocated zp ZP_BYTE:17 $0 [ animate::$0 ] -Allocated zp ZP_BYTE:18 $1 [ animate::$1 ] -Allocated zp ZP_BYTE:19 $2 [ animate::$2 ] -Allocated zp ZP_BYTE:20 $5 [ animate::$5 ] -Allocated zp ZP_BYTE:21 $6 [ animate::$6 ] -Allocated zp ZP_BYTE:22 $7 [ animate::$7 ] -Allocated zp ZP_BYTE:23 $10 [ animate::$10 ] -Allocated zp ZP_BYTE:24 $11 [ animate::$11 ] -Allocated zp ZP_BYTE:25 $12 [ animate::$12 ] -Allocated zp ZP_BYTE:26 $15 [ animate::$15 ] -Allocated zp ZP_BYTE:27 $16 [ animate::$16 ] -Allocated zp ZP_BYTE:28 $17 [ animate::$17 ] -Allocated zp ZP_BYTE:29 $20 [ animate::$20 ] -Allocated zp ZP_BYTE:30 $21 [ animate::$21 ] -Allocated zp ZP_BYTE:31 $22 [ animate::$22 ] -Allocated zp ZP_BYTE:32 $25 [ animate::$25 ] -Allocated zp ZP_BYTE:33 $26 [ animate::$26 ] -Allocated zp ZP_BYTE:34 $27 [ animate::$27 ] -Allocated zp ZP_BYTE:35 $30 [ animate::$30 ] -Allocated zp ZP_BYTE:36 $31 [ animate::$31 ] -Allocated zp ZP_BYTE:37 x#0 [ findcol::x#0 ] -Allocated zp ZP_BYTE:38 y#0 [ findcol::y#0 ] -Allocated zp ZP_BYTE:39 col#0 [ render::col#0 ] -Allocated zp ZP_BYTE:40 xp#0 [ findcol::xp#0 ] -Allocated zp ZP_BYTE:41 yp#0 [ findcol::yp#0 ] -Allocated zp ZP_BYTE:42 $12 [ findcol::$12 ] -Allocated zp ZP_BYTE:43 $14 [ findcol::$14 ] +Allocated zp ZP_BYTE:2 [ render::y#2 render::y#1 ] +Allocated zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 ] +Allocated zp ZP_BYTE:5 [ render::x#2 render::x#1 ] +Allocated zp ZP_BYTE:6 [ findcol::i#12 findcol::i#1 ] +Allocated zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] +Allocated zp ZP_BYTE:8 [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] +Allocated zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] +Allocated zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] +Allocated zp ZP_PTR_BYTE:11 [ initscreen::screen#2 initscreen::screen#1 ] +Allocated zp ZP_BYTE:13 [ addpoint::x#6 ] +Allocated zp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] +Allocated zp ZP_BYTE:15 [ addpoint::y#6 ] +Allocated zp ZP_BYTE:16 [ addpoint::c#6 ] +Allocated zp ZP_BYTE:17 [ animate::$0 ] +Allocated zp ZP_BYTE:18 [ animate::$1 ] +Allocated zp ZP_BYTE:19 [ animate::$2 ] +Allocated zp ZP_BYTE:20 [ animate::$5 ] +Allocated zp ZP_BYTE:21 [ animate::$6 ] +Allocated zp ZP_BYTE:22 [ animate::$7 ] +Allocated zp ZP_BYTE:23 [ animate::$10 ] +Allocated zp ZP_BYTE:24 [ animate::$11 ] +Allocated zp ZP_BYTE:25 [ animate::$12 ] +Allocated zp ZP_BYTE:26 [ animate::$15 ] +Allocated zp ZP_BYTE:27 [ animate::$16 ] +Allocated zp ZP_BYTE:28 [ animate::$17 ] +Allocated zp ZP_BYTE:29 [ animate::$20 ] +Allocated zp ZP_BYTE:30 [ animate::$21 ] +Allocated zp ZP_BYTE:31 [ animate::$22 ] +Allocated zp ZP_BYTE:32 [ animate::$25 ] +Allocated zp ZP_BYTE:33 [ animate::$26 ] +Allocated zp ZP_BYTE:34 [ animate::$27 ] +Allocated zp ZP_BYTE:35 [ animate::$30 ] +Allocated zp ZP_BYTE:36 [ animate::$31 ] +Allocated zp ZP_BYTE:37 [ findcol::x#0 ] +Allocated zp ZP_BYTE:38 [ findcol::y#0 ] +Allocated zp ZP_BYTE:39 [ render::col#0 ] +Allocated zp ZP_BYTE:40 [ findcol::xp#0 ] +Allocated zp ZP_BYTE:41 [ findcol::yp#0 ] +Allocated zp ZP_BYTE:42 [ findcol::$12 ] +Allocated zp ZP_BYTE:43 [ findcol::$14 ] INITIAL ASM //SEG0 Global ZP labels .label numpoints = 14 @@ -8472,18 +8472,18 @@ main: { //SEG5 [1] call addpoint param-assignment [ ] //SEG6 [93] phi from main to addpoint addpoint_from_main: - //SEG7 [93] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 + //SEG7 [1] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 lda #$1 - sta c - //SEG8 [93] phi (byte) addpoint::y#6 = (byte) 5 -- zpby1=coby1 + sta addpoint.c + //SEG8 [1] phi (byte) addpoint::y#6 = (byte) 5 -- zpby1=coby1 lda #$5 - sta y - //SEG9 [93] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 + sta addpoint.y + //SEG9 [1] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 lda #$0 sta numpoints - //SEG10 [93] phi (byte) addpoint::x#6 = (byte) 5 -- zpby1=coby1 + //SEG10 [1] phi (byte) addpoint::x#6 = (byte) 5 -- zpby1=coby1 lda #$5 - sta x + sta addpoint.x jsr addpoint jmp b3 //SEG11 main::@3 @@ -8491,16 +8491,16 @@ main: { //SEG12 [2] call addpoint param-assignment [ ] //SEG13 [93] phi from main::@3 to addpoint addpoint_from_b3: - //SEG14 [93] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 + //SEG14 [2] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 lda #$2 - sta c - //SEG15 [93] phi (byte) addpoint::y#6 = (byte) 8 -- zpby1=coby1 + sta addpoint.c + //SEG15 [2] phi (byte) addpoint::y#6 = (byte) 8 -- zpby1=coby1 lda #$8 - sta y - //SEG16 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG17 [93] phi (byte) addpoint::x#6 = (byte) 15 -- zpby1=coby1 + sta addpoint.y + //SEG16 [2] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG17 [2] phi (byte) addpoint::x#6 = (byte) 15 -- zpby1=coby1 lda #$f - sta x + sta addpoint.x jsr addpoint jmp b4 //SEG18 main::@4 @@ -8508,16 +8508,16 @@ main: { //SEG19 [3] call addpoint param-assignment [ ] //SEG20 [93] phi from main::@4 to addpoint addpoint_from_b4: - //SEG21 [93] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 + //SEG21 [3] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 lda #$3 - sta c - //SEG22 [93] phi (byte) addpoint::y#6 = (byte) 14 -- zpby1=coby1 + sta addpoint.c + //SEG22 [3] phi (byte) addpoint::y#6 = (byte) 14 -- zpby1=coby1 lda #$e - sta y - //SEG23 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG24 [93] phi (byte) addpoint::x#6 = (byte) 6 -- zpby1=coby1 + sta addpoint.y + //SEG23 [3] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG24 [3] phi (byte) addpoint::x#6 = (byte) 6 -- zpby1=coby1 lda #$6 - sta x + sta addpoint.x jsr addpoint jmp b5 //SEG25 main::@5 @@ -8525,16 +8525,16 @@ main: { //SEG26 [4] call addpoint param-assignment [ ] //SEG27 [93] phi from main::@5 to addpoint addpoint_from_b5: - //SEG28 [93] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 + //SEG28 [4] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 lda #$4 - sta c - //SEG29 [93] phi (byte) addpoint::y#6 = (byte) 2 -- zpby1=coby1 + sta addpoint.c + //SEG29 [4] phi (byte) addpoint::y#6 = (byte) 2 -- zpby1=coby1 lda #$2 - sta y - //SEG30 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG31 [93] phi (byte) addpoint::x#6 = (byte) 34 -- zpby1=coby1 + sta addpoint.y + //SEG30 [4] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG31 [4] phi (byte) addpoint::x#6 = (byte) 34 -- zpby1=coby1 lda #$22 - sta x + sta addpoint.x jsr addpoint jmp b6 //SEG32 main::@6 @@ -8542,16 +8542,16 @@ main: { //SEG33 [5] call addpoint param-assignment [ ] //SEG34 [93] phi from main::@6 to addpoint addpoint_from_b6: - //SEG35 [93] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 + //SEG35 [5] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 lda #$5 - sta c - //SEG36 [93] phi (byte) addpoint::y#6 = (byte) 17 -- zpby1=coby1 + sta addpoint.c + //SEG36 [5] phi (byte) addpoint::y#6 = (byte) 17 -- zpby1=coby1 lda #$11 - sta y - //SEG37 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG38 [93] phi (byte) addpoint::x#6 = (byte) 21 -- zpby1=coby1 + sta addpoint.y + //SEG37 [5] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG38 [5] phi (byte) addpoint::x#6 = (byte) 21 -- zpby1=coby1 lda #$15 - sta x + sta addpoint.x jsr addpoint jmp b7 //SEG39 main::@7 @@ -8559,16 +8559,16 @@ main: { //SEG40 [6] call addpoint param-assignment [ ] //SEG41 [93] phi from main::@7 to addpoint addpoint_from_b7: - //SEG42 [93] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 + //SEG42 [6] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 lda #$7 - sta c - //SEG43 [93] phi (byte) addpoint::y#6 = (byte) 22 -- zpby1=coby1 + sta addpoint.c + //SEG43 [6] phi (byte) addpoint::y#6 = (byte) 22 -- zpby1=coby1 lda #$16 - sta y - //SEG44 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG45 [93] phi (byte) addpoint::x#6 = (byte) 31 -- zpby1=coby1 + sta addpoint.y + //SEG44 [6] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG45 [6] phi (byte) addpoint::x#6 = (byte) 31 -- zpby1=coby1 lda #$1f - sta x + sta addpoint.x jsr addpoint jmp b8 //SEG46 main::@8 @@ -8881,17 +8881,22 @@ findcol: { .label xp = 40 .label yp = 41 .label diff = 9 - .label mindiff = 10 + .label diff#2 = 10 + .label diff#3 = 10 .label i = 6 - .label mindiff#10 = 7 + .label mincol = 8 + .label diff#6 = 10 + .label mindiff = 7 + .label mindiff#11 = 10 + .label mindiff#14 = 10 //SEG135 [64] phi from findcol to findcol::@1 b1_from_findcol: //SEG136 [64] phi (byte) findcol::mincol#11 = (byte) 0 -- zpby1=coby1 lda #$0 - sta return + sta mincol //SEG137 [64] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 lda #$ff - sta mindiff_10 + sta mindiff //SEG138 [64] phi (byte) findcol::i#12 = (byte) 0 -- zpby1=coby1 lda #$0 sta i @@ -8963,7 +8968,7 @@ findcol: { lda diff clc adc $12 - sta mindiff + sta diff_3 //SEG160 [77] phi from findcol::@14 to findcol::@7 b7_from_b14: //SEG161 [77] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy @@ -8971,8 +8976,8 @@ findcol: { //SEG162 findcol::@7 b7: //SEG163 [78] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::y#0 findcol::diff#6 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 - lda mindiff - cmp mindiff_10 + lda diff_6 + cmp mindiff bcs b21 jmp b16 //SEG164 findcol::@16 @@ -8980,7 +8985,7 @@ findcol: { //SEG165 [79] (byte) findcol::mincol#1 ← (word) 4608 *idx (byte) findcol::i#12 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::y#0 findcol::diff#6 findcol::mincol#1 numpoints#1 ] -- zpby1=cowo1_staridx_zpby2 ldx i lda $1200,x - sta return + sta mincol //SEG166 [80] phi from findcol::@16 to findcol::@8 b8_from_b16: //SEG167 [80] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy @@ -9001,8 +9006,8 @@ findcol: { //SEG174 findcol::@19 b19: //SEG175 [83] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ render::x#2 render::y#2 render::colline#2 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 findcol::x#0 findcol::y#0 numpoints#1 ] -- zpby1=zpby2 - lda mindiff - sta mindiff_10 + lda mindiff_11 + sta mindiff //SEG176 [64] phi from findcol::@19 to findcol::@1 b1_from_b19: //SEG177 [64] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy @@ -9012,8 +9017,8 @@ findcol: { //SEG180 findcol::@21 b21: //SEG181 [84] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::y#0 findcol::mincol#11 findcol::mindiff#14 numpoints#1 ] -- zpby1=zpby2 - lda mindiff_10 - sta mindiff + lda mindiff + sta mindiff_14 //SEG182 [80] phi from findcol::@21 to findcol::@8 b8_from_b21: //SEG183 [80] phi (byte) findcol::mindiff#11 = (byte~) findcol::mindiff#14 -- register_copy @@ -9030,7 +9035,7 @@ findcol: { lda diff clc adc $14 - sta mindiff + sta diff_2 //SEG188 [77] phi from findcol::@6 to findcol::@7 b7_from_b6: //SEG189 [77] phi (byte) findcol::diff#6 = (byte) findcol::diff#2 -- register_copy @@ -9122,18 +9127,18 @@ Statement [41] *((word) 4355) ← (byte) 25 [ ] always clobbers reg byte a Statement [43] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] always clobbers reg byte a Statement [48] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] always clobbers reg byte a Statement [60] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::colline#1 render::y#2 ] always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 y [ render::y#2 render::y#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ render::y#2 render::y#1 ] Statement [72] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::y#0 findcol::yp#0 findcol::diff#1 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 x [ render::x#2 render::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 i [ findcol::i#12 findcol::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 x [ findcol::x#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:38 y [ findcol::y#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 yp [ findcol::yp#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 mindiff#10 [ findcol::mindiff#10 findcol::mindiff#13 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 return [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 numpoints [ numpoints#19 numpoints#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ render::x#2 render::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ findcol::i#12 findcol::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 [ findcol::x#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:38 [ findcol::y#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ findcol::yp#0 ] +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#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] Statement [75] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::y#0 findcol::diff#4 findcol::$12 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 diff [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] Statement [85] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::y#0 findcol::diff#4 findcol::mindiff#10 findcol::mincol#11 numpoints#1 findcol::$14 ] always clobbers reg byte a Statement [87] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::y#0 findcol::yp#0 findcol::diff#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] always clobbers reg byte a Statement [89] *((byte*) initscreen::screen#2) ← (byte) 230 [ initscreen::screen#2 ] always clobbers reg byte a reg byte y @@ -9152,68 +9157,68 @@ Statement [85] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp Statement [87] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::y#0 findcol::yp#0 findcol::diff#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] always clobbers reg byte a Statement [89] *((byte*) initscreen::screen#2) ← (byte) 230 [ initscreen::screen#2 ] always clobbers reg byte a reg byte y Statement [91] if((byte*) initscreen::screen#1<(word) 2024) goto initscreen::@1 [ initscreen::screen#1 ] always clobbers reg byte a -Equivalence Class zp ZP_BYTE:17 $0 [ animate::$0 ] has ALU potential. -Equivalence Class zp ZP_BYTE:20 $5 [ animate::$5 ] has ALU potential. -Equivalence Class zp ZP_BYTE:26 $15 [ animate::$15 ] has ALU potential. -Equivalence Class zp ZP_BYTE:32 $25 [ animate::$25 ] has ALU potential. +Equivalence Class zp ZP_BYTE:17 [ animate::$0 ] has ALU potential. +Equivalence Class zp ZP_BYTE:20 [ animate::$5 ] has ALU potential. +Equivalence Class zp ZP_BYTE:26 [ animate::$15 ] has ALU potential. +Equivalence Class zp ZP_BYTE:32 [ animate::$25 ] has ALU potential. REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 y [ render::y#2 render::y#1 ] : zp ZP_BYTE:2 y , reg byte x , reg byte y , -Potential registers zp ZP_PTR_BYTE:3 colline [ render::colline#2 render::colline#1 ] : zp ZP_PTR_BYTE:3 colline , -Potential registers zp ZP_BYTE:5 x [ render::x#2 render::x#1 ] : zp ZP_BYTE:5 x , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:6 i [ findcol::i#12 findcol::i#1 ] : zp ZP_BYTE:6 i , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:7 mindiff#10 [ findcol::mindiff#10 findcol::mindiff#13 ] : zp ZP_BYTE:7 mindiff#10 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:8 return [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] : zp ZP_BYTE:8 return , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:9 diff [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] : zp ZP_BYTE:9 diff , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:10 mindiff [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] : zp ZP_BYTE:10 mindiff , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_PTR_BYTE:11 screen [ initscreen::screen#2 initscreen::screen#1 ] : zp ZP_PTR_BYTE:11 screen , -Potential registers zp ZP_BYTE:13 x [ addpoint::x#6 ] : zp ZP_BYTE:13 x , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:14 numpoints [ numpoints#19 numpoints#1 ] : zp ZP_BYTE:14 numpoints , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:15 y [ addpoint::y#6 ] : zp ZP_BYTE:15 y , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:16 c [ addpoint::c#6 ] : zp ZP_BYTE:16 c , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:17 $0 [ animate::$0 ] : zp ZP_BYTE:17 $0 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp ZP_BYTE:18 $1 [ animate::$1 ] : zp ZP_BYTE:18 $1 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:19 $2 [ animate::$2 ] : zp ZP_BYTE:19 $2 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:20 $5 [ animate::$5 ] : zp ZP_BYTE:20 $5 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp ZP_BYTE:21 $6 [ animate::$6 ] : zp ZP_BYTE:21 $6 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:22 $7 [ animate::$7 ] : zp ZP_BYTE:22 $7 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:23 $10 [ animate::$10 ] : zp ZP_BYTE:23 $10 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:24 $11 [ animate::$11 ] : zp ZP_BYTE:24 $11 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:25 $12 [ animate::$12 ] : zp ZP_BYTE:25 $12 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:26 $15 [ animate::$15 ] : zp ZP_BYTE:26 $15 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp ZP_BYTE:27 $16 [ animate::$16 ] : zp ZP_BYTE:27 $16 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:28 $17 [ animate::$17 ] : zp ZP_BYTE:28 $17 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:29 $20 [ animate::$20 ] : zp ZP_BYTE:29 $20 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:30 $21 [ animate::$21 ] : zp ZP_BYTE:30 $21 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:31 $22 [ animate::$22 ] : zp ZP_BYTE:31 $22 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:32 $25 [ animate::$25 ] : zp ZP_BYTE:32 $25 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp ZP_BYTE:33 $26 [ animate::$26 ] : zp ZP_BYTE:33 $26 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:34 $27 [ animate::$27 ] : zp ZP_BYTE:34 $27 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:35 $30 [ animate::$30 ] : zp ZP_BYTE:35 $30 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:36 $31 [ animate::$31 ] : zp ZP_BYTE:36 $31 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:37 x [ findcol::x#0 ] : zp ZP_BYTE:37 x , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:38 y [ findcol::y#0 ] : zp ZP_BYTE:38 y , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:39 col [ render::col#0 ] : zp ZP_BYTE:39 col , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:40 xp [ findcol::xp#0 ] : zp ZP_BYTE:40 xp , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:41 yp [ findcol::yp#0 ] : zp ZP_BYTE:41 yp , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:42 $12 [ findcol::$12 ] : zp ZP_BYTE:42 $12 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:43 $14 [ findcol::$14 ] : zp ZP_BYTE:43 $14 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:2 [ render::y#2 render::y#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 ] : zp ZP_PTR_BYTE:3 , +Potential registers zp ZP_BYTE:5 [ render::x#2 render::x#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ findcol::i#12 findcol::i#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:8 [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_PTR_BYTE:11 [ initscreen::screen#2 initscreen::screen#1 ] : zp ZP_PTR_BYTE:11 , +Potential registers zp ZP_BYTE:13 [ addpoint::x#6 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:15 [ addpoint::y#6 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:16 [ addpoint::c#6 ] : zp ZP_BYTE:16 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:17 [ animate::$0 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp ZP_BYTE:18 [ animate::$1 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:19 [ animate::$2 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:20 [ animate::$5 ] : zp ZP_BYTE:20 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp ZP_BYTE:21 [ animate::$6 ] : zp ZP_BYTE:21 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:22 [ animate::$7 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:23 [ animate::$10 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:24 [ animate::$11 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:25 [ animate::$12 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:26 [ animate::$15 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp ZP_BYTE:27 [ animate::$16 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:28 [ animate::$17 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:29 [ animate::$20 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:30 [ animate::$21 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:31 [ animate::$22 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:32 [ animate::$25 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp ZP_BYTE:33 [ animate::$26 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:34 [ animate::$27 ] : zp ZP_BYTE:34 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:35 [ animate::$30 ] : zp ZP_BYTE:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:36 [ animate::$31 ] : zp ZP_BYTE:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:37 [ findcol::x#0 ] : zp ZP_BYTE:37 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:38 [ findcol::y#0 ] : zp ZP_BYTE:38 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:39 [ render::col#0 ] : zp ZP_BYTE:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:40 [ findcol::xp#0 ] : zp ZP_BYTE:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:41 [ findcol::yp#0 ] : zp ZP_BYTE:41 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:42 [ findcol::$12 ] : zp ZP_BYTE:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:43 [ findcol::$14 ] : zp ZP_BYTE:43 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [findcol] 83,341.67: zp ZP_BYTE:10 mindiff [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] 50,005: zp ZP_BYTE:9 diff [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] 34,846.92: zp ZP_BYTE:8 return [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] 21,877.19: zp ZP_BYTE:7 mindiff#10 [ findcol::mindiff#10 findcol::mindiff#13 ] 20,002: zp ZP_BYTE:42 $12 [ findcol::$12 ] 20,002: zp ZP_BYTE:43 $14 [ findcol::$14 ] 12,632.84: zp ZP_BYTE:6 i [ findcol::i#12 findcol::i#1 ] 10,001: zp ZP_BYTE:40 xp [ findcol::xp#0 ] 6,250.62: zp ZP_BYTE:41 yp [ findcol::yp#0 ] 1,863.86: zp ZP_BYTE:37 x [ findcol::x#0 ] 1,863.86: zp ZP_BYTE:38 y [ findcol::y#0 ] -Uplift Scope [render] 2,002: zp ZP_BYTE:39 col [ render::col#0 ] 1,634.97: zp ZP_BYTE:5 x [ render::x#2 render::x#1 ] 186.88: zp ZP_BYTE:2 y [ render::y#2 render::y#1 ] 103.79: zp ZP_PTR_BYTE:3 colline [ render::colline#2 render::colline#1 ] -Uplift Scope [] 459.64: zp ZP_BYTE:14 numpoints [ numpoints#19 numpoints#1 ] -Uplift Scope [animate] 4: zp ZP_BYTE:17 $0 [ animate::$0 ] 4: zp ZP_BYTE:18 $1 [ animate::$1 ] 4: zp ZP_BYTE:19 $2 [ animate::$2 ] 4: zp ZP_BYTE:20 $5 [ animate::$5 ] 4: zp ZP_BYTE:21 $6 [ animate::$6 ] 4: zp ZP_BYTE:22 $7 [ animate::$7 ] 4: zp ZP_BYTE:23 $10 [ animate::$10 ] 4: zp ZP_BYTE:24 $11 [ animate::$11 ] 4: zp ZP_BYTE:25 $12 [ animate::$12 ] 4: zp ZP_BYTE:26 $15 [ animate::$15 ] 4: zp ZP_BYTE:27 $16 [ animate::$16 ] 4: zp ZP_BYTE:28 $17 [ animate::$17 ] 4: zp ZP_BYTE:29 $20 [ animate::$20 ] 4: zp ZP_BYTE:30 $21 [ animate::$21 ] 4: zp ZP_BYTE:31 $22 [ animate::$22 ] 4: zp ZP_BYTE:32 $25 [ animate::$25 ] 4: zp ZP_BYTE:33 $26 [ animate::$26 ] 4: zp ZP_BYTE:34 $27 [ animate::$27 ] 4: zp ZP_BYTE:35 $30 [ animate::$30 ] 4: zp ZP_BYTE:36 $31 [ animate::$31 ] -Uplift Scope [initscreen] 33: zp ZP_PTR_BYTE:11 screen [ initscreen::screen#2 initscreen::screen#1 ] -Uplift Scope [addpoint] 2: zp ZP_BYTE:13 x [ addpoint::x#6 ] 1: zp ZP_BYTE:15 y [ addpoint::y#6 ] 0.67: zp ZP_BYTE:16 c [ addpoint::c#6 ] +Uplift Scope [findcol] 83,341.67: zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] 50,005: zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] 34,846.92: zp ZP_BYTE:8 [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] 21,877.19: zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] 20,002: zp ZP_BYTE:42 [ findcol::$12 ] 20,002: zp ZP_BYTE:43 [ findcol::$14 ] 12,632.84: zp ZP_BYTE:6 [ findcol::i#12 findcol::i#1 ] 10,001: zp ZP_BYTE:40 [ findcol::xp#0 ] 6,250.62: zp ZP_BYTE:41 [ findcol::yp#0 ] 1,863.86: zp ZP_BYTE:37 [ findcol::x#0 ] 1,863.86: zp ZP_BYTE:38 [ findcol::y#0 ] +Uplift Scope [render] 2,002: zp ZP_BYTE:39 [ render::col#0 ] 1,634.97: zp ZP_BYTE:5 [ render::x#2 render::x#1 ] 186.88: zp ZP_BYTE:2 [ render::y#2 render::y#1 ] 103.79: zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 ] +Uplift Scope [] 459.64: zp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] +Uplift Scope [animate] 4: zp ZP_BYTE:17 [ animate::$0 ] 4: zp ZP_BYTE:18 [ animate::$1 ] 4: zp ZP_BYTE:19 [ animate::$2 ] 4: zp ZP_BYTE:20 [ animate::$5 ] 4: zp ZP_BYTE:21 [ animate::$6 ] 4: zp ZP_BYTE:22 [ animate::$7 ] 4: zp ZP_BYTE:23 [ animate::$10 ] 4: zp ZP_BYTE:24 [ animate::$11 ] 4: zp ZP_BYTE:25 [ animate::$12 ] 4: zp ZP_BYTE:26 [ animate::$15 ] 4: zp ZP_BYTE:27 [ animate::$16 ] 4: zp ZP_BYTE:28 [ animate::$17 ] 4: zp ZP_BYTE:29 [ animate::$20 ] 4: zp ZP_BYTE:30 [ animate::$21 ] 4: zp ZP_BYTE:31 [ animate::$22 ] 4: zp ZP_BYTE:32 [ animate::$25 ] 4: zp ZP_BYTE:33 [ animate::$26 ] 4: zp ZP_BYTE:34 [ animate::$27 ] 4: zp ZP_BYTE:35 [ animate::$30 ] 4: zp ZP_BYTE:36 [ animate::$31 ] +Uplift Scope [initscreen] 33: zp ZP_PTR_BYTE:11 [ initscreen::screen#2 initscreen::screen#1 ] +Uplift Scope [addpoint] 2: zp ZP_BYTE:13 [ addpoint::x#6 ] 1: zp ZP_BYTE:15 [ addpoint::y#6 ] 0.67: zp ZP_BYTE:16 [ addpoint::c#6 ] Uplift Scope [main] Uplift attempts [findcol] 10000/559872 (limiting to 10000) -Uplifting [findcol] best 2005183 combination reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] zp ZP_BYTE:9 diff [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] reg byte y [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] zp ZP_BYTE:7 mindiff#10 [ findcol::mindiff#10 findcol::mindiff#13 ] reg byte a [ findcol::$12 ] reg byte a [ findcol::$14 ] reg byte x [ findcol::i#12 findcol::i#1 ] zp ZP_BYTE:40 xp [ findcol::xp#0 ] zp ZP_BYTE:41 yp [ findcol::yp#0 ] zp ZP_BYTE:37 x [ findcol::x#0 ] zp ZP_BYTE:38 y [ findcol::y#0 ] +Uplifting [findcol] best 2005183 combination reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] reg byte y [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] reg byte a [ findcol::$12 ] reg byte a [ findcol::$14 ] reg byte x [ findcol::i#12 findcol::i#1 ] zp ZP_BYTE:40 [ findcol::xp#0 ] zp ZP_BYTE:41 [ findcol::yp#0 ] zp ZP_BYTE:37 [ findcol::x#0 ] zp ZP_BYTE:38 [ findcol::y#0 ] Limited combination testing to 10000 combinations of 559872 possible. -Uplifting [render] best 1999183 combination reg byte a [ render::col#0 ] zp ZP_BYTE:5 x [ render::x#2 render::x#1 ] zp ZP_BYTE:2 y [ render::y#2 render::y#1 ] zp ZP_PTR_BYTE:3 colline [ render::colline#2 render::colline#1 ] -Uplifting [] best 1999183 combination zp ZP_BYTE:14 numpoints [ numpoints#19 numpoints#1 ] -Uplifting [initscreen] best 1999183 combination zp ZP_PTR_BYTE:11 screen [ initscreen::screen#2 initscreen::screen#1 ] -Uplifting [addpoint] best 1999129 combination reg byte a [ addpoint::x#6 ] reg byte y [ addpoint::y#6 ] zp ZP_BYTE:16 c [ addpoint::c#6 ] +Uplifting [render] best 1999183 combination reg byte a [ render::col#0 ] zp ZP_BYTE:5 [ render::x#2 render::x#1 ] zp ZP_BYTE:2 [ render::y#2 render::y#1 ] zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 ] +Uplifting [] best 1999183 combination zp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] +Uplifting [initscreen] best 1999183 combination zp ZP_PTR_BYTE:11 [ initscreen::screen#2 initscreen::screen#1 ] +Uplifting [addpoint] best 1999129 combination reg byte a [ addpoint::x#6 ] reg byte y [ addpoint::y#6 ] zp ZP_BYTE:16 [ addpoint::c#6 ] Uplifting [main] best 1999129 combination Uplifting remains [reg byte a [ animate::$0 ]] best 1999123 combination reg byte a [ animate::$0 ] Uplifting remains [reg byte a [ animate::$1 ]] best 1999117 combination reg byte a [ animate::$1 ] @@ -9235,18 +9240,15 @@ Uplifting remains [reg byte a [ animate::$26 ]] best 1999023 combination reg byt Uplifting remains [reg byte a [ animate::$27 ]] best 1999017 combination reg byte a [ animate::$27 ] Uplifting remains [reg byte a [ animate::$30 ]] best 1999011 combination reg byte a [ animate::$30 ] Uplifting remains [reg byte a [ animate::$31 ]] best 1999005 combination reg byte a [ animate::$31 ] -Coalescing zero page register [ zp ZP_BYTE:2 y [ render::y#2 render::y#1 ] ] with [ zp ZP_BYTE:16 c [ addpoint::c#6 ] ] -Coalescing zero page register [ zp ZP_PTR_BYTE:3 colline [ render::colline#2 render::colline#1 ] ] with [ zp ZP_PTR_BYTE:11 screen [ initscreen::screen#2 initscreen::screen#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:9 diff [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] ] with [ zp ZP_BYTE:40 xp [ findcol::xp#0 ] ] -Allocated (was zp ZP_BYTE:2 y) zp ZP_BYTE:2 y#2 [ render::y#2 render::y#1 addpoint::c#6 ] -Allocated (was zp ZP_PTR_BYTE:3 colline) zp ZP_PTR_BYTE:3 colline#2 [ render::colline#2 render::colline#1 initscreen::screen#2 initscreen::screen#1 ] -Allocated (was zp ZP_BYTE:5 x) zp ZP_BYTE:5 x#2 [ render::x#2 render::x#1 ] -Allocated (was zp ZP_BYTE:7 mindiff#10) zp ZP_BYTE:6 mindiff#10 [ findcol::mindiff#10 findcol::mindiff#13 ] -Allocated (was zp ZP_BYTE:9 diff) zp ZP_BYTE:7 diff#4 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 findcol::xp#0 ] -Allocated (was zp ZP_BYTE:14 numpoints) zp ZP_BYTE:8 numpoints#19 [ numpoints#19 numpoints#1 ] -Allocated (was zp ZP_BYTE:37 x) zp ZP_BYTE:9 x#0 [ findcol::x#0 ] -Allocated (was zp ZP_BYTE:38 y) zp ZP_BYTE:10 y#0 [ findcol::y#0 ] -Allocated (was zp ZP_BYTE:41 yp) zp ZP_BYTE:11 yp#0 [ findcol::yp#0 ] +Coalescing zero page register [ zp ZP_BYTE:2 [ render::y#2 render::y#1 ] ] with [ zp ZP_BYTE:16 [ addpoint::c#6 ] ] +Coalescing zero page register [ zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 ] ] with [ zp ZP_PTR_BYTE:11 [ initscreen::screen#2 initscreen::screen#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] ] with [ zp ZP_BYTE:40 [ findcol::xp#0 ] ] +Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:6 [ findcol::mindiff#10 findcol::mindiff#13 ] +Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:7 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 findcol::xp#0 ] +Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:8 [ numpoints#19 numpoints#1 ] +Allocated (was zp ZP_BYTE:37) zp ZP_BYTE:9 [ findcol::x#0 ] +Allocated (was zp ZP_BYTE:38) zp ZP_BYTE:10 [ findcol::y#0 ] +Allocated (was zp ZP_BYTE:41) zp ZP_BYTE:11 [ findcol::yp#0 ] Removing instruction jmp bend Removing instruction jmp b3 Removing instruction jmp b4 @@ -9301,15 +9303,15 @@ main: { //SEG5 [1] call addpoint param-assignment [ ] //SEG6 [93] phi from main to addpoint addpoint_from_main: - //SEG7 [93] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 + //SEG7 [1] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 lda #$1 - sta render.y - //SEG8 [93] phi (byte) addpoint::y#6 = (byte) 5 -- yby=coby1 + sta addpoint.c + //SEG8 [1] phi (byte) addpoint::y#6 = (byte) 5 -- yby=coby1 ldy #$5 - //SEG9 [93] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 + //SEG9 [1] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 lda #$0 sta numpoints - //SEG10 [93] phi (byte) addpoint::x#6 = (byte) 5 -- aby=coby1 + //SEG10 [1] phi (byte) addpoint::x#6 = (byte) 5 -- aby=coby1 lda #$5 jsr addpoint //SEG11 main::@3 @@ -9317,13 +9319,13 @@ main: { //SEG12 [2] call addpoint param-assignment [ ] //SEG13 [93] phi from main::@3 to addpoint addpoint_from_b3: - //SEG14 [93] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 + //SEG14 [2] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 lda #$2 - sta render.y - //SEG15 [93] phi (byte) addpoint::y#6 = (byte) 8 -- yby=coby1 + sta addpoint.c + //SEG15 [2] phi (byte) addpoint::y#6 = (byte) 8 -- yby=coby1 ldy #$8 - //SEG16 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG17 [93] phi (byte) addpoint::x#6 = (byte) 15 -- aby=coby1 + //SEG16 [2] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG17 [2] phi (byte) addpoint::x#6 = (byte) 15 -- aby=coby1 lda #$f jsr addpoint //SEG18 main::@4 @@ -9331,13 +9333,13 @@ main: { //SEG19 [3] call addpoint param-assignment [ ] //SEG20 [93] phi from main::@4 to addpoint addpoint_from_b4: - //SEG21 [93] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 + //SEG21 [3] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 lda #$3 - sta render.y - //SEG22 [93] phi (byte) addpoint::y#6 = (byte) 14 -- yby=coby1 + sta addpoint.c + //SEG22 [3] phi (byte) addpoint::y#6 = (byte) 14 -- yby=coby1 ldy #$e - //SEG23 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG24 [93] phi (byte) addpoint::x#6 = (byte) 6 -- aby=coby1 + //SEG23 [3] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG24 [3] phi (byte) addpoint::x#6 = (byte) 6 -- aby=coby1 lda #$6 jsr addpoint //SEG25 main::@5 @@ -9345,13 +9347,13 @@ main: { //SEG26 [4] call addpoint param-assignment [ ] //SEG27 [93] phi from main::@5 to addpoint addpoint_from_b5: - //SEG28 [93] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 + //SEG28 [4] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 lda #$4 - sta render.y - //SEG29 [93] phi (byte) addpoint::y#6 = (byte) 2 -- yby=coby1 + sta addpoint.c + //SEG29 [4] phi (byte) addpoint::y#6 = (byte) 2 -- yby=coby1 ldy #$2 - //SEG30 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG31 [93] phi (byte) addpoint::x#6 = (byte) 34 -- aby=coby1 + //SEG30 [4] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG31 [4] phi (byte) addpoint::x#6 = (byte) 34 -- aby=coby1 lda #$22 jsr addpoint //SEG32 main::@6 @@ -9359,13 +9361,13 @@ main: { //SEG33 [5] call addpoint param-assignment [ ] //SEG34 [93] phi from main::@6 to addpoint addpoint_from_b6: - //SEG35 [93] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 + //SEG35 [5] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 lda #$5 - sta render.y - //SEG36 [93] phi (byte) addpoint::y#6 = (byte) 17 -- yby=coby1 + sta addpoint.c + //SEG36 [5] phi (byte) addpoint::y#6 = (byte) 17 -- yby=coby1 ldy #$11 - //SEG37 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG38 [93] phi (byte) addpoint::x#6 = (byte) 21 -- aby=coby1 + //SEG37 [5] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG38 [5] phi (byte) addpoint::x#6 = (byte) 21 -- aby=coby1 lda #$15 jsr addpoint //SEG39 main::@7 @@ -9373,13 +9375,13 @@ main: { //SEG40 [6] call addpoint param-assignment [ ] //SEG41 [93] phi from main::@7 to addpoint addpoint_from_b7: - //SEG42 [93] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 + //SEG42 [6] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 lda #$7 - sta render.y - //SEG43 [93] phi (byte) addpoint::y#6 = (byte) 22 -- yby=coby1 + sta addpoint.c + //SEG43 [6] phi (byte) addpoint::y#6 = (byte) 22 -- yby=coby1 ldy #$16 - //SEG44 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG45 [93] phi (byte) addpoint::x#6 = (byte) 31 -- aby=coby1 + //SEG44 [6] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG45 [6] phi (byte) addpoint::x#6 = (byte) 31 -- aby=coby1 lda #$1f jsr addpoint //SEG46 main::@8 @@ -9601,8 +9603,9 @@ render: { findcol: { .label x = 9 .label y = 10 - .label diff = 7 + .label xp = 7 .label yp = 11 + .label diff = 7 .label mindiff = 6 //SEG135 [64] phi from findcol to findcol::@1 b1_from_findcol: @@ -9617,13 +9620,13 @@ findcol: { b1: //SEG140 [65] (byte) findcol::xp#0 ← (word) 4096 *idx (byte) findcol::i#12 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=cowo1_staridx_xby lda $1000,x - sta diff + sta xp //SEG141 [66] (byte) findcol::yp#0 ← (word) 4352 *idx (byte) findcol::i#12 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=cowo1_staridx_xby lda $1100,x sta yp //SEG142 [67] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 lda x - cmp diff + cmp xp bne b2 //SEG143 findcol::@9 b9: @@ -9643,7 +9646,7 @@ findcol: { b2: //SEG150 [71] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 lda x - cmp diff + cmp xp bcs b4 //SEG151 findcol::@12 b12: @@ -9743,14 +9746,14 @@ findcol: { } //SEG194 initscreen initscreen: { - .label colline = 3 + .label screen = 3 //SEG195 [88] phi from initscreen to initscreen::@1 b1_from_initscreen: //SEG196 [88] phi (byte*) initscreen::screen#2 = (word) 1024 -- zpptrby1=cowo1 lda #<$400 - sta render.colline + sta screen lda #>$400 - sta render.colline+$1 + sta screen+$1 jmp b1 //SEG197 [88] phi from initscreen::@1 to initscreen::@1 b1_from_b1: @@ -9760,18 +9763,18 @@ initscreen: { //SEG200 [89] *((byte*) initscreen::screen#2) ← (byte) 230 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 ldy #$0 lda #$e6 - sta (render.colline),y + sta (screen),y //SEG201 [90] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 - inc render.colline + inc screen bne !+ - inc render.colline+$1 + inc screen+$1 !: //SEG202 [91] if((byte*) initscreen::screen#1<(word) 2024) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 - lda render.colline+$1 + lda screen+$1 cmp #>$7e8 bcc b1_from_b1 bne !+ - lda render.colline + lda screen cmp #<$7e8 bcc b1_from_b1 !: @@ -9782,7 +9785,7 @@ initscreen: { } //SEG205 addpoint addpoint: { - .label y = 2 + .label c = 2 //SEG206 [94] *((word) 4096 + (byte) numpoints#19) ← (byte) addpoint::x#6 [ numpoints#19 addpoint::y#6 addpoint::c#6 ] -- cowo1_staridx_zpby1=aby ldx numpoints sta $1000,x @@ -9791,7 +9794,7 @@ addpoint: { ldy numpoints sta $1100,y //SEG208 [96] *((word) 4608 + (byte) numpoints#19) ← (byte) addpoint::c#6 [ numpoints#19 ] -- cowo1_staridx_zpby1=zpby2 - lda render.y + lda c ldx numpoints sta $1200,x //SEG209 [97] (byte) numpoints#1 ← ++ (byte) numpoints#19 [ ] -- zpby1=_inc_zpby1 @@ -9833,80 +9836,80 @@ main: { //SEG5 [1] call addpoint param-assignment [ ] //SEG6 [93] phi from main to addpoint addpoint_from_main: - //SEG7 [93] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 + //SEG7 [1] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 lda #$1 - sta render.y - //SEG8 [93] phi (byte) addpoint::y#6 = (byte) 5 -- yby=coby1 + sta addpoint.c + //SEG8 [1] phi (byte) addpoint::y#6 = (byte) 5 -- yby=coby1 ldy #$5 - //SEG9 [93] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 + //SEG9 [1] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 lda #$0 sta numpoints - //SEG10 [93] phi (byte) addpoint::x#6 = (byte) 5 -- aby=coby1 + //SEG10 [1] phi (byte) addpoint::x#6 = (byte) 5 -- aby=coby1 lda #$5 jsr addpoint //SEG11 main::@3 b3: //SEG12 [2] call addpoint param-assignment [ ] //SEG13 [93] phi from main::@3 to addpoint - //SEG14 [93] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 + //SEG14 [2] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 lda #$2 - sta render.y - //SEG15 [93] phi (byte) addpoint::y#6 = (byte) 8 -- yby=coby1 + sta addpoint.c + //SEG15 [2] phi (byte) addpoint::y#6 = (byte) 8 -- yby=coby1 ldy #$8 - //SEG16 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG17 [93] phi (byte) addpoint::x#6 = (byte) 15 -- aby=coby1 + //SEG16 [2] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG17 [2] phi (byte) addpoint::x#6 = (byte) 15 -- aby=coby1 lda #$f jsr addpoint //SEG18 main::@4 b4: //SEG19 [3] call addpoint param-assignment [ ] //SEG20 [93] phi from main::@4 to addpoint - //SEG21 [93] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 + //SEG21 [3] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 lda #$3 - sta render.y - //SEG22 [93] phi (byte) addpoint::y#6 = (byte) 14 -- yby=coby1 + sta addpoint.c + //SEG22 [3] phi (byte) addpoint::y#6 = (byte) 14 -- yby=coby1 ldy #$e - //SEG23 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG24 [93] phi (byte) addpoint::x#6 = (byte) 6 -- aby=coby1 + //SEG23 [3] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG24 [3] phi (byte) addpoint::x#6 = (byte) 6 -- aby=coby1 lda #$6 jsr addpoint //SEG25 main::@5 b5: //SEG26 [4] call addpoint param-assignment [ ] //SEG27 [93] phi from main::@5 to addpoint - //SEG28 [93] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 + //SEG28 [4] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 lda #$4 - sta render.y - //SEG29 [93] phi (byte) addpoint::y#6 = (byte) 2 -- yby=coby1 + sta addpoint.c + //SEG29 [4] phi (byte) addpoint::y#6 = (byte) 2 -- yby=coby1 ldy #$2 - //SEG30 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG31 [93] phi (byte) addpoint::x#6 = (byte) 34 -- aby=coby1 + //SEG30 [4] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG31 [4] phi (byte) addpoint::x#6 = (byte) 34 -- aby=coby1 lda #$22 jsr addpoint //SEG32 main::@6 b6: //SEG33 [5] call addpoint param-assignment [ ] //SEG34 [93] phi from main::@6 to addpoint - //SEG35 [93] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 + //SEG35 [5] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 lda #$5 - sta render.y - //SEG36 [93] phi (byte) addpoint::y#6 = (byte) 17 -- yby=coby1 + sta addpoint.c + //SEG36 [5] phi (byte) addpoint::y#6 = (byte) 17 -- yby=coby1 ldy #$11 - //SEG37 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG38 [93] phi (byte) addpoint::x#6 = (byte) 21 -- aby=coby1 + //SEG37 [5] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG38 [5] phi (byte) addpoint::x#6 = (byte) 21 -- aby=coby1 lda #$15 jsr addpoint //SEG39 main::@7 b7: //SEG40 [6] call addpoint param-assignment [ ] //SEG41 [93] phi from main::@7 to addpoint - //SEG42 [93] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 + //SEG42 [6] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 lda #$7 - sta render.y - //SEG43 [93] phi (byte) addpoint::y#6 = (byte) 22 -- yby=coby1 + sta addpoint.c + //SEG43 [6] phi (byte) addpoint::y#6 = (byte) 22 -- yby=coby1 ldy #$16 - //SEG44 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG45 [93] phi (byte) addpoint::x#6 = (byte) 31 -- aby=coby1 + //SEG44 [6] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG45 [6] phi (byte) addpoint::x#6 = (byte) 31 -- aby=coby1 lda #$1f jsr addpoint //SEG46 main::@8 @@ -10125,8 +10128,9 @@ render: { findcol: { .label x = 9 .label y = 10 - .label diff = 7 + .label xp = 7 .label yp = 11 + .label diff = 7 .label mindiff = 6 //SEG135 [64] phi from findcol to findcol::@1 b1_from_findcol: @@ -10141,13 +10145,13 @@ findcol: { b1: //SEG140 [65] (byte) findcol::xp#0 ← (word) 4096 *idx (byte) findcol::i#12 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=cowo1_staridx_xby lda $1000,x - sta diff + sta xp //SEG141 [66] (byte) findcol::yp#0 ← (word) 4352 *idx (byte) findcol::i#12 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=cowo1_staridx_xby lda $1100,x sta yp //SEG142 [67] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 lda x - cmp diff + cmp xp bne b2 //SEG143 findcol::@9 b9: @@ -10167,7 +10171,7 @@ findcol: { b2: //SEG150 [71] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 lda x - cmp diff + cmp xp bcs b4 //SEG151 findcol::@12 b12: @@ -10264,14 +10268,14 @@ findcol: { } //SEG194 initscreen initscreen: { - .label colline = 3 + .label screen = 3 //SEG195 [88] phi from initscreen to initscreen::@1 b1_from_initscreen: //SEG196 [88] phi (byte*) initscreen::screen#2 = (word) 1024 -- zpptrby1=cowo1 lda #<$400 - sta render.colline + sta screen lda #>$400 - sta render.colline+$1 + sta screen+$1 jmp b1 //SEG197 [88] phi from initscreen::@1 to initscreen::@1 //SEG198 [88] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy @@ -10280,18 +10284,18 @@ initscreen: { //SEG200 [89] *((byte*) initscreen::screen#2) ← (byte) 230 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 ldy #$0 lda #$e6 - sta (render.colline),y + sta (screen),y //SEG201 [90] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 - inc render.colline + inc screen bne !+ - inc render.colline+$1 + inc screen+$1 !: //SEG202 [91] if((byte*) initscreen::screen#1<(word) 2024) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 - lda render.colline+$1 + lda screen+$1 cmp #>$7e8 bcc b1 bne !+ - lda render.colline + lda screen cmp #<$7e8 bcc b1 !: @@ -10302,7 +10306,7 @@ initscreen: { } //SEG205 addpoint addpoint: { - .label y = 2 + .label c = 2 //SEG206 [94] *((word) 4096 + (byte) numpoints#19) ← (byte) addpoint::x#6 [ numpoints#19 addpoint::y#6 addpoint::c#6 ] -- cowo1_staridx_zpby1=aby ldx numpoints sta $1000,x @@ -10311,7 +10315,7 @@ addpoint: { ldy numpoints sta $1100,y //SEG208 [96] *((word) 4608 + (byte) numpoints#19) ← (byte) addpoint::c#6 [ numpoints#19 ] -- cowo1_staridx_zpby1=zpby2 - lda render.y + lda c ldx numpoints sta $1200,x //SEG209 [97] (byte) numpoints#1 ← ++ (byte) numpoints#19 [ ] -- zpby1=_inc_zpby1 @@ -10370,75 +10374,75 @@ ASSEMBLER main: { //SEG5 [1] call addpoint param-assignment [ ] //SEG6 [93] phi from main to addpoint - //SEG7 [93] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 + //SEG7 [1] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 lda #$1 - sta render.y - //SEG8 [93] phi (byte) addpoint::y#6 = (byte) 5 -- yby=coby1 + sta addpoint.c + //SEG8 [1] phi (byte) addpoint::y#6 = (byte) 5 -- yby=coby1 ldy #$5 - //SEG9 [93] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 + //SEG9 [1] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 lda #$0 sta numpoints - //SEG10 [93] phi (byte) addpoint::x#6 = (byte) 5 -- aby=coby1 + //SEG10 [1] phi (byte) addpoint::x#6 = (byte) 5 -- aby=coby1 lda #$5 jsr addpoint //SEG11 main::@3 //SEG12 [2] call addpoint param-assignment [ ] //SEG13 [93] phi from main::@3 to addpoint - //SEG14 [93] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 + //SEG14 [2] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 lda #$2 - sta render.y - //SEG15 [93] phi (byte) addpoint::y#6 = (byte) 8 -- yby=coby1 + sta addpoint.c + //SEG15 [2] phi (byte) addpoint::y#6 = (byte) 8 -- yby=coby1 ldy #$8 - //SEG16 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG17 [93] phi (byte) addpoint::x#6 = (byte) 15 -- aby=coby1 + //SEG16 [2] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG17 [2] phi (byte) addpoint::x#6 = (byte) 15 -- aby=coby1 lda #$f jsr addpoint //SEG18 main::@4 //SEG19 [3] call addpoint param-assignment [ ] //SEG20 [93] phi from main::@4 to addpoint - //SEG21 [93] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 + //SEG21 [3] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 lda #$3 - sta render.y - //SEG22 [93] phi (byte) addpoint::y#6 = (byte) 14 -- yby=coby1 + sta addpoint.c + //SEG22 [3] phi (byte) addpoint::y#6 = (byte) 14 -- yby=coby1 ldy #$e - //SEG23 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG24 [93] phi (byte) addpoint::x#6 = (byte) 6 -- aby=coby1 + //SEG23 [3] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG24 [3] phi (byte) addpoint::x#6 = (byte) 6 -- aby=coby1 lda #$6 jsr addpoint //SEG25 main::@5 //SEG26 [4] call addpoint param-assignment [ ] //SEG27 [93] phi from main::@5 to addpoint - //SEG28 [93] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 + //SEG28 [4] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 lda #$4 - sta render.y - //SEG29 [93] phi (byte) addpoint::y#6 = (byte) 2 -- yby=coby1 + sta addpoint.c + //SEG29 [4] phi (byte) addpoint::y#6 = (byte) 2 -- yby=coby1 ldy #$2 - //SEG30 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG31 [93] phi (byte) addpoint::x#6 = (byte) 34 -- aby=coby1 + //SEG30 [4] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG31 [4] phi (byte) addpoint::x#6 = (byte) 34 -- aby=coby1 lda #$22 jsr addpoint //SEG32 main::@6 //SEG33 [5] call addpoint param-assignment [ ] //SEG34 [93] phi from main::@6 to addpoint - //SEG35 [93] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 + //SEG35 [5] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 lda #$5 - sta render.y - //SEG36 [93] phi (byte) addpoint::y#6 = (byte) 17 -- yby=coby1 + sta addpoint.c + //SEG36 [5] phi (byte) addpoint::y#6 = (byte) 17 -- yby=coby1 ldy #$11 - //SEG37 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG38 [93] phi (byte) addpoint::x#6 = (byte) 21 -- aby=coby1 + //SEG37 [5] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG38 [5] phi (byte) addpoint::x#6 = (byte) 21 -- aby=coby1 lda #$15 jsr addpoint //SEG39 main::@7 //SEG40 [6] call addpoint param-assignment [ ] //SEG41 [93] phi from main::@7 to addpoint - //SEG42 [93] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 + //SEG42 [6] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 lda #$7 - sta render.y - //SEG43 [93] phi (byte) addpoint::y#6 = (byte) 22 -- yby=coby1 + sta addpoint.c + //SEG43 [6] phi (byte) addpoint::y#6 = (byte) 22 -- yby=coby1 ldy #$16 - //SEG44 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG45 [93] phi (byte) addpoint::x#6 = (byte) 31 -- aby=coby1 + //SEG44 [6] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG45 [6] phi (byte) addpoint::x#6 = (byte) 31 -- aby=coby1 lda #$1f jsr addpoint //SEG46 main::@8 @@ -10643,8 +10647,9 @@ render: { findcol: { .label x = 9 .label y = 10 - .label diff = 7 + .label xp = 7 .label yp = 11 + .label diff = 7 .label mindiff = 6 //SEG135 [64] phi from findcol to findcol::@1 //SEG136 [64] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 @@ -10658,13 +10663,13 @@ findcol: { b1: //SEG140 [65] (byte) findcol::xp#0 ← (word) 4096 *idx (byte) findcol::i#12 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=cowo1_staridx_xby lda $1000,x - sta diff + sta xp //SEG141 [66] (byte) findcol::yp#0 ← (word) 4352 *idx (byte) findcol::i#12 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=cowo1_staridx_xby lda $1100,x sta yp //SEG142 [67] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 lda x - cmp diff + cmp xp bne b2 //SEG143 findcol::@9 //SEG144 [68] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 @@ -10682,7 +10687,7 @@ findcol: { b2: //SEG150 [71] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 lda x - cmp diff + cmp xp bcs b4 //SEG151 findcol::@12 //SEG152 [72] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::y#0 findcol::yp#0 findcol::diff#1 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=zpby1_minus_zpby2 @@ -10771,13 +10776,13 @@ findcol: { } //SEG194 initscreen initscreen: { - .label colline = 3 + .label screen = 3 //SEG195 [88] phi from initscreen to initscreen::@1 //SEG196 [88] phi (byte*) initscreen::screen#2 = (word) 1024 -- zpptrby1=cowo1 lda #<$400 - sta render.colline + sta screen lda #>$400 - sta render.colline+$1 + sta screen+$1 jmp b1 //SEG197 [88] phi from initscreen::@1 to initscreen::@1 //SEG198 [88] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy @@ -10786,18 +10791,18 @@ initscreen: { //SEG200 [89] *((byte*) initscreen::screen#2) ← (byte) 230 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 ldy #$0 lda #$e6 - sta (render.colline),y + sta (screen),y //SEG201 [90] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 - inc render.colline + inc screen bne !+ - inc render.colline+$1 + inc screen+$1 !: //SEG202 [91] if((byte*) initscreen::screen#1<(word) 2024) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 - lda render.colline+$1 + lda screen+$1 cmp #>$7e8 bcc b1 bne !+ - lda render.colline + lda screen cmp #<$7e8 bcc b1 !: @@ -10807,7 +10812,7 @@ initscreen: { } //SEG205 addpoint addpoint: { - .label y = 2 + .label c = 2 //SEG206 [94] *((word) 4096 + (byte) numpoints#19) ← (byte) addpoint::x#6 [ numpoints#19 addpoint::y#6 addpoint::c#6 ] -- cowo1_staridx_zpby1=aby ldx numpoints sta $1000,x @@ -10816,7 +10821,7 @@ addpoint: { ldy numpoints sta $1100,y //SEG208 [96] *((word) 4608 + (byte) numpoints#19) ← (byte) addpoint::c#6 [ numpoints#19 ] -- cowo1_staridx_zpby1=zpby2 - lda render.y + lda c ldx numpoints sta $1200,x //SEG209 [97] (byte) numpoints#1 ← ++ (byte) numpoints#19 [ ] -- zpby1=_inc_zpby1 @@ -10841,75 +10846,75 @@ ASSEMBLER main: { //SEG5 [1] call addpoint param-assignment [ ] //SEG6 [93] phi from main to addpoint - //SEG7 [93] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 + //SEG7 [1] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 lda #$1 - sta render.y - //SEG8 [93] phi (byte) addpoint::y#6 = (byte) 5 -- yby=coby1 + sta addpoint.c + //SEG8 [1] phi (byte) addpoint::y#6 = (byte) 5 -- yby=coby1 ldy #$5 - //SEG9 [93] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 + //SEG9 [1] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 lda #$0 sta numpoints - //SEG10 [93] phi (byte) addpoint::x#6 = (byte) 5 -- aby=coby1 + //SEG10 [1] phi (byte) addpoint::x#6 = (byte) 5 -- aby=coby1 lda #$5 jsr addpoint //SEG11 main::@3 //SEG12 [2] call addpoint param-assignment [ ] //SEG13 [93] phi from main::@3 to addpoint - //SEG14 [93] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 + //SEG14 [2] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 lda #$2 - sta render.y - //SEG15 [93] phi (byte) addpoint::y#6 = (byte) 8 -- yby=coby1 + sta addpoint.c + //SEG15 [2] phi (byte) addpoint::y#6 = (byte) 8 -- yby=coby1 ldy #$8 - //SEG16 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG17 [93] phi (byte) addpoint::x#6 = (byte) 15 -- aby=coby1 + //SEG16 [2] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG17 [2] phi (byte) addpoint::x#6 = (byte) 15 -- aby=coby1 lda #$f jsr addpoint //SEG18 main::@4 //SEG19 [3] call addpoint param-assignment [ ] //SEG20 [93] phi from main::@4 to addpoint - //SEG21 [93] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 + //SEG21 [3] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 lda #$3 - sta render.y - //SEG22 [93] phi (byte) addpoint::y#6 = (byte) 14 -- yby=coby1 + sta addpoint.c + //SEG22 [3] phi (byte) addpoint::y#6 = (byte) 14 -- yby=coby1 ldy #$e - //SEG23 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG24 [93] phi (byte) addpoint::x#6 = (byte) 6 -- aby=coby1 + //SEG23 [3] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG24 [3] phi (byte) addpoint::x#6 = (byte) 6 -- aby=coby1 lda #$6 jsr addpoint //SEG25 main::@5 //SEG26 [4] call addpoint param-assignment [ ] //SEG27 [93] phi from main::@5 to addpoint - //SEG28 [93] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 + //SEG28 [4] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 lda #$4 - sta render.y - //SEG29 [93] phi (byte) addpoint::y#6 = (byte) 2 -- yby=coby1 + sta addpoint.c + //SEG29 [4] phi (byte) addpoint::y#6 = (byte) 2 -- yby=coby1 ldy #$2 - //SEG30 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG31 [93] phi (byte) addpoint::x#6 = (byte) 34 -- aby=coby1 + //SEG30 [4] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG31 [4] phi (byte) addpoint::x#6 = (byte) 34 -- aby=coby1 lda #$22 jsr addpoint //SEG32 main::@6 //SEG33 [5] call addpoint param-assignment [ ] //SEG34 [93] phi from main::@6 to addpoint - //SEG35 [93] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 + //SEG35 [5] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 lda #$5 - sta render.y - //SEG36 [93] phi (byte) addpoint::y#6 = (byte) 17 -- yby=coby1 + sta addpoint.c + //SEG36 [5] phi (byte) addpoint::y#6 = (byte) 17 -- yby=coby1 ldy #$11 - //SEG37 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG38 [93] phi (byte) addpoint::x#6 = (byte) 21 -- aby=coby1 + //SEG37 [5] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG38 [5] phi (byte) addpoint::x#6 = (byte) 21 -- aby=coby1 lda #$15 jsr addpoint //SEG39 main::@7 //SEG40 [6] call addpoint param-assignment [ ] //SEG41 [93] phi from main::@7 to addpoint - //SEG42 [93] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 + //SEG42 [6] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 lda #$7 - sta render.y - //SEG43 [93] phi (byte) addpoint::y#6 = (byte) 22 -- yby=coby1 + sta addpoint.c + //SEG43 [6] phi (byte) addpoint::y#6 = (byte) 22 -- yby=coby1 ldy #$16 - //SEG44 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG45 [93] phi (byte) addpoint::x#6 = (byte) 31 -- aby=coby1 + //SEG44 [6] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG45 [6] phi (byte) addpoint::x#6 = (byte) 31 -- aby=coby1 lda #$1f jsr addpoint //SEG46 main::@8 @@ -11112,8 +11117,9 @@ render: { findcol: { .label x = 9 .label y = 10 - .label diff = 7 + .label xp = 7 .label yp = 11 + .label diff = 7 .label mindiff = 6 //SEG135 [64] phi from findcol to findcol::@1 //SEG136 [64] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 @@ -11127,13 +11133,13 @@ findcol: { b1: //SEG140 [65] (byte) findcol::xp#0 ← (word) 4096 *idx (byte) findcol::i#12 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=cowo1_staridx_xby lda $1000,x - sta diff + sta xp //SEG141 [66] (byte) findcol::yp#0 ← (word) 4352 *idx (byte) findcol::i#12 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=cowo1_staridx_xby lda $1100,x sta yp //SEG142 [67] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 lda x - cmp diff + cmp xp bne b2 //SEG143 findcol::@9 //SEG144 [68] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 @@ -11151,7 +11157,7 @@ findcol: { b2: //SEG150 [71] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 lda x - cmp diff + cmp xp bcs b4 //SEG151 findcol::@12 //SEG152 [72] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::y#0 findcol::yp#0 findcol::diff#1 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=zpby1_minus_zpby2 @@ -11240,13 +11246,13 @@ findcol: { } //SEG194 initscreen initscreen: { - .label colline = 3 + .label screen = 3 //SEG195 [88] phi from initscreen to initscreen::@1 //SEG196 [88] phi (byte*) initscreen::screen#2 = (word) 1024 -- zpptrby1=cowo1 lda #<$400 - sta render.colline + sta screen lda #>$400 - sta render.colline+$1 + sta screen+$1 //SEG197 [88] phi from initscreen::@1 to initscreen::@1 //SEG198 [88] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy //SEG199 initscreen::@1 @@ -11254,18 +11260,18 @@ initscreen: { //SEG200 [89] *((byte*) initscreen::screen#2) ← (byte) 230 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 ldy #$0 lda #$e6 - sta (render.colline),y + sta (screen),y //SEG201 [90] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 - inc render.colline + inc screen bne !+ - inc render.colline+$1 + inc screen+$1 !: //SEG202 [91] if((byte*) initscreen::screen#1<(word) 2024) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 - lda render.colline+$1 + lda screen+$1 cmp #>$7e8 bcc b1 bne !+ - lda render.colline + lda screen cmp #<$7e8 bcc b1 !: @@ -11275,7 +11281,7 @@ initscreen: { } //SEG205 addpoint addpoint: { - .label y = 2 + .label c = 2 //SEG206 [94] *((word) 4096 + (byte) numpoints#19) ← (byte) addpoint::x#6 [ numpoints#19 addpoint::y#6 addpoint::c#6 ] -- cowo1_staridx_zpby1=aby ldx numpoints sta $1000,x @@ -11284,7 +11290,7 @@ addpoint: { ldy numpoints sta $1100,y //SEG208 [96] *((word) 4608 + (byte) numpoints#19) ← (byte) addpoint::c#6 [ numpoints#19 ] -- cowo1_staridx_zpby1=zpby2 - lda render.y + lda c ldx numpoints sta $1200,x //SEG209 [97] (byte) numpoints#1 ← ++ (byte) numpoints#19 [ ] -- zpby1=_inc_zpby1 @@ -11306,7 +11312,7 @@ FINAL SYMBOL TABLE (void()) addpoint((byte) addpoint::x , (byte) addpoint::y , (byte) addpoint::c) (label) addpoint::@return (byte) addpoint::c -(byte) addpoint::c#6 zp ZP_BYTE:2 y 0.6666666666666666 +(byte) addpoint::c#6 c zp ZP_BYTE:2 0.6666666666666666 (byte) addpoint::x (byte) addpoint::x#6 reg byte a 2.0 (byte) addpoint::y @@ -11361,11 +11367,11 @@ FINAL SYMBOL TABLE (label) findcol::@9 (label) findcol::@return (byte) findcol::diff -(byte) findcol::diff#0 zp ZP_BYTE:7 diff 20002.0 -(byte) findcol::diff#1 zp ZP_BYTE:7 diff 20002.0 +(byte) findcol::diff#0 diff zp ZP_BYTE:7 20002.0 +(byte) findcol::diff#1 diff zp ZP_BYTE:7 20002.0 (byte) findcol::diff#2 reg byte a 20002.0 (byte) findcol::diff#3 reg byte a 20002.0 -(byte) findcol::diff#4 zp ZP_BYTE:7 diff 10001.0 +(byte) findcol::diff#4 diff zp ZP_BYTE:7 10001.0 (byte) findcol::diff#6 reg byte a 13334.666666666666 (byte) findcol::i (byte) findcol::i#1 reg byte x 10001.0 @@ -11375,26 +11381,26 @@ FINAL SYMBOL TABLE (byte) findcol::mincol#11 reg byte y 1176.5882352941176 (byte) findcol::mincol#2 reg byte y 10001.0 (byte) findcol::mindiff -(byte) findcol::mindiff#10 zp ZP_BYTE:6 mindiff 1875.1875 +(byte) findcol::mindiff#10 mindiff zp ZP_BYTE:6 1875.1875 (byte) findcol::mindiff#11 reg byte a 10001.0 -(byte~) findcol::mindiff#13 zp ZP_BYTE:6 mindiff 20002.0 +(byte~) findcol::mindiff#13 mindiff zp ZP_BYTE:6 20002.0 (byte~) findcol::mindiff#14 reg byte a 20002.0 (byte) findcol::return (byte) findcol::return#0 reg byte y 3667.333333333333 (byte) findcol::x -(byte) findcol::x#0 zp ZP_BYTE:9 x 1863.8636363636363 +(byte) findcol::x#0 x zp ZP_BYTE:9 1863.8636363636363 (byte) findcol::xp -(byte) findcol::xp#0 zp ZP_BYTE:7 diff 10001.0 +(byte) findcol::xp#0 xp zp ZP_BYTE:7 10001.0 (byte) findcol::y -(byte) findcol::y#0 zp ZP_BYTE:10 y 1863.8636363636363 +(byte) findcol::y#0 y zp ZP_BYTE:10 1863.8636363636363 (byte) findcol::yp -(byte) findcol::yp#0 zp ZP_BYTE:11 yp 6250.625 +(byte) findcol::yp#0 yp zp ZP_BYTE:11 6250.625 (void()) initscreen() (label) initscreen::@1 (label) initscreen::@return (byte*) initscreen::screen -(byte*) initscreen::screen#1 zp ZP_PTR_BYTE:3 colline 16.5 -(byte*) initscreen::screen#2 zp ZP_PTR_BYTE:3 colline 16.5 +(byte*) initscreen::screen#1 screen zp ZP_PTR_BYTE:3 16.5 +(byte*) initscreen::screen#2 screen zp ZP_PTR_BYTE:3 16.5 (void()) main() (label) main::@1 (label) main::@10 @@ -11407,8 +11413,8 @@ FINAL SYMBOL TABLE (label) main::@8 (label) main::@return (byte) numpoints -(byte) numpoints#1 zp ZP_BYTE:8 numpoints 455.13636363636346 -(byte) numpoints#19 zp ZP_BYTE:8 numpoints 4.5 +(byte) numpoints#1 numpoints zp ZP_BYTE:8 455.13636363636346 +(byte) numpoints#19 numpoints zp ZP_BYTE:8 4.5 (void()) render() (label) render::@1 (label) render::@2 @@ -11418,25 +11424,25 @@ FINAL SYMBOL TABLE (byte) render::col (byte) render::col#0 reg byte a 2002.0 (byte*) render::colline -(byte*) render::colline#1 zp ZP_PTR_BYTE:3 colline 67.33333333333333 -(byte*) render::colline#2 zp ZP_PTR_BYTE:3 colline 36.45454545454545 +(byte*) render::colline#1 colline zp ZP_PTR_BYTE:3 67.33333333333333 +(byte*) render::colline#2 colline zp ZP_PTR_BYTE:3 36.45454545454545 (byte) render::x -(byte) render::x#1 zp ZP_BYTE:5 x 1501.5 -(byte) render::x#2 zp ZP_BYTE:5 x 133.46666666666667 +(byte) render::x#1 x zp ZP_BYTE:5 1501.5 +(byte) render::x#2 x zp ZP_BYTE:5 133.46666666666667 (byte) render::y -(byte) render::y#1 zp ZP_BYTE:2 y 151.5 -(byte) render::y#2 zp ZP_BYTE:2 y 35.38235294117647 +(byte) render::y#1 y zp ZP_BYTE:2 151.5 +(byte) render::y#2 y zp ZP_BYTE:2 35.38235294117647 -zp ZP_BYTE:2 y [ render::y#2 render::y#1 addpoint::c#6 ] -zp ZP_PTR_BYTE:3 colline [ render::colline#2 render::colline#1 initscreen::screen#2 initscreen::screen#1 ] -zp ZP_BYTE:5 x [ render::x#2 render::x#1 ] +zp ZP_BYTE:2 [ render::y#2 render::y#1 addpoint::c#6 ] +zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 initscreen::screen#2 initscreen::screen#1 ] +zp ZP_BYTE:5 [ render::x#2 render::x#1 ] reg byte x [ findcol::i#12 findcol::i#1 ] -zp ZP_BYTE:6 mindiff [ findcol::mindiff#10 findcol::mindiff#13 ] +zp ZP_BYTE:6 [ findcol::mindiff#10 findcol::mindiff#13 ] reg byte y [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] -zp ZP_BYTE:7 diff [ findcol::diff#4 findcol::diff#1 findcol::diff#0 findcol::xp#0 ] +zp ZP_BYTE:7 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 findcol::xp#0 ] reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] reg byte a [ addpoint::x#6 ] -zp ZP_BYTE:8 numpoints [ numpoints#19 numpoints#1 ] +zp ZP_BYTE:8 [ numpoints#19 numpoints#1 ] reg byte y [ addpoint::y#6 ] reg byte a [ animate::$0 ] reg byte a [ animate::$1 ] @@ -11458,10 +11464,10 @@ reg byte a [ animate::$26 ] reg byte a [ animate::$27 ] reg byte a [ animate::$30 ] reg byte a [ animate::$31 ] -zp ZP_BYTE:9 x [ findcol::x#0 ] -zp ZP_BYTE:10 y [ findcol::y#0 ] +zp ZP_BYTE:9 [ findcol::x#0 ] +zp ZP_BYTE:10 [ findcol::y#0 ] reg byte a [ render::col#0 ] -zp ZP_BYTE:11 yp [ findcol::yp#0 ] +zp ZP_BYTE:11 [ findcol::yp#0 ] reg byte a [ findcol::$12 ] reg byte a [ findcol::$14 ] @@ -11476,75 +11482,75 @@ FINAL CODE main: { //SEG5 [1] call addpoint param-assignment [ ] //SEG6 [93] phi from main to addpoint - //SEG7 [93] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 + //SEG7 [1] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 lda #$1 - sta render.y - //SEG8 [93] phi (byte) addpoint::y#6 = (byte) 5 -- yby=coby1 + sta addpoint.c + //SEG8 [1] phi (byte) addpoint::y#6 = (byte) 5 -- yby=coby1 ldy #$5 - //SEG9 [93] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 + //SEG9 [1] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 lda #$0 sta numpoints - //SEG10 [93] phi (byte) addpoint::x#6 = (byte) 5 -- aby=coby1 + //SEG10 [1] phi (byte) addpoint::x#6 = (byte) 5 -- aby=coby1 lda #$5 jsr addpoint //SEG11 main::@3 //SEG12 [2] call addpoint param-assignment [ ] //SEG13 [93] phi from main::@3 to addpoint - //SEG14 [93] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 + //SEG14 [2] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 lda #$2 - sta render.y - //SEG15 [93] phi (byte) addpoint::y#6 = (byte) 8 -- yby=coby1 + sta addpoint.c + //SEG15 [2] phi (byte) addpoint::y#6 = (byte) 8 -- yby=coby1 ldy #$8 - //SEG16 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG17 [93] phi (byte) addpoint::x#6 = (byte) 15 -- aby=coby1 + //SEG16 [2] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG17 [2] phi (byte) addpoint::x#6 = (byte) 15 -- aby=coby1 lda #$f jsr addpoint //SEG18 main::@4 //SEG19 [3] call addpoint param-assignment [ ] //SEG20 [93] phi from main::@4 to addpoint - //SEG21 [93] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 + //SEG21 [3] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 lda #$3 - sta render.y - //SEG22 [93] phi (byte) addpoint::y#6 = (byte) 14 -- yby=coby1 + sta addpoint.c + //SEG22 [3] phi (byte) addpoint::y#6 = (byte) 14 -- yby=coby1 ldy #$e - //SEG23 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG24 [93] phi (byte) addpoint::x#6 = (byte) 6 -- aby=coby1 + //SEG23 [3] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG24 [3] phi (byte) addpoint::x#6 = (byte) 6 -- aby=coby1 lda #$6 jsr addpoint //SEG25 main::@5 //SEG26 [4] call addpoint param-assignment [ ] //SEG27 [93] phi from main::@5 to addpoint - //SEG28 [93] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 + //SEG28 [4] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 lda #$4 - sta render.y - //SEG29 [93] phi (byte) addpoint::y#6 = (byte) 2 -- yby=coby1 + sta addpoint.c + //SEG29 [4] phi (byte) addpoint::y#6 = (byte) 2 -- yby=coby1 ldy #$2 - //SEG30 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG31 [93] phi (byte) addpoint::x#6 = (byte) 34 -- aby=coby1 + //SEG30 [4] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG31 [4] phi (byte) addpoint::x#6 = (byte) 34 -- aby=coby1 lda #$22 jsr addpoint //SEG32 main::@6 //SEG33 [5] call addpoint param-assignment [ ] //SEG34 [93] phi from main::@6 to addpoint - //SEG35 [93] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 + //SEG35 [5] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 lda #$5 - sta render.y - //SEG36 [93] phi (byte) addpoint::y#6 = (byte) 17 -- yby=coby1 + sta addpoint.c + //SEG36 [5] phi (byte) addpoint::y#6 = (byte) 17 -- yby=coby1 ldy #$11 - //SEG37 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG38 [93] phi (byte) addpoint::x#6 = (byte) 21 -- aby=coby1 + //SEG37 [5] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG38 [5] phi (byte) addpoint::x#6 = (byte) 21 -- aby=coby1 lda #$15 jsr addpoint //SEG39 main::@7 //SEG40 [6] call addpoint param-assignment [ ] //SEG41 [93] phi from main::@7 to addpoint - //SEG42 [93] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 + //SEG42 [6] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 lda #$7 - sta render.y - //SEG43 [93] phi (byte) addpoint::y#6 = (byte) 22 -- yby=coby1 + sta addpoint.c + //SEG43 [6] phi (byte) addpoint::y#6 = (byte) 22 -- yby=coby1 ldy #$16 - //SEG44 [93] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG45 [93] phi (byte) addpoint::x#6 = (byte) 31 -- aby=coby1 + //SEG44 [6] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy + //SEG45 [6] phi (byte) addpoint::x#6 = (byte) 31 -- aby=coby1 lda #$1f jsr addpoint //SEG46 main::@8 @@ -11747,8 +11753,9 @@ render: { findcol: { .label x = 9 .label y = 10 - .label diff = 7 + .label xp = 7 .label yp = 11 + .label diff = 7 .label mindiff = 6 //SEG135 [64] phi from findcol to findcol::@1 //SEG136 [64] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 @@ -11762,13 +11769,13 @@ findcol: { b1: //SEG140 [65] (byte) findcol::xp#0 ← (word) 4096 *idx (byte) findcol::i#12 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=cowo1_staridx_xby lda $1000,x - sta diff + sta xp //SEG141 [66] (byte) findcol::yp#0 ← (word) 4352 *idx (byte) findcol::i#12 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=cowo1_staridx_xby lda $1100,x sta yp //SEG142 [67] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 lda x - cmp diff + cmp xp bne b2 //SEG143 findcol::@9 //SEG144 [68] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 @@ -11786,7 +11793,7 @@ findcol: { b2: //SEG150 [71] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::xp#0 findcol::y#0 findcol::yp#0 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 lda x - cmp diff + cmp xp bcs b4 //SEG151 findcol::@12 //SEG152 [72] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ render::x#2 render::y#2 render::colline#2 findcol::i#12 findcol::x#0 findcol::y#0 findcol::yp#0 findcol::diff#1 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] -- zpby1=zpby1_minus_zpby2 @@ -11875,13 +11882,13 @@ findcol: { } //SEG194 initscreen initscreen: { - .label colline = 3 + .label screen = 3 //SEG195 [88] phi from initscreen to initscreen::@1 //SEG196 [88] phi (byte*) initscreen::screen#2 = (word) 1024 -- zpptrby1=cowo1 lda #<$400 - sta render.colline + sta screen lda #>$400 - sta render.colline+$1 + sta screen+$1 //SEG197 [88] phi from initscreen::@1 to initscreen::@1 //SEG198 [88] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy //SEG199 initscreen::@1 @@ -11889,18 +11896,18 @@ initscreen: { //SEG200 [89] *((byte*) initscreen::screen#2) ← (byte) 230 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 ldy #$0 lda #$e6 - sta (render.colline),y + sta (screen),y //SEG201 [90] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 - inc render.colline + inc screen bne !+ - inc render.colline+$1 + inc screen+$1 !: //SEG202 [91] if((byte*) initscreen::screen#1<(word) 2024) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 - lda render.colline+$1 + lda screen+$1 cmp #>$7e8 bcc b1 bne !+ - lda render.colline + lda screen cmp #<$7e8 bcc b1 !: @@ -11910,7 +11917,7 @@ initscreen: { } //SEG205 addpoint addpoint: { - .label y = 2 + .label c = 2 //SEG206 [94] *((word) 4096 + (byte) numpoints#19) ← (byte) addpoint::x#6 [ numpoints#19 addpoint::y#6 addpoint::c#6 ] -- cowo1_staridx_zpby1=aby ldx numpoints sta $1000,x @@ -11919,7 +11926,7 @@ addpoint: { ldy numpoints sta $1100,y //SEG208 [96] *((word) 4608 + (byte) numpoints#19) ← (byte) addpoint::c#6 [ numpoints#19 ] -- cowo1_staridx_zpby1=zpby2 - lda render.y + lda c ldx numpoints sta $1200,x //SEG209 [97] (byte) numpoints#1 ← ++ (byte) numpoints#19 [ ] -- zpby1=_inc_zpby1 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/voronoi.sym b/src/main/java/dk/camelot64/kickc/test/ref/voronoi.sym index 71998d35c..64e00c16a 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/voronoi.sym +++ b/src/main/java/dk/camelot64/kickc/test/ref/voronoi.sym @@ -9,7 +9,7 @@ (void()) addpoint((byte) addpoint::x , (byte) addpoint::y , (byte) addpoint::c) (label) addpoint::@return (byte) addpoint::c -(byte) addpoint::c#6 zp ZP_BYTE:2 y 0.6666666666666666 +(byte) addpoint::c#6 c zp ZP_BYTE:2 0.6666666666666666 (byte) addpoint::x (byte) addpoint::x#6 reg byte a 2.0 (byte) addpoint::y @@ -64,11 +64,11 @@ (label) findcol::@9 (label) findcol::@return (byte) findcol::diff -(byte) findcol::diff#0 zp ZP_BYTE:7 diff 20002.0 -(byte) findcol::diff#1 zp ZP_BYTE:7 diff 20002.0 +(byte) findcol::diff#0 diff zp ZP_BYTE:7 20002.0 +(byte) findcol::diff#1 diff zp ZP_BYTE:7 20002.0 (byte) findcol::diff#2 reg byte a 20002.0 (byte) findcol::diff#3 reg byte a 20002.0 -(byte) findcol::diff#4 zp ZP_BYTE:7 diff 10001.0 +(byte) findcol::diff#4 diff zp ZP_BYTE:7 10001.0 (byte) findcol::diff#6 reg byte a 13334.666666666666 (byte) findcol::i (byte) findcol::i#1 reg byte x 10001.0 @@ -78,26 +78,26 @@ (byte) findcol::mincol#11 reg byte y 1176.5882352941176 (byte) findcol::mincol#2 reg byte y 10001.0 (byte) findcol::mindiff -(byte) findcol::mindiff#10 zp ZP_BYTE:6 mindiff 1875.1875 +(byte) findcol::mindiff#10 mindiff zp ZP_BYTE:6 1875.1875 (byte) findcol::mindiff#11 reg byte a 10001.0 -(byte~) findcol::mindiff#13 zp ZP_BYTE:6 mindiff 20002.0 +(byte~) findcol::mindiff#13 mindiff zp ZP_BYTE:6 20002.0 (byte~) findcol::mindiff#14 reg byte a 20002.0 (byte) findcol::return (byte) findcol::return#0 reg byte y 3667.333333333333 (byte) findcol::x -(byte) findcol::x#0 zp ZP_BYTE:9 x 1863.8636363636363 +(byte) findcol::x#0 x zp ZP_BYTE:9 1863.8636363636363 (byte) findcol::xp -(byte) findcol::xp#0 zp ZP_BYTE:7 diff 10001.0 +(byte) findcol::xp#0 xp zp ZP_BYTE:7 10001.0 (byte) findcol::y -(byte) findcol::y#0 zp ZP_BYTE:10 y 1863.8636363636363 +(byte) findcol::y#0 y zp ZP_BYTE:10 1863.8636363636363 (byte) findcol::yp -(byte) findcol::yp#0 zp ZP_BYTE:11 yp 6250.625 +(byte) findcol::yp#0 yp zp ZP_BYTE:11 6250.625 (void()) initscreen() (label) initscreen::@1 (label) initscreen::@return (byte*) initscreen::screen -(byte*) initscreen::screen#1 zp ZP_PTR_BYTE:3 colline 16.5 -(byte*) initscreen::screen#2 zp ZP_PTR_BYTE:3 colline 16.5 +(byte*) initscreen::screen#1 screen zp ZP_PTR_BYTE:3 16.5 +(byte*) initscreen::screen#2 screen zp ZP_PTR_BYTE:3 16.5 (void()) main() (label) main::@1 (label) main::@10 @@ -110,8 +110,8 @@ (label) main::@8 (label) main::@return (byte) numpoints -(byte) numpoints#1 zp ZP_BYTE:8 numpoints 455.13636363636346 -(byte) numpoints#19 zp ZP_BYTE:8 numpoints 4.5 +(byte) numpoints#1 numpoints zp ZP_BYTE:8 455.13636363636346 +(byte) numpoints#19 numpoints zp ZP_BYTE:8 4.5 (void()) render() (label) render::@1 (label) render::@2 @@ -121,25 +121,25 @@ (byte) render::col (byte) render::col#0 reg byte a 2002.0 (byte*) render::colline -(byte*) render::colline#1 zp ZP_PTR_BYTE:3 colline 67.33333333333333 -(byte*) render::colline#2 zp ZP_PTR_BYTE:3 colline 36.45454545454545 +(byte*) render::colline#1 colline zp ZP_PTR_BYTE:3 67.33333333333333 +(byte*) render::colline#2 colline zp ZP_PTR_BYTE:3 36.45454545454545 (byte) render::x -(byte) render::x#1 zp ZP_BYTE:5 x 1501.5 -(byte) render::x#2 zp ZP_BYTE:5 x 133.46666666666667 +(byte) render::x#1 x zp ZP_BYTE:5 1501.5 +(byte) render::x#2 x zp ZP_BYTE:5 133.46666666666667 (byte) render::y -(byte) render::y#1 zp ZP_BYTE:2 y 151.5 -(byte) render::y#2 zp ZP_BYTE:2 y 35.38235294117647 +(byte) render::y#1 y zp ZP_BYTE:2 151.5 +(byte) render::y#2 y zp ZP_BYTE:2 35.38235294117647 -zp ZP_BYTE:2 y [ render::y#2 render::y#1 addpoint::c#6 ] -zp ZP_PTR_BYTE:3 colline [ render::colline#2 render::colline#1 initscreen::screen#2 initscreen::screen#1 ] -zp ZP_BYTE:5 x [ render::x#2 render::x#1 ] +zp ZP_BYTE:2 [ render::y#2 render::y#1 addpoint::c#6 ] +zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 initscreen::screen#2 initscreen::screen#1 ] +zp ZP_BYTE:5 [ render::x#2 render::x#1 ] reg byte x [ findcol::i#12 findcol::i#1 ] -zp ZP_BYTE:6 mindiff [ findcol::mindiff#10 findcol::mindiff#13 ] +zp ZP_BYTE:6 [ findcol::mindiff#10 findcol::mindiff#13 ] reg byte y [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] -zp ZP_BYTE:7 diff [ findcol::diff#4 findcol::diff#1 findcol::diff#0 findcol::xp#0 ] +zp ZP_BYTE:7 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 findcol::xp#0 ] reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] reg byte a [ addpoint::x#6 ] -zp ZP_BYTE:8 numpoints [ numpoints#19 numpoints#1 ] +zp ZP_BYTE:8 [ numpoints#19 numpoints#1 ] reg byte y [ addpoint::y#6 ] reg byte a [ animate::$0 ] reg byte a [ animate::$1 ] @@ -161,9 +161,9 @@ reg byte a [ animate::$26 ] reg byte a [ animate::$27 ] reg byte a [ animate::$30 ] reg byte a [ animate::$31 ] -zp ZP_BYTE:9 x [ findcol::x#0 ] -zp ZP_BYTE:10 y [ findcol::y#0 ] +zp ZP_BYTE:9 [ findcol::x#0 ] +zp ZP_BYTE:10 [ findcol::y#0 ] reg byte a [ render::col#0 ] -zp ZP_BYTE:11 yp [ findcol::yp#0 ] +zp ZP_BYTE:11 [ findcol::yp#0 ] reg byte a [ findcol::$12 ] reg byte a [ findcol::$14 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/zpparammin.asm b/src/main/java/dk/camelot64/kickc/test/ref/zpparammin.asm index 303e7c178..ab8d8b5f4 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/zpparammin.asm +++ b/src/main/java/dk/camelot64/kickc/test/ref/zpparammin.asm @@ -17,7 +17,7 @@ main: { tya clc adc #$2 - sta sum.c + sta sum2.c jsr sum2 sta $428,y iny @@ -32,7 +32,7 @@ sum2: { clc adc $ff clc - adc sum.c + adc c rts } sum: { diff --git a/src/main/java/dk/camelot64/kickc/test/ref/zpparammin.log b/src/main/java/dk/camelot64/kickc/test/ref/zpparammin.log index 6514e60c9..6caac6d46 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/zpparammin.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/zpparammin.log @@ -1428,23 +1428,23 @@ Complete equivalence classes [ sum2::return#0 ] [ sum::$0 ] [ sum::return#0 ] -Allocated zp ZP_BYTE:2 i#2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 $0 [ main::$0 ] -Allocated zp ZP_BYTE:4 $1 [ main::$1 ] -Allocated zp ZP_BYTE:5 a#0 [ sum::a#0 ] -Allocated zp ZP_BYTE:6 b#0 [ sum::b#0 ] -Allocated zp ZP_BYTE:7 c#0 [ sum::c#0 ] -Allocated zp ZP_BYTE:8 $2 [ main::$2 ] -Allocated zp ZP_BYTE:9 $3 [ main::$3 ] -Allocated zp ZP_BYTE:10 $4 [ main::$4 ] -Allocated zp ZP_BYTE:11 a#0 [ sum2::a#0 ] -Allocated zp ZP_BYTE:12 b#0 [ sum2::b#0 ] -Allocated zp ZP_BYTE:13 c#0 [ sum2::c#0 ] -Allocated zp ZP_BYTE:14 $5 [ main::$5 ] -Allocated zp ZP_BYTE:15 $0 [ sum2::$0 ] -Allocated zp ZP_BYTE:16 return#0 [ sum2::return#0 ] -Allocated zp ZP_BYTE:17 $0 [ sum::$0 ] -Allocated zp ZP_BYTE:18 return#0 [ sum::return#0 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::$0 ] +Allocated zp ZP_BYTE:4 [ main::$1 ] +Allocated zp ZP_BYTE:5 [ sum::a#0 ] +Allocated zp ZP_BYTE:6 [ sum::b#0 ] +Allocated zp ZP_BYTE:7 [ sum::c#0 ] +Allocated zp ZP_BYTE:8 [ main::$2 ] +Allocated zp ZP_BYTE:9 [ main::$3 ] +Allocated zp ZP_BYTE:10 [ main::$4 ] +Allocated zp ZP_BYTE:11 [ sum2::a#0 ] +Allocated zp ZP_BYTE:12 [ sum2::b#0 ] +Allocated zp ZP_BYTE:13 [ sum2::c#0 ] +Allocated zp ZP_BYTE:14 [ main::$5 ] +Allocated zp ZP_BYTE:15 [ sum2::$0 ] +Allocated zp ZP_BYTE:16 [ sum2::return#0 ] +Allocated zp ZP_BYTE:17 [ sum::$0 ] +Allocated zp ZP_BYTE:18 [ sum::return#0 ] INITIAL ASM //SEG0 Global ZP labels //SEG1 @begin @@ -1597,43 +1597,43 @@ sum: { } Statement [3] (byte~) main::$1 ← (byte) main::i#2 + (byte) 2 [ main::i#2 main::$0 main::$1 ] always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 $0 [ main::$0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::$0 ] Statement [11] (byte~) main::$4 ← (byte) main::i#2 + (byte) 2 [ main::i#2 main::$3 main::$4 ] always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 $3 [ main::$3 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ main::$3 ] Statement [3] (byte~) main::$1 ← (byte) main::i#2 + (byte) 2 [ main::i#2 main::$0 main::$1 ] always clobbers reg byte a Statement [11] (byte~) main::$4 ← (byte) main::i#2 + (byte) 2 [ main::i#2 main::$3 main::$4 ] always clobbers reg byte a REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 i , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 $0 [ main::$0 ] : zp ZP_BYTE:3 $0 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:4 $1 [ main::$1 ] : zp ZP_BYTE:4 $1 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:5 a [ sum::a#0 ] : zp ZP_BYTE:5 a , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:6 b [ sum::b#0 ] : zp ZP_BYTE:6 b , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:7 c [ sum::c#0 ] : zp ZP_BYTE:7 c , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:8 $2 [ main::$2 ] : zp ZP_BYTE:8 $2 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:9 $3 [ main::$3 ] : zp ZP_BYTE:9 $3 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:10 $4 [ main::$4 ] : zp ZP_BYTE:10 $4 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:11 a [ sum2::a#0 ] : zp ZP_BYTE:11 a , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:12 b [ sum2::b#0 ] : zp ZP_BYTE:12 b , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:13 c [ sum2::c#0 ] : zp ZP_BYTE:13 c , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:14 $5 [ main::$5 ] : zp ZP_BYTE:14 $5 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:15 $0 [ sum2::$0 ] : zp ZP_BYTE:15 $0 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:16 return [ sum2::return#0 ] : zp ZP_BYTE:16 return , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:17 $0 [ sum::$0 ] : zp ZP_BYTE:17 $0 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:18 return [ sum::return#0 ] : zp ZP_BYTE:18 return , reg byte a , reg byte x , reg byte y , +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::$0 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ main::$1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:5 [ sum::a#0 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ sum::b#0 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ sum::c#0 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:8 [ main::$2 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ main::$3 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:10 [ main::$4 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:11 [ sum2::a#0 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:12 [ sum2::b#0 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:13 [ sum2::c#0 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:14 [ main::$5 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:15 [ sum2::$0 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:16 [ sum2::return#0 ] : zp ZP_BYTE:16 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:17 [ sum::$0 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:18 [ sum::return#0 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 22: zp ZP_BYTE:8 $2 [ main::$2 ] 22: zp ZP_BYTE:14 $5 [ main::$5 ] 21.28: zp ZP_BYTE:2 i [ main::i#2 main::i#1 ] 7.33: zp ZP_BYTE:3 $0 [ main::$0 ] 7.33: zp ZP_BYTE:4 $1 [ main::$1 ] 7.33: zp ZP_BYTE:9 $3 [ main::$3 ] 7.33: zp ZP_BYTE:10 $4 [ main::$4 ] -Uplift Scope [sum] 13: zp ZP_BYTE:7 c [ sum::c#0 ] 4.33: zp ZP_BYTE:18 return [ sum::return#0 ] 4: zp ZP_BYTE:17 $0 [ sum::$0 ] 2.17: zp ZP_BYTE:6 b [ sum::b#0 ] 1.86: zp ZP_BYTE:5 a [ sum::a#0 ] -Uplift Scope [sum2] 13: zp ZP_BYTE:13 c [ sum2::c#0 ] 4.33: zp ZP_BYTE:16 return [ sum2::return#0 ] 4: zp ZP_BYTE:15 $0 [ sum2::$0 ] 2.17: zp ZP_BYTE:12 b [ sum2::b#0 ] 1.86: zp ZP_BYTE:11 a [ sum2::a#0 ] +Uplift Scope [main] 22: zp ZP_BYTE:8 [ main::$2 ] 22: zp ZP_BYTE:14 [ main::$5 ] 21.28: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 7.33: zp ZP_BYTE:3 [ main::$0 ] 7.33: zp ZP_BYTE:4 [ main::$1 ] 7.33: zp ZP_BYTE:9 [ main::$3 ] 7.33: zp ZP_BYTE:10 [ main::$4 ] +Uplift Scope [sum] 13: zp ZP_BYTE:7 [ sum::c#0 ] 4.33: zp ZP_BYTE:18 [ sum::return#0 ] 4: zp ZP_BYTE:17 [ sum::$0 ] 2.17: zp ZP_BYTE:6 [ sum::b#0 ] 1.86: zp ZP_BYTE:5 [ sum::a#0 ] +Uplift Scope [sum2] 13: zp ZP_BYTE:13 [ sum2::c#0 ] 4.33: zp ZP_BYTE:16 [ sum2::return#0 ] 4: zp ZP_BYTE:15 [ sum2::$0 ] 2.17: zp ZP_BYTE:12 [ sum2::b#0 ] 1.86: zp ZP_BYTE:11 [ sum2::a#0 ] Uplift Scope [] Uplifting [main] best 1100 combination reg byte a [ main::$2 ] reg byte a [ main::$5 ] reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::$0 ] reg byte a [ main::$1 ] reg byte x [ main::$3 ] reg byte a [ main::$4 ] -Uplifting [sum] best 970 combination zp ZP_BYTE:7 c [ sum::c#0 ] reg byte a [ sum::return#0 ] reg byte a [ sum::$0 ] reg byte x [ sum::b#0 ] reg byte y [ sum::a#0 ] -Uplifting [sum2] best 840 combination zp ZP_BYTE:13 c [ sum2::c#0 ] reg byte a [ sum2::return#0 ] reg byte a [ sum2::$0 ] reg byte x [ sum2::b#0 ] reg byte y [ sum2::a#0 ] +Uplifting [sum] best 970 combination zp ZP_BYTE:7 [ sum::c#0 ] reg byte a [ sum::return#0 ] reg byte a [ sum::$0 ] reg byte x [ sum::b#0 ] reg byte y [ sum::a#0 ] +Uplifting [sum2] best 840 combination zp ZP_BYTE:13 [ sum2::c#0 ] reg byte a [ sum2::return#0 ] reg byte a [ sum2::$0 ] reg byte x [ sum2::b#0 ] reg byte y [ sum2::a#0 ] Uplifting [] best 840 combination -Coalescing zero page register [ zp ZP_BYTE:7 c [ sum::c#0 ] ] with [ zp ZP_BYTE:13 c [ sum2::c#0 ] ] -Allocated (was zp ZP_BYTE:7 c) zp ZP_BYTE:2 c#0 [ sum::c#0 sum2::c#0 ] +Coalescing zero page register [ zp ZP_BYTE:7 [ sum::c#0 ] ] with [ zp ZP_BYTE:13 [ sum2::c#0 ] ] +Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:2 [ sum::c#0 sum2::c#0 ] Removing instruction jmp bend Removing instruction jmp b1 Removing instruction jmp b3 @@ -1697,7 +1697,7 @@ main: { //SEG22 [13] (byte) sum2::b#0 ← (byte~) main::$3 [ main::i#2 main::$4 sum2::a#0 sum2::b#0 ] // (byte) sum2::b#0 = (byte~) main::$3 // register copy reg byte x //SEG23 [14] (byte) sum2::c#0 ← (byte~) main::$4 [ main::i#2 sum2::a#0 sum2::b#0 ] -- zpby1=aby - sta sum.c + sta sum2.c //SEG24 [15] call sum2 param-assignment [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] jsr sum2 //SEG25 main::@4 @@ -1726,7 +1726,7 @@ sum2: { adc $ff //SEG34 [22] (byte) sum2::return#0 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] -- aby=aby_plus_zpby1 clc - adc sum.c + adc c //SEG35 sum2::@return breturn: //SEG36 [23] return [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] @@ -1806,7 +1806,7 @@ main: { //SEG22 [13] (byte) sum2::b#0 ← (byte~) main::$3 [ main::i#2 main::$4 sum2::a#0 sum2::b#0 ] // (byte) sum2::b#0 = (byte~) main::$3 // register copy reg byte x //SEG23 [14] (byte) sum2::c#0 ← (byte~) main::$4 [ main::i#2 sum2::a#0 sum2::b#0 ] -- zpby1=aby - sta sum.c + sta sum2.c //SEG24 [15] call sum2 param-assignment [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] jsr sum2 //SEG25 main::@4 @@ -1835,7 +1835,7 @@ sum2: { adc $ff //SEG34 [22] (byte) sum2::return#0 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] -- aby=aby_plus_zpby1 clc - adc sum.c + adc c //SEG35 sum2::@return breturn: //SEG36 [23] return [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] @@ -1917,7 +1917,7 @@ main: { //SEG22 [13] (byte) sum2::b#0 ← (byte~) main::$3 [ main::i#2 main::$4 sum2::a#0 sum2::b#0 ] // (byte) sum2::b#0 = (byte~) main::$3 // register copy reg byte x //SEG23 [14] (byte) sum2::c#0 ← (byte~) main::$4 [ main::i#2 sum2::a#0 sum2::b#0 ] -- zpby1=aby - sta sum.c + sta sum2.c //SEG24 [15] call sum2 param-assignment [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] jsr sum2 //SEG25 main::@4 @@ -1944,7 +1944,7 @@ sum2: { adc $ff //SEG34 [22] (byte) sum2::return#0 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] -- aby=aby_plus_zpby1 clc - adc sum.c + adc c //SEG35 sum2::@return //SEG36 [23] return [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] rts @@ -2016,7 +2016,7 @@ main: { //SEG22 [13] (byte) sum2::b#0 ← (byte~) main::$3 [ main::i#2 main::$4 sum2::a#0 sum2::b#0 ] // (byte) sum2::b#0 = (byte~) main::$3 // register copy reg byte x //SEG23 [14] (byte) sum2::c#0 ← (byte~) main::$4 [ main::i#2 sum2::a#0 sum2::b#0 ] -- zpby1=aby - sta sum.c + sta sum2.c //SEG24 [15] call sum2 param-assignment [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] jsr sum2 //SEG25 main::@4 @@ -2043,7 +2043,7 @@ sum2: { adc $ff //SEG34 [22] (byte) sum2::return#0 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] -- aby=aby_plus_zpby1 clc - adc sum.c + adc c //SEG35 sum2::@return //SEG36 [23] return [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] rts @@ -2091,7 +2091,7 @@ FINAL SYMBOL TABLE (byte) sum::b (byte) sum::b#0 reg byte x 2.1666666666666665 (byte) sum::c -(byte) sum::c#0 zp ZP_BYTE:2 c 13.0 +(byte) sum::c#0 c zp ZP_BYTE:2 13.0 (byte) sum::return (byte) sum::return#0 reg byte a 4.333333333333333 (byte()) sum2((byte) sum2::a , (byte) sum2::b , (byte) sum2::c) @@ -2102,7 +2102,7 @@ FINAL SYMBOL TABLE (byte) sum2::b (byte) sum2::b#0 reg byte x 2.1666666666666665 (byte) sum2::c -(byte) sum2::c#0 zp ZP_BYTE:2 c 13.0 +(byte) sum2::c#0 c zp ZP_BYTE:2 13.0 (byte) sum2::return (byte) sum2::return#0 reg byte a 4.333333333333333 @@ -2111,7 +2111,7 @@ reg byte x [ main::$0 ] reg byte a [ main::$1 ] reg byte y [ sum::a#0 ] reg byte x [ sum::b#0 ] -zp ZP_BYTE:2 c [ sum::c#0 sum2::c#0 ] +zp ZP_BYTE:2 [ sum::c#0 sum2::c#0 ] reg byte a [ main::$2 ] reg byte x [ main::$3 ] reg byte a [ main::$4 ] @@ -2172,7 +2172,7 @@ main: { //SEG22 [13] (byte) sum2::b#0 ← (byte~) main::$3 [ main::i#2 main::$4 sum2::a#0 sum2::b#0 ] // (byte) sum2::b#0 = (byte~) main::$3 // register copy reg byte x //SEG23 [14] (byte) sum2::c#0 ← (byte~) main::$4 [ main::i#2 sum2::a#0 sum2::b#0 ] -- zpby1=aby - sta sum.c + sta sum2.c //SEG24 [15] call sum2 param-assignment [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] jsr sum2 //SEG25 main::@4 @@ -2199,7 +2199,7 @@ sum2: { adc $ff //SEG34 [22] (byte) sum2::return#0 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] -- aby=aby_plus_zpby1 clc - adc sum.c + adc c //SEG35 sum2::@return //SEG36 [23] return [ main::i#2 sum2::return#0 sum2::a#0 sum2::b#0 ] rts diff --git a/src/main/java/dk/camelot64/kickc/test/ref/zpparammin.sym b/src/main/java/dk/camelot64/kickc/test/ref/zpparammin.sym index da9b05acd..e72590e12 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/zpparammin.sym +++ b/src/main/java/dk/camelot64/kickc/test/ref/zpparammin.sym @@ -24,7 +24,7 @@ (byte) sum::b (byte) sum::b#0 reg byte x 2.1666666666666665 (byte) sum::c -(byte) sum::c#0 zp ZP_BYTE:2 c 13.0 +(byte) sum::c#0 c zp ZP_BYTE:2 13.0 (byte) sum::return (byte) sum::return#0 reg byte a 4.333333333333333 (byte()) sum2((byte) sum2::a , (byte) sum2::b , (byte) sum2::c) @@ -35,7 +35,7 @@ (byte) sum2::b (byte) sum2::b#0 reg byte x 2.1666666666666665 (byte) sum2::c -(byte) sum2::c#0 zp ZP_BYTE:2 c 13.0 +(byte) sum2::c#0 c zp ZP_BYTE:2 13.0 (byte) sum2::return (byte) sum2::return#0 reg byte a 4.333333333333333 @@ -44,7 +44,7 @@ reg byte x [ main::$0 ] reg byte a [ main::$1 ] reg byte y [ sum::a#0 ] reg byte x [ sum::b#0 ] -zp ZP_BYTE:2 c [ sum::c#0 sum2::c#0 ] +zp ZP_BYTE:2 [ sum::c#0 sum2::c#0 ] reg byte a [ main::$2 ] reg byte x [ main::$3 ] reg byte a [ main::$4 ]