mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-09-08 17:54:40 +00:00
Implemented register uplift combination search. This yields near optimal register allocation - but at a calculation cost at O(4^N) where N is the number of live range equivalence classes in a scope.
This commit is contained in:
parent
14c8ec13bf
commit
b9831c9445
@ -1,13 +1,13 @@
|
||||
package dk.camelot64.kickc;
|
||||
|
||||
import dk.camelot64.kickc.asm.AsmFragment;
|
||||
import dk.camelot64.kickc.icl.*;
|
||||
import dk.camelot64.kickc.parser.KickCLexer;
|
||||
import dk.camelot64.kickc.parser.KickCParser;
|
||||
import dk.camelot64.kickc.passes.*;
|
||||
import org.antlr.v4.runtime.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Perform KickC compilation and optimizations
|
||||
@ -103,7 +103,7 @@ public class Compiler {
|
||||
program.getLog().append(program.getScope().getSymbolTableContents(program ,Variable.class));
|
||||
|
||||
new Pass3ZeroPageAllocation(program).allocate();
|
||||
new Pass3RegistersFinalize(program).allocate();
|
||||
new Pass3RegistersFinalize(program).allocate(false);
|
||||
|
||||
// Initial Code generation
|
||||
new Pass3CodeGeneration(program).generate();
|
||||
@ -111,14 +111,70 @@ public class Compiler {
|
||||
program.getLog().append("INITIAL ASM");
|
||||
program.getLog().append(program.getAsm().toString());
|
||||
|
||||
// Register allocation optimization
|
||||
new Pass3RegisterUplifting(program).uplift();
|
||||
program.getLog().append("REGISTER UPLIFTING");
|
||||
program.getLog().append(program.getScope().getSymbolTableContents(program, Variable.class));
|
||||
new Pass3AssertNoCpuClobber(program).check();
|
||||
// Find register uplift scopes
|
||||
new Pass3RegisterUpliftScopeAnalysis(program).findScopes();
|
||||
program.getLog().append("REGISTER UPLIFT SCOPES");
|
||||
program.getLog().append(program.getRegisterUpliftProgram().toString((program.getVariableRegisterWeights())));
|
||||
|
||||
// Test uplift combinations to find the best one.
|
||||
Set<String> unknownFragments = new LinkedHashSet<>();
|
||||
for (RegisterUpliftScope upliftScope : program.getRegisterUpliftProgram().getRegisterUpliftScopes()) {
|
||||
int bestScore = Integer.MAX_VALUE;
|
||||
RegisterUpliftScope.Combination bestCombination = null;
|
||||
|
||||
Iterator<RegisterUpliftScope.Combination> combinationIterator = upliftScope.geCombinationIterator();
|
||||
while (combinationIterator.hasNext()) {
|
||||
RegisterUpliftScope.Combination combination = combinationIterator.next();
|
||||
// Reset register allocation to original zero page allocation
|
||||
new Pass3RegistersFinalize(program).allocate(false);
|
||||
// Apply the uplift combination
|
||||
combination.allocate(program.getAllocation());
|
||||
// Generate ASM
|
||||
try {
|
||||
new Pass3CodeGeneration(program).generate();
|
||||
} catch (AsmFragment.UnknownFragmentException e) {
|
||||
unknownFragments.add(e.getFragmentSignature());
|
||||
StringBuilder msg = new StringBuilder();
|
||||
msg.append("Uplift attempt [" + upliftScope.getScopeRef() + "] ");
|
||||
msg.append("missing fragment "+e.getFragmentSignature());
|
||||
program.getLog().append(msg.toString());
|
||||
continue;
|
||||
}
|
||||
// If no clobber - Find value of the resulting allocation
|
||||
boolean hasClobberProblem = new Pass3AssertNoCpuClobber(program).hasClobberProblem(false);
|
||||
int combinationScore = program.getAsm().getBytes();
|
||||
StringBuilder msg = new StringBuilder();
|
||||
msg.append("Uplift attempt [" + upliftScope.getScopeRef() + "] ");
|
||||
if(hasClobberProblem) {
|
||||
msg.append("clobber");
|
||||
} else {
|
||||
msg.append(combinationScore);
|
||||
}
|
||||
msg.append(" allocation: ").append(combination.toString());
|
||||
program.getLog().append(msg.toString());
|
||||
if(!hasClobberProblem) {
|
||||
if(combinationScore<bestScore) {
|
||||
bestScore = combinationScore;
|
||||
bestCombination = combination;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Save the best combination in the equivalence class
|
||||
bestCombination.store(program.getLiveRangeEquivalenceClassSet());
|
||||
program.getLog().append("Uplifting ["+upliftScope.getScopeRef()+"] best "+bestScore+" combination "+bestCombination.toString());
|
||||
}
|
||||
|
||||
if(unknownFragments.size()>0) {
|
||||
program.getLog().append("MISSING FRAGMENTS");
|
||||
for (String unknownFragment : unknownFragments) {
|
||||
program.getLog().append(" "+unknownFragment);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Final register coalesce and code generation
|
||||
new Pass3ZeroPageCoalesce(program).allocate();
|
||||
new Pass3RegistersFinalize(program).allocate(true);
|
||||
new Pass3CodeGeneration(program).generate();
|
||||
new Pass3AssertNoCpuClobber(program).check();
|
||||
|
||||
|
@ -347,7 +347,7 @@ public class AsmFragment {
|
||||
ClassLoader classLoader = this.getClass().getClassLoader();
|
||||
final URL fragmentResource = classLoader.getResource("dk/camelot64/kickc/asm/fragment/" + signature + ".asm");
|
||||
if (fragmentResource == null) {
|
||||
throw new RuntimeException("Fragment not found " + signature+".asm");
|
||||
throw new UnknownFragmentException(signature);
|
||||
}
|
||||
|
||||
try {
|
||||
@ -465,6 +465,9 @@ public class AsmFragment {
|
||||
String mnemonic = instructionCtx.MNEMONIC().getSymbol().getText();
|
||||
String parameter = (String) this.visit(exprCtx);
|
||||
AsmInstructionType type = AsmInstuctionSet.getInstructionType(mnemonic, addressingMode, parameter);
|
||||
if(type==null) {
|
||||
throw new RuntimeException("Error in "+signature+".asm line "+ctx.getStart().getLine()+" - Instruction type unknown "+mnemonic+" "+addressingMode+" "+parameter);
|
||||
}
|
||||
return new AsmInstruction(type, parameter);
|
||||
}
|
||||
|
||||
@ -500,4 +503,17 @@ public class AsmFragment {
|
||||
}
|
||||
|
||||
|
||||
public static class UnknownFragmentException extends RuntimeException {
|
||||
|
||||
private String fragmentSignature;
|
||||
|
||||
public UnknownFragmentException(String signature) {
|
||||
super("Fragment not found " + signature+".asm");
|
||||
this.fragmentSignature = signature;
|
||||
}
|
||||
|
||||
public String getFragmentSignature() {
|
||||
return fragmentSignature;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -106,7 +106,10 @@ public class AsmSegment {
|
||||
AsmClobber clobber = new AsmClobber();
|
||||
for (AsmLine line : lines) {
|
||||
if (line instanceof AsmInstruction) {
|
||||
clobber.add(((AsmInstruction) line).getType().getClobber());
|
||||
AsmInstruction asmInstruction = (AsmInstruction) line;
|
||||
AsmInstructionType asmInstructionType = asmInstruction.getType();
|
||||
AsmClobber asmClobber = asmInstructionType.getClobber();
|
||||
clobber.add(asmClobber);
|
||||
}
|
||||
}
|
||||
return clobber;
|
||||
|
@ -0,0 +1,3 @@
|
||||
stx $ff
|
||||
clc
|
||||
adc $ff
|
@ -0,0 +1,3 @@
|
||||
sty $ff
|
||||
clc
|
||||
adc $ff
|
@ -0,0 +1 @@
|
||||
lda {cowo1},y
|
@ -0,0 +1,3 @@
|
||||
tya
|
||||
clc
|
||||
adc #{coby1}
|
@ -0,0 +1,3 @@
|
||||
tax
|
||||
lda #{coby2}
|
||||
sta {cowo1},x
|
@ -0,0 +1,3 @@
|
||||
tay
|
||||
txa
|
||||
sta {cowo1},y
|
@ -0,0 +1,3 @@
|
||||
tax
|
||||
tya
|
||||
sta {cowo1},x
|
@ -0,0 +1,2 @@
|
||||
lda #{coby2}
|
||||
sta {cowo1},x
|
@ -0,0 +1,2 @@
|
||||
tya
|
||||
sta {cowo1},x
|
@ -0,0 +1,2 @@
|
||||
lda #{coby2}
|
||||
sta {cowo1},y
|
@ -0,0 +1,2 @@
|
||||
txa
|
||||
sta {cowo1},y
|
@ -0,0 +1,2 @@
|
||||
tya
|
||||
sta {cowo1},y
|
@ -0,0 +1 @@
|
||||
ldx {cowo1}
|
@ -0,0 +1,3 @@
|
||||
clc
|
||||
adc #{coby1}
|
||||
tax
|
@ -0,0 +1,3 @@
|
||||
tax
|
||||
lda {cowo1},x
|
||||
tax
|
@ -0,0 +1 @@
|
||||
ldx {cowo1},y
|
@ -0,0 +1,4 @@
|
||||
stx $ff
|
||||
clc
|
||||
adc $ff
|
||||
tax
|
@ -0,0 +1,3 @@
|
||||
txa
|
||||
asl
|
||||
tax
|
@ -0,0 +1,5 @@
|
||||
sty $ff
|
||||
txa
|
||||
clc
|
||||
adc $ff
|
||||
tax
|
@ -0,0 +1,4 @@
|
||||
tya
|
||||
clc
|
||||
adc #{coby1}
|
||||
tax
|
@ -0,0 +1,4 @@
|
||||
lda {zpby1}
|
||||
clc
|
||||
adc #{coby1}
|
||||
tax
|
@ -0,0 +1,4 @@
|
||||
cpx #{coby1}
|
||||
beq !+
|
||||
bcs {la1}
|
||||
!:
|
@ -0,0 +1 @@
|
||||
ldy {cowo1}
|
@ -0,0 +1,3 @@
|
||||
clc
|
||||
adc #{coby1}
|
||||
tay
|
@ -0,0 +1,3 @@
|
||||
tay
|
||||
lda {cowo1},y
|
||||
tay
|
@ -0,0 +1 @@
|
||||
ldy {cowo1},x
|
@ -0,0 +1,4 @@
|
||||
txa
|
||||
clc
|
||||
adc #{coby1}
|
||||
tay
|
@ -0,0 +1,4 @@
|
||||
sty $ff
|
||||
clc
|
||||
adc $ff
|
||||
tay
|
@ -0,0 +1,5 @@
|
||||
stx $ff
|
||||
tya
|
||||
clc
|
||||
adc $ff
|
||||
tay
|
@ -0,0 +1,3 @@
|
||||
tya
|
||||
asl
|
||||
tay
|
@ -0,0 +1,4 @@
|
||||
lda {zpby1}
|
||||
clc
|
||||
adc #{coby1}
|
||||
tay
|
@ -0,0 +1,4 @@
|
||||
cpy #{coby1}
|
||||
beq !+
|
||||
bcs {la1}
|
||||
!:
|
@ -0,0 +1,4 @@
|
||||
txa
|
||||
clc
|
||||
adc {zpby1}
|
||||
sta {zpby1}
|
@ -0,0 +1,4 @@
|
||||
tya
|
||||
clc
|
||||
adc {zpby1}
|
||||
sta {zpby1}
|
@ -89,8 +89,12 @@ public class LiveRangeEquivalenceClass {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return toString(true);
|
||||
}
|
||||
|
||||
public String toString(boolean includeRegister) {
|
||||
StringBuilder s = new StringBuilder();
|
||||
if(register!=null) {
|
||||
if(includeRegister && register!=null) {
|
||||
s.append(register.toString()).append(" ");
|
||||
}
|
||||
s.append("[ ");
|
||||
|
@ -53,6 +53,11 @@ public class Procedure extends Scope {
|
||||
return new Label(getFullName(), getScope(), false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LabelRef getScopeLabelRef() {
|
||||
return getLabel().getRef();
|
||||
}
|
||||
|
||||
public SymbolType getReturnType() {
|
||||
return returnType;
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ public class Program {
|
||||
private LiveRangeEquivalenceClassSet liveRangeEquivalenceClassSet;
|
||||
/** The register weight of all variables describing how much the variable would theoretically gain from being in a register */
|
||||
private VariableRegisterWeights variableRegisterWeights;
|
||||
private RegisterUpliftProgram registerUpliftProgram;
|
||||
|
||||
@JsonCreator
|
||||
public Program(
|
||||
@ -129,6 +130,14 @@ public class Program {
|
||||
return variableRegisterWeights;
|
||||
}
|
||||
|
||||
public void setRegisterUpliftProgram(RegisterUpliftProgram registerUpliftProgram) {
|
||||
this.registerUpliftProgram = registerUpliftProgram;
|
||||
}
|
||||
|
||||
public RegisterUpliftProgram getRegisterUpliftProgram() {
|
||||
return registerUpliftProgram;
|
||||
}
|
||||
|
||||
public CompileLog getLog() {
|
||||
return log;
|
||||
}
|
||||
|
@ -48,6 +48,11 @@ public class ProgramScope extends Scope {
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LabelRef getScopeLabelRef() {
|
||||
return new LabelRef("");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(Program program) {
|
||||
return "program";
|
||||
|
@ -0,0 +1,39 @@
|
||||
package dk.camelot64.kickc.icl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Information about register uplift at the program level
|
||||
*/
|
||||
public class RegisterUpliftProgram {
|
||||
|
||||
private Collection<RegisterUpliftScope> registerUpliftScopes;
|
||||
|
||||
public RegisterUpliftProgram() {
|
||||
this.registerUpliftScopes = new ArrayList<>();
|
||||
}
|
||||
|
||||
public Collection<RegisterUpliftScope> getRegisterUpliftScopes() {
|
||||
return registerUpliftScopes;
|
||||
}
|
||||
|
||||
public RegisterUpliftScope addRegisterUpliftScope(LabelRef scopeRef) {
|
||||
RegisterUpliftScope registerUpliftScope = new RegisterUpliftScope(scopeRef);
|
||||
registerUpliftScopes.add(registerUpliftScope);
|
||||
return registerUpliftScope;
|
||||
}
|
||||
|
||||
public String toString(VariableRegisterWeights variableRegisterWeights) {
|
||||
StringBuilder out = new StringBuilder();
|
||||
for (RegisterUpliftScope upliftScope : registerUpliftScopes) {
|
||||
out.append(upliftScope.toString(variableRegisterWeights)).append("\n");
|
||||
}
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return toString(null);
|
||||
}
|
||||
}
|
193
src/main/java/dk/camelot64/kickc/icl/RegisterUpliftScope.java
Normal file
193
src/main/java/dk/camelot64/kickc/icl/RegisterUpliftScope.java
Normal file
@ -0,0 +1,193 @@
|
||||
package dk.camelot64.kickc.icl;
|
||||
|
||||
import com.ibm.icu.text.NumberFormat;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Register Uplift information for a single scope.
|
||||
*/
|
||||
public class RegisterUpliftScope {
|
||||
|
||||
/**
|
||||
* The scope.
|
||||
*/
|
||||
private LabelRef scopeRef;
|
||||
|
||||
/**
|
||||
* Live Range Equivalence Classes in the scope sorted by total variable register weight.
|
||||
*/
|
||||
private List<LiveRangeEquivalenceClass> equivalenceClasses;
|
||||
|
||||
public RegisterUpliftScope(LabelRef scopeRef) {
|
||||
this.scopeRef = scopeRef;
|
||||
this.equivalenceClasses = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void setEquivalenceClasses(List<LiveRangeEquivalenceClass> equivalenceClasses) {
|
||||
this.equivalenceClasses = equivalenceClasses;
|
||||
}
|
||||
|
||||
public LabelRef getScopeRef() {
|
||||
return scopeRef;
|
||||
}
|
||||
|
||||
public Collection<LiveRangeEquivalenceClass> getEquivalenceClasses() {
|
||||
return equivalenceClasses;
|
||||
}
|
||||
|
||||
public String toString(VariableRegisterWeights weights) {
|
||||
StringBuilder out = new StringBuilder();
|
||||
out.append("Uplift Scope [" + scopeRef.toString() + "] ");
|
||||
for (LiveRangeEquivalenceClass equivalenceClass : equivalenceClasses) {
|
||||
if (weights != null) {
|
||||
NumberFormat fmt = NumberFormat.getInstance(Locale.ENGLISH);
|
||||
fmt.setMaximumFractionDigits(2);
|
||||
out.append(fmt.format(weights.getTotalWeight(equivalenceClass)) + ": ");
|
||||
}
|
||||
out.append(equivalenceClass.toString() + " ");
|
||||
}
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return toString(null);
|
||||
}
|
||||
|
||||
public Iterator<Combination> geCombinationIterator() {
|
||||
return new CombinationIterator(scopeRef, equivalenceClasses);
|
||||
}
|
||||
|
||||
/**
|
||||
* A combination of register/ZP assignments for the equivalence classes of the scope.
|
||||
*/
|
||||
public static class Combination {
|
||||
|
||||
/**
|
||||
* The scope.
|
||||
*/
|
||||
private LabelRef scopeRef;
|
||||
|
||||
|
||||
/**
|
||||
* The registers allocated to each equivalence class.
|
||||
*/
|
||||
private Map<LiveRangeEquivalenceClass, RegisterAllocation.Register> allocation;
|
||||
|
||||
public Combination(LabelRef scopeRef) {
|
||||
this.scopeRef = scopeRef;
|
||||
this.allocation = new LinkedHashMap<>();
|
||||
}
|
||||
|
||||
void setRegister(LiveRangeEquivalenceClass equivalenceClass, RegisterAllocation.Register register) {
|
||||
allocation.put(equivalenceClass, register);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate the registers of the combination into the programs register allocation
|
||||
*/
|
||||
public void allocate(RegisterAllocation registerAllocation) {
|
||||
for (LiveRangeEquivalenceClass equivalenceClass : allocation.keySet()) {
|
||||
RegisterAllocation.Register register = allocation.get(equivalenceClass);
|
||||
for (VariableRef variable : equivalenceClass.getVariables()) {
|
||||
registerAllocation.setRegister(variable, register);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the best combination in the equivalence classes.
|
||||
*/
|
||||
public void store(LiveRangeEquivalenceClassSet equivalenceClassSet) {
|
||||
for (LiveRangeEquivalenceClass equivalenceClass : allocation.keySet()) {
|
||||
VariableRef variable = equivalenceClass.getVariables().get(0);
|
||||
LiveRangeEquivalenceClass globalEquivalenceClass = equivalenceClassSet.getEquivalenceClass(variable);
|
||||
RegisterAllocation.Register register = allocation.get(equivalenceClass);
|
||||
globalEquivalenceClass.setRegister(register);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder out = new StringBuilder();
|
||||
for (LiveRangeEquivalenceClass equivalenceClass : allocation.keySet()) {
|
||||
RegisterAllocation.Register register = allocation.get(equivalenceClass);
|
||||
out.append(register.toString()).append(" ").append(equivalenceClass.toString(false)).append(" ");
|
||||
}
|
||||
return out.toString();
|
||||
}
|
||||
}
|
||||
|
||||
private static class CombinationIterator implements Iterator<Combination> {
|
||||
|
||||
/**
|
||||
* The scope we are creating combinations for.
|
||||
*/
|
||||
private LabelRef scopeRef;
|
||||
|
||||
|
||||
/**
|
||||
* The equivalence classes to create register combinations for.
|
||||
*/
|
||||
private List<LiveRangeEquivalenceClass> equivalenceClasses;
|
||||
|
||||
/**
|
||||
* The ID of the next iteration. Combinations are created from the index by using modulo.
|
||||
*/
|
||||
private int nextIterationId;
|
||||
|
||||
public CombinationIterator(LabelRef scopeRef, List<LiveRangeEquivalenceClass> equivalenceClasses) {
|
||||
this.scopeRef = scopeRef;
|
||||
this.equivalenceClasses = equivalenceClasses;
|
||||
this.nextIterationId = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return nextIterationId < getNumIterations();
|
||||
}
|
||||
|
||||
private int getNumIterations() {
|
||||
int numIterations = 1;
|
||||
for (LiveRangeEquivalenceClass equivalenceClass : equivalenceClasses) {
|
||||
RegisterAllocation.Register defaultReegister = equivalenceClass.getRegister();
|
||||
if (defaultReegister.getType().equals(RegisterAllocation.RegisterType.ZP_BYTE)) {
|
||||
numIterations = numIterations << 2;
|
||||
|
||||
}
|
||||
}
|
||||
return numIterations;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Combination next() {
|
||||
Combination combination = new Combination(scopeRef);
|
||||
int combinationIdRest = nextIterationId;
|
||||
for (LiveRangeEquivalenceClass equivalenceClass : equivalenceClasses) {
|
||||
RegisterAllocation.Register defaultReegister = equivalenceClass.getRegister();
|
||||
if (defaultReegister.getType().equals(RegisterAllocation.RegisterType.ZP_BYTE)) {
|
||||
int registerIdx = (combinationIdRest % 4);
|
||||
List<RegisterAllocation.Register> potentialRegisters =
|
||||
Arrays.asList(
|
||||
defaultReegister,
|
||||
RegisterAllocation.getRegisterA(),
|
||||
RegisterAllocation.getRegisterX(),
|
||||
RegisterAllocation.getRegisterY());
|
||||
RegisterAllocation.Register register = potentialRegisters.get(registerIdx);
|
||||
combination.setRegister(equivalenceClass, register);
|
||||
combinationIdRest = combinationIdRest >> 2;
|
||||
} else {
|
||||
combination.setRegister(equivalenceClass, defaultReegister);
|
||||
}
|
||||
}
|
||||
nextIterationId++;
|
||||
return combination;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
throw new RuntimeException("Not supported");
|
||||
}
|
||||
}
|
||||
}
|
@ -69,6 +69,11 @@ public abstract class Scope implements Symbol {
|
||||
return symbol.getLocalName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the label ref representing the scope itself
|
||||
* @return The label reference
|
||||
*/
|
||||
public abstract LabelRef getScopeLabelRef();
|
||||
|
||||
@Override
|
||||
@JsonIgnore
|
||||
@ -166,6 +171,27 @@ public abstract class Scope implements Symbol {
|
||||
return vars;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all scopes contained in the scope. This does not include this scope itself.
|
||||
* @param includeSubScopes Include sub-scopes og sub-scopes
|
||||
* @return The scopes
|
||||
*/
|
||||
@JsonIgnore
|
||||
public Collection<Scope> getAllScopes(boolean includeSubScopes) {
|
||||
Collection<Scope> scopes = new ArrayList<>();
|
||||
for (Symbol symbol : symbols.values()) {
|
||||
if (symbol instanceof Scope) {
|
||||
scopes.add((Scope) symbol);
|
||||
if(includeSubScopes) {
|
||||
Scope subScope = (Scope) symbol;
|
||||
scopes.addAll(subScope.getAllScopes(true));
|
||||
}
|
||||
}
|
||||
}
|
||||
return scopes;
|
||||
}
|
||||
|
||||
|
||||
public Label addLabel(String name) {
|
||||
Label symbol = new Label(name, this, false);
|
||||
add(symbol);
|
||||
|
@ -1,6 +1,7 @@
|
||||
package dk.camelot64.kickc.icl;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@ -33,4 +34,15 @@ public class VariableRegisterWeights {
|
||||
public Double getWeight(VariableRef variable) {
|
||||
return registerWeights.get(variable);
|
||||
}
|
||||
|
||||
public double getTotalWeight(LiveRangeEquivalenceClass equivalenceClass) {
|
||||
double totalWeight = 0.0;
|
||||
List<VariableRef> vars = equivalenceClass.getVariables();
|
||||
for (VariableRef var : vars) {
|
||||
Double varWeight = getWeight(var);
|
||||
totalWeight += varWeight;
|
||||
}
|
||||
return totalWeight;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,47 @@
|
||||
package dk.camelot64.kickc.passes;
|
||||
|
||||
import dk.camelot64.kickc.icl.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/*** Find the variable equivalence classes to attempt to uplift in each scope */
|
||||
public class Pass3RegisterUpliftScopeAnalysis extends Pass2Base {
|
||||
|
||||
public Pass3RegisterUpliftScopeAnalysis(Program program) {
|
||||
super(program);
|
||||
}
|
||||
|
||||
/*** Find the variable equivalence classes to attempt to uplift in each scope */
|
||||
public void findScopes() {
|
||||
LiveRangeEquivalenceClassSet equivalenceClassSet = getProgram().getLiveRangeEquivalenceClassSet();
|
||||
final VariableRegisterWeights registerWeights = getProgram().getVariableRegisterWeights();
|
||||
|
||||
RegisterUpliftProgram registerUpliftProgram = new RegisterUpliftProgram();
|
||||
|
||||
Collection<Scope> allScopes = getProgram().getScope().getAllScopes(true);
|
||||
allScopes.add(getSymbols());
|
||||
for (Scope scope : allScopes) {
|
||||
LabelRef scopeLabel = scope.getScopeLabelRef();
|
||||
RegisterUpliftScope registerUpliftScope = registerUpliftProgram.addRegisterUpliftScope(scopeLabel);
|
||||
|
||||
// Find live range equivalence classes for the scope
|
||||
List<LiveRangeEquivalenceClass> equivalenceClasses = new ArrayList<>();
|
||||
for (LiveRangeEquivalenceClass equivalenceClass : equivalenceClassSet.getEquivalenceClasses()) {
|
||||
VariableRef variableRef = equivalenceClass.getVariables().get(0);
|
||||
if (variableRef.getScopeNames().equals(scopeLabel.getFullName())) {
|
||||
equivalenceClasses.add(equivalenceClass);
|
||||
}
|
||||
}
|
||||
Collections.sort(equivalenceClasses, new Comparator<LiveRangeEquivalenceClass>() {
|
||||
@Override
|
||||
public int compare(LiveRangeEquivalenceClass o1, LiveRangeEquivalenceClass o2) {
|
||||
return Double.compare(registerWeights.getTotalWeight(o2), registerWeights.getTotalWeight(o1));
|
||||
}
|
||||
});
|
||||
registerUpliftScope.setEquivalenceClasses(equivalenceClasses);
|
||||
}
|
||||
getProgram().setRegisterUpliftProgram(registerUpliftProgram);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -6,15 +6,13 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/*** Uplift one variable into the A register - and check if the program still works */
|
||||
public class Pass3RegisterUplifting extends Pass2Base {
|
||||
public class Pass3RegisterUpliftTest extends Pass2Base {
|
||||
|
||||
public Pass3RegisterUplifting(Program program) {
|
||||
public Pass3RegisterUpliftTest(Program program) {
|
||||
super(program);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uplift one variable
|
||||
*/
|
||||
/** Uplift variables to registers */
|
||||
public void uplift() {
|
||||
VariableRegisterWeights variableRegisterWeights = getProgram().getVariableRegisterWeights();
|
||||
LiveRangeEquivalenceClassSet equivalenceClassSet = getProgram().getLiveRangeEquivalenceClassSet();
|
@ -12,9 +12,11 @@ public class Pass3RegistersFinalize extends Pass2Base {
|
||||
super(program);
|
||||
}
|
||||
|
||||
public void allocate() {
|
||||
public void allocate(boolean reallocZp) {
|
||||
LiveRangeEquivalenceClassSet liveRangeEquivalenceClassSet = getProgram().getLiveRangeEquivalenceClassSet();
|
||||
reallocateZp(liveRangeEquivalenceClassSet);
|
||||
if(reallocZp) {
|
||||
reallocateZp(liveRangeEquivalenceClassSet);
|
||||
}
|
||||
RegisterAllocation allocation = liveRangeEquivalenceClassSet.createRegisterAllocation();
|
||||
getProgram().setAllocation(allocation);
|
||||
}
|
||||
|
@ -15,7 +15,6 @@ public class Pass3ZeroPageCoalesce extends Pass2Base {
|
||||
|
||||
public void allocate() {
|
||||
LiveRangeEquivalenceClassSet liveRangeEquivalenceClassSet = getProgram().getLiveRangeEquivalenceClassSet();
|
||||
|
||||
boolean change;
|
||||
do {
|
||||
change = coalesce(liveRangeEquivalenceClassSet);
|
||||
|
@ -1,10 +1,8 @@
|
||||
BBEGIN:
|
||||
B1_from_BBEGIN:
|
||||
lda #0
|
||||
sta 6
|
||||
lda #12
|
||||
sta 5
|
||||
lda #0
|
||||
ldx #12
|
||||
sta 4
|
||||
lda #<1024
|
||||
sta 2
|
||||
@ -20,13 +18,12 @@ B1:
|
||||
bne !+
|
||||
inc 2+1
|
||||
!:
|
||||
lda 5
|
||||
txa
|
||||
clc
|
||||
adc #24
|
||||
sta 5
|
||||
lda #39
|
||||
cmp 5
|
||||
bcc B2
|
||||
tax
|
||||
cpx #39
|
||||
bcs B2
|
||||
B3_from_B1:
|
||||
B3:
|
||||
lda 4
|
||||
@ -34,7 +31,7 @@ B3:
|
||||
bcc B1_from_B3
|
||||
BEND:
|
||||
B2:
|
||||
inc 6
|
||||
inc 5
|
||||
lda 2
|
||||
clc
|
||||
adc #40
|
||||
@ -42,9 +39,9 @@ B2:
|
||||
bcc !+
|
||||
inc 2+1
|
||||
!:
|
||||
lda 5
|
||||
txa
|
||||
sec
|
||||
sbc #39
|
||||
sta 5
|
||||
tax
|
||||
B3_from_B2:
|
||||
jmp B3
|
||||
|
@ -1171,42 +1171,75 @@ B3_from_B2:
|
||||
//SEG31 [6] phi (byte*) cursor#5 = (byte*) cursor#2 -- register_copy
|
||||
jmp B3
|
||||
|
||||
Uplifting max weight 55.0 live range equivalence class zp byte:5 [ e#3 e#5 e#1 e#2 ]
|
||||
Uplift to reg byte a resulted in clobber.
|
||||
Uplift to reg byte x succesfull.
|
||||
Uplift to reg byte y resulted in clobber.
|
||||
REGISTER UPLIFTING
|
||||
(byte[1000]) SCREEN
|
||||
(byte) STAR
|
||||
(byte*) cursor
|
||||
(byte*) cursor#1 zp ptr byte:2 8.25
|
||||
(byte*) cursor#2 zp ptr byte:2 11.0
|
||||
(byte*) cursor#3 zp ptr byte:2 11.0
|
||||
(byte*) cursor#5 zp ptr byte:2 16.5
|
||||
(byte) e
|
||||
(byte) e#1 zp byte:5 11.0
|
||||
(byte) e#2 zp byte:5 22.0
|
||||
(byte) e#3 zp byte:5 5.5
|
||||
(byte) e#5 zp byte:5 16.5
|
||||
(byte) x
|
||||
(byte) x#1 zp byte:4 3.666666666666667
|
||||
(byte) x#2 zp byte:4 11.0
|
||||
(byte) x0
|
||||
(byte) x1
|
||||
(byte) xd
|
||||
(byte) y
|
||||
(byte) y#1 zp byte:6 7.333333333333333
|
||||
(byte) y#2 zp byte:6 5.5
|
||||
(byte) y#4 zp byte:6 16.5
|
||||
(byte) y0
|
||||
(byte) y1
|
||||
(byte) yd
|
||||
|
||||
zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ]
|
||||
zp byte:4 [ x#2 x#1 ]
|
||||
zp byte:5 [ e#3 e#5 e#1 e#2 ]
|
||||
zp byte:6 [ y#2 y#4 y#1 ]
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [] 55: zp byte:5 [ e#3 e#5 e#1 e#2 ] 46.75: zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] 29.33: zp byte:6 [ y#2 y#4 y#1 ] 14.67: zp byte:4 [ x#2 x#1 ]
|
||||
|
||||
Uplift attempt [] 91 allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] 83 allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] 88 allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
|
||||
Uplift attempt [] 86 allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
|
||||
Uplifting [] best 83 combination reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
|
||||
Re-allocated ZP register from zp byte:6 to zp byte:5
|
||||
Removing instruction jmp B1
|
||||
Removing instruction jmp B3
|
||||
Removing instruction jmp BEND
|
||||
@ -1218,10 +1251,9 @@ BBEGIN:
|
||||
B1_from_BBEGIN:
|
||||
//SEG2 [0] phi (byte) y#2 = (byte) 0 -- zpby1=coby1
|
||||
lda #0
|
||||
sta 6
|
||||
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- zpby1=coby1
|
||||
lda #12
|
||||
sta 5
|
||||
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- xby=coby1
|
||||
ldx #12
|
||||
//SEG4 [0] phi (byte) x#2 = (byte) 0 -- zpby1=coby1
|
||||
lda #0
|
||||
sta 4
|
||||
@ -1250,15 +1282,14 @@ B1:
|
||||
bne !+
|
||||
inc 2+1
|
||||
!:
|
||||
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- zpby1=zpby1_plus_coby1
|
||||
lda 5
|
||||
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- xby=xby_plus_coby1
|
||||
txa
|
||||
clc
|
||||
adc #24
|
||||
sta 5
|
||||
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_zpby1_then_la1
|
||||
lda #39
|
||||
cmp 5
|
||||
bcc B2
|
||||
tax
|
||||
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_xby_then_la1
|
||||
cpx #39
|
||||
bcs B2
|
||||
//SEG17 [6] phi from @1 to @3
|
||||
B3_from_B1:
|
||||
//SEG18 [6] phi (byte) y#4 = (byte) y#2 -- register_copy
|
||||
@ -1275,7 +1306,7 @@ BEND:
|
||||
//SEG24 @2
|
||||
B2:
|
||||
//SEG25 [8] (byte) y#1 ← (byte) y#2 + (byte) 1 [ x#1 e#1 cursor#1 y#1 ] -- zpby1=zpby1_plus_1
|
||||
inc 6
|
||||
inc 5
|
||||
//SEG26 [9] (byte*) cursor#2 ← (byte*) cursor#1 + (byte) 40 [ x#1 e#1 cursor#2 y#1 ] -- zpptrby1=zpptrby1_plus_coby1
|
||||
lda 2
|
||||
clc
|
||||
@ -1284,11 +1315,95 @@ B2:
|
||||
bcc !+
|
||||
inc 2+1
|
||||
!:
|
||||
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- zpby1=zpby1_minus_coby1
|
||||
lda 5
|
||||
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- xby=xby_minus_coby1
|
||||
txa
|
||||
sec
|
||||
sbc #39
|
||||
tax
|
||||
//SEG28 [6] phi from @2 to @3
|
||||
B3_from_B2:
|
||||
//SEG29 [6] phi (byte) y#4 = (byte) y#1 -- register_copy
|
||||
//SEG30 [6] phi (byte) e#5 = (byte) e#2 -- register_copy
|
||||
//SEG31 [6] phi (byte*) cursor#5 = (byte*) cursor#2 -- register_copy
|
||||
jmp B3
|
||||
|
||||
Removing instruction lda #0
|
||||
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
||||
ASSEMBLER
|
||||
//SEG0 @BEGIN
|
||||
BBEGIN:
|
||||
//SEG1 [0] phi from @BEGIN to @1
|
||||
B1_from_BBEGIN:
|
||||
//SEG2 [0] phi (byte) y#2 = (byte) 0 -- zpby1=coby1
|
||||
lda #0
|
||||
sta 5
|
||||
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- xby=coby1
|
||||
ldx #12
|
||||
//SEG4 [0] phi (byte) x#2 = (byte) 0 -- zpby1=coby1
|
||||
sta 4
|
||||
//SEG5 [0] phi (byte*) cursor#3 = (word) 1024 -- zpptrby1=cowo1
|
||||
lda #<1024
|
||||
sta 2
|
||||
lda #>1024
|
||||
sta 2+1
|
||||
jmp B1
|
||||
//SEG6 [0] phi from @3 to @1
|
||||
B1_from_B3:
|
||||
//SEG7 [0] phi (byte) y#2 = (byte) y#4 -- register_copy
|
||||
//SEG8 [0] phi (byte) e#3 = (byte) e#5 -- register_copy
|
||||
//SEG9 [0] phi (byte) x#2 = (byte) x#1 -- register_copy
|
||||
//SEG10 [0] phi (byte*) cursor#3 = (byte*) cursor#5 -- register_copy
|
||||
//SEG11 @1
|
||||
B1:
|
||||
//SEG12 [1] *((byte*) cursor#3) ← (byte) 81 [ cursor#3 x#2 e#3 y#2 ] -- _star_zpptrby1=coby1
|
||||
ldy #0
|
||||
lda #81
|
||||
sta (2),y
|
||||
//SEG13 [2] (byte) x#1 ← (byte) x#2 + (byte) 1 [ x#1 cursor#3 e#3 y#2 ] -- zpby1=zpby1_plus_1
|
||||
inc 4
|
||||
//SEG14 [3] (byte*) cursor#1 ← (byte*) cursor#3 + (byte) 1 [ x#1 e#3 cursor#1 y#2 ] -- zpptrby1=zpptrby1_plus_1
|
||||
inc 2
|
||||
bne !+
|
||||
inc 2+1
|
||||
!:
|
||||
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- xby=xby_plus_coby1
|
||||
txa
|
||||
clc
|
||||
adc #24
|
||||
tax
|
||||
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_xby_then_la1
|
||||
cpx #39
|
||||
bcs B2
|
||||
//SEG17 [6] phi from @1 to @3
|
||||
B3_from_B1:
|
||||
//SEG18 [6] phi (byte) y#4 = (byte) y#2 -- register_copy
|
||||
//SEG19 [6] phi (byte) e#5 = (byte) e#1 -- register_copy
|
||||
//SEG20 [6] phi (byte*) cursor#5 = (byte*) cursor#1 -- register_copy
|
||||
//SEG21 @3
|
||||
B3:
|
||||
//SEG22 [7] if((byte) x#1<(byte) 40) goto @1 [ cursor#5 x#1 e#5 y#4 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 4
|
||||
cmp #40
|
||||
bcc B1_from_B3
|
||||
//SEG23 @END
|
||||
BEND:
|
||||
//SEG24 @2
|
||||
B2:
|
||||
//SEG25 [8] (byte) y#1 ← (byte) y#2 + (byte) 1 [ x#1 e#1 cursor#1 y#1 ] -- zpby1=zpby1_plus_1
|
||||
inc 5
|
||||
//SEG26 [9] (byte*) cursor#2 ← (byte*) cursor#1 + (byte) 40 [ x#1 e#1 cursor#2 y#1 ] -- zpptrby1=zpptrby1_plus_coby1
|
||||
lda 2
|
||||
clc
|
||||
adc #40
|
||||
sta 2
|
||||
bcc !+
|
||||
inc 2+1
|
||||
!:
|
||||
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- xby=xby_minus_coby1
|
||||
txa
|
||||
sec
|
||||
sbc #39
|
||||
tax
|
||||
//SEG28 [6] phi from @2 to @3
|
||||
B3_from_B2:
|
||||
//SEG29 [6] phi (byte) y#4 = (byte) y#1 -- register_copy
|
||||
@ -1305,12 +1420,10 @@ BBEGIN:
|
||||
B1_from_BBEGIN:
|
||||
//SEG2 [0] phi (byte) y#2 = (byte) 0 -- zpby1=coby1
|
||||
lda #0
|
||||
sta 6
|
||||
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- zpby1=coby1
|
||||
lda #12
|
||||
sta 5
|
||||
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- xby=coby1
|
||||
ldx #12
|
||||
//SEG4 [0] phi (byte) x#2 = (byte) 0 -- zpby1=coby1
|
||||
lda #0
|
||||
sta 4
|
||||
//SEG5 [0] phi (byte*) cursor#3 = (word) 1024 -- zpptrby1=cowo1
|
||||
lda #<1024
|
||||
@ -1336,15 +1449,14 @@ B1:
|
||||
bne !+
|
||||
inc 2+1
|
||||
!:
|
||||
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- zpby1=zpby1_plus_coby1
|
||||
lda 5
|
||||
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- xby=xby_plus_coby1
|
||||
txa
|
||||
clc
|
||||
adc #24
|
||||
sta 5
|
||||
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_zpby1_then_la1
|
||||
lda #39
|
||||
cmp 5
|
||||
bcc B2
|
||||
tax
|
||||
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_xby_then_la1
|
||||
cpx #39
|
||||
bcs B2
|
||||
//SEG17 [6] phi from @1 to @3
|
||||
B3_from_B1:
|
||||
//SEG18 [6] phi (byte) y#4 = (byte) y#2 -- register_copy
|
||||
@ -1361,7 +1473,7 @@ BEND:
|
||||
//SEG24 @2
|
||||
B2:
|
||||
//SEG25 [8] (byte) y#1 ← (byte) y#2 + (byte) 1 [ x#1 e#1 cursor#1 y#1 ] -- zpby1=zpby1_plus_1
|
||||
inc 6
|
||||
inc 5
|
||||
//SEG26 [9] (byte*) cursor#2 ← (byte*) cursor#1 + (byte) 40 [ x#1 e#1 cursor#2 y#1 ] -- zpptrby1=zpptrby1_plus_coby1
|
||||
lda 2
|
||||
clc
|
||||
@ -1370,11 +1482,11 @@ B2:
|
||||
bcc !+
|
||||
inc 2+1
|
||||
!:
|
||||
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- zpby1=zpby1_minus_coby1
|
||||
lda 5
|
||||
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- xby=xby_minus_coby1
|
||||
txa
|
||||
sec
|
||||
sbc #39
|
||||
sta 5
|
||||
tax
|
||||
//SEG28 [6] phi from @2 to @3
|
||||
B3_from_B2:
|
||||
//SEG29 [6] phi (byte) y#4 = (byte) y#1 -- register_copy
|
||||
@ -1396,10 +1508,10 @@ FINAL SYMBOL TABLE
|
||||
(byte*) cursor#3 zp ptr byte:2 11.0
|
||||
(byte*) cursor#5 zp ptr byte:2 16.5
|
||||
(byte) e
|
||||
(byte) e#1 zp byte:5 11.0
|
||||
(byte) e#2 zp byte:5 22.0
|
||||
(byte) e#3 zp byte:5 5.5
|
||||
(byte) e#5 zp byte:5 16.5
|
||||
(byte) e#1 reg byte x 11.0
|
||||
(byte) e#2 reg byte x 22.0
|
||||
(byte) e#3 reg byte x 5.5
|
||||
(byte) e#5 reg byte x 16.5
|
||||
(byte) x
|
||||
(byte) x#1 zp byte:4 3.666666666666667
|
||||
(byte) x#2 zp byte:4 11.0
|
||||
@ -1407,17 +1519,17 @@ FINAL SYMBOL TABLE
|
||||
(byte) x1
|
||||
(byte) xd
|
||||
(byte) y
|
||||
(byte) y#1 zp byte:6 7.333333333333333
|
||||
(byte) y#2 zp byte:6 5.5
|
||||
(byte) y#4 zp byte:6 16.5
|
||||
(byte) y#1 zp byte:5 7.333333333333333
|
||||
(byte) y#2 zp byte:5 5.5
|
||||
(byte) y#4 zp byte:5 16.5
|
||||
(byte) y0
|
||||
(byte) y1
|
||||
(byte) yd
|
||||
|
||||
zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ]
|
||||
zp byte:4 [ x#2 x#1 ]
|
||||
zp byte:5 [ e#3 e#5 e#1 e#2 ]
|
||||
zp byte:6 [ y#2 y#4 y#1 ]
|
||||
reg byte x [ e#3 e#5 e#1 e#2 ]
|
||||
zp byte:5 [ y#2 y#4 y#1 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 @BEGIN
|
||||
@ -1426,12 +1538,10 @@ BBEGIN:
|
||||
B1_from_BBEGIN:
|
||||
//SEG2 [0] phi (byte) y#2 = (byte) 0 -- zpby1=coby1
|
||||
lda #0
|
||||
sta 6
|
||||
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- zpby1=coby1
|
||||
lda #12
|
||||
sta 5
|
||||
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- xby=coby1
|
||||
ldx #12
|
||||
//SEG4 [0] phi (byte) x#2 = (byte) 0 -- zpby1=coby1
|
||||
lda #0
|
||||
sta 4
|
||||
//SEG5 [0] phi (byte*) cursor#3 = (word) 1024 -- zpptrby1=cowo1
|
||||
lda #<1024
|
||||
@ -1457,15 +1567,14 @@ B1:
|
||||
bne !+
|
||||
inc 2+1
|
||||
!:
|
||||
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- zpby1=zpby1_plus_coby1
|
||||
lda 5
|
||||
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- xby=xby_plus_coby1
|
||||
txa
|
||||
clc
|
||||
adc #24
|
||||
sta 5
|
||||
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_zpby1_then_la1
|
||||
lda #39
|
||||
cmp 5
|
||||
bcc B2
|
||||
tax
|
||||
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_xby_then_la1
|
||||
cpx #39
|
||||
bcs B2
|
||||
//SEG17 [6] phi from @1 to @3
|
||||
B3_from_B1:
|
||||
//SEG18 [6] phi (byte) y#4 = (byte) y#2 -- register_copy
|
||||
@ -1482,7 +1591,7 @@ BEND:
|
||||
//SEG24 @2
|
||||
B2:
|
||||
//SEG25 [8] (byte) y#1 ← (byte) y#2 + (byte) 1 [ x#1 e#1 cursor#1 y#1 ] -- zpby1=zpby1_plus_1
|
||||
inc 6
|
||||
inc 5
|
||||
//SEG26 [9] (byte*) cursor#2 ← (byte*) cursor#1 + (byte) 40 [ x#1 e#1 cursor#2 y#1 ] -- zpptrby1=zpptrby1_plus_coby1
|
||||
lda 2
|
||||
clc
|
||||
@ -1491,11 +1600,11 @@ B2:
|
||||
bcc !+
|
||||
inc 2+1
|
||||
!:
|
||||
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- zpby1=zpby1_minus_coby1
|
||||
lda 5
|
||||
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- xby=xby_minus_coby1
|
||||
txa
|
||||
sec
|
||||
sbc #39
|
||||
sta 5
|
||||
tax
|
||||
//SEG28 [6] phi from @2 to @3
|
||||
B3_from_B2:
|
||||
//SEG29 [6] phi (byte) y#4 = (byte) y#1 -- register_copy
|
||||
|
@ -11,10 +11,10 @@
|
||||
(byte*) cursor#3 zp ptr byte:2 11.0
|
||||
(byte*) cursor#5 zp ptr byte:2 16.5
|
||||
(byte) e
|
||||
(byte) e#1 zp byte:5 11.0
|
||||
(byte) e#2 zp byte:5 22.0
|
||||
(byte) e#3 zp byte:5 5.5
|
||||
(byte) e#5 zp byte:5 16.5
|
||||
(byte) e#1 reg byte x 11.0
|
||||
(byte) e#2 reg byte x 22.0
|
||||
(byte) e#3 reg byte x 5.5
|
||||
(byte) e#5 reg byte x 16.5
|
||||
(byte) x
|
||||
(byte) x#1 zp byte:4 3.666666666666667
|
||||
(byte) x#2 zp byte:4 11.0
|
||||
@ -22,14 +22,14 @@
|
||||
(byte) x1
|
||||
(byte) xd
|
||||
(byte) y
|
||||
(byte) y#1 zp byte:6 7.333333333333333
|
||||
(byte) y#2 zp byte:6 5.5
|
||||
(byte) y#4 zp byte:6 16.5
|
||||
(byte) y#1 zp byte:5 7.333333333333333
|
||||
(byte) y#2 zp byte:5 5.5
|
||||
(byte) y#4 zp byte:5 16.5
|
||||
(byte) y0
|
||||
(byte) y1
|
||||
(byte) yd
|
||||
|
||||
zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ]
|
||||
zp byte:4 [ x#2 x#1 ]
|
||||
zp byte:5 [ e#3 e#5 e#1 e#2 ]
|
||||
zp byte:6 [ y#2 y#4 y#1 ]
|
||||
reg byte x [ e#3 e#5 e#1 e#2 ]
|
||||
zp byte:5 [ y#2 y#4 y#1 ]
|
||||
|
@ -4,25 +4,16 @@ BBEGIN:
|
||||
lda #1
|
||||
sta 4353
|
||||
B1_from_BBEGIN:
|
||||
lda #0
|
||||
sta 2
|
||||
ldx #0
|
||||
B1_from_B1:
|
||||
B1:
|
||||
ldx 2
|
||||
lda 4352,x
|
||||
sta 3
|
||||
ldx 2
|
||||
sta 2
|
||||
lda 4353,x
|
||||
sta 4
|
||||
lda 3
|
||||
clc
|
||||
adc 4
|
||||
sta 5
|
||||
lda 5
|
||||
ldx 2
|
||||
adc 2
|
||||
sta 4354,x
|
||||
inc 2
|
||||
lda 2
|
||||
cmp #15
|
||||
inx
|
||||
cpx #15
|
||||
bcc B1_from_B1
|
||||
BEND:
|
||||
|
@ -487,25 +487,311 @@ B1:
|
||||
//SEG14 @END
|
||||
BEND:
|
||||
|
||||
Uplifting max weight 27.5 live range equivalence class zp byte:2 [ i#2 i#1 ]
|
||||
Uplift to reg byte a resulted in clobber.
|
||||
Uplift to reg byte x succesfull.
|
||||
Uplift to reg byte y succesfull.
|
||||
REGISTER UPLIFTING
|
||||
(byte~) $1 zp byte:3 11.0
|
||||
(byte~) $3 zp byte:4 22.0
|
||||
(byte~) $4 zp byte:5 22.0
|
||||
(byte[15]) fibs
|
||||
(byte) i
|
||||
(byte) i#1 zp byte:2 16.5
|
||||
(byte) i#2 zp byte:2 11.0
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [] 27.5: zp byte:2 [ i#2 i#1 ] 22: zp byte:4 [ $3 ] 22: zp byte:5 [ $4 ] 11: zp byte:3 [ $1 ]
|
||||
|
||||
zp byte:2 [ i#2 i#1 ]
|
||||
zp byte:3 [ $1 ]
|
||||
zp byte:4 [ $3 ]
|
||||
zp byte:5 [ $4 ]
|
||||
|
||||
Coalescing zero page register [ zp byte:3 [ $1 ] ] with [ zp byte:5 [ $4 ] ]
|
||||
Uplift attempt [] 59 allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] 48 allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] 51 allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_aby
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_aby
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_aby
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_aby
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_yby
|
||||
Uplift attempt [] 55 allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] 44 allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] 47 allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] 51 allocation: zp byte:2 [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] 40 allocation: reg byte x [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] 43 allocation: reg byte y [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] missing fragment aby=zpby1_plus_xby
|
||||
Uplift attempt [] missing fragment aby=zpby1_plus_xby
|
||||
Uplift attempt [] missing fragment aby=zpby1_plus_xby
|
||||
Uplift attempt [] missing fragment aby=zpby1_plus_xby
|
||||
Uplift attempt [] missing fragment aby=zpby1_plus_yby
|
||||
Uplift attempt [] missing fragment aby=zpby1_plus_yby
|
||||
Uplift attempt [] missing fragment aby=zpby1_plus_yby
|
||||
Uplift attempt [] missing fragment aby=zpby1_plus_yby
|
||||
Uplift attempt [] 57 allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] 49 allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_aby
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_aby
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_aby
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_aby
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_xby
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_xby
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_xby
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_xby
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_yby
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_yby
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_yby
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_yby
|
||||
Uplift attempt [] 58 allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] 46 allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_aby
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_aby
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_aby
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_aby
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_xby
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_xby
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_xby
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_xby
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_yby
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_yby
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_yby
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_yby
|
||||
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte a [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte a [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte a [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte a [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] missing fragment zpby1=aby_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=aby_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=aby_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=aby_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=aby_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=aby_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=aby_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=aby_plus_yby
|
||||
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] 43 allocation: reg byte y [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte y [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte y [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] 40 allocation: reg byte x [ i#2 i#1 ] reg byte y [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte y [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] missing fragment xby=aby_plus_zpby1
|
||||
Uplift attempt [] missing fragment xby=aby_plus_zpby1
|
||||
Uplift attempt [] missing fragment xby=aby_plus_zpby1
|
||||
Uplift attempt [] missing fragment xby=aby_plus_zpby1
|
||||
Uplift attempt [] missing fragment xby=aby_plus_aby
|
||||
Uplift attempt [] missing fragment xby=aby_plus_aby
|
||||
Uplift attempt [] missing fragment xby=aby_plus_aby
|
||||
Uplift attempt [] missing fragment xby=aby_plus_aby
|
||||
Uplift attempt [] missing fragment xby=aby_plus_xby
|
||||
Uplift attempt [] missing fragment xby=aby_plus_xby
|
||||
Uplift attempt [] missing fragment xby=aby_plus_xby
|
||||
Uplift attempt [] missing fragment xby=aby_plus_xby
|
||||
Uplift attempt [] missing fragment xby=aby_plus_yby
|
||||
Uplift attempt [] missing fragment xby=aby_plus_yby
|
||||
Uplift attempt [] missing fragment xby=aby_plus_yby
|
||||
Uplift attempt [] missing fragment xby=aby_plus_yby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_zpby1
|
||||
Uplift attempt [] missing fragment yby=aby_plus_zpby1
|
||||
Uplift attempt [] missing fragment yby=aby_plus_zpby1
|
||||
Uplift attempt [] missing fragment yby=aby_plus_zpby1
|
||||
Uplift attempt [] missing fragment yby=aby_plus_aby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_aby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_aby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_aby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_xby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_xby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_xby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_xby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_yby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_yby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_yby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_zpby2
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_zpby2
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_zpby2
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_zpby2
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_aby
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_aby
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_aby
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_aby
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=xby_plus_yby
|
||||
Uplift attempt [] missing fragment aby=xby_plus_zpby1
|
||||
Uplift attempt [] missing fragment aby=xby_plus_zpby1
|
||||
Uplift attempt [] missing fragment aby=xby_plus_zpby1
|
||||
Uplift attempt [] missing fragment aby=xby_plus_zpby1
|
||||
Uplift attempt [] missing fragment aby=xby_plus_aby
|
||||
Uplift attempt [] missing fragment aby=xby_plus_aby
|
||||
Uplift attempt [] missing fragment aby=xby_plus_aby
|
||||
Uplift attempt [] missing fragment aby=xby_plus_aby
|
||||
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] missing fragment aby=xby_plus_yby
|
||||
Uplift attempt [] missing fragment aby=xby_plus_yby
|
||||
Uplift attempt [] missing fragment aby=xby_plus_yby
|
||||
Uplift attempt [] missing fragment aby=xby_plus_yby
|
||||
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] 46 allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte a [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte a [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte a [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] 45 allocation: reg byte y [ i#2 i#1 ] reg byte a [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte x [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte x [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte x [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte x [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] 57 allocation: zp byte:2 [ i#2 i#1 ] reg byte y [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte y [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte y [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte y [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] missing fragment yby=xby_plus_zpby1
|
||||
Uplift attempt [] missing fragment yby=xby_plus_zpby1
|
||||
Uplift attempt [] missing fragment yby=xby_plus_zpby1
|
||||
Uplift attempt [] missing fragment yby=xby_plus_zpby1
|
||||
Uplift attempt [] missing fragment yby=xby_plus_aby
|
||||
Uplift attempt [] missing fragment yby=xby_plus_aby
|
||||
Uplift attempt [] missing fragment yby=xby_plus_aby
|
||||
Uplift attempt [] missing fragment yby=xby_plus_aby
|
||||
Uplift attempt [] missing fragment yby=xby_plus_xby
|
||||
Uplift attempt [] missing fragment yby=xby_plus_xby
|
||||
Uplift attempt [] missing fragment yby=xby_plus_xby
|
||||
Uplift attempt [] missing fragment yby=xby_plus_xby
|
||||
Uplift attempt [] missing fragment yby=xby_plus_yby
|
||||
Uplift attempt [] missing fragment yby=xby_plus_yby
|
||||
Uplift attempt [] missing fragment yby=xby_plus_yby
|
||||
Uplift attempt [] missing fragment yby=xby_plus_yby
|
||||
Uplift attempt [] 58 allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] 45 allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] missing fragment zpby1=yby_plus_aby
|
||||
Uplift attempt [] missing fragment zpby1=yby_plus_aby
|
||||
Uplift attempt [] missing fragment zpby1=yby_plus_aby
|
||||
Uplift attempt [] missing fragment zpby1=yby_plus_aby
|
||||
Uplift attempt [] missing fragment zpby1=yby_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=yby_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=yby_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=yby_plus_xby
|
||||
Uplift attempt [] missing fragment zpby1=yby_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=yby_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=yby_plus_yby
|
||||
Uplift attempt [] missing fragment zpby1=yby_plus_yby
|
||||
Uplift attempt [] missing fragment aby=yby_plus_zpby1
|
||||
Uplift attempt [] missing fragment aby=yby_plus_zpby1
|
||||
Uplift attempt [] missing fragment aby=yby_plus_zpby1
|
||||
Uplift attempt [] missing fragment aby=yby_plus_zpby1
|
||||
Uplift attempt [] missing fragment aby=yby_plus_aby
|
||||
Uplift attempt [] missing fragment aby=yby_plus_aby
|
||||
Uplift attempt [] missing fragment aby=yby_plus_aby
|
||||
Uplift attempt [] missing fragment aby=yby_plus_aby
|
||||
Uplift attempt [] missing fragment aby=yby_plus_xby
|
||||
Uplift attempt [] missing fragment aby=yby_plus_xby
|
||||
Uplift attempt [] missing fragment aby=yby_plus_xby
|
||||
Uplift attempt [] missing fragment aby=yby_plus_xby
|
||||
Uplift attempt [] missing fragment aby=yby_plus_yby
|
||||
Uplift attempt [] missing fragment aby=yby_plus_yby
|
||||
Uplift attempt [] missing fragment aby=yby_plus_yby
|
||||
Uplift attempt [] missing fragment aby=yby_plus_yby
|
||||
Uplift attempt [] missing fragment xby=yby_plus_zpby1
|
||||
Uplift attempt [] missing fragment xby=yby_plus_zpby1
|
||||
Uplift attempt [] missing fragment xby=yby_plus_zpby1
|
||||
Uplift attempt [] missing fragment xby=yby_plus_zpby1
|
||||
Uplift attempt [] missing fragment xby=yby_plus_aby
|
||||
Uplift attempt [] missing fragment xby=yby_plus_aby
|
||||
Uplift attempt [] missing fragment xby=yby_plus_aby
|
||||
Uplift attempt [] missing fragment xby=yby_plus_aby
|
||||
Uplift attempt [] missing fragment xby=yby_plus_xby
|
||||
Uplift attempt [] missing fragment xby=yby_plus_xby
|
||||
Uplift attempt [] missing fragment xby=yby_plus_xby
|
||||
Uplift attempt [] missing fragment xby=yby_plus_xby
|
||||
Uplift attempt [] missing fragment xby=yby_plus_yby
|
||||
Uplift attempt [] missing fragment xby=yby_plus_yby
|
||||
Uplift attempt [] missing fragment xby=yby_plus_yby
|
||||
Uplift attempt [] missing fragment xby=yby_plus_yby
|
||||
Uplift attempt [] 57 allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] 43 allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] 56 allocation: zp byte:2 [ i#2 i#1 ] reg byte a [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte a [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] 42 allocation: reg byte x [ i#2 i#1 ] reg byte a [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte a [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] 58 allocation: zp byte:2 [ i#2 i#1 ] reg byte x [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte x [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte x [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte x [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte y [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte y [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte y [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte y [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
|
||||
Uplifting [] best 40 combination reg byte x [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
|
||||
MISSING FRAGMENTS
|
||||
zpby1=zpby2_plus_aby
|
||||
zpby1=zpby2_plus_xby
|
||||
zpby1=zpby2_plus_yby
|
||||
aby=zpby1_plus_xby
|
||||
aby=zpby1_plus_yby
|
||||
xby=zpby1_plus_aby
|
||||
xby=zpby1_plus_xby
|
||||
xby=zpby1_plus_yby
|
||||
yby=zpby1_plus_aby
|
||||
yby=zpby1_plus_xby
|
||||
yby=zpby1_plus_yby
|
||||
zpby1=aby_plus_xby
|
||||
zpby1=aby_plus_yby
|
||||
xby=aby_plus_zpby1
|
||||
xby=aby_plus_aby
|
||||
xby=aby_plus_xby
|
||||
xby=aby_plus_yby
|
||||
yby=aby_plus_zpby1
|
||||
yby=aby_plus_aby
|
||||
yby=aby_plus_xby
|
||||
yby=aby_plus_yby
|
||||
zpby1=xby_plus_zpby2
|
||||
zpby1=xby_plus_aby
|
||||
zpby1=xby_plus_xby
|
||||
zpby1=xby_plus_yby
|
||||
aby=xby_plus_zpby1
|
||||
aby=xby_plus_aby
|
||||
aby=xby_plus_yby
|
||||
yby=xby_plus_zpby1
|
||||
yby=xby_plus_aby
|
||||
yby=xby_plus_xby
|
||||
yby=xby_plus_yby
|
||||
zpby1=yby_plus_aby
|
||||
zpby1=yby_plus_xby
|
||||
zpby1=yby_plus_yby
|
||||
aby=yby_plus_zpby1
|
||||
aby=yby_plus_aby
|
||||
aby=yby_plus_xby
|
||||
aby=yby_plus_yby
|
||||
xby=yby_plus_zpby1
|
||||
xby=yby_plus_aby
|
||||
xby=yby_plus_xby
|
||||
xby=yby_plus_yby
|
||||
Re-allocated ZP register from zp byte:3 to zp byte:2
|
||||
Removing instruction jmp B1
|
||||
Removing instruction jmp BEND
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
@ -520,37 +806,28 @@ BBEGIN:
|
||||
sta 4353
|
||||
//SEG3 [2] phi from @BEGIN to @1
|
||||
B1_from_BBEGIN:
|
||||
//SEG4 [2] phi (byte) i#2 = (byte) 0 -- zpby1=coby1
|
||||
lda #0
|
||||
sta 2
|
||||
//SEG4 [2] phi (byte) i#2 = (byte) 0 -- xby=coby1
|
||||
ldx #0
|
||||
jmp B1
|
||||
//SEG5 [2] phi from @1 to @1
|
||||
B1_from_B1:
|
||||
//SEG6 [2] phi (byte) i#2 = (byte) i#1 -- register_copy
|
||||
//SEG7 @1
|
||||
B1:
|
||||
//SEG8 [3] (byte~) $1 ← (word) 4352 *idx (byte) i#2 [ i#2 $1 ] -- zpby1=cowo1_staridx_zpby2
|
||||
ldx 2
|
||||
//SEG8 [3] (byte~) $1 ← (word) 4352 *idx (byte) i#2 [ i#2 $1 ] -- zpby1=cowo1_staridx_xby
|
||||
lda 4352,x
|
||||
sta 3
|
||||
//SEG9 [4] (byte~) $3 ← (word) 4353 *idx (byte) i#2 [ i#2 $1 $3 ] -- zpby1=cowo1_staridx_zpby2
|
||||
ldx 2
|
||||
sta 2
|
||||
//SEG9 [4] (byte~) $3 ← (word) 4353 *idx (byte) i#2 [ i#2 $1 $3 ] -- aby=cowo1_staridx_xby
|
||||
lda 4353,x
|
||||
sta 4
|
||||
//SEG10 [5] (byte~) $4 ← (byte~) $1 + (byte~) $3 [ i#2 $4 ] -- zpby1=zpby2_plus_zpby3
|
||||
lda 3
|
||||
//SEG10 [5] (byte~) $4 ← (byte~) $1 + (byte~) $3 [ i#2 $4 ] -- aby=zpby1_plus_aby
|
||||
clc
|
||||
adc 4
|
||||
sta 5
|
||||
//SEG11 [6] *((word) 4354 + (byte) i#2) ← (byte~) $4 [ i#2 ] -- cowo1_staridx_zpby1=zpby2
|
||||
lda 5
|
||||
ldx 2
|
||||
adc 2
|
||||
//SEG11 [6] *((word) 4354 + (byte) i#2) ← (byte~) $4 [ i#2 ] -- cowo1_staridx_xby=aby
|
||||
sta 4354,x
|
||||
//SEG12 [7] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- zpby1=zpby1_plus_1
|
||||
inc 2
|
||||
//SEG13 [8] if((byte) i#1<(byte) 15) goto @1 [ i#1 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #15
|
||||
//SEG12 [7] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- xby=xby_plus_1
|
||||
inx
|
||||
//SEG13 [8] if((byte) i#1<(byte) 15) goto @1 [ i#1 ] -- xby_lt_coby1_then_la1
|
||||
cpx #15
|
||||
bcc B1_from_B1
|
||||
//SEG14 @END
|
||||
BEND:
|
||||
@ -568,55 +845,47 @@ BBEGIN:
|
||||
sta 4353
|
||||
//SEG3 [2] phi from @BEGIN to @1
|
||||
B1_from_BBEGIN:
|
||||
//SEG4 [2] phi (byte) i#2 = (byte) 0 -- zpby1=coby1
|
||||
lda #0
|
||||
sta 2
|
||||
//SEG4 [2] phi (byte) i#2 = (byte) 0 -- xby=coby1
|
||||
ldx #0
|
||||
//SEG5 [2] phi from @1 to @1
|
||||
B1_from_B1:
|
||||
//SEG6 [2] phi (byte) i#2 = (byte) i#1 -- register_copy
|
||||
//SEG7 @1
|
||||
B1:
|
||||
//SEG8 [3] (byte~) $1 ← (word) 4352 *idx (byte) i#2 [ i#2 $1 ] -- zpby1=cowo1_staridx_zpby2
|
||||
ldx 2
|
||||
//SEG8 [3] (byte~) $1 ← (word) 4352 *idx (byte) i#2 [ i#2 $1 ] -- zpby1=cowo1_staridx_xby
|
||||
lda 4352,x
|
||||
sta 3
|
||||
//SEG9 [4] (byte~) $3 ← (word) 4353 *idx (byte) i#2 [ i#2 $1 $3 ] -- zpby1=cowo1_staridx_zpby2
|
||||
ldx 2
|
||||
sta 2
|
||||
//SEG9 [4] (byte~) $3 ← (word) 4353 *idx (byte) i#2 [ i#2 $1 $3 ] -- aby=cowo1_staridx_xby
|
||||
lda 4353,x
|
||||
sta 4
|
||||
//SEG10 [5] (byte~) $4 ← (byte~) $1 + (byte~) $3 [ i#2 $4 ] -- zpby1=zpby2_plus_zpby3
|
||||
lda 3
|
||||
//SEG10 [5] (byte~) $4 ← (byte~) $1 + (byte~) $3 [ i#2 $4 ] -- aby=zpby1_plus_aby
|
||||
clc
|
||||
adc 4
|
||||
sta 5
|
||||
//SEG11 [6] *((word) 4354 + (byte) i#2) ← (byte~) $4 [ i#2 ] -- cowo1_staridx_zpby1=zpby2
|
||||
lda 5
|
||||
ldx 2
|
||||
adc 2
|
||||
//SEG11 [6] *((word) 4354 + (byte) i#2) ← (byte~) $4 [ i#2 ] -- cowo1_staridx_xby=aby
|
||||
sta 4354,x
|
||||
//SEG12 [7] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- zpby1=zpby1_plus_1
|
||||
inc 2
|
||||
//SEG13 [8] if((byte) i#1<(byte) 15) goto @1 [ i#1 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #15
|
||||
//SEG12 [7] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- xby=xby_plus_1
|
||||
inx
|
||||
//SEG13 [8] if((byte) i#1<(byte) 15) goto @1 [ i#1 ] -- xby_lt_coby1_then_la1
|
||||
cpx #15
|
||||
bcc B1_from_B1
|
||||
//SEG14 @END
|
||||
BEND:
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
(byte~) $1 zp byte:3 11.0
|
||||
(byte~) $3 zp byte:4 22.0
|
||||
(byte~) $4 zp byte:5 22.0
|
||||
(byte~) $1 zp byte:2 11.0
|
||||
(byte~) $3 reg byte a 22.0
|
||||
(byte~) $4 reg byte a 22.0
|
||||
(label) @1
|
||||
(label) @BEGIN
|
||||
(label) @END
|
||||
(byte[15]) fibs
|
||||
(byte) i
|
||||
(byte) i#1 zp byte:2 16.5
|
||||
(byte) i#2 zp byte:2 11.0
|
||||
(byte) i#1 reg byte x 16.5
|
||||
(byte) i#2 reg byte x 11.0
|
||||
|
||||
zp byte:2 [ i#2 i#1 ]
|
||||
zp byte:3 [ $1 $4 ]
|
||||
zp byte:4 [ $3 ]
|
||||
reg byte x [ i#2 i#1 ]
|
||||
zp byte:2 [ $1 ]
|
||||
reg byte a [ $3 ]
|
||||
reg byte a [ $4 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 @BEGIN
|
||||
@ -629,36 +898,27 @@ BBEGIN:
|
||||
sta 4353
|
||||
//SEG3 [2] phi from @BEGIN to @1
|
||||
B1_from_BBEGIN:
|
||||
//SEG4 [2] phi (byte) i#2 = (byte) 0 -- zpby1=coby1
|
||||
lda #0
|
||||
sta 2
|
||||
//SEG4 [2] phi (byte) i#2 = (byte) 0 -- xby=coby1
|
||||
ldx #0
|
||||
//SEG5 [2] phi from @1 to @1
|
||||
B1_from_B1:
|
||||
//SEG6 [2] phi (byte) i#2 = (byte) i#1 -- register_copy
|
||||
//SEG7 @1
|
||||
B1:
|
||||
//SEG8 [3] (byte~) $1 ← (word) 4352 *idx (byte) i#2 [ i#2 $1 ] -- zpby1=cowo1_staridx_zpby2
|
||||
ldx 2
|
||||
//SEG8 [3] (byte~) $1 ← (word) 4352 *idx (byte) i#2 [ i#2 $1 ] -- zpby1=cowo1_staridx_xby
|
||||
lda 4352,x
|
||||
sta 3
|
||||
//SEG9 [4] (byte~) $3 ← (word) 4353 *idx (byte) i#2 [ i#2 $1 $3 ] -- zpby1=cowo1_staridx_zpby2
|
||||
ldx 2
|
||||
sta 2
|
||||
//SEG9 [4] (byte~) $3 ← (word) 4353 *idx (byte) i#2 [ i#2 $1 $3 ] -- aby=cowo1_staridx_xby
|
||||
lda 4353,x
|
||||
sta 4
|
||||
//SEG10 [5] (byte~) $4 ← (byte~) $1 + (byte~) $3 [ i#2 $4 ] -- zpby1=zpby2_plus_zpby3
|
||||
lda 3
|
||||
//SEG10 [5] (byte~) $4 ← (byte~) $1 + (byte~) $3 [ i#2 $4 ] -- aby=zpby1_plus_aby
|
||||
clc
|
||||
adc 4
|
||||
sta 5
|
||||
//SEG11 [6] *((word) 4354 + (byte) i#2) ← (byte~) $4 [ i#2 ] -- cowo1_staridx_zpby1=zpby2
|
||||
lda 5
|
||||
ldx 2
|
||||
adc 2
|
||||
//SEG11 [6] *((word) 4354 + (byte) i#2) ← (byte~) $4 [ i#2 ] -- cowo1_staridx_xby=aby
|
||||
sta 4354,x
|
||||
//SEG12 [7] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- zpby1=zpby1_plus_1
|
||||
inc 2
|
||||
//SEG13 [8] if((byte) i#1<(byte) 15) goto @1 [ i#1 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #15
|
||||
//SEG12 [7] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- xby=xby_plus_1
|
||||
inx
|
||||
//SEG13 [8] if((byte) i#1<(byte) 15) goto @1 [ i#1 ] -- xby_lt_coby1_then_la1
|
||||
cpx #15
|
||||
bcc B1_from_B1
|
||||
//SEG14 @END
|
||||
BEND:
|
||||
|
@ -1,14 +1,15 @@
|
||||
(byte~) $1 zp byte:3 11.0
|
||||
(byte~) $3 zp byte:4 22.0
|
||||
(byte~) $4 zp byte:5 22.0
|
||||
(byte~) $1 zp byte:2 11.0
|
||||
(byte~) $3 reg byte a 22.0
|
||||
(byte~) $4 reg byte a 22.0
|
||||
(label) @1
|
||||
(label) @BEGIN
|
||||
(label) @END
|
||||
(byte[15]) fibs
|
||||
(byte) i
|
||||
(byte) i#1 zp byte:2 16.5
|
||||
(byte) i#2 zp byte:2 11.0
|
||||
(byte) i#1 reg byte x 16.5
|
||||
(byte) i#2 reg byte x 11.0
|
||||
|
||||
zp byte:2 [ i#2 i#1 ]
|
||||
zp byte:3 [ $1 $4 ]
|
||||
zp byte:4 [ $3 ]
|
||||
reg byte x [ i#2 i#1 ]
|
||||
zp byte:2 [ $1 ]
|
||||
reg byte a [ $3 ]
|
||||
reg byte a [ $4 ]
|
||||
|
@ -4,29 +4,23 @@ BEND:
|
||||
main:
|
||||
jsr prepare
|
||||
main__B3_from_main:
|
||||
lda #25
|
||||
sta 2
|
||||
ldx #25
|
||||
jmp main__B3
|
||||
main__B3_from_B11:
|
||||
lda #25
|
||||
sta 2
|
||||
ldx #25
|
||||
main__B3_from_B3:
|
||||
main__B3_from_B6:
|
||||
main__B3:
|
||||
lda 53266
|
||||
sta 14
|
||||
lda 14
|
||||
cmp #254
|
||||
bne main__B3_from_B3
|
||||
main__B4:
|
||||
lda 53266
|
||||
sta 15
|
||||
lda 15
|
||||
cmp #255
|
||||
bne main__B4
|
||||
main__B6:
|
||||
dec 2
|
||||
lda 2
|
||||
dex
|
||||
cpx #0
|
||||
bne main__B3_from_B6
|
||||
main__B7:
|
||||
jsr flip
|
||||
@ -39,105 +33,85 @@ main__Breturn:
|
||||
plot:
|
||||
plot__B1_from_plot:
|
||||
lda #16
|
||||
sta 5
|
||||
sta 4
|
||||
lda #<1236
|
||||
sta 3
|
||||
sta 2
|
||||
lda #>1236
|
||||
sta 3+1
|
||||
lda #0
|
||||
sta 6
|
||||
sta 2+1
|
||||
ldx #0
|
||||
plot__B1_from_B3:
|
||||
plot__B1:
|
||||
plot__B2_from_B1:
|
||||
lda #0
|
||||
sta 7
|
||||
ldy #0
|
||||
plot__B2_from_B2:
|
||||
plot__B2:
|
||||
ldx 6
|
||||
lda 4096,x
|
||||
sta 16
|
||||
lda 16
|
||||
ldy 7
|
||||
sta (3),y
|
||||
inc 6
|
||||
inc 7
|
||||
lda 7
|
||||
cmp #16
|
||||
sta (2),y
|
||||
inx
|
||||
iny
|
||||
cpy #16
|
||||
bcc plot__B2_from_B2
|
||||
plot__B3:
|
||||
lda 3
|
||||
lda 2
|
||||
clc
|
||||
adc #40
|
||||
sta 3
|
||||
sta 2
|
||||
bcc !+
|
||||
inc 3+1
|
||||
inc 2+1
|
||||
!:
|
||||
dec 5
|
||||
lda 5
|
||||
dec 4
|
||||
lda 4
|
||||
bne plot__B1_from_B3
|
||||
plot__Breturn:
|
||||
rts
|
||||
flip:
|
||||
flip__B1_from_flip:
|
||||
lda #16
|
||||
sta 8
|
||||
lda #15
|
||||
sta 10
|
||||
lda #0
|
||||
sta 9
|
||||
sta 4
|
||||
ldy #15
|
||||
ldx #0
|
||||
flip__B1_from_B4:
|
||||
flip__B1:
|
||||
flip__B2_from_B1:
|
||||
lda #16
|
||||
sta 11
|
||||
sta 5
|
||||
flip__B2_from_B2:
|
||||
flip__B2:
|
||||
ldx 9
|
||||
lda 4096,x
|
||||
sta 17
|
||||
lda 17
|
||||
ldx 10
|
||||
sta 4352,x
|
||||
inc 9
|
||||
lda 10
|
||||
sta 4352,y
|
||||
inx
|
||||
tya
|
||||
clc
|
||||
adc #16
|
||||
sta 10
|
||||
dec 11
|
||||
lda 11
|
||||
tay
|
||||
dec 5
|
||||
lda 5
|
||||
bne flip__B2_from_B2
|
||||
flip__B4:
|
||||
dec 10
|
||||
dec 8
|
||||
lda 8
|
||||
dey
|
||||
dec 4
|
||||
lda 4
|
||||
bne flip__B1_from_B4
|
||||
flip__B3_from_B4:
|
||||
lda #0
|
||||
sta 12
|
||||
ldx #0
|
||||
flip__B3_from_B3:
|
||||
flip__B3:
|
||||
ldx 12
|
||||
lda 4352,x
|
||||
sta 18
|
||||
lda 18
|
||||
ldx 12
|
||||
sta 4096,x
|
||||
inc 12
|
||||
lda 12
|
||||
inx
|
||||
cpx #0
|
||||
bne flip__B3_from_B3
|
||||
flip__Breturn:
|
||||
rts
|
||||
prepare:
|
||||
prepare__B1_from_prepare:
|
||||
lda #0
|
||||
sta 13
|
||||
ldx #0
|
||||
prepare__B1_from_B1:
|
||||
prepare__B1:
|
||||
ldx 13
|
||||
txa
|
||||
sta 4096,x
|
||||
inc 13
|
||||
lda 13
|
||||
inx
|
||||
cpx #0
|
||||
bne prepare__B1_from_B1
|
||||
prepare__Breturn:
|
||||
rts
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -5,34 +5,34 @@
|
||||
(byte[256]) buffer1
|
||||
(byte[256]) buffer2
|
||||
(void()) flip()
|
||||
(byte~) flip::$0 zp byte:17 2002.0
|
||||
(byte~) flip::$4 zp byte:18 202.0
|
||||
(byte~) flip::$0 reg byte a 2002.0
|
||||
(byte~) flip::$4 reg byte a 202.0
|
||||
(label) flip::@1
|
||||
(label) flip::@2
|
||||
(label) flip::@3
|
||||
(label) flip::@4
|
||||
(label) flip::@return
|
||||
(byte) flip::c
|
||||
(byte) flip::c#1 zp byte:11 1501.5
|
||||
(byte) flip::c#2 zp byte:11 400.4
|
||||
(byte) flip::c#1 zp byte:5 1501.5
|
||||
(byte) flip::c#2 zp byte:5 400.4
|
||||
(byte) flip::dstIdx
|
||||
(byte) flip::dstIdx#1 zp byte:10 701.0
|
||||
(byte) flip::dstIdx#2 zp byte:10 67.33333333333333
|
||||
(byte) flip::dstIdx#3 zp byte:10 776.0
|
||||
(byte) flip::dstIdx#5 zp byte:10 202.0
|
||||
(byte) flip::dstIdx#1 reg byte y 701.0
|
||||
(byte) flip::dstIdx#2 reg byte y 67.33333333333333
|
||||
(byte) flip::dstIdx#3 reg byte y 776.0
|
||||
(byte) flip::dstIdx#5 reg byte y 202.0
|
||||
(byte) flip::i
|
||||
(byte) flip::i#1 zp byte:12 151.5
|
||||
(byte) flip::i#2 zp byte:12 134.66666666666666
|
||||
(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 byte:8 151.5
|
||||
(byte) flip::r#2 zp byte:8 22.444444444444443
|
||||
(byte) flip::r#1 zp byte:4 151.5
|
||||
(byte) flip::r#2 zp byte:4 22.444444444444443
|
||||
(byte) flip::srcIdx
|
||||
(byte) flip::srcIdx#1 zp byte:9 300.42857142857144
|
||||
(byte) flip::srcIdx#2 zp byte:9 1034.6666666666667
|
||||
(byte) flip::srcIdx#3 zp byte:9 202.0
|
||||
(byte) flip::srcIdx#1 reg byte x 300.42857142857144
|
||||
(byte) flip::srcIdx#2 reg byte x 1034.6666666666667
|
||||
(byte) flip::srcIdx#3 reg byte x 202.0
|
||||
(void()) main()
|
||||
(byte~) main::$1 zp byte:14 2002.0
|
||||
(byte~) main::$3 zp byte:15 2002.0
|
||||
(byte~) main::$1 reg byte a 2002.0
|
||||
(byte~) main::$3 reg byte a 2002.0
|
||||
(label) main::@10
|
||||
(label) main::@11
|
||||
(label) main::@3
|
||||
@ -41,37 +41,46 @@
|
||||
(label) main::@7
|
||||
(label) main::@return
|
||||
(byte) main::c
|
||||
(byte) main::c#1 zp byte:2 151.5
|
||||
(byte) main::c#2 zp byte:2 40.4
|
||||
(byte) main::c#1 reg byte x 151.5
|
||||
(byte) main::c#2 reg byte x 40.4
|
||||
(void()) plot()
|
||||
(byte~) plot::$3 zp byte:16 2002.0
|
||||
(byte~) plot::$3 reg byte a 2002.0
|
||||
(label) plot::@1
|
||||
(label) plot::@2
|
||||
(label) plot::@3
|
||||
(label) plot::@return
|
||||
(byte) plot::i
|
||||
(byte) plot::i#1 zp byte:6 350.5
|
||||
(byte) plot::i#2 zp byte:6 1034.6666666666667
|
||||
(byte) plot::i#3 zp byte:6 202.0
|
||||
(byte) plot::i#1 reg byte x 350.5
|
||||
(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 ptr byte:3 67.33333333333333
|
||||
(byte*) plot::line#2 zp ptr byte:3 171.85714285714283
|
||||
(byte*) plot::line#1 zp ptr byte:2 67.33333333333333
|
||||
(byte*) plot::line#2 zp ptr byte:2 171.85714285714283
|
||||
(byte) plot::x
|
||||
(byte) plot::x#1 zp byte:7 1501.5
|
||||
(byte) plot::x#2 zp byte:7 750.75
|
||||
(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 byte:5 151.5
|
||||
(byte) plot::y#2 zp byte:5 25.25
|
||||
(byte) plot::y#1 zp byte:4 151.5
|
||||
(byte) plot::y#2 zp byte:4 25.25
|
||||
(void()) prepare()
|
||||
(label) prepare::@1
|
||||
(label) prepare::@return
|
||||
(byte) prepare::i
|
||||
(byte) prepare::i#1 zp byte:13 16.5
|
||||
(byte) prepare::i#2 zp byte:13 22.0
|
||||
(byte) prepare::i#1 reg byte x 16.5
|
||||
(byte) prepare::i#2 reg byte x 22.0
|
||||
|
||||
zp byte:2 [ main::c#2 main::c#1 plot::y#2 plot::y#1 flip::r#2 flip::r#1 flip::i#2 flip::i#1 prepare::i#2 prepare::i#1 ]
|
||||
zp ptr byte:3 [ plot::line#2 plot::line#1 ]
|
||||
zp byte:6 [ plot::i#2 plot::i#3 plot::i#1 flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 main::$1 main::$3 flip::$4 ]
|
||||
zp byte:7 [ plot::x#2 plot::x#1 flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ]
|
||||
zp byte:11 [ flip::c#2 flip::c#1 plot::$3 ]
|
||||
zp byte:17 [ flip::$0 ]
|
||||
reg byte x [ main::c#2 main::c#1 ]
|
||||
zp ptr byte:2 [ plot::line#2 plot::line#1 ]
|
||||
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 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 ]
|
||||
reg byte a [ main::$3 ]
|
||||
reg byte a [ plot::$3 ]
|
||||
reg byte a [ flip::$0 ]
|
||||
reg byte a [ flip::$4 ]
|
||||
|
@ -1,26 +1,22 @@
|
||||
BBEGIN:
|
||||
B1_from_BBEGIN:
|
||||
lda #0
|
||||
sta 3
|
||||
lda #10
|
||||
sta 2
|
||||
ldx #10
|
||||
B1_from_B3:
|
||||
B1:
|
||||
lda 2
|
||||
cmp #5
|
||||
cpx #5
|
||||
beq !+
|
||||
bcs B2
|
||||
!:
|
||||
B3_from_B1:
|
||||
B3:
|
||||
dec 2
|
||||
lda 2
|
||||
dex
|
||||
cpx #0
|
||||
bne B1_from_B3
|
||||
BEND:
|
||||
B2:
|
||||
lda 3
|
||||
stx 255
|
||||
clc
|
||||
adc 2
|
||||
sta 3
|
||||
adc 255
|
||||
B3_from_B2:
|
||||
jmp B3
|
||||
|
@ -429,22 +429,26 @@ B3_from_B2:
|
||||
//SEG18 [2] phi (byte) s#4 = (byte) s#1 -- register_copy
|
||||
jmp B3
|
||||
|
||||
Uplifting max weight 49.5 live range equivalence class zp byte:3 [ s#2 s#4 s#1 ]
|
||||
Uplift to reg byte a resulted in clobber.
|
||||
Uplift to reg byte x succesfull.
|
||||
Uplift to reg byte y succesfull.
|
||||
REGISTER UPLIFTING
|
||||
(byte) i
|
||||
(byte) i#1 zp byte:2 16.5
|
||||
(byte) i#2 zp byte:2 11.0
|
||||
(byte) s
|
||||
(byte) s#1 zp byte:3 22.0
|
||||
(byte) s#2 zp byte:3 16.5
|
||||
(byte) s#4 zp byte:3 11.0
|
||||
|
||||
zp byte:2 [ i#2 i#1 ]
|
||||
zp byte:3 [ s#2 s#4 s#1 ]
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [] 49.5: zp byte:3 [ s#2 s#4 s#1 ] 27.5: zp byte:2 [ i#2 i#1 ]
|
||||
|
||||
Uplift attempt [] 44 allocation: zp byte:3 [ s#2 s#4 s#1 ] zp byte:2 [ i#2 i#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ s#2 s#4 s#1 ] zp byte:2 [ i#2 i#1 ]
|
||||
Uplift attempt [] 40 allocation: reg byte x [ s#2 s#4 s#1 ] zp byte:2 [ i#2 i#1 ]
|
||||
Uplift attempt [] 40 allocation: reg byte y [ s#2 s#4 s#1 ] zp byte:2 [ i#2 i#1 ]
|
||||
Uplift attempt [] clobber allocation: zp byte:3 [ s#2 s#4 s#1 ] reg byte a [ i#2 i#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ s#2 s#4 s#1 ] reg byte a [ i#2 i#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ s#2 s#4 s#1 ] reg byte a [ i#2 i#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ s#2 s#4 s#1 ] reg byte a [ i#2 i#1 ]
|
||||
Uplift attempt [] 38 allocation: zp byte:3 [ s#2 s#4 s#1 ] reg byte x [ i#2 i#1 ]
|
||||
Uplift attempt [] 35 allocation: reg byte a [ s#2 s#4 s#1 ] reg byte x [ i#2 i#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ s#2 s#4 s#1 ] reg byte x [ i#2 i#1 ]
|
||||
Uplift attempt [] 37 allocation: reg byte y [ s#2 s#4 s#1 ] reg byte x [ i#2 i#1 ]
|
||||
Uplift attempt [] 38 allocation: zp byte:3 [ s#2 s#4 s#1 ] reg byte y [ i#2 i#1 ]
|
||||
Uplift attempt [] 35 allocation: reg byte a [ s#2 s#4 s#1 ] reg byte y [ i#2 i#1 ]
|
||||
Uplift attempt [] 37 allocation: reg byte x [ s#2 s#4 s#1 ] reg byte y [ i#2 i#1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ s#2 s#4 s#1 ] reg byte y [ i#2 i#1 ]
|
||||
Uplifting [] best 35 combination reg byte a [ s#2 s#4 s#1 ] reg byte x [ i#2 i#1 ]
|
||||
Removing instruction jmp B1
|
||||
Removing instruction jmp B3
|
||||
Removing instruction jmp BEND
|
||||
@ -454,12 +458,10 @@ ASSEMBLER
|
||||
BBEGIN:
|
||||
//SEG1 [0] phi from @BEGIN to @1
|
||||
B1_from_BBEGIN:
|
||||
//SEG2 [0] phi (byte) s#2 = (byte) 0 -- zpby1=coby1
|
||||
//SEG2 [0] phi (byte) s#2 = (byte) 0 -- aby=coby1
|
||||
lda #0
|
||||
sta 3
|
||||
//SEG3 [0] phi (byte) i#2 = (byte) 10 -- zpby1=coby1
|
||||
lda #10
|
||||
sta 2
|
||||
//SEG3 [0] phi (byte) i#2 = (byte) 10 -- xby=coby1
|
||||
ldx #10
|
||||
jmp B1
|
||||
//SEG4 [0] phi from @3 to @1
|
||||
B1_from_B3:
|
||||
@ -467,9 +469,8 @@ B1_from_B3:
|
||||
//SEG6 [0] phi (byte) i#2 = (byte) i#1 -- register_copy
|
||||
//SEG7 @1
|
||||
B1:
|
||||
//SEG8 [1] if((byte) i#2>(byte) 5) goto @2 [ i#2 s#2 ] -- zpby1_gt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #5
|
||||
//SEG8 [1] if((byte) i#2>(byte) 5) goto @2 [ i#2 s#2 ] -- xby_gt_coby1_then_la1
|
||||
cpx #5
|
||||
beq !+
|
||||
bcs B2
|
||||
!:
|
||||
@ -478,20 +479,19 @@ B3_from_B1:
|
||||
//SEG10 [2] phi (byte) s#4 = (byte) s#2 -- register_copy
|
||||
//SEG11 @3
|
||||
B3:
|
||||
//SEG12 [3] (byte) i#1 ← -- (byte) i#2 [ i#1 s#4 ] -- zpby1=_dec_zpby1
|
||||
dec 2
|
||||
//SEG13 [4] if((byte) i#1>(byte) 0) goto @1 [ i#1 s#4 ] -- zpby1_gt_0_then_la1
|
||||
lda 2
|
||||
//SEG12 [3] (byte) i#1 ← -- (byte) i#2 [ i#1 s#4 ] -- xby=_dec_xby
|
||||
dex
|
||||
//SEG13 [4] if((byte) i#1>(byte) 0) goto @1 [ i#1 s#4 ] -- xby_gt_0_then_la1
|
||||
cpx #0
|
||||
bne B1_from_B3
|
||||
//SEG14 @END
|
||||
BEND:
|
||||
//SEG15 @2
|
||||
B2:
|
||||
//SEG16 [5] (byte) s#1 ← (byte) s#2 + (byte) i#2 [ i#2 s#1 ] -- zpby1=zpby1_plus_zpby2
|
||||
lda 3
|
||||
//SEG16 [5] (byte) s#1 ← (byte) s#2 + (byte) i#2 [ i#2 s#1 ] -- aby=aby_plus_xby
|
||||
stx 255
|
||||
clc
|
||||
adc 2
|
||||
sta 3
|
||||
adc 255
|
||||
//SEG17 [2] phi from @2 to @3
|
||||
B3_from_B2:
|
||||
//SEG18 [2] phi (byte) s#4 = (byte) s#1 -- register_copy
|
||||
@ -504,21 +504,18 @@ ASSEMBLER
|
||||
BBEGIN:
|
||||
//SEG1 [0] phi from @BEGIN to @1
|
||||
B1_from_BBEGIN:
|
||||
//SEG2 [0] phi (byte) s#2 = (byte) 0 -- zpby1=coby1
|
||||
//SEG2 [0] phi (byte) s#2 = (byte) 0 -- aby=coby1
|
||||
lda #0
|
||||
sta 3
|
||||
//SEG3 [0] phi (byte) i#2 = (byte) 10 -- zpby1=coby1
|
||||
lda #10
|
||||
sta 2
|
||||
//SEG3 [0] phi (byte) i#2 = (byte) 10 -- xby=coby1
|
||||
ldx #10
|
||||
//SEG4 [0] phi from @3 to @1
|
||||
B1_from_B3:
|
||||
//SEG5 [0] phi (byte) s#2 = (byte) s#4 -- register_copy
|
||||
//SEG6 [0] phi (byte) i#2 = (byte) i#1 -- register_copy
|
||||
//SEG7 @1
|
||||
B1:
|
||||
//SEG8 [1] if((byte) i#2>(byte) 5) goto @2 [ i#2 s#2 ] -- zpby1_gt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #5
|
||||
//SEG8 [1] if((byte) i#2>(byte) 5) goto @2 [ i#2 s#2 ] -- xby_gt_coby1_then_la1
|
||||
cpx #5
|
||||
beq !+
|
||||
bcs B2
|
||||
!:
|
||||
@ -527,20 +524,19 @@ B3_from_B1:
|
||||
//SEG10 [2] phi (byte) s#4 = (byte) s#2 -- register_copy
|
||||
//SEG11 @3
|
||||
B3:
|
||||
//SEG12 [3] (byte) i#1 ← -- (byte) i#2 [ i#1 s#4 ] -- zpby1=_dec_zpby1
|
||||
dec 2
|
||||
//SEG13 [4] if((byte) i#1>(byte) 0) goto @1 [ i#1 s#4 ] -- zpby1_gt_0_then_la1
|
||||
lda 2
|
||||
//SEG12 [3] (byte) i#1 ← -- (byte) i#2 [ i#1 s#4 ] -- xby=_dec_xby
|
||||
dex
|
||||
//SEG13 [4] if((byte) i#1>(byte) 0) goto @1 [ i#1 s#4 ] -- xby_gt_0_then_la1
|
||||
cpx #0
|
||||
bne B1_from_B3
|
||||
//SEG14 @END
|
||||
BEND:
|
||||
//SEG15 @2
|
||||
B2:
|
||||
//SEG16 [5] (byte) s#1 ← (byte) s#2 + (byte) i#2 [ i#2 s#1 ] -- zpby1=zpby1_plus_zpby2
|
||||
lda 3
|
||||
//SEG16 [5] (byte) s#1 ← (byte) s#2 + (byte) i#2 [ i#2 s#1 ] -- aby=aby_plus_xby
|
||||
stx 255
|
||||
clc
|
||||
adc 2
|
||||
sta 3
|
||||
adc 255
|
||||
//SEG17 [2] phi from @2 to @3
|
||||
B3_from_B2:
|
||||
//SEG18 [2] phi (byte) s#4 = (byte) s#1 -- register_copy
|
||||
@ -553,36 +549,33 @@ FINAL SYMBOL TABLE
|
||||
(label) @BEGIN
|
||||
(label) @END
|
||||
(byte) i
|
||||
(byte) i#1 zp byte:2 16.5
|
||||
(byte) i#2 zp byte:2 11.0
|
||||
(byte) i#1 reg byte x 16.5
|
||||
(byte) i#2 reg byte x 11.0
|
||||
(byte) s
|
||||
(byte) s#1 zp byte:3 22.0
|
||||
(byte) s#2 zp byte:3 16.5
|
||||
(byte) s#4 zp byte:3 11.0
|
||||
(byte) s#1 reg byte a 22.0
|
||||
(byte) s#2 reg byte a 16.5
|
||||
(byte) s#4 reg byte a 11.0
|
||||
|
||||
zp byte:2 [ i#2 i#1 ]
|
||||
zp byte:3 [ s#2 s#4 s#1 ]
|
||||
reg byte x [ i#2 i#1 ]
|
||||
reg byte a [ s#2 s#4 s#1 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 @BEGIN
|
||||
BBEGIN:
|
||||
//SEG1 [0] phi from @BEGIN to @1
|
||||
B1_from_BBEGIN:
|
||||
//SEG2 [0] phi (byte) s#2 = (byte) 0 -- zpby1=coby1
|
||||
//SEG2 [0] phi (byte) s#2 = (byte) 0 -- aby=coby1
|
||||
lda #0
|
||||
sta 3
|
||||
//SEG3 [0] phi (byte) i#2 = (byte) 10 -- zpby1=coby1
|
||||
lda #10
|
||||
sta 2
|
||||
//SEG3 [0] phi (byte) i#2 = (byte) 10 -- xby=coby1
|
||||
ldx #10
|
||||
//SEG4 [0] phi from @3 to @1
|
||||
B1_from_B3:
|
||||
//SEG5 [0] phi (byte) s#2 = (byte) s#4 -- register_copy
|
||||
//SEG6 [0] phi (byte) i#2 = (byte) i#1 -- register_copy
|
||||
//SEG7 @1
|
||||
B1:
|
||||
//SEG8 [1] if((byte) i#2>(byte) 5) goto @2 [ i#2 s#2 ] -- zpby1_gt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #5
|
||||
//SEG8 [1] if((byte) i#2>(byte) 5) goto @2 [ i#2 s#2 ] -- xby_gt_coby1_then_la1
|
||||
cpx #5
|
||||
beq !+
|
||||
bcs B2
|
||||
!:
|
||||
@ -591,20 +584,19 @@ B3_from_B1:
|
||||
//SEG10 [2] phi (byte) s#4 = (byte) s#2 -- register_copy
|
||||
//SEG11 @3
|
||||
B3:
|
||||
//SEG12 [3] (byte) i#1 ← -- (byte) i#2 [ i#1 s#4 ] -- zpby1=_dec_zpby1
|
||||
dec 2
|
||||
//SEG13 [4] if((byte) i#1>(byte) 0) goto @1 [ i#1 s#4 ] -- zpby1_gt_0_then_la1
|
||||
lda 2
|
||||
//SEG12 [3] (byte) i#1 ← -- (byte) i#2 [ i#1 s#4 ] -- xby=_dec_xby
|
||||
dex
|
||||
//SEG13 [4] if((byte) i#1>(byte) 0) goto @1 [ i#1 s#4 ] -- xby_gt_0_then_la1
|
||||
cpx #0
|
||||
bne B1_from_B3
|
||||
//SEG14 @END
|
||||
BEND:
|
||||
//SEG15 @2
|
||||
B2:
|
||||
//SEG16 [5] (byte) s#1 ← (byte) s#2 + (byte) i#2 [ i#2 s#1 ] -- zpby1=zpby1_plus_zpby2
|
||||
lda 3
|
||||
//SEG16 [5] (byte) s#1 ← (byte) s#2 + (byte) i#2 [ i#2 s#1 ] -- aby=aby_plus_xby
|
||||
stx 255
|
||||
clc
|
||||
adc 2
|
||||
sta 3
|
||||
adc 255
|
||||
//SEG17 [2] phi from @2 to @3
|
||||
B3_from_B2:
|
||||
//SEG18 [2] phi (byte) s#4 = (byte) s#1 -- register_copy
|
||||
|
@ -4,12 +4,12 @@
|
||||
(label) @BEGIN
|
||||
(label) @END
|
||||
(byte) i
|
||||
(byte) i#1 zp byte:2 16.5
|
||||
(byte) i#2 zp byte:2 11.0
|
||||
(byte) i#1 reg byte x 16.5
|
||||
(byte) i#2 reg byte x 11.0
|
||||
(byte) s
|
||||
(byte) s#1 zp byte:3 22.0
|
||||
(byte) s#2 zp byte:3 16.5
|
||||
(byte) s#4 zp byte:3 11.0
|
||||
(byte) s#1 reg byte a 22.0
|
||||
(byte) s#2 reg byte a 16.5
|
||||
(byte) s#4 reg byte a 11.0
|
||||
|
||||
zp byte:2 [ i#2 i#1 ]
|
||||
zp byte:3 [ s#2 s#4 s#1 ]
|
||||
reg byte x [ i#2 i#1 ]
|
||||
reg byte a [ s#2 s#4 s#1 ]
|
||||
|
@ -3,27 +3,24 @@ BBEGIN:
|
||||
BEND:
|
||||
main:
|
||||
main__B1_from_main:
|
||||
lda #100
|
||||
sta 2
|
||||
ldx #100
|
||||
main__B1_from_B3:
|
||||
main__B1:
|
||||
jsr nest
|
||||
main__B3:
|
||||
dec 2
|
||||
lda 2
|
||||
dex
|
||||
cpx #0
|
||||
bne main__B1_from_B3
|
||||
main__Breturn:
|
||||
rts
|
||||
nest:
|
||||
nest__B1_from_nest:
|
||||
lda #100
|
||||
sta 3
|
||||
ldy #100
|
||||
nest__B1_from_B1:
|
||||
nest__B1:
|
||||
lda 3
|
||||
sta 1024
|
||||
dec 3
|
||||
lda 3
|
||||
sty 1024
|
||||
dey
|
||||
cpy #0
|
||||
bne nest__B1_from_B1
|
||||
nest__Breturn:
|
||||
rts
|
||||
|
@ -793,24 +793,23 @@ nest__Breturn:
|
||||
//SEG25 [10] return [ main::i#2 ]
|
||||
rts
|
||||
|
||||
Uplifting max weight 303.0 live range equivalence class zp byte:3 [ nest::j#2 nest::j#1 ]
|
||||
Uplift to reg byte a succesfull.
|
||||
Uplift to reg byte x succesfull.
|
||||
Uplift to reg byte y succesfull.
|
||||
REGISTER UPLIFTING
|
||||
(byte*) SCREEN
|
||||
(void()) main()
|
||||
(byte) main::i
|
||||
(byte) main::i#1 zp byte:2 16.5
|
||||
(byte) main::i#2 zp byte:2 3.142857142857143
|
||||
(void()) nest()
|
||||
(byte) nest::j
|
||||
(byte) nest::j#1 zp byte:3 151.5
|
||||
(byte) nest::j#2 zp byte:3 151.5
|
||||
|
||||
zp byte:2 [ main::i#2 main::i#1 ]
|
||||
zp byte:3 [ nest::j#2 nest::j#1 ]
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 19.64: zp byte:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope [nest] 303: zp byte:3 [ nest::j#2 nest::j#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplift attempt [main] 57 allocation: zp byte:2 [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte a [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 54 allocation: reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 54 allocation: reg byte y [ main::i#2 main::i#1 ]
|
||||
Uplifting [main] best 54 combination reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [nest] 54 allocation: zp byte:3 [ nest::j#2 nest::j#1 ]
|
||||
Uplift attempt [nest] 51 allocation: reg byte a [ nest::j#2 nest::j#1 ]
|
||||
Uplift attempt [nest] clobber allocation: reg byte x [ nest::j#2 nest::j#1 ]
|
||||
Uplift attempt [nest] 49 allocation: reg byte y [ nest::j#2 nest::j#1 ]
|
||||
Uplifting [nest] best 49 combination reg byte y [ nest::j#2 nest::j#1 ]
|
||||
Uplift attempt [] 49 allocation:
|
||||
Uplifting [] best 49 combination
|
||||
Removing instruction jmp BEND
|
||||
Removing instruction jmp main__B1
|
||||
Removing instruction jmp main__B3
|
||||
@ -829,9 +828,8 @@ BEND:
|
||||
main:
|
||||
//SEG4 [1] phi from main to main::@1
|
||||
main__B1_from_main:
|
||||
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 2
|
||||
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
|
||||
ldx #100
|
||||
jmp main__B1
|
||||
//SEG6 [1] phi from main::@3 to main::@1
|
||||
main__B1_from_B3:
|
||||
@ -842,10 +840,10 @@ main__B1:
|
||||
jsr nest
|
||||
//SEG10 main::@3
|
||||
main__B3:
|
||||
//SEG11 [3] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- zpby1=_dec_zpby1
|
||||
dec 2
|
||||
//SEG12 [4] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 2
|
||||
//SEG11 [3] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- xby=_dec_xby
|
||||
dex
|
||||
//SEG12 [4] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- xby_gt_0_then_la1
|
||||
cpx #0
|
||||
bne main__B1_from_B3
|
||||
//SEG13 main::@return
|
||||
main__Breturn:
|
||||
@ -855,22 +853,20 @@ main__Breturn:
|
||||
nest:
|
||||
//SEG16 [6] phi from nest to nest::@1
|
||||
nest__B1_from_nest:
|
||||
//SEG17 [6] phi (byte) nest::j#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 3
|
||||
//SEG17 [6] phi (byte) nest::j#2 = (byte) 100 -- yby=coby1
|
||||
ldy #100
|
||||
jmp nest__B1
|
||||
//SEG18 [6] phi from nest::@1 to nest::@1
|
||||
nest__B1_from_B1:
|
||||
//SEG19 [6] phi (byte) nest::j#2 = (byte) nest::j#1 -- register_copy
|
||||
//SEG20 nest::@1
|
||||
nest__B1:
|
||||
//SEG21 [7] *((word) 1024) ← (byte) nest::j#2 [ main::i#2 nest::j#2 ] -- _star_cowo1=zpby1
|
||||
lda 3
|
||||
sta 1024
|
||||
//SEG22 [8] (byte) nest::j#1 ← -- (byte) nest::j#2 [ main::i#2 nest::j#1 ] -- zpby1=_dec_zpby1
|
||||
dec 3
|
||||
//SEG23 [9] if((byte) nest::j#1>(byte) 0) goto nest::@1 [ main::i#2 nest::j#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 3
|
||||
//SEG21 [7] *((word) 1024) ← (byte) nest::j#2 [ main::i#2 nest::j#2 ] -- _star_cowo1=yby
|
||||
sty 1024
|
||||
//SEG22 [8] (byte) nest::j#1 ← -- (byte) nest::j#2 [ main::i#2 nest::j#1 ] -- yby=_dec_yby
|
||||
dey
|
||||
//SEG23 [9] if((byte) nest::j#1>(byte) 0) goto nest::@1 [ main::i#2 nest::j#1 ] -- yby_gt_0_then_la1
|
||||
cpy #0
|
||||
bne nest__B1_from_B1
|
||||
//SEG24 nest::@return
|
||||
nest__Breturn:
|
||||
@ -891,9 +887,8 @@ BEND:
|
||||
main:
|
||||
//SEG4 [1] phi from main to main::@1
|
||||
main__B1_from_main:
|
||||
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 2
|
||||
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
|
||||
ldx #100
|
||||
//SEG6 [1] phi from main::@3 to main::@1
|
||||
main__B1_from_B3:
|
||||
//SEG7 [1] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
|
||||
@ -903,10 +898,10 @@ main__B1:
|
||||
jsr nest
|
||||
//SEG10 main::@3
|
||||
main__B3:
|
||||
//SEG11 [3] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- zpby1=_dec_zpby1
|
||||
dec 2
|
||||
//SEG12 [4] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 2
|
||||
//SEG11 [3] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- xby=_dec_xby
|
||||
dex
|
||||
//SEG12 [4] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- xby_gt_0_then_la1
|
||||
cpx #0
|
||||
bne main__B1_from_B3
|
||||
//SEG13 main::@return
|
||||
main__Breturn:
|
||||
@ -916,21 +911,19 @@ main__Breturn:
|
||||
nest:
|
||||
//SEG16 [6] phi from nest to nest::@1
|
||||
nest__B1_from_nest:
|
||||
//SEG17 [6] phi (byte) nest::j#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 3
|
||||
//SEG17 [6] phi (byte) nest::j#2 = (byte) 100 -- yby=coby1
|
||||
ldy #100
|
||||
//SEG18 [6] phi from nest::@1 to nest::@1
|
||||
nest__B1_from_B1:
|
||||
//SEG19 [6] phi (byte) nest::j#2 = (byte) nest::j#1 -- register_copy
|
||||
//SEG20 nest::@1
|
||||
nest__B1:
|
||||
//SEG21 [7] *((word) 1024) ← (byte) nest::j#2 [ main::i#2 nest::j#2 ] -- _star_cowo1=zpby1
|
||||
lda 3
|
||||
sta 1024
|
||||
//SEG22 [8] (byte) nest::j#1 ← -- (byte) nest::j#2 [ main::i#2 nest::j#1 ] -- zpby1=_dec_zpby1
|
||||
dec 3
|
||||
//SEG23 [9] if((byte) nest::j#1>(byte) 0) goto nest::@1 [ main::i#2 nest::j#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 3
|
||||
//SEG21 [7] *((word) 1024) ← (byte) nest::j#2 [ main::i#2 nest::j#2 ] -- _star_cowo1=yby
|
||||
sty 1024
|
||||
//SEG22 [8] (byte) nest::j#1 ← -- (byte) nest::j#2 [ main::i#2 nest::j#1 ] -- yby=_dec_yby
|
||||
dey
|
||||
//SEG23 [9] if((byte) nest::j#1>(byte) 0) goto nest::@1 [ main::i#2 nest::j#1 ] -- yby_gt_0_then_la1
|
||||
cpy #0
|
||||
bne nest__B1_from_B1
|
||||
//SEG24 nest::@return
|
||||
nest__Breturn:
|
||||
@ -946,17 +939,17 @@ FINAL SYMBOL TABLE
|
||||
(label) main::@3
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 zp byte:2 16.5
|
||||
(byte) main::i#2 zp byte:2 3.142857142857143
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 3.142857142857143
|
||||
(void()) nest()
|
||||
(label) nest::@1
|
||||
(label) nest::@return
|
||||
(byte) nest::j
|
||||
(byte) nest::j#1 zp byte:3 151.5
|
||||
(byte) nest::j#2 zp byte:3 151.5
|
||||
(byte) nest::j#1 reg byte y 151.5
|
||||
(byte) nest::j#2 reg byte y 151.5
|
||||
|
||||
zp byte:2 [ main::i#2 main::i#1 ]
|
||||
zp byte:3 [ nest::j#2 nest::j#1 ]
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte y [ nest::j#2 nest::j#1 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 @BEGIN
|
||||
@ -969,9 +962,8 @@ BEND:
|
||||
main:
|
||||
//SEG4 [1] phi from main to main::@1
|
||||
main__B1_from_main:
|
||||
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 2
|
||||
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
|
||||
ldx #100
|
||||
//SEG6 [1] phi from main::@3 to main::@1
|
||||
main__B1_from_B3:
|
||||
//SEG7 [1] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
|
||||
@ -981,10 +973,10 @@ main__B1:
|
||||
jsr nest
|
||||
//SEG10 main::@3
|
||||
main__B3:
|
||||
//SEG11 [3] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- zpby1=_dec_zpby1
|
||||
dec 2
|
||||
//SEG12 [4] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 2
|
||||
//SEG11 [3] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- xby=_dec_xby
|
||||
dex
|
||||
//SEG12 [4] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- xby_gt_0_then_la1
|
||||
cpx #0
|
||||
bne main__B1_from_B3
|
||||
//SEG13 main::@return
|
||||
main__Breturn:
|
||||
@ -994,21 +986,19 @@ main__Breturn:
|
||||
nest:
|
||||
//SEG16 [6] phi from nest to nest::@1
|
||||
nest__B1_from_nest:
|
||||
//SEG17 [6] phi (byte) nest::j#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 3
|
||||
//SEG17 [6] phi (byte) nest::j#2 = (byte) 100 -- yby=coby1
|
||||
ldy #100
|
||||
//SEG18 [6] phi from nest::@1 to nest::@1
|
||||
nest__B1_from_B1:
|
||||
//SEG19 [6] phi (byte) nest::j#2 = (byte) nest::j#1 -- register_copy
|
||||
//SEG20 nest::@1
|
||||
nest__B1:
|
||||
//SEG21 [7] *((word) 1024) ← (byte) nest::j#2 [ main::i#2 nest::j#2 ] -- _star_cowo1=zpby1
|
||||
lda 3
|
||||
sta 1024
|
||||
//SEG22 [8] (byte) nest::j#1 ← -- (byte) nest::j#2 [ main::i#2 nest::j#1 ] -- zpby1=_dec_zpby1
|
||||
dec 3
|
||||
//SEG23 [9] if((byte) nest::j#1>(byte) 0) goto nest::@1 [ main::i#2 nest::j#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 3
|
||||
//SEG21 [7] *((word) 1024) ← (byte) nest::j#2 [ main::i#2 nest::j#2 ] -- _star_cowo1=yby
|
||||
sty 1024
|
||||
//SEG22 [8] (byte) nest::j#1 ← -- (byte) nest::j#2 [ main::i#2 nest::j#1 ] -- yby=_dec_yby
|
||||
dey
|
||||
//SEG23 [9] if((byte) nest::j#1>(byte) 0) goto nest::@1 [ main::i#2 nest::j#1 ] -- yby_gt_0_then_la1
|
||||
cpy #0
|
||||
bne nest__B1_from_B1
|
||||
//SEG24 nest::@return
|
||||
nest__Breturn:
|
||||
|
@ -6,14 +6,14 @@
|
||||
(label) main::@3
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 zp byte:2 16.5
|
||||
(byte) main::i#2 zp byte:2 3.142857142857143
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 3.142857142857143
|
||||
(void()) nest()
|
||||
(label) nest::@1
|
||||
(label) nest::@return
|
||||
(byte) nest::j
|
||||
(byte) nest::j#1 zp byte:3 151.5
|
||||
(byte) nest::j#2 zp byte:3 151.5
|
||||
(byte) nest::j#1 reg byte y 151.5
|
||||
(byte) nest::j#2 reg byte y 151.5
|
||||
|
||||
zp byte:2 [ main::i#2 main::i#1 ]
|
||||
zp byte:3 [ nest::j#2 nest::j#1 ]
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte y [ nest::j#2 nest::j#1 ]
|
||||
|
@ -3,67 +3,64 @@ BBEGIN:
|
||||
BEND:
|
||||
main:
|
||||
main__B1_from_main:
|
||||
lda #100
|
||||
sta 2
|
||||
ldx #100
|
||||
main__B1_from_B3:
|
||||
main__B1:
|
||||
main__B2_from_B1:
|
||||
lda #100
|
||||
sta 3
|
||||
ldy #100
|
||||
main__B2_from_B5:
|
||||
main__B2:
|
||||
jsr nest1
|
||||
main__B5:
|
||||
dec 3
|
||||
lda 3
|
||||
dey
|
||||
cpy #0
|
||||
bne main__B2_from_B5
|
||||
main__B3:
|
||||
dec 2
|
||||
lda 2
|
||||
dex
|
||||
cpx #0
|
||||
bne main__B1_from_B3
|
||||
main__Breturn:
|
||||
rts
|
||||
nest1:
|
||||
nest1__B1_from_nest1:
|
||||
lda #100
|
||||
sta 4
|
||||
sta 2
|
||||
nest1__B1_from_B3:
|
||||
nest1__B1:
|
||||
nest1__B2_from_B1:
|
||||
lda #100
|
||||
sta 5
|
||||
sta 3
|
||||
nest1__B2_from_B5:
|
||||
nest1__B2:
|
||||
jsr nest2
|
||||
nest1__B5:
|
||||
dec 5
|
||||
lda 5
|
||||
dec 3
|
||||
lda 3
|
||||
bne nest1__B2_from_B5
|
||||
nest1__B3:
|
||||
dec 4
|
||||
lda 4
|
||||
dec 2
|
||||
lda 2
|
||||
bne nest1__B1_from_B3
|
||||
nest1__Breturn:
|
||||
rts
|
||||
nest2:
|
||||
nest2__B1_from_nest2:
|
||||
lda #100
|
||||
sta 6
|
||||
sta 4
|
||||
nest2__B1_from_B3:
|
||||
nest2__B1:
|
||||
nest2__B2_from_B1:
|
||||
lda #100
|
||||
sta 7
|
||||
nest2__B2_from_B2:
|
||||
nest2__B2:
|
||||
lda 7
|
||||
sta 1024
|
||||
dec 7
|
||||
lda 7
|
||||
sec
|
||||
sbc #1
|
||||
cmp #0
|
||||
bne nest2__B2_from_B2
|
||||
nest2__B3:
|
||||
dec 6
|
||||
lda 6
|
||||
dec 4
|
||||
lda 4
|
||||
bne nest2__B1_from_B3
|
||||
nest2__Breturn:
|
||||
rts
|
||||
|
@ -1989,41 +1989,68 @@ nest2__Breturn:
|
||||
//SEG61 [24] return [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 ]
|
||||
rts
|
||||
|
||||
Uplifting max weight 3000003.0 live range equivalence class zp byte:7 [ nest2::j#2 nest2::j#1 ]
|
||||
Uplift to reg byte a succesfull.
|
||||
Uplift to reg byte x succesfull.
|
||||
Uplift to reg byte y succesfull.
|
||||
REGISTER UPLIFTING
|
||||
(byte*) SCREEN
|
||||
(void()) main()
|
||||
(byte) main::i
|
||||
(byte) main::i#1 zp byte:2 16.5
|
||||
(byte) main::i#2 zp byte:2 1.0476190476190477
|
||||
(byte) main::j
|
||||
(byte) main::j#1 zp byte:3 151.5
|
||||
(byte) main::j#2 zp byte:3 11.222222222222221
|
||||
(void()) nest1()
|
||||
(byte) nest1::i
|
||||
(byte) nest1::i#1 zp byte:4 1501.5
|
||||
(byte) nest1::i#2 zp byte:4 154.0
|
||||
(byte) nest1::j
|
||||
(byte) nest1::j#1 zp byte:5 15001.5
|
||||
(byte) nest1::j#2 zp byte:5 2000.2
|
||||
(void()) nest2()
|
||||
(byte) nest2::i
|
||||
(byte) nest2::i#1 zp byte:6 150001.5
|
||||
(byte) nest2::i#2 zp byte:6 40000.4
|
||||
(byte) nest2::j
|
||||
(byte) nest2::j#1 zp byte:7 1500001.5
|
||||
(byte) nest2::j#2 zp byte:7 1500001.5
|
||||
|
||||
zp byte:2 [ main::i#2 main::i#1 ]
|
||||
zp byte:3 [ main::j#2 main::j#1 ]
|
||||
zp byte:4 [ nest1::i#2 nest1::i#1 ]
|
||||
zp byte:5 [ nest1::j#2 nest1::j#1 ]
|
||||
zp byte:6 [ nest2::i#2 nest2::i#1 ]
|
||||
zp byte:7 [ nest2::j#2 nest2::j#1 ]
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 162.72: zp byte:3 [ main::j#2 main::j#1 ] 17.55: zp byte:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope [nest1] 17,001.7: zp byte:5 [ nest1::j#2 nest1::j#1 ] 1,655.5: zp byte:4 [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift Scope [nest2] 3,000,003: zp byte:7 [ nest2::j#2 nest2::j#1 ] 190,001.9: zp byte:6 [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplift attempt [main] 140 allocation: zp byte:3 [ main::j#2 main::j#1 ] zp byte:2 [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte a [ main::j#2 main::j#1 ] zp byte:2 [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 137 allocation: reg byte x [ main::j#2 main::j#1 ] zp byte:2 [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 137 allocation: reg byte y [ main::j#2 main::j#1 ] zp byte:2 [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: zp byte:3 [ main::j#2 main::j#1 ] reg byte a [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte a [ main::j#2 main::j#1 ] reg byte a [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte x [ main::j#2 main::j#1 ] reg byte a [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte y [ main::j#2 main::j#1 ] reg byte a [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 137 allocation: zp byte:3 [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte a [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte x [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 134 allocation: reg byte y [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 137 allocation: zp byte:3 [ main::j#2 main::j#1 ] reg byte y [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte a [ main::j#2 main::j#1 ] reg byte y [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 134 allocation: reg byte x [ main::j#2 main::j#1 ] reg byte y [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte y [ main::j#2 main::j#1 ] reg byte y [ main::i#2 main::i#1 ]
|
||||
Uplifting [main] best 134 combination reg byte y [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [nest1] 134 allocation: zp byte:5 [ nest1::j#2 nest1::j#1 ] zp byte:4 [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: reg byte a [ nest1::j#2 nest1::j#1 ] zp byte:4 [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: reg byte x [ nest1::j#2 nest1::j#1 ] zp byte:4 [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: reg byte y [ nest1::j#2 nest1::j#1 ] zp byte:4 [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: zp byte:5 [ nest1::j#2 nest1::j#1 ] reg byte a [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: reg byte a [ nest1::j#2 nest1::j#1 ] reg byte a [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: reg byte x [ nest1::j#2 nest1::j#1 ] reg byte a [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: reg byte y [ nest1::j#2 nest1::j#1 ] reg byte a [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: zp byte:5 [ nest1::j#2 nest1::j#1 ] reg byte x [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: reg byte a [ nest1::j#2 nest1::j#1 ] reg byte x [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: reg byte x [ nest1::j#2 nest1::j#1 ] reg byte x [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: reg byte y [ nest1::j#2 nest1::j#1 ] reg byte x [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: zp byte:5 [ nest1::j#2 nest1::j#1 ] reg byte y [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: reg byte a [ nest1::j#2 nest1::j#1 ] reg byte y [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: reg byte x [ nest1::j#2 nest1::j#1 ] reg byte y [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest1] clobber allocation: reg byte y [ nest1::j#2 nest1::j#1 ] reg byte y [ nest1::i#2 nest1::i#1 ]
|
||||
Uplifting [nest1] best 134 combination zp byte:5 [ nest1::j#2 nest1::j#1 ] zp byte:4 [ nest1::i#2 nest1::i#1 ]
|
||||
Uplift attempt [nest2] 134 allocation: zp byte:7 [ nest2::j#2 nest2::j#1 ] zp byte:6 [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] 131 allocation: reg byte a [ nest2::j#2 nest2::j#1 ] zp byte:6 [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: reg byte x [ nest2::j#2 nest2::j#1 ] zp byte:6 [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: reg byte y [ nest2::j#2 nest2::j#1 ] zp byte:6 [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: zp byte:7 [ nest2::j#2 nest2::j#1 ] reg byte a [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: reg byte a [ nest2::j#2 nest2::j#1 ] reg byte a [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: reg byte x [ nest2::j#2 nest2::j#1 ] reg byte a [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: reg byte y [ nest2::j#2 nest2::j#1 ] reg byte a [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: zp byte:7 [ nest2::j#2 nest2::j#1 ] reg byte x [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: reg byte a [ nest2::j#2 nest2::j#1 ] reg byte x [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: reg byte x [ nest2::j#2 nest2::j#1 ] reg byte x [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: reg byte y [ nest2::j#2 nest2::j#1 ] reg byte x [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: zp byte:7 [ nest2::j#2 nest2::j#1 ] reg byte y [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: reg byte a [ nest2::j#2 nest2::j#1 ] reg byte y [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: reg byte x [ nest2::j#2 nest2::j#1 ] reg byte y [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [nest2] clobber allocation: reg byte y [ nest2::j#2 nest2::j#1 ] reg byte y [ nest2::i#2 nest2::i#1 ]
|
||||
Uplifting [nest2] best 131 combination reg byte a [ nest2::j#2 nest2::j#1 ] zp byte:6 [ nest2::i#2 nest2::i#1 ]
|
||||
Uplift attempt [] 131 allocation:
|
||||
Uplifting [] best 131 combination
|
||||
Re-allocated ZP register from zp byte:4 to zp byte:2
|
||||
Re-allocated ZP register from zp byte:5 to zp byte:3
|
||||
Re-allocated ZP register from zp byte:6 to zp byte:4
|
||||
Removing instruction jmp BEND
|
||||
Removing instruction jmp main__B1
|
||||
Removing instruction jmp main__B2
|
||||
@ -2051,9 +2078,8 @@ BEND:
|
||||
main:
|
||||
//SEG4 [1] phi from main to main::@1
|
||||
main__B1_from_main:
|
||||
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 2
|
||||
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
|
||||
ldx #100
|
||||
jmp main__B1
|
||||
//SEG6 [1] phi from main::@3 to main::@1
|
||||
main__B1_from_B3:
|
||||
@ -2062,9 +2088,8 @@ main__B1_from_B3:
|
||||
main__B1:
|
||||
//SEG9 [2] phi from main::@1 to main::@2
|
||||
main__B2_from_B1:
|
||||
//SEG10 [2] phi (byte) main::j#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 3
|
||||
//SEG10 [2] phi (byte) main::j#2 = (byte) 100 -- yby=coby1
|
||||
ldy #100
|
||||
jmp main__B2
|
||||
//SEG11 [2] phi from main::@5 to main::@2
|
||||
main__B2_from_B5:
|
||||
@ -2075,17 +2100,17 @@ main__B2:
|
||||
jsr nest1
|
||||
//SEG15 main::@5
|
||||
main__B5:
|
||||
//SEG16 [4] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 main::i#2 ] -- zpby1=_dec_zpby1
|
||||
dec 3
|
||||
//SEG17 [5] if((byte) main::j#1>(byte) 0) goto main::@2 [ main::j#1 main::i#2 ] -- zpby1_gt_0_then_la1
|
||||
lda 3
|
||||
//SEG16 [4] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 main::i#2 ] -- yby=_dec_yby
|
||||
dey
|
||||
//SEG17 [5] if((byte) main::j#1>(byte) 0) goto main::@2 [ main::j#1 main::i#2 ] -- yby_gt_0_then_la1
|
||||
cpy #0
|
||||
bne main__B2_from_B5
|
||||
//SEG18 main::@3
|
||||
main__B3:
|
||||
//SEG19 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- zpby1=_dec_zpby1
|
||||
dec 2
|
||||
//SEG20 [7] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 2
|
||||
//SEG19 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- xby=_dec_xby
|
||||
dex
|
||||
//SEG20 [7] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- xby_gt_0_then_la1
|
||||
cpx #0
|
||||
bne main__B1_from_B3
|
||||
//SEG21 main::@return
|
||||
main__Breturn:
|
||||
@ -2097,7 +2122,7 @@ nest1:
|
||||
nest1__B1_from_nest1:
|
||||
//SEG25 [9] phi (byte) nest1::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 4
|
||||
sta 2
|
||||
jmp nest1__B1
|
||||
//SEG26 [9] phi from nest1::@3 to nest1::@1
|
||||
nest1__B1_from_B3:
|
||||
@ -2108,7 +2133,7 @@ nest1__B1:
|
||||
nest1__B2_from_B1:
|
||||
//SEG30 [10] phi (byte) nest1::j#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 5
|
||||
sta 3
|
||||
jmp nest1__B2
|
||||
//SEG31 [10] phi from nest1::@5 to nest1::@2
|
||||
nest1__B2_from_B5:
|
||||
@ -2120,16 +2145,16 @@ nest1__B2:
|
||||
//SEG35 nest1::@5
|
||||
nest1__B5:
|
||||
//SEG36 [12] (byte) nest1::j#1 ← -- (byte) nest1::j#2 [ main::j#2 main::i#2 nest1::j#1 nest1::i#2 ] -- zpby1=_dec_zpby1
|
||||
dec 5
|
||||
dec 3
|
||||
//SEG37 [13] if((byte) nest1::j#1>(byte) 0) goto nest1::@2 [ main::j#2 main::i#2 nest1::j#1 nest1::i#2 ] -- zpby1_gt_0_then_la1
|
||||
lda 5
|
||||
lda 3
|
||||
bne nest1__B2_from_B5
|
||||
//SEG38 nest1::@3
|
||||
nest1__B3:
|
||||
//SEG39 [14] (byte) nest1::i#1 ← -- (byte) nest1::i#2 [ main::j#2 main::i#2 nest1::i#1 ] -- zpby1=_dec_zpby1
|
||||
dec 4
|
||||
dec 2
|
||||
//SEG40 [15] if((byte) nest1::i#1>(byte) 0) goto nest1::@1 [ main::j#2 main::i#2 nest1::i#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 4
|
||||
lda 2
|
||||
bne nest1__B1_from_B3
|
||||
//SEG41 nest1::@return
|
||||
nest1__Breturn:
|
||||
@ -2141,7 +2166,7 @@ nest2:
|
||||
nest2__B1_from_nest2:
|
||||
//SEG45 [17] phi (byte) nest2::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 6
|
||||
sta 4
|
||||
jmp nest2__B1
|
||||
//SEG46 [17] phi from nest2::@3 to nest2::@1
|
||||
nest2__B1_from_B3:
|
||||
@ -2150,29 +2175,28 @@ nest2__B1_from_B3:
|
||||
nest2__B1:
|
||||
//SEG49 [18] phi from nest2::@1 to nest2::@2
|
||||
nest2__B2_from_B1:
|
||||
//SEG50 [18] phi (byte) nest2::j#2 = (byte) 100 -- zpby1=coby1
|
||||
//SEG50 [18] phi (byte) nest2::j#2 = (byte) 100 -- aby=coby1
|
||||
lda #100
|
||||
sta 7
|
||||
jmp nest2__B2
|
||||
//SEG51 [18] phi from nest2::@2 to nest2::@2
|
||||
nest2__B2_from_B2:
|
||||
//SEG52 [18] phi (byte) nest2::j#2 = (byte) nest2::j#1 -- register_copy
|
||||
//SEG53 nest2::@2
|
||||
nest2__B2:
|
||||
//SEG54 [19] *((word) 1024) ← (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#2 nest2::i#2 ] -- _star_cowo1=zpby1
|
||||
lda 7
|
||||
//SEG54 [19] *((word) 1024) ← (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#2 nest2::i#2 ] -- _star_cowo1=aby
|
||||
sta 1024
|
||||
//SEG55 [20] (byte) nest2::j#1 ← -- (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- zpby1=_dec_zpby1
|
||||
dec 7
|
||||
//SEG56 [21] if((byte) nest2::j#1>(byte) 0) goto nest2::@2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- zpby1_gt_0_then_la1
|
||||
lda 7
|
||||
//SEG55 [20] (byte) nest2::j#1 ← -- (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- aby=_dec_aby
|
||||
sec
|
||||
sbc #1
|
||||
//SEG56 [21] if((byte) nest2::j#1>(byte) 0) goto nest2::@2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- aby_gt_0_then_la1
|
||||
cmp #0
|
||||
bne nest2__B2_from_B2
|
||||
//SEG57 nest2::@3
|
||||
nest2__B3:
|
||||
//SEG58 [22] (byte) nest2::i#1 ← -- (byte) nest2::i#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::i#1 ] -- zpby1=_dec_zpby1
|
||||
dec 6
|
||||
dec 4
|
||||
//SEG59 [23] if((byte) nest2::i#1>(byte) 0) goto nest2::@1 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::i#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 6
|
||||
lda 4
|
||||
bne nest2__B1_from_B3
|
||||
//SEG60 nest2::@return
|
||||
nest2__Breturn:
|
||||
@ -2197,9 +2221,8 @@ BEND:
|
||||
main:
|
||||
//SEG4 [1] phi from main to main::@1
|
||||
main__B1_from_main:
|
||||
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 2
|
||||
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
|
||||
ldx #100
|
||||
//SEG6 [1] phi from main::@3 to main::@1
|
||||
main__B1_from_B3:
|
||||
//SEG7 [1] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
|
||||
@ -2207,9 +2230,8 @@ main__B1_from_B3:
|
||||
main__B1:
|
||||
//SEG9 [2] phi from main::@1 to main::@2
|
||||
main__B2_from_B1:
|
||||
//SEG10 [2] phi (byte) main::j#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 3
|
||||
//SEG10 [2] phi (byte) main::j#2 = (byte) 100 -- yby=coby1
|
||||
ldy #100
|
||||
//SEG11 [2] phi from main::@5 to main::@2
|
||||
main__B2_from_B5:
|
||||
//SEG12 [2] phi (byte) main::j#2 = (byte) main::j#1 -- register_copy
|
||||
@ -2219,17 +2241,17 @@ main__B2:
|
||||
jsr nest1
|
||||
//SEG15 main::@5
|
||||
main__B5:
|
||||
//SEG16 [4] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 main::i#2 ] -- zpby1=_dec_zpby1
|
||||
dec 3
|
||||
//SEG17 [5] if((byte) main::j#1>(byte) 0) goto main::@2 [ main::j#1 main::i#2 ] -- zpby1_gt_0_then_la1
|
||||
lda 3
|
||||
//SEG16 [4] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 main::i#2 ] -- yby=_dec_yby
|
||||
dey
|
||||
//SEG17 [5] if((byte) main::j#1>(byte) 0) goto main::@2 [ main::j#1 main::i#2 ] -- yby_gt_0_then_la1
|
||||
cpy #0
|
||||
bne main__B2_from_B5
|
||||
//SEG18 main::@3
|
||||
main__B3:
|
||||
//SEG19 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- zpby1=_dec_zpby1
|
||||
dec 2
|
||||
//SEG20 [7] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 2
|
||||
//SEG19 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- xby=_dec_xby
|
||||
dex
|
||||
//SEG20 [7] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- xby_gt_0_then_la1
|
||||
cpx #0
|
||||
bne main__B1_from_B3
|
||||
//SEG21 main::@return
|
||||
main__Breturn:
|
||||
@ -2241,7 +2263,7 @@ nest1:
|
||||
nest1__B1_from_nest1:
|
||||
//SEG25 [9] phi (byte) nest1::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 4
|
||||
sta 2
|
||||
//SEG26 [9] phi from nest1::@3 to nest1::@1
|
||||
nest1__B1_from_B3:
|
||||
//SEG27 [9] phi (byte) nest1::i#2 = (byte) nest1::i#1 -- register_copy
|
||||
@ -2251,7 +2273,7 @@ nest1__B1:
|
||||
nest1__B2_from_B1:
|
||||
//SEG30 [10] phi (byte) nest1::j#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 5
|
||||
sta 3
|
||||
//SEG31 [10] phi from nest1::@5 to nest1::@2
|
||||
nest1__B2_from_B5:
|
||||
//SEG32 [10] phi (byte) nest1::j#2 = (byte) nest1::j#1 -- register_copy
|
||||
@ -2262,16 +2284,16 @@ nest1__B2:
|
||||
//SEG35 nest1::@5
|
||||
nest1__B5:
|
||||
//SEG36 [12] (byte) nest1::j#1 ← -- (byte) nest1::j#2 [ main::j#2 main::i#2 nest1::j#1 nest1::i#2 ] -- zpby1=_dec_zpby1
|
||||
dec 5
|
||||
dec 3
|
||||
//SEG37 [13] if((byte) nest1::j#1>(byte) 0) goto nest1::@2 [ main::j#2 main::i#2 nest1::j#1 nest1::i#2 ] -- zpby1_gt_0_then_la1
|
||||
lda 5
|
||||
lda 3
|
||||
bne nest1__B2_from_B5
|
||||
//SEG38 nest1::@3
|
||||
nest1__B3:
|
||||
//SEG39 [14] (byte) nest1::i#1 ← -- (byte) nest1::i#2 [ main::j#2 main::i#2 nest1::i#1 ] -- zpby1=_dec_zpby1
|
||||
dec 4
|
||||
dec 2
|
||||
//SEG40 [15] if((byte) nest1::i#1>(byte) 0) goto nest1::@1 [ main::j#2 main::i#2 nest1::i#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 4
|
||||
lda 2
|
||||
bne nest1__B1_from_B3
|
||||
//SEG41 nest1::@return
|
||||
nest1__Breturn:
|
||||
@ -2283,7 +2305,7 @@ nest2:
|
||||
nest2__B1_from_nest2:
|
||||
//SEG45 [17] phi (byte) nest2::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 6
|
||||
sta 4
|
||||
//SEG46 [17] phi from nest2::@3 to nest2::@1
|
||||
nest2__B1_from_B3:
|
||||
//SEG47 [17] phi (byte) nest2::i#2 = (byte) nest2::i#1 -- register_copy
|
||||
@ -2291,28 +2313,27 @@ nest2__B1_from_B3:
|
||||
nest2__B1:
|
||||
//SEG49 [18] phi from nest2::@1 to nest2::@2
|
||||
nest2__B2_from_B1:
|
||||
//SEG50 [18] phi (byte) nest2::j#2 = (byte) 100 -- zpby1=coby1
|
||||
//SEG50 [18] phi (byte) nest2::j#2 = (byte) 100 -- aby=coby1
|
||||
lda #100
|
||||
sta 7
|
||||
//SEG51 [18] phi from nest2::@2 to nest2::@2
|
||||
nest2__B2_from_B2:
|
||||
//SEG52 [18] phi (byte) nest2::j#2 = (byte) nest2::j#1 -- register_copy
|
||||
//SEG53 nest2::@2
|
||||
nest2__B2:
|
||||
//SEG54 [19] *((word) 1024) ← (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#2 nest2::i#2 ] -- _star_cowo1=zpby1
|
||||
lda 7
|
||||
//SEG54 [19] *((word) 1024) ← (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#2 nest2::i#2 ] -- _star_cowo1=aby
|
||||
sta 1024
|
||||
//SEG55 [20] (byte) nest2::j#1 ← -- (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- zpby1=_dec_zpby1
|
||||
dec 7
|
||||
//SEG56 [21] if((byte) nest2::j#1>(byte) 0) goto nest2::@2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- zpby1_gt_0_then_la1
|
||||
lda 7
|
||||
//SEG55 [20] (byte) nest2::j#1 ← -- (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- aby=_dec_aby
|
||||
sec
|
||||
sbc #1
|
||||
//SEG56 [21] if((byte) nest2::j#1>(byte) 0) goto nest2::@2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- aby_gt_0_then_la1
|
||||
cmp #0
|
||||
bne nest2__B2_from_B2
|
||||
//SEG57 nest2::@3
|
||||
nest2__B3:
|
||||
//SEG58 [22] (byte) nest2::i#1 ← -- (byte) nest2::i#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::i#1 ] -- zpby1=_dec_zpby1
|
||||
dec 6
|
||||
dec 4
|
||||
//SEG59 [23] if((byte) nest2::i#1>(byte) 0) goto nest2::@1 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::i#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 6
|
||||
lda 4
|
||||
bne nest2__B1_from_B3
|
||||
//SEG60 nest2::@return
|
||||
nest2__Breturn:
|
||||
@ -2330,11 +2351,11 @@ FINAL SYMBOL TABLE
|
||||
(label) main::@5
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 zp byte:2 16.5
|
||||
(byte) main::i#2 zp byte:2 1.0476190476190477
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 1.0476190476190477
|
||||
(byte) main::j
|
||||
(byte) main::j#1 zp byte:3 151.5
|
||||
(byte) main::j#2 zp byte:3 11.222222222222221
|
||||
(byte) main::j#1 reg byte y 151.5
|
||||
(byte) main::j#2 reg byte y 11.222222222222221
|
||||
(void()) nest1()
|
||||
(label) nest1::@1
|
||||
(label) nest1::@2
|
||||
@ -2342,29 +2363,29 @@ FINAL SYMBOL TABLE
|
||||
(label) nest1::@5
|
||||
(label) nest1::@return
|
||||
(byte) nest1::i
|
||||
(byte) nest1::i#1 zp byte:4 1501.5
|
||||
(byte) nest1::i#2 zp byte:4 154.0
|
||||
(byte) nest1::i#1 zp byte:2 1501.5
|
||||
(byte) nest1::i#2 zp byte:2 154.0
|
||||
(byte) nest1::j
|
||||
(byte) nest1::j#1 zp byte:5 15001.5
|
||||
(byte) nest1::j#2 zp byte:5 2000.2
|
||||
(byte) nest1::j#1 zp byte:3 15001.5
|
||||
(byte) nest1::j#2 zp byte:3 2000.2
|
||||
(void()) nest2()
|
||||
(label) nest2::@1
|
||||
(label) nest2::@2
|
||||
(label) nest2::@3
|
||||
(label) nest2::@return
|
||||
(byte) nest2::i
|
||||
(byte) nest2::i#1 zp byte:6 150001.5
|
||||
(byte) nest2::i#2 zp byte:6 40000.4
|
||||
(byte) nest2::i#1 zp byte:4 150001.5
|
||||
(byte) nest2::i#2 zp byte:4 40000.4
|
||||
(byte) nest2::j
|
||||
(byte) nest2::j#1 zp byte:7 1500001.5
|
||||
(byte) nest2::j#2 zp byte:7 1500001.5
|
||||
(byte) nest2::j#1 reg byte a 1500001.5
|
||||
(byte) nest2::j#2 reg byte a 1500001.5
|
||||
|
||||
zp byte:2 [ main::i#2 main::i#1 ]
|
||||
zp byte:3 [ main::j#2 main::j#1 ]
|
||||
zp byte:4 [ nest1::i#2 nest1::i#1 ]
|
||||
zp byte:5 [ nest1::j#2 nest1::j#1 ]
|
||||
zp byte:6 [ nest2::i#2 nest2::i#1 ]
|
||||
zp byte:7 [ nest2::j#2 nest2::j#1 ]
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte y [ main::j#2 main::j#1 ]
|
||||
zp byte:2 [ nest1::i#2 nest1::i#1 ]
|
||||
zp byte:3 [ nest1::j#2 nest1::j#1 ]
|
||||
zp byte:4 [ nest2::i#2 nest2::i#1 ]
|
||||
reg byte a [ nest2::j#2 nest2::j#1 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 @BEGIN
|
||||
@ -2377,9 +2398,8 @@ BEND:
|
||||
main:
|
||||
//SEG4 [1] phi from main to main::@1
|
||||
main__B1_from_main:
|
||||
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 2
|
||||
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
|
||||
ldx #100
|
||||
//SEG6 [1] phi from main::@3 to main::@1
|
||||
main__B1_from_B3:
|
||||
//SEG7 [1] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
|
||||
@ -2387,9 +2407,8 @@ main__B1_from_B3:
|
||||
main__B1:
|
||||
//SEG9 [2] phi from main::@1 to main::@2
|
||||
main__B2_from_B1:
|
||||
//SEG10 [2] phi (byte) main::j#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 3
|
||||
//SEG10 [2] phi (byte) main::j#2 = (byte) 100 -- yby=coby1
|
||||
ldy #100
|
||||
//SEG11 [2] phi from main::@5 to main::@2
|
||||
main__B2_from_B5:
|
||||
//SEG12 [2] phi (byte) main::j#2 = (byte) main::j#1 -- register_copy
|
||||
@ -2399,17 +2418,17 @@ main__B2:
|
||||
jsr nest1
|
||||
//SEG15 main::@5
|
||||
main__B5:
|
||||
//SEG16 [4] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 main::i#2 ] -- zpby1=_dec_zpby1
|
||||
dec 3
|
||||
//SEG17 [5] if((byte) main::j#1>(byte) 0) goto main::@2 [ main::j#1 main::i#2 ] -- zpby1_gt_0_then_la1
|
||||
lda 3
|
||||
//SEG16 [4] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 main::i#2 ] -- yby=_dec_yby
|
||||
dey
|
||||
//SEG17 [5] if((byte) main::j#1>(byte) 0) goto main::@2 [ main::j#1 main::i#2 ] -- yby_gt_0_then_la1
|
||||
cpy #0
|
||||
bne main__B2_from_B5
|
||||
//SEG18 main::@3
|
||||
main__B3:
|
||||
//SEG19 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- zpby1=_dec_zpby1
|
||||
dec 2
|
||||
//SEG20 [7] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 2
|
||||
//SEG19 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- xby=_dec_xby
|
||||
dex
|
||||
//SEG20 [7] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- xby_gt_0_then_la1
|
||||
cpx #0
|
||||
bne main__B1_from_B3
|
||||
//SEG21 main::@return
|
||||
main__Breturn:
|
||||
@ -2421,7 +2440,7 @@ nest1:
|
||||
nest1__B1_from_nest1:
|
||||
//SEG25 [9] phi (byte) nest1::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 4
|
||||
sta 2
|
||||
//SEG26 [9] phi from nest1::@3 to nest1::@1
|
||||
nest1__B1_from_B3:
|
||||
//SEG27 [9] phi (byte) nest1::i#2 = (byte) nest1::i#1 -- register_copy
|
||||
@ -2431,7 +2450,7 @@ nest1__B1:
|
||||
nest1__B2_from_B1:
|
||||
//SEG30 [10] phi (byte) nest1::j#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 5
|
||||
sta 3
|
||||
//SEG31 [10] phi from nest1::@5 to nest1::@2
|
||||
nest1__B2_from_B5:
|
||||
//SEG32 [10] phi (byte) nest1::j#2 = (byte) nest1::j#1 -- register_copy
|
||||
@ -2442,16 +2461,16 @@ nest1__B2:
|
||||
//SEG35 nest1::@5
|
||||
nest1__B5:
|
||||
//SEG36 [12] (byte) nest1::j#1 ← -- (byte) nest1::j#2 [ main::j#2 main::i#2 nest1::j#1 nest1::i#2 ] -- zpby1=_dec_zpby1
|
||||
dec 5
|
||||
dec 3
|
||||
//SEG37 [13] if((byte) nest1::j#1>(byte) 0) goto nest1::@2 [ main::j#2 main::i#2 nest1::j#1 nest1::i#2 ] -- zpby1_gt_0_then_la1
|
||||
lda 5
|
||||
lda 3
|
||||
bne nest1__B2_from_B5
|
||||
//SEG38 nest1::@3
|
||||
nest1__B3:
|
||||
//SEG39 [14] (byte) nest1::i#1 ← -- (byte) nest1::i#2 [ main::j#2 main::i#2 nest1::i#1 ] -- zpby1=_dec_zpby1
|
||||
dec 4
|
||||
dec 2
|
||||
//SEG40 [15] if((byte) nest1::i#1>(byte) 0) goto nest1::@1 [ main::j#2 main::i#2 nest1::i#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 4
|
||||
lda 2
|
||||
bne nest1__B1_from_B3
|
||||
//SEG41 nest1::@return
|
||||
nest1__Breturn:
|
||||
@ -2463,7 +2482,7 @@ nest2:
|
||||
nest2__B1_from_nest2:
|
||||
//SEG45 [17] phi (byte) nest2::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 6
|
||||
sta 4
|
||||
//SEG46 [17] phi from nest2::@3 to nest2::@1
|
||||
nest2__B1_from_B3:
|
||||
//SEG47 [17] phi (byte) nest2::i#2 = (byte) nest2::i#1 -- register_copy
|
||||
@ -2471,28 +2490,27 @@ nest2__B1_from_B3:
|
||||
nest2__B1:
|
||||
//SEG49 [18] phi from nest2::@1 to nest2::@2
|
||||
nest2__B2_from_B1:
|
||||
//SEG50 [18] phi (byte) nest2::j#2 = (byte) 100 -- zpby1=coby1
|
||||
//SEG50 [18] phi (byte) nest2::j#2 = (byte) 100 -- aby=coby1
|
||||
lda #100
|
||||
sta 7
|
||||
//SEG51 [18] phi from nest2::@2 to nest2::@2
|
||||
nest2__B2_from_B2:
|
||||
//SEG52 [18] phi (byte) nest2::j#2 = (byte) nest2::j#1 -- register_copy
|
||||
//SEG53 nest2::@2
|
||||
nest2__B2:
|
||||
//SEG54 [19] *((word) 1024) ← (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#2 nest2::i#2 ] -- _star_cowo1=zpby1
|
||||
lda 7
|
||||
//SEG54 [19] *((word) 1024) ← (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#2 nest2::i#2 ] -- _star_cowo1=aby
|
||||
sta 1024
|
||||
//SEG55 [20] (byte) nest2::j#1 ← -- (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- zpby1=_dec_zpby1
|
||||
dec 7
|
||||
//SEG56 [21] if((byte) nest2::j#1>(byte) 0) goto nest2::@2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- zpby1_gt_0_then_la1
|
||||
lda 7
|
||||
//SEG55 [20] (byte) nest2::j#1 ← -- (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- aby=_dec_aby
|
||||
sec
|
||||
sbc #1
|
||||
//SEG56 [21] if((byte) nest2::j#1>(byte) 0) goto nest2::@2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- aby_gt_0_then_la1
|
||||
cmp #0
|
||||
bne nest2__B2_from_B2
|
||||
//SEG57 nest2::@3
|
||||
nest2__B3:
|
||||
//SEG58 [22] (byte) nest2::i#1 ← -- (byte) nest2::i#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::i#1 ] -- zpby1=_dec_zpby1
|
||||
dec 6
|
||||
dec 4
|
||||
//SEG59 [23] if((byte) nest2::i#1>(byte) 0) goto nest2::@1 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::i#1 ] -- zpby1_gt_0_then_la1
|
||||
lda 6
|
||||
lda 4
|
||||
bne nest2__B1_from_B3
|
||||
//SEG60 nest2::@return
|
||||
nest2__Breturn:
|
||||
|
@ -8,11 +8,11 @@
|
||||
(label) main::@5
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 zp byte:2 16.5
|
||||
(byte) main::i#2 zp byte:2 1.0476190476190477
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 1.0476190476190477
|
||||
(byte) main::j
|
||||
(byte) main::j#1 zp byte:3 151.5
|
||||
(byte) main::j#2 zp byte:3 11.222222222222221
|
||||
(byte) main::j#1 reg byte y 151.5
|
||||
(byte) main::j#2 reg byte y 11.222222222222221
|
||||
(void()) nest1()
|
||||
(label) nest1::@1
|
||||
(label) nest1::@2
|
||||
@ -20,26 +20,26 @@
|
||||
(label) nest1::@5
|
||||
(label) nest1::@return
|
||||
(byte) nest1::i
|
||||
(byte) nest1::i#1 zp byte:4 1501.5
|
||||
(byte) nest1::i#2 zp byte:4 154.0
|
||||
(byte) nest1::i#1 zp byte:2 1501.5
|
||||
(byte) nest1::i#2 zp byte:2 154.0
|
||||
(byte) nest1::j
|
||||
(byte) nest1::j#1 zp byte:5 15001.5
|
||||
(byte) nest1::j#2 zp byte:5 2000.2
|
||||
(byte) nest1::j#1 zp byte:3 15001.5
|
||||
(byte) nest1::j#2 zp byte:3 2000.2
|
||||
(void()) nest2()
|
||||
(label) nest2::@1
|
||||
(label) nest2::@2
|
||||
(label) nest2::@3
|
||||
(label) nest2::@return
|
||||
(byte) nest2::i
|
||||
(byte) nest2::i#1 zp byte:6 150001.5
|
||||
(byte) nest2::i#2 zp byte:6 40000.4
|
||||
(byte) nest2::i#1 zp byte:4 150001.5
|
||||
(byte) nest2::i#2 zp byte:4 40000.4
|
||||
(byte) nest2::j
|
||||
(byte) nest2::j#1 zp byte:7 1500001.5
|
||||
(byte) nest2::j#2 zp byte:7 1500001.5
|
||||
(byte) nest2::j#1 reg byte a 1500001.5
|
||||
(byte) nest2::j#2 reg byte a 1500001.5
|
||||
|
||||
zp byte:2 [ main::i#2 main::i#1 ]
|
||||
zp byte:3 [ main::j#2 main::j#1 ]
|
||||
zp byte:4 [ nest1::i#2 nest1::i#1 ]
|
||||
zp byte:5 [ nest1::j#2 nest1::j#1 ]
|
||||
zp byte:6 [ nest2::i#2 nest2::i#1 ]
|
||||
zp byte:7 [ nest2::j#2 nest2::j#1 ]
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte y [ main::j#2 main::j#1 ]
|
||||
zp byte:2 [ nest1::i#2 nest1::i#1 ]
|
||||
zp byte:3 [ nest1::j#2 nest1::j#1 ]
|
||||
zp byte:4 [ nest2::i#2 nest2::i#1 ]
|
||||
reg byte a [ nest2::j#2 nest2::j#1 ]
|
||||
|
@ -3,27 +3,24 @@ BBEGIN:
|
||||
BEND:
|
||||
main:
|
||||
main__B1_from_main:
|
||||
lda #0
|
||||
sta 3
|
||||
lda #100
|
||||
sta 2
|
||||
ldy #0
|
||||
ldx #100
|
||||
main__B1:
|
||||
dec 2
|
||||
lda 2
|
||||
dex
|
||||
cpx #0
|
||||
bne main__B2
|
||||
main__Breturn:
|
||||
rts
|
||||
main__B2:
|
||||
lda 2
|
||||
cmp #50
|
||||
cpx #50
|
||||
beq !+
|
||||
bcs main__B4
|
||||
!:
|
||||
main__B5:
|
||||
dec 3
|
||||
dey
|
||||
main__B1_from_B5:
|
||||
jmp main__B1
|
||||
main__B4:
|
||||
inc 3
|
||||
iny
|
||||
main__B1_from_B4:
|
||||
jmp main__B1
|
||||
|
@ -591,23 +591,29 @@ main__B1_from_B4:
|
||||
//SEG23 [1] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
|
||||
jmp main__B1
|
||||
|
||||
Uplifting max weight 55.0 live range equivalence class zp byte:3 [ main::s#3 main::s#1 main::s#2 ]
|
||||
Uplift to reg byte a resulted in clobber.
|
||||
Uplift to reg byte x succesfull.
|
||||
Uplift to reg byte y succesfull.
|
||||
REGISTER UPLIFTING
|
||||
(void()) main()
|
||||
(byte) main::i
|
||||
(byte) main::i#1 zp byte:2 11.0
|
||||
(byte) main::i#2 zp byte:2 33.0
|
||||
(byte) main::s
|
||||
(byte) main::s#1 zp byte:3 22.0
|
||||
(byte) main::s#2 zp byte:3 22.0
|
||||
(byte) main::s#3 zp byte:3 11.0
|
||||
|
||||
zp byte:2 [ main::i#2 main::i#1 ]
|
||||
zp byte:3 [ main::s#3 main::s#1 main::s#2 ]
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 55: zp byte:3 [ main::s#3 main::s#1 main::s#2 ] 44: zp byte:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplift attempt [main] 48 allocation: zp byte:3 [ main::s#3 main::s#1 main::s#2 ] zp byte:2 [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte a [ main::s#3 main::s#1 main::s#2 ] zp byte:2 [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 44 allocation: reg byte x [ main::s#3 main::s#1 main::s#2 ] zp byte:2 [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 44 allocation: reg byte y [ main::s#3 main::s#1 main::s#2 ] zp byte:2 [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 45 allocation: zp byte:3 [ main::s#3 main::s#1 main::s#2 ] reg byte a [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte a [ main::s#3 main::s#1 main::s#2 ] reg byte a [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 41 allocation: reg byte x [ main::s#3 main::s#1 main::s#2 ] reg byte a [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 41 allocation: reg byte y [ main::s#3 main::s#1 main::s#2 ] reg byte a [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 43 allocation: zp byte:3 [ main::s#3 main::s#1 main::s#2 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 43 allocation: reg byte a [ main::s#3 main::s#1 main::s#2 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte x [ main::s#3 main::s#1 main::s#2 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 39 allocation: reg byte y [ main::s#3 main::s#1 main::s#2 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 43 allocation: zp byte:3 [ main::s#3 main::s#1 main::s#2 ] reg byte y [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 43 allocation: reg byte a [ main::s#3 main::s#1 main::s#2 ] reg byte y [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] 39 allocation: reg byte x [ main::s#3 main::s#1 main::s#2 ] reg byte y [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [main] clobber allocation: reg byte y [ main::s#3 main::s#1 main::s#2 ] reg byte y [ main::i#2 main::i#1 ]
|
||||
Uplifting [main] best 39 combination reg byte y [ main::s#3 main::s#1 main::s#2 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplift attempt [] 39 allocation:
|
||||
Uplifting [] best 39 combination
|
||||
Removing instruction jmp BEND
|
||||
Removing instruction jmp main__B1
|
||||
Removing instruction jmp main__Breturn
|
||||
@ -624,18 +630,16 @@ BEND:
|
||||
main:
|
||||
//SEG4 [1] phi from main to main::@1
|
||||
main__B1_from_main:
|
||||
//SEG5 [1] phi (byte) main::s#3 = (byte) 0 -- zpby1=coby1
|
||||
lda #0
|
||||
sta 3
|
||||
//SEG6 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 2
|
||||
//SEG5 [1] phi (byte) main::s#3 = (byte) 0 -- yby=coby1
|
||||
ldy #0
|
||||
//SEG6 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
|
||||
ldx #100
|
||||
//SEG7 main::@1
|
||||
main__B1:
|
||||
//SEG8 [2] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 main::s#3 ] -- zpby1=_dec_zpby1
|
||||
dec 2
|
||||
//SEG9 [3] if((byte) main::i#1>(byte) 0) goto main::@2 [ main::i#1 main::s#3 ] -- zpby1_gt_0_then_la1
|
||||
lda 2
|
||||
//SEG8 [2] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 main::s#3 ] -- xby=_dec_xby
|
||||
dex
|
||||
//SEG9 [3] if((byte) main::i#1>(byte) 0) goto main::@2 [ main::i#1 main::s#3 ] -- xby_gt_0_then_la1
|
||||
cpx #0
|
||||
bne main__B2
|
||||
//SEG10 main::@return
|
||||
main__Breturn:
|
||||
@ -643,16 +647,15 @@ main__Breturn:
|
||||
rts
|
||||
//SEG12 main::@2
|
||||
main__B2:
|
||||
//SEG13 [5] if((byte) main::i#1>(byte) 50) goto main::@4 [ main::i#1 main::s#3 ] -- zpby1_gt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #50
|
||||
//SEG13 [5] if((byte) main::i#1>(byte) 50) goto main::@4 [ main::i#1 main::s#3 ] -- xby_gt_coby1_then_la1
|
||||
cpx #50
|
||||
beq !+
|
||||
bcs main__B4
|
||||
!:
|
||||
//SEG14 main::@5
|
||||
main__B5:
|
||||
//SEG15 [6] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] -- zpby1=_dec_zpby1
|
||||
dec 3
|
||||
//SEG15 [6] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] -- yby=_dec_yby
|
||||
dey
|
||||
//SEG16 [1] phi from main::@5 to main::@1
|
||||
main__B1_from_B5:
|
||||
//SEG17 [1] phi (byte) main::s#3 = (byte) main::s#2 -- register_copy
|
||||
@ -660,8 +663,8 @@ main__B1_from_B5:
|
||||
jmp main__B1
|
||||
//SEG19 main::@4
|
||||
main__B4:
|
||||
//SEG20 [7] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] -- zpby1=_inc_zpby1
|
||||
inc 3
|
||||
//SEG20 [7] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] -- yby=_inc_yby
|
||||
iny
|
||||
//SEG21 [1] phi from main::@4 to main::@1
|
||||
main__B1_from_B4:
|
||||
//SEG22 [1] phi (byte) main::s#3 = (byte) main::s#1 -- register_copy
|
||||
@ -678,15 +681,15 @@ FINAL SYMBOL TABLE
|
||||
(label) main::@5
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 zp byte:2 11.0
|
||||
(byte) main::i#2 zp byte:2 33.0
|
||||
(byte) main::i#1 reg byte x 11.0
|
||||
(byte) main::i#2 reg byte x 33.0
|
||||
(byte) main::s
|
||||
(byte) main::s#1 zp byte:3 22.0
|
||||
(byte) main::s#2 zp byte:3 22.0
|
||||
(byte) main::s#3 zp byte:3 11.0
|
||||
(byte) main::s#1 reg byte y 22.0
|
||||
(byte) main::s#2 reg byte y 22.0
|
||||
(byte) main::s#3 reg byte y 11.0
|
||||
|
||||
zp byte:2 [ main::i#2 main::i#1 ]
|
||||
zp byte:3 [ main::s#3 main::s#1 main::s#2 ]
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte y [ main::s#3 main::s#1 main::s#2 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 @BEGIN
|
||||
@ -699,18 +702,16 @@ BEND:
|
||||
main:
|
||||
//SEG4 [1] phi from main to main::@1
|
||||
main__B1_from_main:
|
||||
//SEG5 [1] phi (byte) main::s#3 = (byte) 0 -- zpby1=coby1
|
||||
lda #0
|
||||
sta 3
|
||||
//SEG6 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
|
||||
lda #100
|
||||
sta 2
|
||||
//SEG5 [1] phi (byte) main::s#3 = (byte) 0 -- yby=coby1
|
||||
ldy #0
|
||||
//SEG6 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
|
||||
ldx #100
|
||||
//SEG7 main::@1
|
||||
main__B1:
|
||||
//SEG8 [2] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 main::s#3 ] -- zpby1=_dec_zpby1
|
||||
dec 2
|
||||
//SEG9 [3] if((byte) main::i#1>(byte) 0) goto main::@2 [ main::i#1 main::s#3 ] -- zpby1_gt_0_then_la1
|
||||
lda 2
|
||||
//SEG8 [2] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 main::s#3 ] -- xby=_dec_xby
|
||||
dex
|
||||
//SEG9 [3] if((byte) main::i#1>(byte) 0) goto main::@2 [ main::i#1 main::s#3 ] -- xby_gt_0_then_la1
|
||||
cpx #0
|
||||
bne main__B2
|
||||
//SEG10 main::@return
|
||||
main__Breturn:
|
||||
@ -718,16 +719,15 @@ main__Breturn:
|
||||
rts
|
||||
//SEG12 main::@2
|
||||
main__B2:
|
||||
//SEG13 [5] if((byte) main::i#1>(byte) 50) goto main::@4 [ main::i#1 main::s#3 ] -- zpby1_gt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #50
|
||||
//SEG13 [5] if((byte) main::i#1>(byte) 50) goto main::@4 [ main::i#1 main::s#3 ] -- xby_gt_coby1_then_la1
|
||||
cpx #50
|
||||
beq !+
|
||||
bcs main__B4
|
||||
!:
|
||||
//SEG14 main::@5
|
||||
main__B5:
|
||||
//SEG15 [6] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] -- zpby1=_dec_zpby1
|
||||
dec 3
|
||||
//SEG15 [6] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] -- yby=_dec_yby
|
||||
dey
|
||||
//SEG16 [1] phi from main::@5 to main::@1
|
||||
main__B1_from_B5:
|
||||
//SEG17 [1] phi (byte) main::s#3 = (byte) main::s#2 -- register_copy
|
||||
@ -735,8 +735,8 @@ main__B1_from_B5:
|
||||
jmp main__B1
|
||||
//SEG19 main::@4
|
||||
main__B4:
|
||||
//SEG20 [7] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] -- zpby1=_inc_zpby1
|
||||
inc 3
|
||||
//SEG20 [7] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] -- yby=_inc_yby
|
||||
iny
|
||||
//SEG21 [1] phi from main::@4 to main::@1
|
||||
main__B1_from_B4:
|
||||
//SEG22 [1] phi (byte) main::s#3 = (byte) main::s#1 -- register_copy
|
||||
|
@ -7,12 +7,12 @@
|
||||
(label) main::@5
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 zp byte:2 11.0
|
||||
(byte) main::i#2 zp byte:2 33.0
|
||||
(byte) main::i#1 reg byte x 11.0
|
||||
(byte) main::i#2 reg byte x 33.0
|
||||
(byte) main::s
|
||||
(byte) main::s#1 zp byte:3 22.0
|
||||
(byte) main::s#2 zp byte:3 22.0
|
||||
(byte) main::s#3 zp byte:3 11.0
|
||||
(byte) main::s#1 reg byte y 22.0
|
||||
(byte) main::s#2 reg byte y 22.0
|
||||
(byte) main::s#3 reg byte y 11.0
|
||||
|
||||
zp byte:2 [ main::i#2 main::i#1 ]
|
||||
zp byte:3 [ main::s#3 main::s#1 main::s#2 ]
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte y [ main::s#3 main::s#1 main::s#2 ]
|
||||
|
@ -1,18 +1,13 @@
|
||||
BBEGIN:
|
||||
B1_from_BBEGIN:
|
||||
lda #5
|
||||
sta 2
|
||||
ldx #5
|
||||
B1_from_B1:
|
||||
B1:
|
||||
lda 2
|
||||
txa
|
||||
clc
|
||||
adc #4
|
||||
sta 3
|
||||
lda 3
|
||||
ldx 2
|
||||
sta 4352,x
|
||||
inc 2
|
||||
lda 2
|
||||
cmp #10
|
||||
inx
|
||||
cpx #10
|
||||
bcc B1_from_B1
|
||||
BEND:
|
||||
|
@ -340,20 +340,26 @@ B1:
|
||||
//SEG10 @END
|
||||
BEND:
|
||||
|
||||
Uplifting max weight 31.166666666666664 live range equivalence class zp byte:2 [ i#2 i#1 ]
|
||||
Uplift to reg byte a resulted in clobber.
|
||||
Uplift to reg byte x succesfull.
|
||||
Uplift to reg byte y succesfull.
|
||||
REGISTER UPLIFTING
|
||||
(byte~) $1 zp byte:3 22.0
|
||||
(byte) i
|
||||
(byte) i#1 zp byte:2 16.5
|
||||
(byte) i#2 zp byte:2 14.666666666666666
|
||||
(byte[16]) p
|
||||
|
||||
zp byte:2 [ i#2 i#1 ]
|
||||
zp byte:3 [ $1 ]
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [] 31.17: zp byte:2 [ i#2 i#1 ] 22: zp byte:3 [ $1 ]
|
||||
|
||||
Uplift attempt [] 35 allocation: zp byte:2 [ i#2 i#1 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] 27 allocation: reg byte x [ i#2 i#1 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] 28 allocation: reg byte y [ i#2 i#1 ] zp byte:3 [ $1 ]
|
||||
Uplift attempt [] 31 allocation: zp byte:2 [ i#2 i#1 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] 23 allocation: reg byte x [ i#2 i#1 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] 24 allocation: reg byte y [ i#2 i#1 ] reg byte a [ $1 ]
|
||||
Uplift attempt [] 33 allocation: zp byte:2 [ i#2 i#1 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] 26 allocation: reg byte y [ i#2 i#1 ] reg byte x [ $1 ]
|
||||
Uplift attempt [] 34 allocation: zp byte:2 [ i#2 i#1 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] 25 allocation: reg byte x [ i#2 i#1 ] reg byte y [ $1 ]
|
||||
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte y [ $1 ]
|
||||
Uplifting [] best 23 combination reg byte x [ i#2 i#1 ] reg byte a [ $1 ]
|
||||
Removing instruction jmp B1
|
||||
Removing instruction jmp BEND
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
@ -362,29 +368,24 @@ ASSEMBLER
|
||||
BBEGIN:
|
||||
//SEG1 [0] phi from @BEGIN to @1
|
||||
B1_from_BBEGIN:
|
||||
//SEG2 [0] phi (byte) i#2 = (byte) 5 -- zpby1=coby1
|
||||
lda #5
|
||||
sta 2
|
||||
//SEG2 [0] phi (byte) i#2 = (byte) 5 -- xby=coby1
|
||||
ldx #5
|
||||
jmp B1
|
||||
//SEG3 [0] phi from @1 to @1
|
||||
B1_from_B1:
|
||||
//SEG4 [0] phi (byte) i#2 = (byte) i#1 -- register_copy
|
||||
//SEG5 @1
|
||||
B1:
|
||||
//SEG6 [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] -- zpby1=zpby2_plus_coby1
|
||||
lda 2
|
||||
//SEG6 [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] -- aby=xby_plus_coby1
|
||||
txa
|
||||
clc
|
||||
adc #4
|
||||
sta 3
|
||||
//SEG7 [2] *((word) 4352 + (byte) i#2) ← (byte~) $1 [ i#2 ] -- cowo1_staridx_zpby1=zpby2
|
||||
lda 3
|
||||
ldx 2
|
||||
//SEG7 [2] *((word) 4352 + (byte) i#2) ← (byte~) $1 [ i#2 ] -- cowo1_staridx_xby=aby
|
||||
sta 4352,x
|
||||
//SEG8 [3] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- zpby1=zpby1_plus_1
|
||||
inc 2
|
||||
//SEG9 [4] if((byte) i#1<(byte) 10) goto @1 [ i#1 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #10
|
||||
//SEG8 [3] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- xby=xby_plus_1
|
||||
inx
|
||||
//SEG9 [4] if((byte) i#1<(byte) 10) goto @1 [ i#1 ] -- xby_lt_coby1_then_la1
|
||||
cpx #10
|
||||
bcc B1_from_B1
|
||||
//SEG10 @END
|
||||
BEND:
|
||||
@ -396,72 +397,62 @@ ASSEMBLER
|
||||
BBEGIN:
|
||||
//SEG1 [0] phi from @BEGIN to @1
|
||||
B1_from_BBEGIN:
|
||||
//SEG2 [0] phi (byte) i#2 = (byte) 5 -- zpby1=coby1
|
||||
lda #5
|
||||
sta 2
|
||||
//SEG2 [0] phi (byte) i#2 = (byte) 5 -- xby=coby1
|
||||
ldx #5
|
||||
//SEG3 [0] phi from @1 to @1
|
||||
B1_from_B1:
|
||||
//SEG4 [0] phi (byte) i#2 = (byte) i#1 -- register_copy
|
||||
//SEG5 @1
|
||||
B1:
|
||||
//SEG6 [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] -- zpby1=zpby2_plus_coby1
|
||||
lda 2
|
||||
//SEG6 [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] -- aby=xby_plus_coby1
|
||||
txa
|
||||
clc
|
||||
adc #4
|
||||
sta 3
|
||||
//SEG7 [2] *((word) 4352 + (byte) i#2) ← (byte~) $1 [ i#2 ] -- cowo1_staridx_zpby1=zpby2
|
||||
lda 3
|
||||
ldx 2
|
||||
//SEG7 [2] *((word) 4352 + (byte) i#2) ← (byte~) $1 [ i#2 ] -- cowo1_staridx_xby=aby
|
||||
sta 4352,x
|
||||
//SEG8 [3] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- zpby1=zpby1_plus_1
|
||||
inc 2
|
||||
//SEG9 [4] if((byte) i#1<(byte) 10) goto @1 [ i#1 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #10
|
||||
//SEG8 [3] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- xby=xby_plus_1
|
||||
inx
|
||||
//SEG9 [4] if((byte) i#1<(byte) 10) goto @1 [ i#1 ] -- xby_lt_coby1_then_la1
|
||||
cpx #10
|
||||
bcc B1_from_B1
|
||||
//SEG10 @END
|
||||
BEND:
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
(byte~) $1 zp byte:3 22.0
|
||||
(byte~) $1 reg byte a 22.0
|
||||
(label) @1
|
||||
(label) @BEGIN
|
||||
(label) @END
|
||||
(byte) i
|
||||
(byte) i#1 zp byte:2 16.5
|
||||
(byte) i#2 zp byte:2 14.666666666666666
|
||||
(byte) i#1 reg byte x 16.5
|
||||
(byte) i#2 reg byte x 14.666666666666666
|
||||
(byte[16]) p
|
||||
|
||||
zp byte:2 [ i#2 i#1 ]
|
||||
zp byte:3 [ $1 ]
|
||||
reg byte x [ i#2 i#1 ]
|
||||
reg byte a [ $1 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 @BEGIN
|
||||
BBEGIN:
|
||||
//SEG1 [0] phi from @BEGIN to @1
|
||||
B1_from_BBEGIN:
|
||||
//SEG2 [0] phi (byte) i#2 = (byte) 5 -- zpby1=coby1
|
||||
lda #5
|
||||
sta 2
|
||||
//SEG2 [0] phi (byte) i#2 = (byte) 5 -- xby=coby1
|
||||
ldx #5
|
||||
//SEG3 [0] phi from @1 to @1
|
||||
B1_from_B1:
|
||||
//SEG4 [0] phi (byte) i#2 = (byte) i#1 -- register_copy
|
||||
//SEG5 @1
|
||||
B1:
|
||||
//SEG6 [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] -- zpby1=zpby2_plus_coby1
|
||||
lda 2
|
||||
//SEG6 [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] -- aby=xby_plus_coby1
|
||||
txa
|
||||
clc
|
||||
adc #4
|
||||
sta 3
|
||||
//SEG7 [2] *((word) 4352 + (byte) i#2) ← (byte~) $1 [ i#2 ] -- cowo1_staridx_zpby1=zpby2
|
||||
lda 3
|
||||
ldx 2
|
||||
//SEG7 [2] *((word) 4352 + (byte) i#2) ← (byte~) $1 [ i#2 ] -- cowo1_staridx_xby=aby
|
||||
sta 4352,x
|
||||
//SEG8 [3] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- zpby1=zpby1_plus_1
|
||||
inc 2
|
||||
//SEG9 [4] if((byte) i#1<(byte) 10) goto @1 [ i#1 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #10
|
||||
//SEG8 [3] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- xby=xby_plus_1
|
||||
inx
|
||||
//SEG9 [4] if((byte) i#1<(byte) 10) goto @1 [ i#1 ] -- xby_lt_coby1_then_la1
|
||||
cpx #10
|
||||
bcc B1_from_B1
|
||||
//SEG10 @END
|
||||
BEND:
|
||||
|
@ -1,11 +1,11 @@
|
||||
(byte~) $1 zp byte:3 22.0
|
||||
(byte~) $1 reg byte a 22.0
|
||||
(label) @1
|
||||
(label) @BEGIN
|
||||
(label) @END
|
||||
(byte) i
|
||||
(byte) i#1 zp byte:2 16.5
|
||||
(byte) i#2 zp byte:2 14.666666666666666
|
||||
(byte) i#1 reg byte x 16.5
|
||||
(byte) i#2 reg byte x 14.666666666666666
|
||||
(byte[16]) p
|
||||
|
||||
zp byte:2 [ i#2 i#1 ]
|
||||
zp byte:3 [ $1 ]
|
||||
reg byte x [ i#2 i#1 ]
|
||||
reg byte a [ $1 ]
|
||||
|
@ -14,72 +14,61 @@ main__Breturn:
|
||||
lvaluevar:
|
||||
lvaluevar__B1_from_lvaluevar:
|
||||
lda #<1024
|
||||
sta 3
|
||||
lda #>1024
|
||||
sta 3+1
|
||||
lda #2
|
||||
sta 2
|
||||
lda #>1024
|
||||
sta 2+1
|
||||
ldx #2
|
||||
lvaluevar__B1:
|
||||
lda 2
|
||||
cmp #10
|
||||
cpx #10
|
||||
bcc lvaluevar__B2
|
||||
lvaluevar__Breturn:
|
||||
rts
|
||||
lvaluevar__B2:
|
||||
ldy #0
|
||||
lda #4
|
||||
sta (3),y
|
||||
inc 3
|
||||
bne !+
|
||||
inc 3+1
|
||||
!:
|
||||
sta (2),y
|
||||
inc 2
|
||||
bne !+
|
||||
inc 2+1
|
||||
!:
|
||||
inx
|
||||
lvaluevar__B1_from_B2:
|
||||
jmp lvaluevar__B1
|
||||
rvaluevar:
|
||||
rvaluevar__B1_from_rvaluevar:
|
||||
lda #<1024
|
||||
sta 6
|
||||
sta 2
|
||||
lda #>1024
|
||||
sta 6+1
|
||||
lda #2
|
||||
sta 5
|
||||
sta 2+1
|
||||
ldx #2
|
||||
rvaluevar__B1:
|
||||
lda 5
|
||||
cmp #10
|
||||
cpx #10
|
||||
bcc rvaluevar__B2
|
||||
rvaluevar__Breturn:
|
||||
rts
|
||||
rvaluevar__B2:
|
||||
ldy #0
|
||||
lda (6),y
|
||||
sta 10
|
||||
inc 6
|
||||
lda (2),y
|
||||
inc 2
|
||||
bne !+
|
||||
inc 6+1
|
||||
inc 2+1
|
||||
!:
|
||||
inc 5
|
||||
inx
|
||||
rvaluevar__B1_from_B2:
|
||||
jmp rvaluevar__B1
|
||||
rvalue:
|
||||
lda 1024
|
||||
sta 11
|
||||
lda 1025
|
||||
sta 12
|
||||
rvalue__B1_from_rvalue:
|
||||
lda #2
|
||||
sta 8
|
||||
ldx #2
|
||||
rvalue__B1:
|
||||
lda 8
|
||||
cmp #10
|
||||
cpx #10
|
||||
bcc rvalue__B2
|
||||
rvalue__Breturn:
|
||||
rts
|
||||
rvalue__B2:
|
||||
ldx 8
|
||||
lda 1024,x
|
||||
sta 13
|
||||
inc 8
|
||||
inx
|
||||
rvalue__B1_from_B2:
|
||||
jmp rvalue__B1
|
||||
lvalue:
|
||||
@ -88,18 +77,15 @@ lvalue:
|
||||
lda #2
|
||||
sta 1025
|
||||
lvalue__B1_from_lvalue:
|
||||
lda #2
|
||||
sta 9
|
||||
ldx #2
|
||||
lvalue__B1:
|
||||
lda 9
|
||||
cmp #10
|
||||
cpx #10
|
||||
bcc lvalue__B2
|
||||
lvalue__Breturn:
|
||||
rts
|
||||
lvalue__B2:
|
||||
lda #3
|
||||
ldx 9
|
||||
sta 1024,x
|
||||
inc 9
|
||||
inx
|
||||
lvalue__B1_from_B2:
|
||||
jmp lvalue__B1
|
||||
|
@ -2066,63 +2066,304 @@ lvalue__B1_from_B2:
|
||||
//SEG70 [27] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 -- register_copy
|
||||
jmp lvalue__B1
|
||||
|
||||
Uplifting max weight Infinity live range equivalence class zp byte:10 [ rvaluevar::b#0 ]
|
||||
Uplift to reg byte a succesfull.
|
||||
Uplift to reg byte x succesfull.
|
||||
Uplift to reg byte y succesfull.
|
||||
REGISTER UPLIFTING
|
||||
(void()) lvalue()
|
||||
(byte[1024]) lvalue::SCREEN
|
||||
(byte) lvalue::i
|
||||
(byte) lvalue::i#1 zp byte:9 22.0
|
||||
(byte) lvalue::i#2 zp byte:9 14.666666666666666
|
||||
(void()) lvaluevar()
|
||||
(byte) lvaluevar::b
|
||||
(byte) lvaluevar::i
|
||||
(byte) lvaluevar::i#1 zp byte:2 22.0
|
||||
(byte) lvaluevar::i#2 zp byte:2 8.25
|
||||
(byte*) lvaluevar::screen
|
||||
(byte*) lvaluevar::screen#1 zp ptr byte:3 11.0
|
||||
(byte*) lvaluevar::screen#2 zp ptr byte:3 11.0
|
||||
(void()) main()
|
||||
(void()) rvalue()
|
||||
(byte[1024]) rvalue::SCREEN
|
||||
(byte) rvalue::b
|
||||
(byte) rvalue::b#0 zp byte:11 Infinity
|
||||
(byte) rvalue::b#1 zp byte:12 Infinity
|
||||
(byte) rvalue::b#2 zp byte:13 Infinity
|
||||
(byte) rvalue::i
|
||||
(byte) rvalue::i#1 zp byte:8 22.0
|
||||
(byte) rvalue::i#2 zp byte:8 14.666666666666666
|
||||
(void()) rvaluevar()
|
||||
(byte) rvaluevar::b
|
||||
(byte) rvaluevar::b#0 zp byte:10 Infinity
|
||||
(byte) rvaluevar::i
|
||||
(byte) rvaluevar::i#1 zp byte:5 22.0
|
||||
(byte) rvaluevar::i#2 zp byte:5 8.25
|
||||
(byte*) rvaluevar::screen
|
||||
(byte*) rvaluevar::screen#1 zp ptr byte:6 11.0
|
||||
(byte*) rvaluevar::screen#2 zp ptr byte:6 11.0
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main]
|
||||
Uplift Scope [lvalue] 36.67: zp byte:9 [ lvalue::i#2 lvalue::i#1 ]
|
||||
Uplift Scope [rvalue] ∞: zp byte:11 [ rvalue::b#0 ] ∞: zp byte:12 [ rvalue::b#1 ] ∞: zp byte:13 [ rvalue::b#2 ] 36.67: zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift Scope [lvaluevar] 30.25: zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 ] 22: zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
|
||||
Uplift Scope [rvaluevar] ∞: zp byte:10 [ rvaluevar::b#0 ] 30.25: zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ] 22: zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 ]
|
||||
zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
|
||||
zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ]
|
||||
zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
zp byte:9 [ lvalue::i#2 lvalue::i#1 ]
|
||||
zp byte:10 [ rvaluevar::b#0 ]
|
||||
zp byte:11 [ rvalue::b#0 ]
|
||||
zp byte:12 [ rvalue::b#1 ]
|
||||
zp byte:13 [ rvalue::b#2 ]
|
||||
|
||||
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 ] ] with [ zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ] ]
|
||||
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 ] ] with [ zp byte:8 [ rvalue::i#2 rvalue::i#1 ] ]
|
||||
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 ] ] with [ zp byte:9 [ lvalue::i#2 lvalue::i#1 ] ]
|
||||
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 lvalue::i#2 lvalue::i#1 ] ] with [ zp byte:10 [ rvaluevar::b#0 ] ]
|
||||
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 lvalue::i#2 lvalue::i#1 rvaluevar::b#0 ] ] with [ zp byte:11 [ rvalue::b#0 ] ]
|
||||
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 lvalue::i#2 lvalue::i#1 rvaluevar::b#0 rvalue::b#0 ] ] with [ zp byte:12 [ rvalue::b#1 ] ]
|
||||
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 lvalue::i#2 lvalue::i#1 rvaluevar::b#0 rvalue::b#0 rvalue::b#1 ] ] with [ zp byte:13 [ rvalue::b#2 ] ]
|
||||
Uplift attempt [main] 197 allocation:
|
||||
Uplifting [main] best 197 combination
|
||||
Uplift attempt [lvalue] 197 allocation: zp byte:9 [ lvalue::i#2 lvalue::i#1 ]
|
||||
Uplift attempt [lvalue] clobber allocation: reg byte a [ lvalue::i#2 lvalue::i#1 ]
|
||||
Uplift attempt [lvalue] 190 allocation: reg byte x [ lvalue::i#2 lvalue::i#1 ]
|
||||
Uplift attempt [lvalue] 191 allocation: reg byte y [ lvalue::i#2 lvalue::i#1 ]
|
||||
Uplifting [lvalue] best 190 combination reg byte x [ lvalue::i#2 lvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 190 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 184 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 184 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 184 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 184 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 184 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 184 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 184 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 184 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 184 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 189 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 187 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 187 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 187 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 187 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 185 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 185 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 185 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 187 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 185 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 185 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 185 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 187 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 185 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 185 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 185 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 190 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 183 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 181 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 181 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 181 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 181 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 181 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 181 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 181 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: 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 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 181 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 179 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 177 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 184 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 182 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 182 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 182 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 182 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 182 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 182 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 182 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 182 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 180 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] 178 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
|
||||
Uplifting [rvalue] best 177 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 ]
|
||||
Uplift attempt [lvaluevar] 177 allocation: zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 ] zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
|
||||
Uplift attempt [lvaluevar] clobber allocation: reg byte a [ lvaluevar::i#2 lvaluevar::i#1 ] zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
|
||||
Uplift attempt [lvaluevar] 172 allocation: reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
|
||||
Uplift attempt [lvaluevar] clobber allocation: reg byte y [ lvaluevar::i#2 lvaluevar::i#1 ] zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
|
||||
Uplifting [lvaluevar] best 172 combination reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] 172 allocation: zp byte:10 [ rvaluevar::b#0 ] zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] 170 allocation: reg byte a [ rvaluevar::b#0 ] zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] 171 allocation: reg byte x [ rvaluevar::b#0 ] zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] 171 allocation: reg byte y [ rvaluevar::b#0 ] zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] clobber allocation: zp byte:10 [ rvaluevar::b#0 ] reg byte a [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] clobber allocation: reg byte a [ rvaluevar::b#0 ] reg byte a [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] clobber allocation: reg byte x [ rvaluevar::b#0 ] reg byte a [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] clobber allocation: reg byte y [ rvaluevar::b#0 ] reg byte a [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] 167 allocation: zp byte:10 [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] 165 allocation: reg byte a [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] clobber allocation: reg byte x [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] 166 allocation: reg byte y [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] clobber allocation: zp byte:10 [ rvaluevar::b#0 ] reg byte y [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] clobber allocation: reg byte a [ rvaluevar::b#0 ] reg byte y [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] clobber allocation: reg byte x [ rvaluevar::b#0 ] reg byte y [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [rvaluevar] clobber allocation: reg byte y [ rvaluevar::b#0 ] reg byte y [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplifting [rvaluevar] best 165 combination reg byte a [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift attempt [] 165 allocation:
|
||||
Uplifting [] best 165 combination
|
||||
Coalescing zero page register [ zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] ] with [ zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] ]
|
||||
Re-allocated ZP register from zp ptr byte:3 to zp ptr byte:2
|
||||
Removing instruction jmp BEND
|
||||
Removing instruction jmp main__B1
|
||||
Removing instruction jmp main__B2
|
||||
@ -2170,17 +2411,15 @@ lvaluevar:
|
||||
lvaluevar__B1_from_lvaluevar:
|
||||
//SEG15 [6] phi (byte*) lvaluevar::screen#2 = (word) 1024 -- zpptrby1=cowo1
|
||||
lda #<1024
|
||||
sta 3
|
||||
lda #>1024
|
||||
sta 3+1
|
||||
//SEG16 [6] phi (byte) lvaluevar::i#2 = (byte) 2 -- zpby1=coby1
|
||||
lda #2
|
||||
sta 2
|
||||
lda #>1024
|
||||
sta 2+1
|
||||
//SEG16 [6] phi (byte) lvaluevar::i#2 = (byte) 2 -- xby=coby1
|
||||
ldx #2
|
||||
//SEG17 lvaluevar::@1
|
||||
lvaluevar__B1:
|
||||
//SEG18 [7] if((byte) lvaluevar::i#2<(byte) 10) goto lvaluevar::@2 [ lvaluevar::i#2 lvaluevar::screen#2 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #10
|
||||
//SEG18 [7] if((byte) lvaluevar::i#2<(byte) 10) goto lvaluevar::@2 [ lvaluevar::i#2 lvaluevar::screen#2 ] -- xby_lt_coby1_then_la1
|
||||
cpx #10
|
||||
bcc lvaluevar__B2
|
||||
//SEG19 lvaluevar::@return
|
||||
lvaluevar__Breturn:
|
||||
@ -2191,14 +2430,14 @@ lvaluevar__B2:
|
||||
//SEG22 [9] *((byte*) lvaluevar::screen#2) ← (byte) 4 [ lvaluevar::i#2 lvaluevar::screen#2 ] -- _star_zpptrby1=coby1
|
||||
ldy #0
|
||||
lda #4
|
||||
sta (3),y
|
||||
sta (2),y
|
||||
//SEG23 [10] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#2 [ lvaluevar::screen#1 lvaluevar::i#2 ] -- zpptrby1=_inc_zpptrby1
|
||||
inc 3
|
||||
bne !+
|
||||
inc 3+1
|
||||
!:
|
||||
//SEG24 [11] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 [ lvaluevar::i#1 lvaluevar::screen#1 ] -- zpby1=_inc_zpby1
|
||||
inc 2
|
||||
bne !+
|
||||
inc 2+1
|
||||
!:
|
||||
//SEG24 [11] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 [ lvaluevar::i#1 lvaluevar::screen#1 ] -- xby=_inc_xby
|
||||
inx
|
||||
//SEG25 [6] phi from lvaluevar::@2 to lvaluevar::@1
|
||||
lvaluevar__B1_from_B2:
|
||||
//SEG26 [6] phi (byte*) lvaluevar::screen#2 = (byte*) lvaluevar::screen#1 -- register_copy
|
||||
@ -2210,17 +2449,15 @@ rvaluevar:
|
||||
rvaluevar__B1_from_rvaluevar:
|
||||
//SEG30 [12] phi (byte*) rvaluevar::screen#2 = (word) 1024 -- zpptrby1=cowo1
|
||||
lda #<1024
|
||||
sta 6
|
||||
sta 2
|
||||
lda #>1024
|
||||
sta 6+1
|
||||
//SEG31 [12] phi (byte) rvaluevar::i#2 = (byte) 2 -- zpby1=coby1
|
||||
lda #2
|
||||
sta 5
|
||||
sta 2+1
|
||||
//SEG31 [12] phi (byte) rvaluevar::i#2 = (byte) 2 -- xby=coby1
|
||||
ldx #2
|
||||
//SEG32 rvaluevar::@1
|
||||
rvaluevar__B1:
|
||||
//SEG33 [13] if((byte) rvaluevar::i#2<(byte) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 5
|
||||
cmp #10
|
||||
//SEG33 [13] if((byte) rvaluevar::i#2<(byte) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- xby_lt_coby1_then_la1
|
||||
cpx #10
|
||||
bcc rvaluevar__B2
|
||||
//SEG34 rvaluevar::@return
|
||||
rvaluevar__Breturn:
|
||||
@ -2228,17 +2465,16 @@ rvaluevar__Breturn:
|
||||
rts
|
||||
//SEG36 rvaluevar::@2
|
||||
rvaluevar__B2:
|
||||
//SEG37 [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- zpby1=_star_zpptrby1
|
||||
//SEG37 [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- aby=_star_zpptrby1
|
||||
ldy #0
|
||||
lda (6),y
|
||||
sta 10
|
||||
lda (2),y
|
||||
//SEG38 [16] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 [ rvaluevar::screen#1 rvaluevar::i#2 ] -- zpptrby1=_inc_zpptrby1
|
||||
inc 6
|
||||
inc 2
|
||||
bne !+
|
||||
inc 6+1
|
||||
inc 2+1
|
||||
!:
|
||||
//SEG39 [17] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] -- zpby1=_inc_zpby1
|
||||
inc 5
|
||||
//SEG39 [17] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] -- xby=_inc_xby
|
||||
inx
|
||||
//SEG40 [12] phi from rvaluevar::@2 to rvaluevar::@1
|
||||
rvaluevar__B1_from_B2:
|
||||
//SEG41 [12] phi (byte*) rvaluevar::screen#2 = (byte*) rvaluevar::screen#1 -- register_copy
|
||||
@ -2246,22 +2482,18 @@ rvaluevar__B1_from_B2:
|
||||
jmp rvaluevar__B1
|
||||
//SEG43 rvalue
|
||||
rvalue:
|
||||
//SEG44 [18] (byte) rvalue::b#0 ← * (word) 1024 [ ] -- zpby1=_star_cowo1
|
||||
//SEG44 [18] (byte) rvalue::b#0 ← * (word) 1024 [ ] -- aby=_star_cowo1
|
||||
lda 1024
|
||||
sta 11
|
||||
//SEG45 [19] (byte) rvalue::b#1 ← * (word) 1025 [ ] -- zpby1=_star_cowo1
|
||||
//SEG45 [19] (byte) rvalue::b#1 ← * (word) 1025 [ ] -- aby=_star_cowo1
|
||||
lda 1025
|
||||
sta 12
|
||||
//SEG46 [20] phi from rvalue to rvalue::@1
|
||||
rvalue__B1_from_rvalue:
|
||||
//SEG47 [20] phi (byte) rvalue::i#2 = (byte) 2 -- zpby1=coby1
|
||||
lda #2
|
||||
sta 8
|
||||
//SEG47 [20] phi (byte) rvalue::i#2 = (byte) 2 -- xby=coby1
|
||||
ldx #2
|
||||
//SEG48 rvalue::@1
|
||||
rvalue__B1:
|
||||
//SEG49 [21] if((byte) rvalue::i#2<(byte) 10) goto rvalue::@2 [ rvalue::i#2 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 8
|
||||
cmp #10
|
||||
//SEG49 [21] if((byte) rvalue::i#2<(byte) 10) goto rvalue::@2 [ rvalue::i#2 ] -- xby_lt_coby1_then_la1
|
||||
cpx #10
|
||||
bcc rvalue__B2
|
||||
//SEG50 rvalue::@return
|
||||
rvalue__Breturn:
|
||||
@ -2269,12 +2501,10 @@ rvalue__Breturn:
|
||||
rts
|
||||
//SEG52 rvalue::@2
|
||||
rvalue__B2:
|
||||
//SEG53 [23] (byte) rvalue::b#2 ← (word) 1024 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] -- zpby1=cowo1_staridx_zpby2
|
||||
ldx 8
|
||||
//SEG53 [23] (byte) rvalue::b#2 ← (word) 1024 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] -- aby=cowo1_staridx_xby
|
||||
lda 1024,x
|
||||
sta 13
|
||||
//SEG54 [24] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] -- zpby1=_inc_zpby1
|
||||
inc 8
|
||||
//SEG54 [24] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] -- xby=_inc_xby
|
||||
inx
|
||||
//SEG55 [20] phi from rvalue::@2 to rvalue::@1
|
||||
rvalue__B1_from_B2:
|
||||
//SEG56 [20] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 -- register_copy
|
||||
@ -2289,14 +2519,12 @@ lvalue:
|
||||
sta 1025
|
||||
//SEG60 [27] phi from lvalue to lvalue::@1
|
||||
lvalue__B1_from_lvalue:
|
||||
//SEG61 [27] phi (byte) lvalue::i#2 = (byte) 2 -- zpby1=coby1
|
||||
lda #2
|
||||
sta 9
|
||||
//SEG61 [27] phi (byte) lvalue::i#2 = (byte) 2 -- xby=coby1
|
||||
ldx #2
|
||||
//SEG62 lvalue::@1
|
||||
lvalue__B1:
|
||||
//SEG63 [28] if((byte) lvalue::i#2<(byte) 10) goto lvalue::@2 [ lvalue::i#2 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 9
|
||||
cmp #10
|
||||
//SEG63 [28] if((byte) lvalue::i#2<(byte) 10) goto lvalue::@2 [ lvalue::i#2 ] -- xby_lt_coby1_then_la1
|
||||
cpx #10
|
||||
bcc lvalue__B2
|
||||
//SEG64 lvalue::@return
|
||||
lvalue__Breturn:
|
||||
@ -2304,12 +2532,11 @@ lvalue__Breturn:
|
||||
rts
|
||||
//SEG66 lvalue::@2
|
||||
lvalue__B2:
|
||||
//SEG67 [30] *((word) 1024 + (byte) lvalue::i#2) ← (byte) 3 [ lvalue::i#2 ] -- cowo1_staridx_zpby1=coby2
|
||||
//SEG67 [30] *((word) 1024 + (byte) lvalue::i#2) ← (byte) 3 [ lvalue::i#2 ] -- cowo1_staridx_xby=coby2
|
||||
lda #3
|
||||
ldx 9
|
||||
sta 1024,x
|
||||
//SEG68 [31] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] -- zpby1=_inc_zpby1
|
||||
inc 9
|
||||
//SEG68 [31] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] -- xby=_inc_xby
|
||||
inx
|
||||
//SEG69 [27] phi from lvalue::@2 to lvalue::@1
|
||||
lvalue__B1_from_B2:
|
||||
//SEG70 [27] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 -- register_copy
|
||||
@ -2324,19 +2551,19 @@ FINAL SYMBOL TABLE
|
||||
(label) lvalue::@return
|
||||
(byte[1024]) lvalue::SCREEN
|
||||
(byte) lvalue::i
|
||||
(byte) lvalue::i#1 zp byte:9 22.0
|
||||
(byte) lvalue::i#2 zp byte:9 14.666666666666666
|
||||
(byte) lvalue::i#1 reg byte x 22.0
|
||||
(byte) lvalue::i#2 reg byte x 14.666666666666666
|
||||
(void()) lvaluevar()
|
||||
(label) lvaluevar::@1
|
||||
(label) lvaluevar::@2
|
||||
(label) lvaluevar::@return
|
||||
(byte) lvaluevar::b
|
||||
(byte) lvaluevar::i
|
||||
(byte) lvaluevar::i#1 zp byte:2 22.0
|
||||
(byte) lvaluevar::i#2 zp byte:2 8.25
|
||||
(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 ptr byte:3 11.0
|
||||
(byte*) lvaluevar::screen#2 zp ptr byte:3 11.0
|
||||
(byte*) lvaluevar::screen#1 zp ptr byte:2 11.0
|
||||
(byte*) lvaluevar::screen#2 zp ptr byte:2 11.0
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
@ -2348,27 +2575,34 @@ FINAL SYMBOL TABLE
|
||||
(label) rvalue::@return
|
||||
(byte[1024]) rvalue::SCREEN
|
||||
(byte) rvalue::b
|
||||
(byte) rvalue::b#0 zp byte:11 Infinity
|
||||
(byte) rvalue::b#1 zp byte:12 Infinity
|
||||
(byte) rvalue::b#2 zp byte:13 Infinity
|
||||
(byte) rvalue::b#0 reg byte a Infinity
|
||||
(byte) rvalue::b#1 reg byte a Infinity
|
||||
(byte) rvalue::b#2 reg byte a Infinity
|
||||
(byte) rvalue::i
|
||||
(byte) rvalue::i#1 zp byte:8 22.0
|
||||
(byte) rvalue::i#2 zp byte:8 14.666666666666666
|
||||
(byte) rvalue::i#1 reg byte x 22.0
|
||||
(byte) rvalue::i#2 reg byte x 14.666666666666666
|
||||
(void()) rvaluevar()
|
||||
(label) rvaluevar::@1
|
||||
(label) rvaluevar::@2
|
||||
(label) rvaluevar::@return
|
||||
(byte) rvaluevar::b
|
||||
(byte) rvaluevar::b#0 zp byte:10 Infinity
|
||||
(byte) rvaluevar::b#0 reg byte a Infinity
|
||||
(byte) rvaluevar::i
|
||||
(byte) rvaluevar::i#1 zp byte:5 22.0
|
||||
(byte) rvaluevar::i#2 zp byte:5 8.25
|
||||
(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 ptr byte:6 11.0
|
||||
(byte*) rvaluevar::screen#2 zp ptr byte:6 11.0
|
||||
(byte*) rvaluevar::screen#1 zp ptr byte:2 11.0
|
||||
(byte*) rvaluevar::screen#2 zp ptr byte:2 11.0
|
||||
|
||||
zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 lvalue::i#2 lvalue::i#1 rvaluevar::b#0 rvalue::b#0 rvalue::b#1 rvalue::b#2 ]
|
||||
zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ]
|
||||
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 ]
|
||||
reg byte a [ rvaluevar::b#0 ]
|
||||
reg byte a [ rvalue::b#0 ]
|
||||
reg byte a [ rvalue::b#1 ]
|
||||
reg byte a [ rvalue::b#2 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 @BEGIN
|
||||
@ -2403,17 +2637,15 @@ lvaluevar:
|
||||
lvaluevar__B1_from_lvaluevar:
|
||||
//SEG15 [6] phi (byte*) lvaluevar::screen#2 = (word) 1024 -- zpptrby1=cowo1
|
||||
lda #<1024
|
||||
sta 3
|
||||
lda #>1024
|
||||
sta 3+1
|
||||
//SEG16 [6] phi (byte) lvaluevar::i#2 = (byte) 2 -- zpby1=coby1
|
||||
lda #2
|
||||
sta 2
|
||||
lda #>1024
|
||||
sta 2+1
|
||||
//SEG16 [6] phi (byte) lvaluevar::i#2 = (byte) 2 -- xby=coby1
|
||||
ldx #2
|
||||
//SEG17 lvaluevar::@1
|
||||
lvaluevar__B1:
|
||||
//SEG18 [7] if((byte) lvaluevar::i#2<(byte) 10) goto lvaluevar::@2 [ lvaluevar::i#2 lvaluevar::screen#2 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 2
|
||||
cmp #10
|
||||
//SEG18 [7] if((byte) lvaluevar::i#2<(byte) 10) goto lvaluevar::@2 [ lvaluevar::i#2 lvaluevar::screen#2 ] -- xby_lt_coby1_then_la1
|
||||
cpx #10
|
||||
bcc lvaluevar__B2
|
||||
//SEG19 lvaluevar::@return
|
||||
lvaluevar__Breturn:
|
||||
@ -2424,14 +2656,14 @@ lvaluevar__B2:
|
||||
//SEG22 [9] *((byte*) lvaluevar::screen#2) ← (byte) 4 [ lvaluevar::i#2 lvaluevar::screen#2 ] -- _star_zpptrby1=coby1
|
||||
ldy #0
|
||||
lda #4
|
||||
sta (3),y
|
||||
sta (2),y
|
||||
//SEG23 [10] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#2 [ lvaluevar::screen#1 lvaluevar::i#2 ] -- zpptrby1=_inc_zpptrby1
|
||||
inc 3
|
||||
bne !+
|
||||
inc 3+1
|
||||
!:
|
||||
//SEG24 [11] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 [ lvaluevar::i#1 lvaluevar::screen#1 ] -- zpby1=_inc_zpby1
|
||||
inc 2
|
||||
bne !+
|
||||
inc 2+1
|
||||
!:
|
||||
//SEG24 [11] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 [ lvaluevar::i#1 lvaluevar::screen#1 ] -- xby=_inc_xby
|
||||
inx
|
||||
//SEG25 [6] phi from lvaluevar::@2 to lvaluevar::@1
|
||||
lvaluevar__B1_from_B2:
|
||||
//SEG26 [6] phi (byte*) lvaluevar::screen#2 = (byte*) lvaluevar::screen#1 -- register_copy
|
||||
@ -2443,17 +2675,15 @@ rvaluevar:
|
||||
rvaluevar__B1_from_rvaluevar:
|
||||
//SEG30 [12] phi (byte*) rvaluevar::screen#2 = (word) 1024 -- zpptrby1=cowo1
|
||||
lda #<1024
|
||||
sta 6
|
||||
sta 2
|
||||
lda #>1024
|
||||
sta 6+1
|
||||
//SEG31 [12] phi (byte) rvaluevar::i#2 = (byte) 2 -- zpby1=coby1
|
||||
lda #2
|
||||
sta 5
|
||||
sta 2+1
|
||||
//SEG31 [12] phi (byte) rvaluevar::i#2 = (byte) 2 -- xby=coby1
|
||||
ldx #2
|
||||
//SEG32 rvaluevar::@1
|
||||
rvaluevar__B1:
|
||||
//SEG33 [13] if((byte) rvaluevar::i#2<(byte) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 5
|
||||
cmp #10
|
||||
//SEG33 [13] if((byte) rvaluevar::i#2<(byte) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- xby_lt_coby1_then_la1
|
||||
cpx #10
|
||||
bcc rvaluevar__B2
|
||||
//SEG34 rvaluevar::@return
|
||||
rvaluevar__Breturn:
|
||||
@ -2461,17 +2691,16 @@ rvaluevar__Breturn:
|
||||
rts
|
||||
//SEG36 rvaluevar::@2
|
||||
rvaluevar__B2:
|
||||
//SEG37 [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- zpby1=_star_zpptrby1
|
||||
//SEG37 [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- aby=_star_zpptrby1
|
||||
ldy #0
|
||||
lda (6),y
|
||||
sta 10
|
||||
lda (2),y
|
||||
//SEG38 [16] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 [ rvaluevar::screen#1 rvaluevar::i#2 ] -- zpptrby1=_inc_zpptrby1
|
||||
inc 6
|
||||
inc 2
|
||||
bne !+
|
||||
inc 6+1
|
||||
inc 2+1
|
||||
!:
|
||||
//SEG39 [17] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] -- zpby1=_inc_zpby1
|
||||
inc 5
|
||||
//SEG39 [17] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] -- xby=_inc_xby
|
||||
inx
|
||||
//SEG40 [12] phi from rvaluevar::@2 to rvaluevar::@1
|
||||
rvaluevar__B1_from_B2:
|
||||
//SEG41 [12] phi (byte*) rvaluevar::screen#2 = (byte*) rvaluevar::screen#1 -- register_copy
|
||||
@ -2479,22 +2708,18 @@ rvaluevar__B1_from_B2:
|
||||
jmp rvaluevar__B1
|
||||
//SEG43 rvalue
|
||||
rvalue:
|
||||
//SEG44 [18] (byte) rvalue::b#0 ← * (word) 1024 [ ] -- zpby1=_star_cowo1
|
||||
//SEG44 [18] (byte) rvalue::b#0 ← * (word) 1024 [ ] -- aby=_star_cowo1
|
||||
lda 1024
|
||||
sta 11
|
||||
//SEG45 [19] (byte) rvalue::b#1 ← * (word) 1025 [ ] -- zpby1=_star_cowo1
|
||||
//SEG45 [19] (byte) rvalue::b#1 ← * (word) 1025 [ ] -- aby=_star_cowo1
|
||||
lda 1025
|
||||
sta 12
|
||||
//SEG46 [20] phi from rvalue to rvalue::@1
|
||||
rvalue__B1_from_rvalue:
|
||||
//SEG47 [20] phi (byte) rvalue::i#2 = (byte) 2 -- zpby1=coby1
|
||||
lda #2
|
||||
sta 8
|
||||
//SEG47 [20] phi (byte) rvalue::i#2 = (byte) 2 -- xby=coby1
|
||||
ldx #2
|
||||
//SEG48 rvalue::@1
|
||||
rvalue__B1:
|
||||
//SEG49 [21] if((byte) rvalue::i#2<(byte) 10) goto rvalue::@2 [ rvalue::i#2 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 8
|
||||
cmp #10
|
||||
//SEG49 [21] if((byte) rvalue::i#2<(byte) 10) goto rvalue::@2 [ rvalue::i#2 ] -- xby_lt_coby1_then_la1
|
||||
cpx #10
|
||||
bcc rvalue__B2
|
||||
//SEG50 rvalue::@return
|
||||
rvalue__Breturn:
|
||||
@ -2502,12 +2727,10 @@ rvalue__Breturn:
|
||||
rts
|
||||
//SEG52 rvalue::@2
|
||||
rvalue__B2:
|
||||
//SEG53 [23] (byte) rvalue::b#2 ← (word) 1024 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] -- zpby1=cowo1_staridx_zpby2
|
||||
ldx 8
|
||||
//SEG53 [23] (byte) rvalue::b#2 ← (word) 1024 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] -- aby=cowo1_staridx_xby
|
||||
lda 1024,x
|
||||
sta 13
|
||||
//SEG54 [24] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] -- zpby1=_inc_zpby1
|
||||
inc 8
|
||||
//SEG54 [24] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] -- xby=_inc_xby
|
||||
inx
|
||||
//SEG55 [20] phi from rvalue::@2 to rvalue::@1
|
||||
rvalue__B1_from_B2:
|
||||
//SEG56 [20] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 -- register_copy
|
||||
@ -2522,14 +2745,12 @@ lvalue:
|
||||
sta 1025
|
||||
//SEG60 [27] phi from lvalue to lvalue::@1
|
||||
lvalue__B1_from_lvalue:
|
||||
//SEG61 [27] phi (byte) lvalue::i#2 = (byte) 2 -- zpby1=coby1
|
||||
lda #2
|
||||
sta 9
|
||||
//SEG61 [27] phi (byte) lvalue::i#2 = (byte) 2 -- xby=coby1
|
||||
ldx #2
|
||||
//SEG62 lvalue::@1
|
||||
lvalue__B1:
|
||||
//SEG63 [28] if((byte) lvalue::i#2<(byte) 10) goto lvalue::@2 [ lvalue::i#2 ] -- zpby1_lt_coby1_then_la1
|
||||
lda 9
|
||||
cmp #10
|
||||
//SEG63 [28] if((byte) lvalue::i#2<(byte) 10) goto lvalue::@2 [ lvalue::i#2 ] -- xby_lt_coby1_then_la1
|
||||
cpx #10
|
||||
bcc lvalue__B2
|
||||
//SEG64 lvalue::@return
|
||||
lvalue__Breturn:
|
||||
@ -2537,12 +2758,11 @@ lvalue__Breturn:
|
||||
rts
|
||||
//SEG66 lvalue::@2
|
||||
lvalue__B2:
|
||||
//SEG67 [30] *((word) 1024 + (byte) lvalue::i#2) ← (byte) 3 [ lvalue::i#2 ] -- cowo1_staridx_zpby1=coby2
|
||||
//SEG67 [30] *((word) 1024 + (byte) lvalue::i#2) ← (byte) 3 [ lvalue::i#2 ] -- cowo1_staridx_xby=coby2
|
||||
lda #3
|
||||
ldx 9
|
||||
sta 1024,x
|
||||
//SEG68 [31] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] -- zpby1=_inc_zpby1
|
||||
inc 9
|
||||
//SEG68 [31] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] -- xby=_inc_xby
|
||||
inx
|
||||
//SEG69 [27] phi from lvalue::@2 to lvalue::@1
|
||||
lvalue__B1_from_B2:
|
||||
//SEG70 [27] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 -- register_copy
|
||||
|
@ -6,19 +6,19 @@
|
||||
(label) lvalue::@return
|
||||
(byte[1024]) lvalue::SCREEN
|
||||
(byte) lvalue::i
|
||||
(byte) lvalue::i#1 zp byte:9 22.0
|
||||
(byte) lvalue::i#2 zp byte:9 14.666666666666666
|
||||
(byte) lvalue::i#1 reg byte x 22.0
|
||||
(byte) lvalue::i#2 reg byte x 14.666666666666666
|
||||
(void()) lvaluevar()
|
||||
(label) lvaluevar::@1
|
||||
(label) lvaluevar::@2
|
||||
(label) lvaluevar::@return
|
||||
(byte) lvaluevar::b
|
||||
(byte) lvaluevar::i
|
||||
(byte) lvaluevar::i#1 zp byte:2 22.0
|
||||
(byte) lvaluevar::i#2 zp byte:2 8.25
|
||||
(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 ptr byte:3 11.0
|
||||
(byte*) lvaluevar::screen#2 zp ptr byte:3 11.0
|
||||
(byte*) lvaluevar::screen#1 zp ptr byte:2 11.0
|
||||
(byte*) lvaluevar::screen#2 zp ptr byte:2 11.0
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
@ -30,24 +30,31 @@
|
||||
(label) rvalue::@return
|
||||
(byte[1024]) rvalue::SCREEN
|
||||
(byte) rvalue::b
|
||||
(byte) rvalue::b#0 zp byte:11 Infinity
|
||||
(byte) rvalue::b#1 zp byte:12 Infinity
|
||||
(byte) rvalue::b#2 zp byte:13 Infinity
|
||||
(byte) rvalue::b#0 reg byte a Infinity
|
||||
(byte) rvalue::b#1 reg byte a Infinity
|
||||
(byte) rvalue::b#2 reg byte a Infinity
|
||||
(byte) rvalue::i
|
||||
(byte) rvalue::i#1 zp byte:8 22.0
|
||||
(byte) rvalue::i#2 zp byte:8 14.666666666666666
|
||||
(byte) rvalue::i#1 reg byte x 22.0
|
||||
(byte) rvalue::i#2 reg byte x 14.666666666666666
|
||||
(void()) rvaluevar()
|
||||
(label) rvaluevar::@1
|
||||
(label) rvaluevar::@2
|
||||
(label) rvaluevar::@return
|
||||
(byte) rvaluevar::b
|
||||
(byte) rvaluevar::b#0 zp byte:10 Infinity
|
||||
(byte) rvaluevar::b#0 reg byte a Infinity
|
||||
(byte) rvaluevar::i
|
||||
(byte) rvaluevar::i#1 zp byte:5 22.0
|
||||
(byte) rvaluevar::i#2 zp byte:5 8.25
|
||||
(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 ptr byte:6 11.0
|
||||
(byte*) rvaluevar::screen#2 zp ptr byte:6 11.0
|
||||
(byte*) rvaluevar::screen#1 zp ptr byte:2 11.0
|
||||
(byte*) rvaluevar::screen#2 zp ptr byte:2 11.0
|
||||
|
||||
zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 lvalue::i#2 lvalue::i#1 rvaluevar::b#0 rvalue::b#0 rvalue::b#1 rvalue::b#2 ]
|
||||
zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ]
|
||||
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 ]
|
||||
reg byte a [ rvaluevar::b#0 ]
|
||||
reg byte a [ rvalue::b#0 ]
|
||||
reg byte a [ rvalue::b#1 ]
|
||||
reg byte a [ rvalue::b#2 ]
|
||||
|
@ -1,31 +1,19 @@
|
||||
BBEGIN:
|
||||
sum_from_BBEGIN:
|
||||
lda #2
|
||||
sta 3
|
||||
lda #1
|
||||
sta 2
|
||||
jsr sum
|
||||
B2:
|
||||
lda 7
|
||||
sta 4
|
||||
sta 2
|
||||
sum_from_B2:
|
||||
lda #13
|
||||
sta 3
|
||||
lda #9
|
||||
sta 2
|
||||
jsr sum
|
||||
B3:
|
||||
lda 7
|
||||
sta 5
|
||||
lda 4
|
||||
clc
|
||||
adc 5
|
||||
sta 6
|
||||
adc 2
|
||||
BEND:
|
||||
sum:
|
||||
lda 2
|
||||
clc
|
||||
adc 3
|
||||
sta 7
|
||||
asl
|
||||
sum__Breturn:
|
||||
rts
|
||||
|
@ -442,35 +442,187 @@ sum__Breturn:
|
||||
//SEG18 [7] return [ sum::return#0 s1#0 ]
|
||||
rts
|
||||
|
||||
Uplifting max weight Infinity live range equivalence class zp byte:6 [ s3#0 ]
|
||||
Uplift to reg byte a succesfull.
|
||||
Uplift to reg byte x succesfull.
|
||||
Uplift to reg byte y succesfull.
|
||||
REGISTER UPLIFTING
|
||||
(byte) s1
|
||||
(byte) s1#0 zp byte:4 0.5714285714285714
|
||||
(byte) s2
|
||||
(byte) s2#0 zp byte:5 4.0
|
||||
(byte) s3
|
||||
(byte) s3#0 zp byte:6 Infinity
|
||||
(byte()) sum((byte) sum::a , (byte) sum::b)
|
||||
(byte) sum::a
|
||||
(byte) sum::a#2 zp byte:2 2.0
|
||||
(byte) sum::b
|
||||
(byte) sum::b#2 zp byte:3 2.0
|
||||
(byte) sum::return
|
||||
(byte) sum::return#0 zp byte:7 1.2000000000000002
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [sum] 2: zp byte:2 [ sum::a#2 ] 2: zp byte:3 [ sum::b#2 ] 1.2: zp byte:7 [ sum::return#0 ]
|
||||
Uplift Scope [] ∞: zp byte:6 [ s3#0 ] 4: zp byte:5 [ s2#0 ] 0.57: zp byte:4 [ s1#0 ]
|
||||
|
||||
zp byte:2 [ sum::a#2 ]
|
||||
zp byte:3 [ sum::b#2 ]
|
||||
zp byte:4 [ s1#0 ]
|
||||
zp byte:5 [ s2#0 ]
|
||||
zp byte:6 [ s3#0 ]
|
||||
zp byte:7 [ sum::return#0 ]
|
||||
|
||||
Coalescing zero page register [ zp byte:2 [ sum::a#2 ] ] with [ zp byte:5 [ s2#0 ] ]
|
||||
Coalescing zero page register [ zp byte:2 [ sum::a#2 s2#0 ] ] with [ zp byte:6 [ s3#0 ] ]
|
||||
Coalescing zero page register [ zp byte:2 [ sum::a#2 s2#0 s3#0 ] ] with [ zp byte:7 [ sum::return#0 ] ]
|
||||
Uplift attempt [sum] 57 allocation: zp byte:2 [ sum::a#2 ] zp byte:3 [ sum::b#2 ] zp byte:7 [ sum::return#0 ]
|
||||
Uplift attempt [sum] 51 allocation: reg byte a [ sum::a#2 ] zp byte:3 [ sum::b#2 ] zp byte:7 [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment zpby1=xby_plus_zpby2
|
||||
Uplift attempt [sum] 52 allocation: reg byte y [ sum::a#2 ] zp byte:3 [ sum::b#2 ] zp byte:7 [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment zpby1=zpby2_plus_aby
|
||||
Uplift attempt [sum] 45 allocation: reg byte a [ sum::a#2 ] reg byte a [ sum::b#2 ] zp byte:7 [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment zpby1=xby_plus_aby
|
||||
Uplift attempt [sum] missing fragment zpby1=yby_plus_aby
|
||||
Uplift attempt [sum] missing fragment zpby1=zpby2_plus_xby
|
||||
Uplift attempt [sum] missing fragment zpby1=aby_plus_xby
|
||||
Uplift attempt [sum] missing fragment zpby1=xby_plus_xby
|
||||
Uplift attempt [sum] missing fragment zpby1=yby_plus_xby
|
||||
Uplift attempt [sum] missing fragment zpby1=zpby2_plus_yby
|
||||
Uplift attempt [sum] missing fragment zpby1=aby_plus_yby
|
||||
Uplift attempt [sum] missing fragment zpby1=xby_plus_yby
|
||||
Uplift attempt [sum] missing fragment zpby1=yby_plus_yby
|
||||
Uplift attempt [sum] 51 allocation: zp byte:2 [ sum::a#2 ] zp byte:3 [ sum::b#2 ] reg byte a [ sum::return#0 ]
|
||||
Uplift attempt [sum] 45 allocation: reg byte a [ sum::a#2 ] zp byte:3 [ sum::b#2 ] reg byte a [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment aby=xby_plus_zpby1
|
||||
Uplift attempt [sum] missing fragment aby=yby_plus_zpby1
|
||||
Uplift attempt [sum] 45 allocation: zp byte:2 [ sum::a#2 ] reg byte a [ sum::b#2 ] reg byte a [ sum::return#0 ]
|
||||
Uplift attempt [sum] 39 allocation: reg byte a [ sum::a#2 ] reg byte a [ sum::b#2 ] reg byte a [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment aby=xby_plus_aby
|
||||
Uplift attempt [sum] missing fragment aby=yby_plus_aby
|
||||
Uplift attempt [sum] missing fragment aby=zpby1_plus_xby
|
||||
Uplift attempt [sum] 43 allocation: reg byte a [ sum::a#2 ] reg byte x [ sum::b#2 ] reg byte a [ sum::return#0 ]
|
||||
Uplift attempt [sum] 40 allocation: reg byte x [ sum::a#2 ] reg byte x [ sum::b#2 ] reg byte a [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment aby=yby_plus_xby
|
||||
Uplift attempt [sum] missing fragment aby=zpby1_plus_yby
|
||||
Uplift attempt [sum] 43 allocation: reg byte a [ sum::a#2 ] reg byte y [ sum::b#2 ] reg byte a [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment aby=xby_plus_yby
|
||||
Uplift attempt [sum] missing fragment aby=yby_plus_yby
|
||||
Uplift attempt [sum] 52 allocation: zp byte:2 [ sum::a#2 ] zp byte:3 [ sum::b#2 ] reg byte x [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment xby=aby_plus_zpby1
|
||||
Uplift attempt [sum] 47 allocation: reg byte x [ sum::a#2 ] zp byte:3 [ sum::b#2 ] reg byte x [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment xby=yby_plus_zpby1
|
||||
Uplift attempt [sum] missing fragment xby=zpby1_plus_aby
|
||||
Uplift attempt [sum] missing fragment xby=aby_plus_aby
|
||||
Uplift attempt [sum] 44 allocation: reg byte x [ sum::a#2 ] reg byte a [ sum::b#2 ] reg byte x [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment xby=yby_plus_aby
|
||||
Uplift attempt [sum] missing fragment xby=zpby1_plus_xby
|
||||
Uplift attempt [sum] missing fragment xby=aby_plus_xby
|
||||
Uplift attempt [sum] 41 allocation: reg byte x [ sum::a#2 ] reg byte x [ sum::b#2 ] reg byte x [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment xby=yby_plus_xby
|
||||
Uplift attempt [sum] missing fragment xby=zpby1_plus_yby
|
||||
Uplift attempt [sum] missing fragment xby=aby_plus_yby
|
||||
Uplift attempt [sum] 45 allocation: reg byte x [ sum::a#2 ] reg byte y [ sum::b#2 ] reg byte x [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment xby=yby_plus_yby
|
||||
Uplift attempt [sum] 52 allocation: zp byte:2 [ sum::a#2 ] zp byte:3 [ sum::b#2 ] reg byte y [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment yby=aby_plus_zpby1
|
||||
Uplift attempt [sum] missing fragment yby=xby_plus_zpby1
|
||||
Uplift attempt [sum] 47 allocation: reg byte y [ sum::a#2 ] zp byte:3 [ sum::b#2 ] reg byte y [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment yby=zpby1_plus_aby
|
||||
Uplift attempt [sum] missing fragment yby=aby_plus_aby
|
||||
Uplift attempt [sum] missing fragment yby=xby_plus_aby
|
||||
Uplift attempt [sum] 44 allocation: reg byte y [ sum::a#2 ] reg byte a [ sum::b#2 ] reg byte y [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment yby=zpby1_plus_xby
|
||||
Uplift attempt [sum] missing fragment yby=aby_plus_xby
|
||||
Uplift attempt [sum] missing fragment yby=xby_plus_xby
|
||||
Uplift attempt [sum] 45 allocation: reg byte y [ sum::a#2 ] reg byte x [ sum::b#2 ] reg byte y [ sum::return#0 ]
|
||||
Uplift attempt [sum] missing fragment yby=zpby1_plus_yby
|
||||
Uplift attempt [sum] missing fragment yby=aby_plus_yby
|
||||
Uplift attempt [sum] missing fragment yby=xby_plus_yby
|
||||
Uplift attempt [sum] 41 allocation: reg byte y [ sum::a#2 ] reg byte y [ sum::b#2 ] reg byte y [ sum::return#0 ]
|
||||
Uplifting [sum] best 39 combination reg byte a [ sum::a#2 ] reg byte a [ sum::b#2 ] reg byte a [ sum::return#0 ]
|
||||
Uplift attempt [] 39 allocation: zp byte:6 [ s3#0 ] zp byte:5 [ s2#0 ] zp byte:4 [ s1#0 ]
|
||||
Uplift attempt [] 37 allocation: reg byte a [ s3#0 ] zp byte:5 [ s2#0 ] zp byte:4 [ s1#0 ]
|
||||
Uplift attempt [] 38 allocation: reg byte x [ s3#0 ] zp byte:5 [ s2#0 ] zp byte:4 [ s1#0 ]
|
||||
Uplift attempt [] 38 allocation: reg byte y [ s3#0 ] zp byte:5 [ s2#0 ] zp byte:4 [ s1#0 ]
|
||||
Uplift attempt [] missing fragment zpby1=zpby2_plus_aby
|
||||
Uplift attempt [] 33 allocation: reg byte a [ s3#0 ] reg byte a [ s2#0 ] zp byte:4 [ s1#0 ]
|
||||
Uplift attempt [] missing fragment xby=zpby1_plus_aby
|
||||
Uplift attempt [] missing fragment yby=zpby1_plus_aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] clobber allocation: zp byte:6 [ s3#0 ] zp byte:5 [ s2#0 ] reg byte a [ s1#0 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ s3#0 ] zp byte:5 [ s2#0 ] reg byte a [ s1#0 ]
|
||||
Uplift attempt [] missing fragment xby=aby_plus_zpby1
|
||||
Uplift attempt [] missing fragment yby=aby_plus_zpby1
|
||||
Uplift attempt [] clobber allocation: zp byte:6 [ s3#0 ] reg byte a [ s2#0 ] reg byte a [ s1#0 ]
|
||||
Uplift attempt [] clobber allocation: reg byte a [ s3#0 ] reg byte a [ s2#0 ] reg byte a [ s1#0 ]
|
||||
Uplift attempt [] missing fragment xby=aby_plus_aby
|
||||
Uplift attempt [] missing fragment yby=aby_plus_aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment xby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplift attempt [] missing fragment yby=aby
|
||||
Uplifting [] best 33 combination reg byte a [ s3#0 ] reg byte a [ s2#0 ] zp byte:4 [ s1#0 ]
|
||||
MISSING FRAGMENTS
|
||||
zpby1=xby_plus_zpby2
|
||||
zpby1=zpby2_plus_aby
|
||||
zpby1=xby_plus_aby
|
||||
zpby1=yby_plus_aby
|
||||
zpby1=zpby2_plus_xby
|
||||
zpby1=aby_plus_xby
|
||||
zpby1=xby_plus_xby
|
||||
zpby1=yby_plus_xby
|
||||
zpby1=zpby2_plus_yby
|
||||
zpby1=aby_plus_yby
|
||||
zpby1=xby_plus_yby
|
||||
zpby1=yby_plus_yby
|
||||
aby=xby_plus_zpby1
|
||||
aby=yby_plus_zpby1
|
||||
aby=xby_plus_aby
|
||||
aby=yby_plus_aby
|
||||
aby=zpby1_plus_xby
|
||||
aby=yby_plus_xby
|
||||
aby=zpby1_plus_yby
|
||||
aby=xby_plus_yby
|
||||
aby=yby_plus_yby
|
||||
xby=aby_plus_zpby1
|
||||
xby=yby_plus_zpby1
|
||||
xby=zpby1_plus_aby
|
||||
xby=aby_plus_aby
|
||||
xby=yby_plus_aby
|
||||
xby=zpby1_plus_xby
|
||||
xby=aby_plus_xby
|
||||
xby=yby_plus_xby
|
||||
xby=zpby1_plus_yby
|
||||
xby=aby_plus_yby
|
||||
xby=yby_plus_yby
|
||||
yby=aby_plus_zpby1
|
||||
yby=xby_plus_zpby1
|
||||
yby=zpby1_plus_aby
|
||||
yby=aby_plus_aby
|
||||
yby=xby_plus_aby
|
||||
yby=zpby1_plus_xby
|
||||
yby=aby_plus_xby
|
||||
yby=xby_plus_xby
|
||||
yby=zpby1_plus_yby
|
||||
yby=aby_plus_yby
|
||||
yby=xby_plus_yby
|
||||
xby=aby
|
||||
yby=aby
|
||||
Re-allocated ZP register from zp byte:4 to zp byte:2
|
||||
Removing instruction jmp B2
|
||||
Removing instruction jmp B3
|
||||
Removing instruction jmp BEND
|
||||
@ -482,47 +634,36 @@ BBEGIN:
|
||||
//SEG1 [0] call sum param-assignment [ sum::return#0 s1#0 ]
|
||||
//SEG2 [5] phi from @BEGIN to sum
|
||||
sum_from_BBEGIN:
|
||||
//SEG3 [5] phi (byte) sum::b#2 = (byte) 2 -- zpby1=coby1
|
||||
//SEG3 [5] phi (byte) sum::b#2 = (byte) 2 -- aby=coby1
|
||||
lda #2
|
||||
sta 3
|
||||
//SEG4 [5] phi (byte) sum::a#2 = (byte) 1 -- zpby1=coby1
|
||||
//SEG4 [5] phi (byte) sum::a#2 = (byte) 1 -- aby=coby1
|
||||
lda #1
|
||||
sta 2
|
||||
jsr sum
|
||||
//SEG5 @2
|
||||
B2:
|
||||
//SEG6 [1] (byte) s1#0 ← (byte) sum::return#0 [ sum::return#0 s1#0 ] -- zpby1=zpby2
|
||||
lda 7
|
||||
sta 4
|
||||
//SEG6 [1] (byte) s1#0 ← (byte) sum::return#0 [ sum::return#0 s1#0 ] -- zpby1=aby
|
||||
sta 2
|
||||
//SEG7 [2] call sum param-assignment [ sum::return#0 s1#0 ]
|
||||
//SEG8 [5] phi from @2 to sum
|
||||
sum_from_B2:
|
||||
//SEG9 [5] phi (byte) sum::b#2 = (byte) 13 -- zpby1=coby1
|
||||
//SEG9 [5] phi (byte) sum::b#2 = (byte) 13 -- aby=coby1
|
||||
lda #13
|
||||
sta 3
|
||||
//SEG10 [5] phi (byte) sum::a#2 = (byte) 9 -- zpby1=coby1
|
||||
//SEG10 [5] phi (byte) sum::a#2 = (byte) 9 -- aby=coby1
|
||||
lda #9
|
||||
sta 2
|
||||
jsr sum
|
||||
//SEG11 @3
|
||||
B3:
|
||||
//SEG12 [3] (byte) s2#0 ← (byte) sum::return#0 [ s1#0 s2#0 ] -- zpby1=zpby2
|
||||
lda 7
|
||||
sta 5
|
||||
//SEG13 [4] (byte) s3#0 ← (byte) s1#0 + (byte) s2#0 [ ] -- zpby1=zpby2_plus_zpby3
|
||||
lda 4
|
||||
//SEG12 [3] (byte) s2#0 ← (byte) sum::return#0 [ s1#0 s2#0 ]
|
||||
// (byte) s2#0 = (byte) sum::return#0 // register copy reg byte a
|
||||
//SEG13 [4] (byte) s3#0 ← (byte) s1#0 + (byte) s2#0 [ ] -- aby=zpby1_plus_aby
|
||||
clc
|
||||
adc 5
|
||||
sta 6
|
||||
adc 2
|
||||
//SEG14 @END
|
||||
BEND:
|
||||
//SEG15 sum
|
||||
sum:
|
||||
//SEG16 [6] (byte) sum::return#0 ← (byte) sum::a#2 + (byte) sum::b#2 [ sum::return#0 s1#0 ] -- zpby1=zpby2_plus_zpby3
|
||||
lda 2
|
||||
clc
|
||||
adc 3
|
||||
sta 7
|
||||
//SEG16 [6] (byte) sum::return#0 ← (byte) sum::a#2 + (byte) sum::b#2 [ sum::return#0 s1#0 ] -- aby=aby_plus_aby
|
||||
asl
|
||||
//SEG17 sum::@return
|
||||
sum__Breturn:
|
||||
//SEG18 [7] return [ sum::return#0 s1#0 ]
|
||||
@ -534,23 +675,26 @@ FINAL SYMBOL TABLE
|
||||
(label) @BEGIN
|
||||
(label) @END
|
||||
(byte) s1
|
||||
(byte) s1#0 zp byte:4 0.5714285714285714
|
||||
(byte) s1#0 zp byte:2 0.5714285714285714
|
||||
(byte) s2
|
||||
(byte) s2#0 zp byte:5 4.0
|
||||
(byte) s2#0 reg byte a 4.0
|
||||
(byte) s3
|
||||
(byte) s3#0 zp byte:6 Infinity
|
||||
(byte) s3#0 reg byte a Infinity
|
||||
(byte()) sum((byte) sum::a , (byte) sum::b)
|
||||
(label) sum::@return
|
||||
(byte) sum::a
|
||||
(byte) sum::a#2 zp byte:2 2.0
|
||||
(byte) sum::a#2 reg byte a 2.0
|
||||
(byte) sum::b
|
||||
(byte) sum::b#2 zp byte:3 2.0
|
||||
(byte) sum::b#2 reg byte a 2.0
|
||||
(byte) sum::return
|
||||
(byte) sum::return#0 zp byte:7 1.2000000000000002
|
||||
(byte) sum::return#0 reg byte a 1.2000000000000002
|
||||
|
||||
zp byte:2 [ sum::a#2 s2#0 s3#0 sum::return#0 ]
|
||||
zp byte:3 [ sum::b#2 ]
|
||||
zp byte:4 [ s1#0 ]
|
||||
reg byte a [ sum::a#2 ]
|
||||
reg byte a [ sum::b#2 ]
|
||||
zp byte:2 [ s1#0 ]
|
||||
reg byte a [ s2#0 ]
|
||||
reg byte a [ s3#0 ]
|
||||
reg byte a [ sum::return#0 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 @BEGIN
|
||||
@ -558,47 +702,36 @@ BBEGIN:
|
||||
//SEG1 [0] call sum param-assignment [ sum::return#0 s1#0 ]
|
||||
//SEG2 [5] phi from @BEGIN to sum
|
||||
sum_from_BBEGIN:
|
||||
//SEG3 [5] phi (byte) sum::b#2 = (byte) 2 -- zpby1=coby1
|
||||
//SEG3 [5] phi (byte) sum::b#2 = (byte) 2 -- aby=coby1
|
||||
lda #2
|
||||
sta 3
|
||||
//SEG4 [5] phi (byte) sum::a#2 = (byte) 1 -- zpby1=coby1
|
||||
//SEG4 [5] phi (byte) sum::a#2 = (byte) 1 -- aby=coby1
|
||||
lda #1
|
||||
sta 2
|
||||
jsr sum
|
||||
//SEG5 @2
|
||||
B2:
|
||||
//SEG6 [1] (byte) s1#0 ← (byte) sum::return#0 [ sum::return#0 s1#0 ] -- zpby1=zpby2
|
||||
lda 7
|
||||
sta 4
|
||||
//SEG6 [1] (byte) s1#0 ← (byte) sum::return#0 [ sum::return#0 s1#0 ] -- zpby1=aby
|
||||
sta 2
|
||||
//SEG7 [2] call sum param-assignment [ sum::return#0 s1#0 ]
|
||||
//SEG8 [5] phi from @2 to sum
|
||||
sum_from_B2:
|
||||
//SEG9 [5] phi (byte) sum::b#2 = (byte) 13 -- zpby1=coby1
|
||||
//SEG9 [5] phi (byte) sum::b#2 = (byte) 13 -- aby=coby1
|
||||
lda #13
|
||||
sta 3
|
||||
//SEG10 [5] phi (byte) sum::a#2 = (byte) 9 -- zpby1=coby1
|
||||
//SEG10 [5] phi (byte) sum::a#2 = (byte) 9 -- aby=coby1
|
||||
lda #9
|
||||
sta 2
|
||||
jsr sum
|
||||
//SEG11 @3
|
||||
B3:
|
||||
//SEG12 [3] (byte) s2#0 ← (byte) sum::return#0 [ s1#0 s2#0 ] -- zpby1=zpby2
|
||||
lda 7
|
||||
sta 5
|
||||
//SEG13 [4] (byte) s3#0 ← (byte) s1#0 + (byte) s2#0 [ ] -- zpby1=zpby2_plus_zpby3
|
||||
lda 4
|
||||
//SEG12 [3] (byte) s2#0 ← (byte) sum::return#0 [ s1#0 s2#0 ]
|
||||
// (byte) s2#0 = (byte) sum::return#0 // register copy reg byte a
|
||||
//SEG13 [4] (byte) s3#0 ← (byte) s1#0 + (byte) s2#0 [ ] -- aby=zpby1_plus_aby
|
||||
clc
|
||||
adc 5
|
||||
sta 6
|
||||
adc 2
|
||||
//SEG14 @END
|
||||
BEND:
|
||||
//SEG15 sum
|
||||
sum:
|
||||
//SEG16 [6] (byte) sum::return#0 ← (byte) sum::a#2 + (byte) sum::b#2 [ sum::return#0 s1#0 ] -- zpby1=zpby2_plus_zpby3
|
||||
lda 2
|
||||
clc
|
||||
adc 3
|
||||
sta 7
|
||||
//SEG16 [6] (byte) sum::return#0 ← (byte) sum::a#2 + (byte) sum::b#2 [ sum::return#0 s1#0 ] -- aby=aby_plus_aby
|
||||
asl
|
||||
//SEG17 sum::@return
|
||||
sum__Breturn:
|
||||
//SEG18 [7] return [ sum::return#0 s1#0 ]
|
||||
|
@ -3,20 +3,23 @@
|
||||
(label) @BEGIN
|
||||
(label) @END
|
||||
(byte) s1
|
||||
(byte) s1#0 zp byte:4 0.5714285714285714
|
||||
(byte) s1#0 zp byte:2 0.5714285714285714
|
||||
(byte) s2
|
||||
(byte) s2#0 zp byte:5 4.0
|
||||
(byte) s2#0 reg byte a 4.0
|
||||
(byte) s3
|
||||
(byte) s3#0 zp byte:6 Infinity
|
||||
(byte) s3#0 reg byte a Infinity
|
||||
(byte()) sum((byte) sum::a , (byte) sum::b)
|
||||
(label) sum::@return
|
||||
(byte) sum::a
|
||||
(byte) sum::a#2 zp byte:2 2.0
|
||||
(byte) sum::a#2 reg byte a 2.0
|
||||
(byte) sum::b
|
||||
(byte) sum::b#2 zp byte:3 2.0
|
||||
(byte) sum::b#2 reg byte a 2.0
|
||||
(byte) sum::return
|
||||
(byte) sum::return#0 zp byte:7 1.2000000000000002
|
||||
(byte) sum::return#0 reg byte a 1.2000000000000002
|
||||
|
||||
zp byte:2 [ sum::a#2 s2#0 s3#0 sum::return#0 ]
|
||||
zp byte:3 [ sum::b#2 ]
|
||||
zp byte:4 [ s1#0 ]
|
||||
reg byte a [ sum::a#2 ]
|
||||
reg byte a [ sum::b#2 ]
|
||||
zp byte:2 [ s1#0 ]
|
||||
reg byte a [ s2#0 ]
|
||||
reg byte a [ s3#0 ]
|
||||
reg byte a [ sum::return#0 ]
|
||||
|
@ -225,11 +225,14 @@ main__Breturn:
|
||||
//SEG6 [2] return [ ]
|
||||
rts
|
||||
|
||||
REGISTER UPLIFTING
|
||||
(byte*) SCREEN
|
||||
(void()) main()
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main]
|
||||
Uplift Scope []
|
||||
|
||||
Uplift attempt [main] 15 allocation:
|
||||
Uplifting [main] best 15 combination
|
||||
Uplift attempt [] 15 allocation:
|
||||
Uplifting [] best 15 combination
|
||||
Removing instruction jmp BEND
|
||||
Removing instruction jmp main__Breturn
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
|
Loading…
Reference in New Issue
Block a user