1
0
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:
jespergravgaard 2019-10-06 22:41:21 +02:00
parent 1b9e4347fc
commit b93d65423d
18 changed files with 189 additions and 246 deletions

View File

@ -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();

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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);
}
}
}

View File

@ -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

View File

@ -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 ]

View File

@ -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 ]

View File

@ -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

View File

@ -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 ]

View File

@ -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 ]

View File

@ -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 ]

View File

@ -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 []

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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