mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-04-11 04:37:29 +00:00
Eliminated most register types and classes.
This commit is contained in:
parent
1b9e4347fc
commit
b93d65423d
@ -449,14 +449,7 @@ public class AsmFragmentInstanceSpecFactory {
|
||||
* @return The register part of the binding name.
|
||||
*/
|
||||
private String getRegisterName(Registers.Register register) {
|
||||
if(
|
||||
Registers.RegisterType.ZP_BOOL.equals(register.getType()) ||
|
||||
Registers.RegisterType.ZP_BYTE.equals(register.getType()) ||
|
||||
Registers.RegisterType.ZP_WORD.equals(register.getType()) ||
|
||||
Registers.RegisterType.ZP_MEM.equals(register.getType()) ||
|
||||
Registers.RegisterType.ZP_DWORD.equals(register.getType()) ||
|
||||
Registers.RegisterType.ZP_STRUCT.equals(register.getType())
|
||||
) {
|
||||
if(Registers.RegisterType.ZP_MEM.equals(register.getType())) {
|
||||
// Examine if the ZP register is already bound
|
||||
Registers.RegisterZp registerZp = (Registers.RegisterZp) register;
|
||||
String zpNameIdx = null;
|
||||
@ -497,11 +490,11 @@ public class AsmFragmentInstanceSpecFactory {
|
||||
memNameIdx = Integer.toString(nextZpIdx++);
|
||||
}
|
||||
return "m" + memNameIdx;
|
||||
} else if(Registers.RegisterType.REG_A_BYTE.equals(register.getType())) {
|
||||
} else if(Registers.RegisterType.REG_A.equals(register.getType())) {
|
||||
return "aa";
|
||||
} else if(Registers.RegisterType.REG_X_BYTE.equals(register.getType())) {
|
||||
} else if(Registers.RegisterType.REG_X.equals(register.getType())) {
|
||||
return "xx";
|
||||
} else if(Registers.RegisterType.REG_Y_BYTE.equals(register.getType())) {
|
||||
} else if(Registers.RegisterType.REG_Y.equals(register.getType())) {
|
||||
return "yy";
|
||||
} else if(Registers.RegisterType.REG_ALU.equals(register.getType())) {
|
||||
throw new AsmFragmentInstance.AluNotApplicableException();
|
||||
|
@ -42,15 +42,10 @@ public class Registers {
|
||||
|
||||
/** The register type. */
|
||||
public enum RegisterType {
|
||||
REG_A_BYTE,
|
||||
REG_Y_BYTE,
|
||||
REG_X_BYTE,
|
||||
REG_A,
|
||||
REG_Y,
|
||||
REG_X,
|
||||
REG_ALU,
|
||||
ZP_BYTE,
|
||||
ZP_WORD,
|
||||
ZP_DWORD,
|
||||
ZP_STRUCT,
|
||||
ZP_BOOL,
|
||||
ZP_VAR,
|
||||
ZP_MEM,
|
||||
CONSTANT,
|
||||
@ -66,6 +61,8 @@ public class Registers {
|
||||
|
||||
int getBytes();
|
||||
|
||||
boolean isNonRelocatable();
|
||||
|
||||
}
|
||||
|
||||
public static class RegisterMemory implements Register {
|
||||
@ -98,6 +95,11 @@ public class Registers {
|
||||
return bytes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNonRelocatable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "mem "+variableRef.toString();
|
||||
@ -137,6 +139,7 @@ public class Registers {
|
||||
|
||||
public abstract int getBytes();
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isZp() {
|
||||
return true;
|
||||
@ -174,13 +177,24 @@ public class Registers {
|
||||
/** Two zero page addresses used as a register for a single unsigned word variable. */
|
||||
public static class RegisterZpMem extends RegisterZp {
|
||||
|
||||
int bytes;
|
||||
/** The number of bytes that the register takes up*/
|
||||
private int bytes;
|
||||
|
||||
public RegisterZpMem(int zp, int bytes) {
|
||||
/** True if the address of the register is delcared in the code (non-relocatable)*/
|
||||
private boolean isNonRelocatable;
|
||||
|
||||
|
||||
public RegisterZpMem(int zp, int bytes, boolean isNonRelocatable) {
|
||||
super(zp);
|
||||
this.bytes = bytes;
|
||||
this.isNonRelocatable = isNonRelocatable;
|
||||
}
|
||||
|
||||
public RegisterZpMem(int zp, int bytes) {
|
||||
this(zp, bytes, false);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public RegisterType getType() {
|
||||
return RegisterType.ZP_MEM;
|
||||
@ -190,6 +204,10 @@ public class Registers {
|
||||
return bytes;
|
||||
}
|
||||
|
||||
public boolean isNonRelocatable() {
|
||||
return isNonRelocatable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
String typeString;
|
||||
@ -221,9 +239,12 @@ public class Registers {
|
||||
|
||||
private RegisterType type;
|
||||
|
||||
private int bytes;
|
||||
|
||||
public RegisterZpDeclared(int zp) {
|
||||
super(zp);
|
||||
this.type = RegisterType.ZP_VAR;
|
||||
this.bytes = -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -235,9 +256,22 @@ public class Registers {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public void setBytes(int bytes) {
|
||||
this.bytes = bytes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNonRelocatable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBytes() {
|
||||
return -1;
|
||||
return bytes;
|
||||
}
|
||||
|
||||
public RegisterZpMem getZpRegister(int bytes) {
|
||||
return new RegisterZpMem(getZp(), bytes, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -256,46 +290,6 @@ public class Registers {
|
||||
|
||||
}
|
||||
|
||||
|
||||
/** Zero page addresses used as a register for a struct variable. */
|
||||
public static class RegisterZpStruct extends RegisterZp {
|
||||
|
||||
private int bytes;
|
||||
|
||||
public RegisterZpStruct(int zp, int bytes) {
|
||||
super(zp);
|
||||
this.bytes = bytes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RegisterType getType() {
|
||||
return RegisterType.ZP_STRUCT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBytes() {
|
||||
return bytes;
|
||||
}
|
||||
}
|
||||
|
||||
/** A zero page address used as a register for a boolean variable. */
|
||||
public static class RegisterZpBool extends RegisterZp {
|
||||
|
||||
public RegisterZpBool(int zp) {
|
||||
super(zp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RegisterType getType() {
|
||||
return RegisterType.ZP_BOOL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBytes() {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/** A CPU byte register. */
|
||||
public static abstract class RegisterCpuByte implements Register {
|
||||
@Override
|
||||
@ -311,6 +305,11 @@ public class Registers {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNonRelocatable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract String toString();
|
||||
|
||||
@ -339,7 +338,7 @@ public class Registers {
|
||||
public static class RegisterXByte extends RegisterCpuByte {
|
||||
@Override
|
||||
public RegisterType getType() {
|
||||
return RegisterType.REG_X_BYTE;
|
||||
return RegisterType.REG_X;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -353,7 +352,7 @@ public class Registers {
|
||||
public static class RegisterYByte extends RegisterCpuByte {
|
||||
@Override
|
||||
public RegisterType getType() {
|
||||
return RegisterType.REG_Y_BYTE;
|
||||
return RegisterType.REG_Y;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -367,7 +366,7 @@ public class Registers {
|
||||
public static class RegisterAByte extends RegisterCpuByte {
|
||||
@Override
|
||||
public RegisterType getType() {
|
||||
return RegisterType.REG_A_BYTE;
|
||||
return RegisterType.REG_A;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -410,6 +409,11 @@ public class Registers {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNonRelocatable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBytes() {
|
||||
return 0;
|
||||
|
@ -25,6 +25,7 @@ public class Pass4RegisterUpliftPotentialInitialize extends Pass2Base {
|
||||
RegisterPotentials registerPotentials = new RegisterPotentials();
|
||||
for(LiveRangeEquivalenceClass equivalenceClass : liveRangeEquivalenceClassSet.getEquivalenceClasses()) {
|
||||
Registers.Register declaredRegister = null;
|
||||
int bytes = -1;
|
||||
for(VariableRef varRef : equivalenceClass.getVariables()) {
|
||||
Variable variable = getProgram().getScope().getVariable(varRef);
|
||||
if(variable.getDeclaredRegister() != null) { //TODO: Handle register/memory/storage strategy differently!
|
||||
@ -36,25 +37,27 @@ public class Pass4RegisterUpliftPotentialInitialize extends Pass2Base {
|
||||
);
|
||||
}
|
||||
declaredRegister = variable.getDeclaredRegister();
|
||||
bytes = variable.getType().getSizeBytes();
|
||||
}
|
||||
}
|
||||
if(declaredRegister != null) {
|
||||
registerPotentials.setPotentialRegisters(equivalenceClass, Arrays.asList(declaredRegister));
|
||||
if(declaredRegister instanceof Registers.RegisterZpDeclared) {
|
||||
Registers.RegisterZpMem zpRegister = ((Registers.RegisterZpDeclared) declaredRegister).getZpRegister(bytes);
|
||||
registerPotentials.setPotentialRegisters(equivalenceClass, Arrays.asList(zpRegister));
|
||||
} else {
|
||||
registerPotentials.setPotentialRegisters(equivalenceClass, Arrays.asList(declaredRegister));
|
||||
}
|
||||
} else {
|
||||
Registers.Register defaultRegister = equivalenceClass.getRegister();
|
||||
Registers.RegisterType registerType = defaultRegister.getType();
|
||||
List<Registers.Register> potentials = new ArrayList<>();
|
||||
potentials.add(defaultRegister);
|
||||
boolean isByte1 = registerType.equals(Registers.RegisterType.ZP_BYTE);
|
||||
boolean isByte2 = defaultRegister.isZp() && defaultRegister.getBytes() == 1;
|
||||
if((isByte1 || isByte2) && !varVolatile(equivalenceClass)) {
|
||||
if(isByte2 && !varVolatile(equivalenceClass)) {
|
||||
potentials.add(Registers.getRegisterA());
|
||||
potentials.add(Registers.getRegisterX());
|
||||
potentials.add(Registers.getRegisterY());
|
||||
}
|
||||
if(registerType.equals(Registers.RegisterType.ZP_BOOL) && !varVolatile(equivalenceClass)) {
|
||||
potentials.add(Registers.getRegisterA());
|
||||
}
|
||||
registerPotentials.setPotentialRegisters(equivalenceClass, potentials);
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,8 @@ public class Pass4RegisterUpliftRemains extends Pass2Base {
|
||||
|
||||
for(LiveRangeEquivalenceClass equivalenceClass : equivalenceClasses) {
|
||||
Registers.Register register = equivalenceClass.getRegister();
|
||||
boolean isByte1 = register.getType().equals(Registers.RegisterType.ZP_BYTE);
|
||||
boolean isByte2 = register.isZp() && register.getBytes()==1;
|
||||
if(isByte1 || isByte2) {
|
||||
if(isByte2) {
|
||||
getLog().append("Attempting to uplift remaining variables in" + equivalenceClass);
|
||||
RegisterCombinationIterator combinationIterator = new RegisterCombinationIterator(Arrays.asList(equivalenceClass), getProgram().getRegisterPotentials());
|
||||
VariableRef variableRef = equivalenceClass.getVariables().get(0);
|
||||
|
@ -57,23 +57,18 @@ public class Pass4RegistersFinalize extends Pass2Base {
|
||||
for(VariableRef variableRef : equivalenceClass.getVariables()) {
|
||||
Variable variable = getProgram().getScope().getVariable(variableRef);
|
||||
Registers.Register declaredRegister = variable.getDeclaredRegister(); //TODO: Handle register/memory/storage strategy differently!
|
||||
Registers.Register register = declaredRegister;
|
||||
if(declaredRegister !=null) {
|
||||
if(declaredRegister instanceof Registers.RegisterZpDeclared) {
|
||||
if(declaredRegister.getType().equals(Registers.RegisterType.ZP_VAR)) {
|
||||
Registers.RegisterType registerType = getRegisterType(variable);
|
||||
((Registers.RegisterZpDeclared) declaredRegister).setType(registerType);
|
||||
getLog().append("Setting declared register type "+variable.toString(getProgram())+" to "+registerType);
|
||||
}
|
||||
}
|
||||
|
||||
if(equivalenceClass.getRegister()!=null && !declaredRegister.equals(equivalenceClass.getRegister())) {
|
||||
register = ((Registers.RegisterZpDeclared) declaredRegister).getZpRegister(variable.getType().getSizeBytes());
|
||||
} else if(equivalenceClass.getRegister()!=null && !declaredRegister.equals(equivalenceClass.getRegister())) {
|
||||
throw new CompileError("Equivalence class has variables with different declared registers \n" +
|
||||
" - equivalence class: " + equivalenceClass.toString(true) + "\n" +
|
||||
" - one register: " + equivalenceClass.getRegister().toString() + "\n" +
|
||||
" - other register: " + declaredRegister.toString()
|
||||
);
|
||||
}
|
||||
equivalenceClass.setRegister(declaredRegister);
|
||||
equivalenceClass.setRegister(register);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -175,7 +170,7 @@ public class Pass4RegistersFinalize extends Pass2Base {
|
||||
if(!register.isZp()) {
|
||||
// Do not allocate non-ZP registers
|
||||
reallocate = false;
|
||||
} else if(register instanceof Registers.RegisterZpDeclared) {
|
||||
} else if(register.isZp() && register.isNonRelocatable()) {
|
||||
// Do not allocate declared ZP registers
|
||||
reallocate = false;
|
||||
}
|
||||
@ -253,7 +248,7 @@ public class Pass4RegistersFinalize extends Pass2Base {
|
||||
new Registers.RegisterZpMem(allocateZp(4), 4);
|
||||
return registerZpDWord;
|
||||
} else if(varType.equals(SymbolType.BOOLEAN)) {
|
||||
return new Registers.RegisterZpBool(allocateZp(1));
|
||||
return new Registers.RegisterZpMem(allocateZp(1), 1);
|
||||
} else if(varType.equals(SymbolType.VOID)) {
|
||||
// No need to setRegister register for VOID value
|
||||
return null;
|
||||
@ -262,49 +257,13 @@ public class Pass4RegistersFinalize extends Pass2Base {
|
||||
new Registers.RegisterZpMem(allocateZp(2), 2);
|
||||
return registerZpWord;
|
||||
} else if(varType instanceof SymbolTypeStruct) {
|
||||
Registers.RegisterZpStruct registerZpStruct =
|
||||
new Registers.RegisterZpStruct(allocateZp(varType.getSizeBytes()), varType.getSizeBytes());
|
||||
Registers.RegisterZpMem registerZpStruct =
|
||||
new Registers.RegisterZpMem(allocateZp(varType.getSizeBytes()), varType.getSizeBytes());
|
||||
return registerZpStruct;
|
||||
} else {
|
||||
throw new RuntimeException("Unhandled variable type " + varType);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the register type for a specific variable type.
|
||||
*
|
||||
* @param variable The variable to create a register for.
|
||||
* The register type based on the variable type
|
||||
* @return The zeropage register type
|
||||
*/
|
||||
private Registers.RegisterType getRegisterType(Variable variable) {
|
||||
SymbolType varType = variable.getType();
|
||||
if(SymbolType.BYTE.equals(varType)) {
|
||||
return Registers.RegisterType.ZP_BYTE;
|
||||
} else if(SymbolType.SBYTE.equals(varType)) {
|
||||
return Registers.RegisterType.ZP_BYTE;
|
||||
} else if(SymbolType.WORD.equals(varType)) {
|
||||
return Registers.RegisterType.ZP_WORD;
|
||||
} else if(SymbolType.SWORD.equals(varType)) {
|
||||
return Registers.RegisterType.ZP_WORD;
|
||||
} else if(SymbolType.DWORD.equals(varType)) {
|
||||
return Registers.RegisterType.ZP_DWORD;
|
||||
} else if(SymbolType.SDWORD.equals(varType)) {
|
||||
return Registers.RegisterType.ZP_DWORD;
|
||||
} else if(varType.equals(SymbolType.BOOLEAN)) {
|
||||
return Registers.RegisterType.ZP_BOOL;
|
||||
} else if(varType.equals(SymbolType.VOID)) {
|
||||
// No need to register for VOID value
|
||||
return null;
|
||||
} else if(varType instanceof SymbolTypePointer) {
|
||||
return Registers.RegisterType.ZP_WORD;
|
||||
} else if(varType instanceof SymbolTypeStruct) {
|
||||
return Registers.RegisterType.ZP_STRUCT;
|
||||
} else {
|
||||
throw new RuntimeException("Unhandled variable type " + varType);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -272,13 +272,13 @@ Complete equivalence classes
|
||||
[ isSet::return#1 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::$0 ]
|
||||
Allocated zp ZP_BOOL:4 [ isSet::b#0 ]
|
||||
Allocated zp ZP_BYTE:4 [ isSet::b#0 ]
|
||||
Allocated zp ZP_BYTE:5 [ isSet::i#0 ]
|
||||
Allocated zp ZP_BOOL:6 [ isSet::return#0 ]
|
||||
Allocated zp ZP_BOOL:7 [ main::$2 ]
|
||||
Allocated zp ZP_BYTE:6 [ isSet::return#0 ]
|
||||
Allocated zp ZP_BYTE:7 [ main::$2 ]
|
||||
Allocated zp ZP_BYTE:8 [ isSet::$0 ]
|
||||
Allocated zp ZP_BOOL:9 [ isSet::$1 ]
|
||||
Allocated zp ZP_BOOL:10 [ isSet::return#1 ]
|
||||
Allocated zp ZP_BYTE:9 [ isSet::$1 ]
|
||||
Allocated zp ZP_BYTE:10 [ isSet::return#1 ]
|
||||
|
||||
INITIAL ASM
|
||||
Target platform is c64basic / MOS6502X
|
||||
@ -422,14 +422,7 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ ma
|
||||
Statement [13] *((const byte*) main::screen + (byte) main::i#2) ← (byte) ' ' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [17] *((const byte*) main::screen + (byte) main::i#2) ← (byte) '*' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [19] (bool~) isSet::$1 ← (byte~) isSet::$0 != (byte) 0 [ isSet::b#0 isSet::$1 ] ( main:2::isSet:9 [ main::i#2 isSet::b#0 isSet::$1 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BOOL:4 [ isSet::b#0 ]
|
||||
Statement [20] (bool) isSet::return#1 ← (bool) isSet::b#0 || (bool~) isSet::$1 [ isSet::return#1 ] ( main:2::isSet:9 [ main::i#2 isSet::return#1 ] ) always clobbers reg byte a
|
||||
Statement [6] (byte~) main::$0 ← (byte) main::i#2 & (byte) 1 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) always clobbers reg byte a
|
||||
Statement [7] (bool) isSet::b#0 ← (byte~) main::$0 == (byte) 0 [ main::i#2 isSet::b#0 ] ( main:2 [ main::i#2 isSet::b#0 ] ) always clobbers reg byte a
|
||||
Statement [13] *((const byte*) main::screen + (byte) main::i#2) ← (byte) ' ' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [17] *((const byte*) main::screen + (byte) main::i#2) ← (byte) '*' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [19] (bool~) isSet::$1 ← (byte~) isSet::$0 != (byte) 0 [ isSet::b#0 isSet::$1 ] ( main:2::isSet:9 [ main::i#2 isSet::b#0 isSet::$1 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BOOL:4 [ isSet::b#0 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ isSet::b#0 ]
|
||||
Statement [20] (bool) isSet::return#1 ← (bool) isSet::b#0 || (bool~) isSet::$1 [ isSet::return#1 ] ( main:2::isSet:9 [ main::i#2 isSet::return#1 ] ) always clobbers reg byte a
|
||||
Statement [6] (byte~) main::$0 ← (byte) main::i#2 & (byte) 1 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) always clobbers reg byte a
|
||||
Statement [7] (bool) isSet::b#0 ← (byte~) main::$0 == (byte) 0 [ main::i#2 isSet::b#0 ] ( main:2 [ main::i#2 isSet::b#0 ] ) always clobbers reg byte a
|
||||
@ -439,28 +432,26 @@ Statement [19] (bool~) isSet::$1 ← (byte~) isSet::$0 != (byte) 0 [ isSet::b#0
|
||||
Statement [20] (bool) isSet::return#1 ← (bool) isSet::b#0 || (bool~) isSet::$1 [ isSet::return#1 ] ( main:2::isSet:9 [ main::i#2 isSet::return#1 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::$0 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BOOL:4 [ isSet::b#0 ] : zp ZP_BOOL:4 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:4 [ isSet::b#0 ] : zp ZP_BYTE:4 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:5 [ isSet::i#0 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BOOL:6 [ isSet::return#0 ] : zp ZP_BOOL:6 , reg byte a , reg byte x , reg byte y , reg byte a ,
|
||||
Potential registers zp ZP_BOOL:7 [ main::$2 ] : zp ZP_BOOL:7 , reg byte a , reg byte x , reg byte y , reg byte a ,
|
||||
Potential registers zp ZP_BYTE:6 [ isSet::return#0 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:7 [ main::$2 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:8 [ isSet::$0 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BOOL:9 [ isSet::$1 ] : zp ZP_BOOL:9 , reg byte a , reg byte x , reg byte y , reg byte a ,
|
||||
Potential registers zp ZP_BOOL:10 [ isSet::return#1 ] : zp ZP_BOOL:10 , reg byte a , reg byte x , reg byte y , reg byte a ,
|
||||
Potential registers zp ZP_BYTE:9 [ isSet::$1 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:10 [ isSet::return#1 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 23.1: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:3 [ main::$0 ] 22: zp ZP_BOOL:7 [ main::$2 ]
|
||||
Uplift Scope [isSet] 22: zp ZP_BOOL:6 [ isSet::return#0 ] 13: zp ZP_BYTE:5 [ isSet::i#0 ] 4.33: zp ZP_BOOL:10 [ isSet::return#1 ] 4: zp ZP_BYTE:8 [ isSet::$0 ] 4: zp ZP_BOOL:9 [ isSet::$1 ] 3.25: zp ZP_BOOL:4 [ isSet::b#0 ]
|
||||
Uplift Scope [main] 23.1: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:3 [ main::$0 ] 22: zp ZP_BYTE:7 [ main::$2 ]
|
||||
Uplift Scope [isSet] 22: zp ZP_BYTE:6 [ isSet::return#0 ] 13: zp ZP_BYTE:5 [ isSet::i#0 ] 4.33: zp ZP_BYTE:10 [ isSet::return#1 ] 4: zp ZP_BYTE:8 [ isSet::$0 ] 4: zp ZP_BYTE:9 [ isSet::$1 ] 3.25: zp ZP_BYTE:4 [ isSet::b#0 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 871 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$0 ] reg byte a [ main::$2 ]
|
||||
Uplifting [isSet] best 745 combination reg byte a [ isSet::return#0 ] reg byte x [ isSet::i#0 ] reg byte a [ isSet::return#1 ] zp ZP_BYTE:8 [ isSet::$0 ] zp ZP_BOOL:9 [ isSet::$1 ] zp ZP_BOOL:4 [ isSet::b#0 ]
|
||||
Limited combination testing to 100 combinations of 6000 possible.
|
||||
Uplifting [] best 745 combination
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:8 [ isSet::$0 ]
|
||||
Uplifting [isSet] best 741 combination reg byte a [ isSet::$0 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BOOL:9 [ isSet::$1 ]
|
||||
Uplifting [isSet] best 741 combination reg byte a [ isSet::return#0 ] reg byte x [ isSet::i#0 ] reg byte a [ isSet::return#1 ] reg byte a [ isSet::$0 ] zp ZP_BYTE:9 [ isSet::$1 ] zp ZP_BYTE:4 [ isSet::b#0 ]
|
||||
Limited combination testing to 100 combinations of 3072 possible.
|
||||
Uplifting [] best 741 combination
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:9 [ isSet::$1 ]
|
||||
Uplifting [isSet] best 735 combination reg byte a [ isSet::$1 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BOOL:4 [ isSet::b#0 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ isSet::b#0 ]
|
||||
Uplifting [isSet] best 728 combination reg byte y [ isSet::b#0 ]
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
|
@ -140,7 +140,7 @@ Initial phi equivalence classes
|
||||
[ framedone#2 ]
|
||||
Complete equivalence classes
|
||||
[ framedone#2 ]
|
||||
Allocated zp ZP_BOOL:2 [ framedone#2 ]
|
||||
Allocated zp ZP_BYTE:2 [ framedone#2 ]
|
||||
|
||||
INITIAL ASM
|
||||
Target platform is c64basic / MOS6502X
|
||||
@ -196,10 +196,10 @@ main: {
|
||||
// File Data
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Potential registers zp ZP_BOOL:2 [ framedone#2 ] : zp ZP_BOOL:2 , reg byte a , reg byte x , reg byte y , reg byte a ,
|
||||
Potential registers zp ZP_BYTE:2 [ framedone#2 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [] 50.5: zp ZP_BOOL:2 [ framedone#2 ]
|
||||
Uplift Scope [] 50.5: zp ZP_BYTE:2 [ framedone#2 ]
|
||||
Uplift Scope [main]
|
||||
|
||||
Uplifting [] best 892 combination reg byte a [ framedone#2 ]
|
||||
|
@ -707,9 +707,9 @@ Allocated zp ZP_BYTE:2 [ bool_complex::i#2 bool_complex::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ bool_not::i#2 bool_not::i#1 ]
|
||||
Allocated zp ZP_BYTE:4 [ bool_or::i#2 bool_or::i#1 ]
|
||||
Allocated zp ZP_BYTE:5 [ bool_and::i#2 bool_and::i#1 ]
|
||||
Allocated zp ZP_BOOL:6 [ bool_complex::o1#0 ]
|
||||
Allocated zp ZP_BYTE:6 [ bool_complex::o1#0 ]
|
||||
Allocated zp ZP_BYTE:7 [ bool_complex::$1 ]
|
||||
Allocated zp ZP_BOOL:8 [ bool_complex::o2#0 ]
|
||||
Allocated zp ZP_BYTE:8 [ bool_complex::o2#0 ]
|
||||
Allocated zp ZP_BYTE:9 [ bool_not::$1 ]
|
||||
Allocated zp ZP_BYTE:10 [ bool_or::$1 ]
|
||||
Allocated zp ZP_BYTE:11 [ bool_and::$1 ]
|
||||
@ -1059,9 +1059,8 @@ REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [15] (bool) bool_complex::o1#0 ← (byte) bool_complex::i#2 < (byte) $a [ bool_complex::i#2 bool_complex::o1#0 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::o1#0 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ bool_complex::i#2 bool_complex::i#1 ]
|
||||
Statement [16] (byte~) bool_complex::$1 ← (byte) bool_complex::i#2 & (byte) 1 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::$1 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::$1 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BOOL:6 [ bool_complex::o1#0 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ bool_complex::o1#0 ]
|
||||
Statement [17] (bool) bool_complex::o2#0 ← (byte~) bool_complex::$1 == (byte) 0 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::o2#0 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::o2#0 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BOOL:6 [ bool_complex::o1#0 ]
|
||||
Statement [22] *((const byte*) bool_complex::screen + (byte) bool_complex::i#2) ← (byte) '*' [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a
|
||||
Statement [26] *((const byte*) bool_complex::screen + (byte) bool_complex::i#2) ← (byte) ' ' [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a
|
||||
Statement [32] *((const byte*) bool_not::screen + (byte) bool_not::i#2) ← (byte) '*' [ bool_not::i#2 ] ( main:2::bool_not:9 [ bool_not::i#2 ] ) always clobbers reg byte a
|
||||
@ -1091,15 +1090,15 @@ Potential registers zp ZP_BYTE:2 [ bool_complex::i#2 bool_complex::i#1 ] : zp ZP
|
||||
Potential registers zp ZP_BYTE:3 [ bool_not::i#2 bool_not::i#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:4 [ bool_or::i#2 bool_or::i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:5 [ bool_and::i#2 bool_and::i#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BOOL:6 [ bool_complex::o1#0 ] : zp ZP_BOOL:6 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:6 [ bool_complex::o1#0 ] : zp ZP_BYTE:6 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:7 [ bool_complex::$1 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BOOL:8 [ bool_complex::o2#0 ] : zp ZP_BOOL:8 , reg byte a , reg byte x , reg byte y , reg byte a ,
|
||||
Potential registers zp ZP_BYTE:8 [ bool_complex::o2#0 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:9 [ bool_not::$1 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:10 [ bool_or::$1 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:11 [ bool_and::$1 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [bool_complex] 23.1: zp ZP_BYTE:2 [ bool_complex::i#2 bool_complex::i#1 ] 22: zp ZP_BYTE:7 [ bool_complex::$1 ] 8.25: zp ZP_BOOL:8 [ bool_complex::o2#0 ] 6.6: zp ZP_BOOL:6 [ bool_complex::o1#0 ]
|
||||
Uplift Scope [bool_complex] 23.1: zp ZP_BYTE:2 [ bool_complex::i#2 bool_complex::i#1 ] 22: zp ZP_BYTE:7 [ bool_complex::$1 ] 8.25: zp ZP_BYTE:8 [ bool_complex::o2#0 ] 6.6: zp ZP_BYTE:6 [ bool_complex::o1#0 ]
|
||||
Uplift Scope [bool_and] 27.5: zp ZP_BYTE:5 [ bool_and::i#2 bool_and::i#1 ] 11: zp ZP_BYTE:11 [ bool_and::$1 ]
|
||||
Uplift Scope [bool_or] 27.5: zp ZP_BYTE:4 [ bool_or::i#2 bool_or::i#1 ] 11: zp ZP_BYTE:10 [ bool_or::$1 ]
|
||||
Uplift Scope [bool_not] 27.5: zp ZP_BYTE:3 [ bool_not::i#2 bool_not::i#1 ] 11: zp ZP_BYTE:9 [ bool_not::$1 ]
|
||||
@ -1107,7 +1106,7 @@ Uplift Scope [main]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [bool_complex] best 3423 combination reg byte y [ bool_complex::i#2 bool_complex::i#1 ] reg byte a [ bool_complex::$1 ] reg byte a [ bool_complex::o2#0 ] reg byte x [ bool_complex::o1#0 ]
|
||||
Limited combination testing to 100 combinations of 180 possible.
|
||||
Limited combination testing to 100 combinations of 144 possible.
|
||||
Uplifting [bool_and] best 3173 combination reg byte x [ bool_and::i#2 bool_and::i#1 ] reg byte a [ bool_and::$1 ]
|
||||
Uplifting [bool_or] best 2923 combination reg byte x [ bool_or::i#2 bool_or::i#1 ] reg byte a [ bool_or::$1 ]
|
||||
Uplifting [bool_not] best 2673 combination reg byte x [ bool_not::i#2 bool_not::i#1 ] reg byte a [ bool_not::$1 ]
|
||||
|
@ -302,7 +302,7 @@ Initial phi equivalence classes
|
||||
[ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Complete equivalence classes
|
||||
[ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Allocated zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Allocated zp ZP_BYTE:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
|
||||
INITIAL ASM
|
||||
Target platform is c64basic / MOS6502X
|
||||
@ -442,18 +442,18 @@ Statement [14] (bool) framedone#0 ← true [ framedone#0 ] ( main:3 [ framedone#
|
||||
Statement [16] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ framedone#11 ] ( [ framedone#11 ] ) always clobbers reg byte a
|
||||
Statement [17] if(*((const byte*) RASTER)<(byte) $32+(byte) 1) goto irq::@1 [ framedone#11 ] ( [ framedone#11 ] ) always clobbers reg byte a
|
||||
Statement [18] (bool) framedone#3 ← false [ framedone#3 ] ( [ framedone#3 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ] : zp ZP_BOOL:2 ,
|
||||
Potential registers zp ZP_BYTE:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ] : zp ZP_BYTE:2 ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [] 174: zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Uplift Scope [] 174: zp ZP_BYTE:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Uplift Scope [main]
|
||||
Uplift Scope [irq]
|
||||
|
||||
Uplifting [] best 1694 combination zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Uplifting [] best 1694 combination zp ZP_BYTE:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Uplifting [main] best 1694 combination
|
||||
Uplifting [irq] best 1694 combination
|
||||
Attempting to uplift remaining variables inzp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Uplifting [] best 1694 combination zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Uplifting [] best 1694 combination zp ZP_BYTE:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
// File Comments
|
||||
@ -629,11 +629,11 @@ FINAL SYMBOL TABLE
|
||||
(const byte*) RASTER RASTER = (byte*) 53266
|
||||
(const byte*) VIC_CONTROL VIC_CONTROL = (byte*) 53265
|
||||
(bool) framedone
|
||||
(bool) framedone#0 framedone zp ZP_BOOL:2 22.0
|
||||
(bool) framedone#1 framedone zp ZP_BOOL:2 107.5
|
||||
(bool) framedone#10 framedone zp ZP_BOOL:2 40.0
|
||||
(bool) framedone#11 framedone zp ZP_BOOL:2 0.5
|
||||
(bool) framedone#3 framedone zp ZP_BOOL:2 4.0
|
||||
(bool) framedone#0 framedone zp ZP_BYTE:2 22.0
|
||||
(bool) framedone#1 framedone zp ZP_BYTE:2 107.5
|
||||
(bool) framedone#10 framedone zp ZP_BYTE:2 40.0
|
||||
(bool) framedone#11 framedone zp ZP_BYTE:2 0.5
|
||||
(bool) framedone#3 framedone zp ZP_BYTE:2 4.0
|
||||
interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) irq::@1
|
||||
(label) irq::@2
|
||||
@ -643,7 +643,7 @@ interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
|
||||
zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
zp ZP_BYTE:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
|
@ -12,11 +12,11 @@
|
||||
(const byte*) RASTER RASTER = (byte*) 53266
|
||||
(const byte*) VIC_CONTROL VIC_CONTROL = (byte*) 53265
|
||||
(bool) framedone
|
||||
(bool) framedone#0 framedone zp ZP_BOOL:2 22.0
|
||||
(bool) framedone#1 framedone zp ZP_BOOL:2 107.5
|
||||
(bool) framedone#10 framedone zp ZP_BOOL:2 40.0
|
||||
(bool) framedone#11 framedone zp ZP_BOOL:2 0.5
|
||||
(bool) framedone#3 framedone zp ZP_BOOL:2 4.0
|
||||
(bool) framedone#0 framedone zp ZP_BYTE:2 22.0
|
||||
(bool) framedone#1 framedone zp ZP_BYTE:2 107.5
|
||||
(bool) framedone#10 framedone zp ZP_BYTE:2 40.0
|
||||
(bool) framedone#11 framedone zp ZP_BYTE:2 0.5
|
||||
(bool) framedone#3 framedone zp ZP_BYTE:2 4.0
|
||||
interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) irq::@1
|
||||
(label) irq::@2
|
||||
@ -26,4 +26,4 @@ interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
|
||||
zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
zp ZP_BYTE:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
|
@ -2339,7 +2339,7 @@ Allocated zp ZP_BYTE:13 [ plex_sprite_idx#25 plex_sprite_idx#10 plex_sprite_idx#
|
||||
Allocated zp ZP_BYTE:14 [ plex_show_idx#27 plex_show_idx#10 plex_show_idx#0 plex_show_idx#1 plex_show_idx#16 ]
|
||||
Allocated zp ZP_BYTE:15 [ plex_free_next#27 plex_free_next#10 plex_free_next#31 plex_free_next#0 plexShowSprite::plexFreeAdd1_$2 ]
|
||||
Allocated zp ZP_BYTE:16 [ plex_sprite_msb#28 plex_sprite_msb#11 plex_sprite_msb#0 plex_sprite_msb#1 plex_sprite_msb#17 plex_sprite_msb#3 plex_sprite_msb#4 ]
|
||||
Allocated zp ZP_BOOL:17 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
Allocated zp ZP_BYTE:17 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
Allocated zp ZP_BYTE:18 [ plexSort::nxt_idx#0 ]
|
||||
Allocated zp ZP_BYTE:19 [ plexSort::nxt_y#0 ]
|
||||
Allocated zp ZP_BYTE:20 [ plexSort::s#2 ]
|
||||
@ -3317,7 +3317,7 @@ Potential registers zp ZP_BYTE:13 [ plex_sprite_idx#25 plex_sprite_idx#10 plex_s
|
||||
Potential registers zp ZP_BYTE:14 [ plex_show_idx#27 plex_show_idx#10 plex_show_idx#0 plex_show_idx#1 plex_show_idx#16 ] : zp ZP_BYTE:14 ,
|
||||
Potential registers zp ZP_BYTE:15 [ plex_free_next#27 plex_free_next#10 plex_free_next#31 plex_free_next#0 plexShowSprite::plexFreeAdd1_$2 ] : zp ZP_BYTE:15 ,
|
||||
Potential registers zp ZP_BYTE:16 [ plex_sprite_msb#28 plex_sprite_msb#11 plex_sprite_msb#0 plex_sprite_msb#1 plex_sprite_msb#17 plex_sprite_msb#3 plex_sprite_msb#4 ] : zp ZP_BYTE:16 ,
|
||||
Potential registers zp ZP_BOOL:17 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ] : zp ZP_BOOL:17 ,
|
||||
Potential registers zp ZP_BYTE:17 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ] : zp ZP_BYTE:17 ,
|
||||
Potential registers zp ZP_BYTE:18 [ plexSort::nxt_idx#0 ] : zp ZP_BYTE:18 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:19 [ plexSort::nxt_y#0 ] : zp ZP_BYTE:19 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:20 [ plexSort::s#2 ] : zp ZP_BYTE:20 , reg byte a , reg byte x , reg byte y ,
|
||||
@ -3337,7 +3337,7 @@ Potential registers zp ZP_BYTE:33 [ plexShowSprite::$5 ] : zp ZP_BYTE:33 , reg b
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [plexSort] 3,622.83: zp ZP_BYTE:6 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] 303: zp ZP_BYTE:7 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] 202: zp ZP_BYTE:20 [ plexSort::s#2 ] 193.58: zp ZP_BYTE:5 [ plexSort::m#2 plexSort::m#1 ] 150.38: zp ZP_BYTE:19 [ plexSort::nxt_y#0 ] 30.3: zp ZP_BYTE:18 [ plexSort::nxt_idx#0 ]
|
||||
Uplift Scope [] 141.65: zp ZP_BYTE:16 [ plex_sprite_msb#28 plex_sprite_msb#11 plex_sprite_msb#0 plex_sprite_msb#1 plex_sprite_msb#17 plex_sprite_msb#3 plex_sprite_msb#4 ] 136.36: zp ZP_BYTE:15 [ plex_free_next#27 plex_free_next#10 plex_free_next#31 plex_free_next#0 plexShowSprite::plexFreeAdd1_$2 ] 134.58: zp ZP_BYTE:14 [ plex_show_idx#27 plex_show_idx#10 plex_show_idx#0 plex_show_idx#1 plex_show_idx#16 ] 133.61: zp ZP_BYTE:13 [ plex_sprite_idx#25 plex_sprite_idx#10 plex_sprite_idx#0 plex_sprite_idx#1 plexShowSprite::$6 ] 108.71: zp ZP_BOOL:17 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
Uplift Scope [] 141.65: zp ZP_BYTE:16 [ plex_sprite_msb#28 plex_sprite_msb#11 plex_sprite_msb#0 plex_sprite_msb#1 plex_sprite_msb#17 plex_sprite_msb#3 plex_sprite_msb#4 ] 136.36: zp ZP_BYTE:15 [ plex_free_next#27 plex_free_next#10 plex_free_next#31 plex_free_next#0 plexShowSprite::plexFreeAdd1_$2 ] 134.58: zp ZP_BYTE:14 [ plex_show_idx#27 plex_show_idx#10 plex_show_idx#0 plex_show_idx#1 plex_show_idx#16 ] 133.61: zp ZP_BYTE:13 [ plex_sprite_idx#25 plex_sprite_idx#10 plex_sprite_idx#0 plex_sprite_idx#1 plexShowSprite::$6 ] 108.71: zp ZP_BYTE:17 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
Uplift Scope [loop] 252.5: zp ZP_BYTE:4 [ loop::sy#2 loop::sy#1 ] 246.33: zp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#1 loop::y_idx#4 ] 6.81: zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
|
||||
Uplift Scope [init] 33: zp ZP_BYTE:11 [ init::ss#2 init::ss#1 ] 25.3: zp ZP_BYTE:8 [ init::sx#2 init::sx#1 ] 22: zp ZP_BYTE:21 [ init::$9 ] 15.58: zp ZP_WORD:9 [ init::xp#2 init::xp#1 ]
|
||||
Uplift Scope [plexInit] 38.5: zp ZP_BYTE:12 [ plexInit::i#2 plexInit::i#1 ]
|
||||
@ -3347,7 +3347,7 @@ Uplift Scope [main]
|
||||
|
||||
Uplifting [plexSort] best 62930 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] zp ZP_BYTE:20 [ plexSort::s#2 ] zp ZP_BYTE:5 [ plexSort::m#2 plexSort::m#1 ] zp ZP_BYTE:19 [ plexSort::nxt_y#0 ] zp ZP_BYTE:18 [ plexSort::nxt_idx#0 ]
|
||||
Limited combination testing to 10 combinations of 972 possible.
|
||||
Uplifting [] best 62930 combination zp ZP_BYTE:16 [ plex_sprite_msb#28 plex_sprite_msb#11 plex_sprite_msb#0 plex_sprite_msb#1 plex_sprite_msb#17 plex_sprite_msb#3 plex_sprite_msb#4 ] zp ZP_BYTE:15 [ plex_free_next#27 plex_free_next#10 plex_free_next#31 plex_free_next#0 plexShowSprite::plexFreeAdd1_$2 ] zp ZP_BYTE:14 [ plex_show_idx#27 plex_show_idx#10 plex_show_idx#0 plex_show_idx#1 plex_show_idx#16 ] zp ZP_BYTE:13 [ plex_sprite_idx#25 plex_sprite_idx#10 plex_sprite_idx#0 plex_sprite_idx#1 plexShowSprite::$6 ] zp ZP_BOOL:17 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
Uplifting [] best 62930 combination zp ZP_BYTE:16 [ plex_sprite_msb#28 plex_sprite_msb#11 plex_sprite_msb#0 plex_sprite_msb#1 plex_sprite_msb#17 plex_sprite_msb#3 plex_sprite_msb#4 ] zp ZP_BYTE:15 [ plex_free_next#27 plex_free_next#10 plex_free_next#31 plex_free_next#0 plexShowSprite::plexFreeAdd1_$2 ] zp ZP_BYTE:14 [ plex_show_idx#27 plex_show_idx#10 plex_show_idx#0 plex_show_idx#1 plex_show_idx#16 ] zp ZP_BYTE:13 [ plex_sprite_idx#25 plex_sprite_idx#10 plex_sprite_idx#0 plex_sprite_idx#1 plexShowSprite::$6 ] zp ZP_BYTE:17 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
Uplifting [loop] best 61000 combination reg byte y [ loop::sy#2 loop::sy#1 ] reg byte x [ loop::y_idx#2 loop::y_idx#1 loop::y_idx#4 ] zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
|
||||
Limited combination testing to 10 combinations of 27 possible.
|
||||
Uplifting [init] best 60750 combination reg byte x [ init::ss#2 init::ss#1 ] reg byte x [ init::sx#2 init::sx#1 ] zp ZP_BYTE:21 [ init::$9 ] zp ZP_WORD:9 [ init::xp#2 init::xp#1 ]
|
||||
@ -3371,8 +3371,8 @@ Attempting to uplift remaining variables inzp ZP_BYTE:14 [ plex_show_idx#27 plex
|
||||
Uplifting [] best 59957 combination zp ZP_BYTE:14 [ plex_show_idx#27 plex_show_idx#10 plex_show_idx#0 plex_show_idx#1 plex_show_idx#16 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ plex_sprite_idx#25 plex_sprite_idx#10 plex_sprite_idx#0 plex_sprite_idx#1 plexShowSprite::$6 ]
|
||||
Uplifting [] best 59957 combination zp ZP_BYTE:13 [ plex_sprite_idx#25 plex_sprite_idx#10 plex_sprite_idx#0 plex_sprite_idx#1 plexShowSprite::$6 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BOOL:17 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
Uplifting [] best 59957 combination zp ZP_BOOL:17 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:17 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
Uplifting [] best 59957 combination zp ZP_BYTE:17 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:18 [ plexSort::nxt_idx#0 ]
|
||||
Uplifting [plexSort] best 59957 combination zp ZP_BYTE:18 [ plexSort::nxt_idx#0 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:21 [ init::$9 ]
|
||||
@ -3404,7 +3404,7 @@ Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:6 [ plex_sprite_idx#25 plex_sprite_idx#
|
||||
Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:7 [ plex_show_idx#27 plex_show_idx#10 plex_show_idx#0 plex_show_idx#1 plex_show_idx#16 ]
|
||||
Allocated (was zp ZP_BYTE:15) zp ZP_BYTE:8 [ plex_free_next#27 plex_free_next#10 plex_free_next#31 plex_free_next#0 plexShowSprite::plexFreeAdd1_$2 ]
|
||||
Allocated (was zp ZP_BYTE:16) zp ZP_BYTE:9 [ plex_sprite_msb#28 plex_sprite_msb#11 plex_sprite_msb#0 plex_sprite_msb#1 plex_sprite_msb#17 plex_sprite_msb#3 plex_sprite_msb#4 ]
|
||||
Allocated (was zp ZP_BOOL:17) zp ZP_BOOL:10 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
Allocated (was zp ZP_BYTE:17) zp ZP_BYTE:10 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
Allocated (was zp ZP_BYTE:18) zp ZP_BYTE:11 [ plexSort::nxt_idx#0 ]
|
||||
Allocated (was zp ZP_BYTE:19) zp ZP_BYTE:12 [ plexSort::nxt_y#0 ]
|
||||
Allocated (was zp ZP_BYTE:24) zp ZP_BYTE:13 [ plexShowSprite::plex_sprite_idx2#0 plex_irq::$4 ]
|
||||
@ -4286,11 +4286,11 @@ FINAL SYMBOL TABLE
|
||||
.byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256)))
|
||||
}}
|
||||
(bool) framedone
|
||||
(bool) framedone#10 framedone zp ZP_BOOL:10 40.0
|
||||
(bool) framedone#12 framedone zp ZP_BOOL:10 57.0
|
||||
(bool) framedone#17 framedone zp ZP_BOOL:10 0.375
|
||||
(bool) framedone#3 framedone zp ZP_BOOL:10 4.0
|
||||
(bool) framedone#5 framedone zp ZP_BOOL:10 7.333333333333333
|
||||
(bool) framedone#10 framedone zp ZP_BYTE:10 40.0
|
||||
(bool) framedone#12 framedone zp ZP_BYTE:10 57.0
|
||||
(bool) framedone#17 framedone zp ZP_BYTE:10 0.375
|
||||
(bool) framedone#3 framedone zp ZP_BYTE:10 4.0
|
||||
(bool) framedone#5 framedone zp ZP_BYTE:10 7.333333333333333
|
||||
(void()) init()
|
||||
(byte~) init::$9 reg byte a 22.0
|
||||
(label) init::@1
|
||||
@ -4440,7 +4440,7 @@ zp ZP_BYTE:6 [ plex_sprite_idx#25 plex_sprite_idx#10 plex_sprite_idx#0 plex_spri
|
||||
zp ZP_BYTE:7 [ plex_show_idx#27 plex_show_idx#10 plex_show_idx#0 plex_show_idx#1 plex_show_idx#16 ]
|
||||
zp ZP_BYTE:8 [ plex_free_next#27 plex_free_next#10 plex_free_next#31 plex_free_next#0 plexShowSprite::plexFreeAdd1_$2 ]
|
||||
zp ZP_BYTE:9 [ plex_sprite_msb#28 plex_sprite_msb#11 plex_sprite_msb#0 plex_sprite_msb#1 plex_sprite_msb#17 plex_sprite_msb#3 plex_sprite_msb#4 ]
|
||||
zp ZP_BOOL:10 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
zp ZP_BYTE:10 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
zp ZP_BYTE:11 [ plexSort::nxt_idx#0 ]
|
||||
zp ZP_BYTE:12 [ plexSort::nxt_y#0 ]
|
||||
reg byte x [ plexSort::s#2 ]
|
||||
|
@ -41,11 +41,11 @@
|
||||
.byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256)))
|
||||
}}
|
||||
(bool) framedone
|
||||
(bool) framedone#10 framedone zp ZP_BOOL:10 40.0
|
||||
(bool) framedone#12 framedone zp ZP_BOOL:10 57.0
|
||||
(bool) framedone#17 framedone zp ZP_BOOL:10 0.375
|
||||
(bool) framedone#3 framedone zp ZP_BOOL:10 4.0
|
||||
(bool) framedone#5 framedone zp ZP_BOOL:10 7.333333333333333
|
||||
(bool) framedone#10 framedone zp ZP_BYTE:10 40.0
|
||||
(bool) framedone#12 framedone zp ZP_BYTE:10 57.0
|
||||
(bool) framedone#17 framedone zp ZP_BYTE:10 0.375
|
||||
(bool) framedone#3 framedone zp ZP_BYTE:10 4.0
|
||||
(bool) framedone#5 framedone zp ZP_BYTE:10 7.333333333333333
|
||||
(void()) init()
|
||||
(byte~) init::$9 reg byte a 22.0
|
||||
(label) init::@1
|
||||
@ -195,7 +195,7 @@ zp ZP_BYTE:6 [ plex_sprite_idx#25 plex_sprite_idx#10 plex_sprite_idx#0 plex_spri
|
||||
zp ZP_BYTE:7 [ plex_show_idx#27 plex_show_idx#10 plex_show_idx#0 plex_show_idx#1 plex_show_idx#16 ]
|
||||
zp ZP_BYTE:8 [ plex_free_next#27 plex_free_next#10 plex_free_next#31 plex_free_next#0 plexShowSprite::plexFreeAdd1_$2 ]
|
||||
zp ZP_BYTE:9 [ plex_sprite_msb#28 plex_sprite_msb#11 plex_sprite_msb#0 plex_sprite_msb#1 plex_sprite_msb#17 plex_sprite_msb#3 plex_sprite_msb#4 ]
|
||||
zp ZP_BOOL:10 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
zp ZP_BYTE:10 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
zp ZP_BYTE:11 [ plexSort::nxt_idx#0 ]
|
||||
zp ZP_BYTE:12 [ plexSort::nxt_y#0 ]
|
||||
reg byte x [ plexSort::s#2 ]
|
||||
|
@ -386,15 +386,15 @@ Complete equivalence classes
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::$5 main::$4 main::$2 ]
|
||||
Allocated zp ZP_BYTE:4 [ cond::b#0 ]
|
||||
Allocated zp ZP_BOOL:5 [ cond::return#0 ]
|
||||
Allocated zp ZP_BOOL:6 [ main::$0 ]
|
||||
Allocated zp ZP_BYTE:5 [ cond::return#0 ]
|
||||
Allocated zp ZP_BYTE:6 [ main::$0 ]
|
||||
Allocated zp ZP_BYTE:7 [ m2::i#0 ]
|
||||
Allocated zp ZP_BYTE:8 [ m2::return#0 ]
|
||||
Allocated zp ZP_BYTE:9 [ m1::i#0 ]
|
||||
Allocated zp ZP_BYTE:10 [ m1::return#0 ]
|
||||
Allocated zp ZP_BYTE:11 [ m1::return#1 ]
|
||||
Allocated zp ZP_BYTE:12 [ m2::return#1 ]
|
||||
Allocated zp ZP_BOOL:13 [ cond::return#1 ]
|
||||
Allocated zp ZP_BYTE:13 [ cond::return#1 ]
|
||||
|
||||
INITIAL ASM
|
||||
Target platform is c64basic / MOS6502X
|
||||
@ -576,19 +576,19 @@ Statement [28] (bool) cond::return#1 ← (byte) cond::b#0 < (byte) 5 [ cond::ret
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::$5 main::$4 main::$2 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:4 [ cond::b#0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BOOL:5 [ cond::return#0 ] : zp ZP_BOOL:5 , reg byte a , reg byte x , reg byte y , reg byte a ,
|
||||
Potential registers zp ZP_BOOL:6 [ main::$0 ] : zp ZP_BOOL:6 , reg byte a , reg byte x , reg byte y , reg byte a ,
|
||||
Potential registers zp ZP_BYTE:5 [ cond::return#0 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:6 [ main::$0 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:7 [ m2::i#0 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:8 [ m2::return#0 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:9 [ m1::i#0 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:10 [ m1::return#0 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:11 [ m1::return#1 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:12 [ m2::return#1 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BOOL:13 [ cond::return#1 ] : zp ZP_BOOL:13 , reg byte a , reg byte x , reg byte y , reg byte a ,
|
||||
Potential registers zp ZP_BYTE:13 [ cond::return#1 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 77: zp ZP_BYTE:3 [ main::$5 main::$4 main::$2 ] 22: zp ZP_BOOL:6 [ main::$0 ] 20.62: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope [cond] 22: zp ZP_BOOL:5 [ cond::return#0 ] 13: zp ZP_BYTE:4 [ cond::b#0 ] 4.33: zp ZP_BOOL:13 [ cond::return#1 ]
|
||||
Uplift Scope [main] 77: zp ZP_BYTE:3 [ main::$5 main::$4 main::$2 ] 22: zp ZP_BYTE:6 [ main::$0 ] 20.62: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope [cond] 22: zp ZP_BYTE:5 [ cond::return#0 ] 13: zp ZP_BYTE:4 [ cond::b#0 ] 4.33: zp ZP_BYTE:13 [ cond::return#1 ]
|
||||
Uplift Scope [m1] 22: zp ZP_BYTE:10 [ m1::return#0 ] 13: zp ZP_BYTE:9 [ m1::i#0 ] 4.33: zp ZP_BYTE:11 [ m1::return#1 ]
|
||||
Uplift Scope [m2] 22: zp ZP_BYTE:8 [ m2::return#0 ] 13: zp ZP_BYTE:7 [ m2::i#0 ] 4.33: zp ZP_BYTE:12 [ m2::return#1 ]
|
||||
Uplift Scope []
|
||||
|
@ -796,9 +796,9 @@ Allocated zp ZP_WORD:5 [ print_line_cursor#13 print_line_cursor#22 print_line_cu
|
||||
Allocated zp ZP_WORD:7 [ print_str::str#2 print_str::str#0 print_str::str#1 ]
|
||||
Allocated zp ZP_WORD:9 [ print_char_cursor#17 print_char_cursor#27 print_char_cursor#30 print_char_cursor#44 print_char_cursor#41 print_char_cursor#4 ]
|
||||
Allocated zp ZP_BYTE:11 [ action_count#10 action_count#13 action_count#11 ]
|
||||
Allocated zp ZP_BOOL:12 [ game_ready::return#0 ]
|
||||
Allocated zp ZP_BOOL:13 [ main::$0 ]
|
||||
Allocated zp ZP_BOOL:14 [ game_ready::return#1 ]
|
||||
Allocated zp ZP_BYTE:12 [ game_ready::return#0 ]
|
||||
Allocated zp ZP_BYTE:13 [ main::$0 ]
|
||||
Allocated zp ZP_BYTE:14 [ game_ready::return#1 ]
|
||||
|
||||
INITIAL ASM
|
||||
Target platform is c64basic / MOS6502X
|
||||
@ -1109,15 +1109,15 @@ Potential registers zp ZP_WORD:5 [ print_line_cursor#13 print_line_cursor#22 pri
|
||||
Potential registers zp ZP_WORD:7 [ print_str::str#2 print_str::str#0 print_str::str#1 ] : zp ZP_WORD:7 ,
|
||||
Potential registers zp ZP_WORD:9 [ print_char_cursor#17 print_char_cursor#27 print_char_cursor#30 print_char_cursor#44 print_char_cursor#41 print_char_cursor#4 ] : zp ZP_WORD:9 ,
|
||||
Potential registers zp ZP_BYTE:11 [ action_count#10 action_count#13 action_count#11 ] : zp ZP_BYTE:11 , reg byte x ,
|
||||
Potential registers zp ZP_BOOL:12 [ game_ready::return#0 ] : zp ZP_BOOL:12 , reg byte a , reg byte x , reg byte y , reg byte a ,
|
||||
Potential registers zp ZP_BOOL:13 [ main::$0 ] : zp ZP_BOOL:13 , reg byte a , reg byte x , reg byte y , reg byte a ,
|
||||
Potential registers zp ZP_BOOL:14 [ game_ready::return#1 ] : zp ZP_BOOL:14 , reg byte a , reg byte x , reg byte y , reg byte a ,
|
||||
Potential registers zp ZP_BYTE:12 [ game_ready::return#0 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:13 [ main::$0 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:14 [ game_ready::return#1 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [] 229.53: zp ZP_WORD:5 [ print_line_cursor#13 print_line_cursor#22 print_line_cursor#24 print_line_cursor#14 ] 193.85: zp ZP_WORD:9 [ print_char_cursor#17 print_char_cursor#27 print_char_cursor#30 print_char_cursor#44 print_char_cursor#41 print_char_cursor#4 ] 8.25: zp ZP_BYTE:11 [ action_count#10 action_count#13 action_count#11 ]
|
||||
Uplift Scope [print_str] 305.5: zp ZP_WORD:7 [ print_str::str#2 print_str::str#0 print_str::str#1 ]
|
||||
Uplift Scope [main] 22: zp ZP_BOOL:13 [ main::$0 ] 14.14: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope [game_ready] 22: zp ZP_BOOL:12 [ game_ready::return#0 ] 4.33: zp ZP_BOOL:14 [ game_ready::return#1 ]
|
||||
Uplift Scope [main] 22: zp ZP_BYTE:13 [ main::$0 ] 14.14: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope [game_ready] 22: zp ZP_BYTE:12 [ game_ready::return#0 ] 4.33: zp ZP_BYTE:14 [ game_ready::return#1 ]
|
||||
Uplift Scope [print_str_ln] 2: zp ZP_WORD:3 [ print_str_ln::str#2 ]
|
||||
Uplift Scope [RADIX]
|
||||
Uplift Scope [print_ln]
|
||||
|
@ -308,9 +308,6 @@ Complete equivalence classes
|
||||
[ print_char::ch#1 print_char::ch#0 ]
|
||||
[ print_char::at#1 print_char::at#0 ]
|
||||
[ print_char::idx#1 print_char::idx#0 ]
|
||||
Setting declared register type (byte*) print2::msg#1 to ZP_WORD
|
||||
Setting declared register type (byte*) print2::at#1 to ZP_WORD
|
||||
Setting declared register type (byte*) print_char::at#1 to ZP_WORD
|
||||
Allocated zp ZP_BYTE:2 [ print2::i#2 print2::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ print2::j#2 print2::j#1 ]
|
||||
|
||||
@ -639,21 +636,21 @@ FINAL SYMBOL TABLE
|
||||
(label) print2::@2
|
||||
(label) print2::@3
|
||||
(label) print2::@return
|
||||
(byte*) print2::at !zp ZP_WORD:250
|
||||
(byte*) print2::at#1 at !zp ZP_WORD:250 4.125
|
||||
(byte*) print2::at !zp ZP_VAR:250
|
||||
(byte*) print2::at#1 at !zp ZP_VAR:250 zp ZP_WORD:250 4.125
|
||||
(byte) print2::i
|
||||
(byte) print2::i#1 i zp ZP_BYTE:2 22.0
|
||||
(byte) print2::i#2 i zp ZP_BYTE:2 6.285714285714286
|
||||
(byte) print2::j
|
||||
(byte) print2::j#1 reg byte x 11.0
|
||||
(byte) print2::j#2 reg byte x 5.5
|
||||
(byte*) print2::msg !zp ZP_WORD:252
|
||||
(byte*) print2::msg#1 msg !zp ZP_WORD:252 5.5
|
||||
(byte*) print2::msg !zp ZP_VAR:252
|
||||
(byte*) print2::msg#1 msg !zp ZP_VAR:252 zp ZP_WORD:252 5.5
|
||||
(void()) print_char((byte*) print_char::at , (byte) print_char::idx , (byte) print_char::ch)
|
||||
(label) print_char::@return
|
||||
(byte*) print_char::at !zp ZP_WORD:250
|
||||
(byte*) print_char::at#0 at !zp ZP_WORD:250 7.333333333333333
|
||||
(byte*) print_char::at#1 at !zp ZP_WORD:250 13.0
|
||||
(byte*) print_char::at !zp ZP_VAR:250
|
||||
(byte*) print_char::at#0 at !zp ZP_VAR:250 zp ZP_WORD:250 7.333333333333333
|
||||
(byte*) print_char::at#1 at !zp ZP_VAR:250 zp ZP_WORD:250 13.0
|
||||
(byte) print_char::ch !reg byte a
|
||||
(byte) print_char::ch#0 !reg byte a 22.0
|
||||
(byte) print_char::ch#1 !reg byte a 13.0
|
||||
|
@ -9,21 +9,21 @@
|
||||
(label) print2::@2
|
||||
(label) print2::@3
|
||||
(label) print2::@return
|
||||
(byte*) print2::at !zp ZP_WORD:250
|
||||
(byte*) print2::at#1 at !zp ZP_WORD:250 4.125
|
||||
(byte*) print2::at !zp ZP_VAR:250
|
||||
(byte*) print2::at#1 at !zp ZP_VAR:250 zp ZP_WORD:250 4.125
|
||||
(byte) print2::i
|
||||
(byte) print2::i#1 i zp ZP_BYTE:2 22.0
|
||||
(byte) print2::i#2 i zp ZP_BYTE:2 6.285714285714286
|
||||
(byte) print2::j
|
||||
(byte) print2::j#1 reg byte x 11.0
|
||||
(byte) print2::j#2 reg byte x 5.5
|
||||
(byte*) print2::msg !zp ZP_WORD:252
|
||||
(byte*) print2::msg#1 msg !zp ZP_WORD:252 5.5
|
||||
(byte*) print2::msg !zp ZP_VAR:252
|
||||
(byte*) print2::msg#1 msg !zp ZP_VAR:252 zp ZP_WORD:252 5.5
|
||||
(void()) print_char((byte*) print_char::at , (byte) print_char::idx , (byte) print_char::ch)
|
||||
(label) print_char::@return
|
||||
(byte*) print_char::at !zp ZP_WORD:250
|
||||
(byte*) print_char::at#0 at !zp ZP_WORD:250 7.333333333333333
|
||||
(byte*) print_char::at#1 at !zp ZP_WORD:250 13.0
|
||||
(byte*) print_char::at !zp ZP_VAR:250
|
||||
(byte*) print_char::at#0 at !zp ZP_VAR:250 zp ZP_WORD:250 7.333333333333333
|
||||
(byte*) print_char::at#1 at !zp ZP_VAR:250 zp ZP_WORD:250 13.0
|
||||
(byte) print_char::ch !reg byte a
|
||||
(byte) print_char::ch#0 !reg byte a 22.0
|
||||
(byte) print_char::ch#1 !reg byte a 13.0
|
||||
|
@ -205,8 +205,6 @@ Complete equivalence classes
|
||||
[ main::$1 ]
|
||||
[ main::k#0 ]
|
||||
[ main::$4 ]
|
||||
Setting declared register type (byte) main::i#3 to ZP_BYTE
|
||||
Setting declared register type (signed word) main::j#2 to ZP_WORD
|
||||
Allocated zp ZP_BYTE:3 [ main::$3 ]
|
||||
Allocated zp ZP_WORD:6 [ main::$1 ]
|
||||
Allocated zp ZP_WORD:8 [ main::k#0 ]
|
||||
@ -484,13 +482,13 @@ FINAL SYMBOL TABLE
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
(byte) main::i !zp ZP_BYTE:2
|
||||
(byte) main::i#1 i !zp ZP_BYTE:2 5.5
|
||||
(byte) main::i#2 i !zp ZP_BYTE:2 22.0
|
||||
(byte) main::i#3 i !zp ZP_BYTE:2 11.0
|
||||
(signed word) main::j !zp ZP_WORD:4
|
||||
(signed word) main::j#1 j !zp ZP_WORD:4 3.6666666666666665
|
||||
(signed word) main::j#2 j !zp ZP_WORD:4 6.6000000000000005
|
||||
(byte) main::i !zp ZP_VAR:2
|
||||
(byte) main::i#1 i !zp ZP_VAR:2 zp ZP_BYTE:2 5.5
|
||||
(byte) main::i#2 i !zp ZP_VAR:2 zp ZP_BYTE:2 22.0
|
||||
(byte) main::i#3 i !zp ZP_VAR:2 zp ZP_BYTE:2 11.0
|
||||
(signed word) main::j !zp ZP_VAR:4
|
||||
(signed word) main::j#1 j !zp ZP_VAR:4 zp ZP_WORD:4 3.6666666666666665
|
||||
(signed word) main::j#2 j !zp ZP_VAR:4 zp ZP_WORD:4 6.6000000000000005
|
||||
(signed word) main::k
|
||||
(signed word) main::k#0 k zp ZP_WORD:6 11.0
|
||||
|
||||
|
@ -9,13 +9,13 @@
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
(byte) main::i !zp ZP_BYTE:2
|
||||
(byte) main::i#1 i !zp ZP_BYTE:2 5.5
|
||||
(byte) main::i#2 i !zp ZP_BYTE:2 22.0
|
||||
(byte) main::i#3 i !zp ZP_BYTE:2 11.0
|
||||
(signed word) main::j !zp ZP_WORD:4
|
||||
(signed word) main::j#1 j !zp ZP_WORD:4 3.6666666666666665
|
||||
(signed word) main::j#2 j !zp ZP_WORD:4 6.6000000000000005
|
||||
(byte) main::i !zp ZP_VAR:2
|
||||
(byte) main::i#1 i !zp ZP_VAR:2 zp ZP_BYTE:2 5.5
|
||||
(byte) main::i#2 i !zp ZP_VAR:2 zp ZP_BYTE:2 22.0
|
||||
(byte) main::i#3 i !zp ZP_VAR:2 zp ZP_BYTE:2 11.0
|
||||
(signed word) main::j !zp ZP_VAR:4
|
||||
(signed word) main::j#1 j !zp ZP_VAR:4 zp ZP_WORD:4 3.6666666666666665
|
||||
(signed word) main::j#2 j !zp ZP_VAR:4 zp ZP_WORD:4 6.6000000000000005
|
||||
(signed word) main::k
|
||||
(signed word) main::k#0 k zp ZP_WORD:6 11.0
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user