1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-06-20 03:29:32 +00:00

Allocation of zp/memory to variables is now prioritized by the calculated weight of the variable. This ensures that the most used variables are kept on zeropage when variables spill over into main memory. Closes #712

This commit is contained in:
Jesper Gravgaard 2021-09-23 08:24:56 +02:00
parent 1f91617ad1
commit 5d6fcca6c2
795 changed files with 28583 additions and 28383 deletions

View File

@ -158,10 +158,8 @@ public class Pass4RegistersFinalize extends Pass2Base {
LiveRangeEquivalenceClassSet equivalenceClassSet = getProgram().getLiveRangeEquivalenceClassSet();
List<LiveRangeEquivalenceClass> equivalenceClasses = new ArrayList<>(equivalenceClassSet.getEquivalenceClasses());
/*
final VariableRegisterWeights registerWeights = getProgram().getVariableRegisterWeights();
Collections.sort(equivalenceClasses, (o1, o2) -> Double.compare(registerWeights.getTotalWeight(o2), registerWeights.getTotalWeight(o1)));
*/
for(LiveRangeEquivalenceClass equivalenceClass : equivalenceClasses) {
Registers.Register register = equivalenceClass.getRegister();

View File

@ -94,23 +94,24 @@ Added variable main::c#0 to live range equivalence class [ main::c#0 ]
Complete equivalence classes
[ main::b ]
[ main::c#0 ]
Allocated zp[1]:2 [ main::b ]
Allocated zp[1]:3 [ main::c#0 ]
Allocated zp[1]:2 [ main::c#0 ]
Allocated zp[1]:3 [ main::b ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [0] main::b = 0 [ main::b ] ( [ main::b ] { } ) always clobbers reg byte a
Statement [2] main::SCREEN[main::b] = main::c#0 [ main::b ] ( [ main::b ] { } ) always clobbers reg byte y
Statement [4] if(main::b!=$b) goto main::@1 [ main::b ] ( [ main::b ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::b ] : zp[1]:2 ,
Potential registers zp[1]:3 [ main::c#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::b ] : zp[1]:3 ,
Potential registers zp[1]:2 [ main::c#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 22: zp[1]:3 [ main::c#0 ] 9.2: zp[1]:2 [ main::b ]
Uplift Scope [main] 22: zp[1]:2 [ main::c#0 ] 9.2: zp[1]:3 [ main::b ]
Uplift Scope []
Uplifting [main] best 319 combination reg byte a [ main::c#0 ] zp[1]:2 [ main::b ]
Uplifting [main] best 319 combination reg byte a [ main::c#0 ] zp[1]:3 [ main::b ]
Uplifting [] best 319 combination
Attempting to uplift remaining variables inzp[1]:2 [ main::b ]
Uplifting [main] best 319 combination zp[1]:2 [ main::b ]
Attempting to uplift remaining variables inzp[1]:3 [ main::b ]
Uplifting [main] best 319 combination zp[1]:3 [ main::b ]
Allocated (was zp[1]:3) zp[1]:2 [ main::b ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -9,10 +9,10 @@
:BasicUpstart(main)
.const SIZEOF_INT = 2
.label SCREEN = $400
.label idx = 3
.label idx = 2
.segment Code
main: {
.label i = 2
.label i = 5
// print(VALS)
lda #<VALS
sta.z print.p
@ -49,9 +49,9 @@ main: {
// }
rts
}
// void print(__zp(4) int *p)
// void print(__zp(3) int *p)
print: {
.label p = 4
.label p = 3
// SCREEN[idx++] = *p
lda.z idx
asl

View File

@ -264,42 +264,45 @@ Complete equivalence classes
[ print::p#3 print::p#2 ]
[ main::$5 ]
[ print::$0 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:2 [ print::$0 ]
Allocated zp[1]:3 [ idx#13 idx#14 ]
Allocated zp[2]:4 [ print::p#3 print::p#2 ]
Allocated zp[1]:6 [ main::$5 ]
Allocated zp[1]:7 [ print::$0 ]
Allocated zp[1]:6 [ main::i#2 main::i#1 ]
Allocated zp[1]:7 [ main::$5 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [5] main::$5 = main::i#2 << 1 [ main::i#2 main::$5 idx#14 ] ( [ main::i#2 main::$5 idx#14 ] { { idx#13 = idx#14 } { print::p#2 = print::p#3 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ idx#13 idx#14 ]
Statement [6] print::p#2 = VALS + main::$5 [ main::i#2 print::p#2 idx#14 ] ( [ main::i#2 print::p#2 idx#14 ] { { idx#13 = idx#14 } { print::p#2 = print::p#3 } } ) always clobbers reg byte a
Statement [12] print::$0 = idx#13 << 1 [ idx#13 print::p#3 print::$0 ] ( print:1 [ idx#13 print::p#3 print::$0 ] { } print:3 [ idx#13 print::p#3 print::$0 ] { { idx#13 = idx#14 } } print:7 [ main::i#2 idx#13 print::p#3 print::$0 ] { { idx#13 = idx#14 } { print::p#2 = print::p#3 } } ) always clobbers reg byte a
Statement [13] SCREEN[print::$0] = *print::p#3 [ idx#13 ] ( print:1 [ idx#13 ] { } print:3 [ idx#13 ] { { idx#13 = idx#14 } } print:7 [ main::i#2 idx#13 ] { { idx#13 = idx#14 } { print::p#2 = print::p#3 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:3 [ idx#13 idx#14 ]
Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::i#2 main::i#1 ]
Statement [5] main::$5 = main::i#2 << 1 [ main::i#2 main::$5 idx#14 ] ( [ main::i#2 main::$5 idx#14 ] { { idx#13 = idx#14 } { print::p#2 = print::p#3 } } ) always clobbers reg byte a
Statement [6] print::p#2 = VALS + main::$5 [ main::i#2 print::p#2 idx#14 ] ( [ main::i#2 print::p#2 idx#14 ] { { idx#13 = idx#14 } { print::p#2 = print::p#3 } } ) always clobbers reg byte a
Statement [12] print::$0 = idx#13 << 1 [ idx#13 print::p#3 print::$0 ] ( print:1 [ idx#13 print::p#3 print::$0 ] { } print:3 [ idx#13 print::p#3 print::$0 ] { { idx#13 = idx#14 } } print:7 [ main::i#2 idx#13 print::p#3 print::$0 ] { { idx#13 = idx#14 } { print::p#2 = print::p#3 } } ) always clobbers reg byte a
Statement [13] SCREEN[print::$0] = *print::p#3 [ idx#13 ] ( print:1 [ idx#13 ] { } print:3 [ idx#13 ] { { idx#13 = idx#14 } } print:7 [ main::i#2 idx#13 ] { { idx#13 = idx#14 } { print::p#2 = print::p#3 } } ) always clobbers reg byte a reg byte y
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x ,
Potential registers zp[1]:6 [ main::i#2 main::i#1 ] : zp[1]:6 , reg byte x ,
Potential registers zp[1]:3 [ idx#13 idx#14 ] : zp[1]:3 , reg byte x ,
Potential registers zp[2]:4 [ print::p#3 print::p#2 ] : zp[2]:4 ,
Potential registers zp[1]:6 [ main::$5 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ print::$0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ main::$5 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ print::$0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [print] 202: zp[1]:7 [ print::$0 ] 78: zp[2]:4 [ print::p#3 print::p#2 ]
Uplift Scope [print] 202: zp[1]:2 [ print::$0 ] 78: zp[2]:4 [ print::p#3 print::p#2 ]
Uplift Scope [] 82.03: zp[1]:3 [ idx#13 idx#14 ]
Uplift Scope [main] 24.75: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:6 [ main::$5 ]
Uplift Scope [main] 24.75: zp[1]:6 [ main::i#2 main::i#1 ] 22: zp[1]:7 [ main::$5 ]
Uplifting [print] best 616 combination reg byte a [ print::$0 ] zp[2]:4 [ print::p#3 print::p#2 ]
Uplifting [] best 616 combination zp[1]:3 [ idx#13 idx#14 ]
Uplifting [main] best 556 combination zp[1]:2 [ main::i#2 main::i#1 ] reg byte a [ main::$5 ]
Uplifting [main] best 556 combination zp[1]:6 [ main::i#2 main::i#1 ] reg byte a [ main::$5 ]
Attempting to uplift remaining variables inzp[1]:3 [ idx#13 idx#14 ]
Uplifting [] best 556 combination zp[1]:3 [ idx#13 idx#14 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::i#2 main::i#1 ]
Uplifting [main] best 556 combination zp[1]:2 [ main::i#2 main::i#1 ]
Attempting to uplift remaining variables inzp[1]:6 [ main::i#2 main::i#1 ]
Uplifting [main] best 556 combination zp[1]:6 [ main::i#2 main::i#1 ]
Allocated (was zp[1]:3) zp[1]:2 [ idx#13 idx#14 ]
Allocated (was zp[2]:4) zp[2]:3 [ print::p#3 print::p#2 ]
Allocated (was zp[1]:6) zp[1]:5 [ main::i#2 main::i#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -316,11 +319,11 @@ ASSEMBLER BEFORE OPTIMIZATION
// Global Constants & labels
.const SIZEOF_INT = 2
.label SCREEN = $400
.label idx = 3
.label idx = 2
.segment Code
// main
main: {
.label i = 2
.label i = 5
// [1] call print
// [11] phi from main to print [phi:main->print]
print_from_main:
@ -392,9 +395,9 @@ main: {
rts
}
// print
// void print(__zp(4) int *p)
// void print(__zp(3) int *p)
print: {
.label p = 4
.label p = 3
// [12] print::$0 = idx#13 << 1 -- vbuaa=vbuz1_rol_1
lda.z idx
asl
@ -446,22 +449,22 @@ __constant int * const SCREEN = (int *) 1024
__constant char SIZEOF_INT = 2
__constant int VALS[] = { 1, 2, 3, 4 }
char idx
char idx#13 // idx zp[1]:3 71.66666666666666
char idx#14 // idx zp[1]:3 10.363636363636363
char idx#13 // idx zp[1]:2 71.66666666666666
char idx#14 // idx zp[1]:2 10.363636363636363
void main()
char main::$5 // reg byte a 22.0
char main::i
char main::i#1 // i zp[1]:2 16.5
char main::i#2 // i zp[1]:2 8.25
char main::i#1 // i zp[1]:5 16.5
char main::i#2 // i zp[1]:5 8.25
void print(int *p)
char print::$0 // reg byte a 202.0
int *print::p
int *print::p#2 // p zp[2]:4 22.0
int *print::p#3 // p zp[2]:4 56.0
int *print::p#2 // p zp[2]:3 22.0
int *print::p#3 // p zp[2]:3 56.0
zp[1]:2 [ main::i#2 main::i#1 ]
zp[1]:3 [ idx#13 idx#14 ]
zp[2]:4 [ print::p#3 print::p#2 ]
zp[1]:5 [ main::i#2 main::i#1 ]
zp[1]:2 [ idx#13 idx#14 ]
zp[2]:3 [ print::p#3 print::p#2 ]
reg byte a [ main::$5 ]
reg byte a [ print::$0 ]
@ -483,11 +486,11 @@ Score: 457
// Global Constants & labels
.const SIZEOF_INT = 2
.label SCREEN = $400
.label idx = 3
.label idx = 2
.segment Code
// main
main: {
.label i = 2
.label i = 5
// print(VALS)
// [1] call print
// [11] phi from main to print [phi:main->print]
@ -551,9 +554,9 @@ main: {
rts
}
// print
// void print(__zp(4) int *p)
// void print(__zp(3) int *p)
print: {
.label p = 4
.label p = 3
// SCREEN[idx++] = *p
// [12] print::$0 = idx#13 << 1 -- vbuaa=vbuz1_rol_1
lda.z idx

View File

@ -2,21 +2,21 @@ __constant int * const SCREEN = (int *) 1024
__constant char SIZEOF_INT = 2
__constant int VALS[] = { 1, 2, 3, 4 }
char idx
char idx#13 // idx zp[1]:3 71.66666666666666
char idx#14 // idx zp[1]:3 10.363636363636363
char idx#13 // idx zp[1]:2 71.66666666666666
char idx#14 // idx zp[1]:2 10.363636363636363
void main()
char main::$5 // reg byte a 22.0
char main::i
char main::i#1 // i zp[1]:2 16.5
char main::i#2 // i zp[1]:2 8.25
char main::i#1 // i zp[1]:5 16.5
char main::i#2 // i zp[1]:5 8.25
void print(int *p)
char print::$0 // reg byte a 202.0
int *print::p
int *print::p#2 // p zp[2]:4 22.0
int *print::p#3 // p zp[2]:4 56.0
int *print::p#2 // p zp[2]:3 22.0
int *print::p#3 // p zp[2]:3 56.0
zp[1]:2 [ main::i#2 main::i#1 ]
zp[1]:3 [ idx#13 idx#14 ]
zp[2]:4 [ print::p#3 print::p#2 ]
zp[1]:5 [ main::i#2 main::i#1 ]
zp[1]:2 [ idx#13 idx#14 ]
zp[2]:3 [ print::p#3 print::p#2 ]
reg byte a [ main::$5 ]
reg byte a [ print::$0 ]

View File

@ -221,19 +221,19 @@ Complete equivalence classes
[ getValue::$1 ]
[ getValue::$2 ]
[ getValue::return#1 ]
Allocated zp[1]:2 [ main::idx#2 main::idx#1 ]
Allocated zp[2]:3 [ getValue::index#0 ]
Allocated zp[2]:5 [ getValue::return#0 ]
Allocated zp[2]:7 [ main::$0 ]
Allocated zp[1]:9 [ main::$2 ]
Allocated zp[1]:10 [ getValue::$0 ]
Allocated zp[1]:11 [ getValue::$3 ]
Allocated zp[1]:12 [ getValue::$1 ]
Allocated zp[1]:13 [ getValue::$2 ]
Allocated zp[2]:14 [ getValue::return#1 ]
Allocated zp[1]:2 [ getValue::$0 ]
Allocated zp[1]:3 [ getValue::$3 ]
Allocated zp[1]:4 [ getValue::$1 ]
Allocated zp[2]:5 [ getValue::index#0 ]
Allocated zp[1]:7 [ getValue::$2 ]
Allocated zp[2]:8 [ getValue::return#1 ]
Allocated zp[1]:10 [ main::idx#2 main::idx#1 ]
Allocated zp[2]:11 [ getValue::return#0 ]
Allocated zp[1]:13 [ main::$2 ]
Allocated zp[2]:14 [ main::$0 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [2] getValue::index#0 = main::idx#2 [ main::idx#2 getValue::index#0 ] ( [ main::idx#2 getValue::index#0 ] { { getValue::index#0 = main::idx#2 } { getValue::return#0 = getValue::return#1 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::idx#2 main::idx#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:10 [ main::idx#2 main::idx#1 ]
Statement [4] getValue::return#0 = getValue::return#1 [ main::idx#2 getValue::return#0 ] ( [ main::idx#2 getValue::return#0 ] { { getValue::index#0 = main::idx#2 } { getValue::return#0 = getValue::return#1 } } ) always clobbers reg byte a
Statement [5] main::$0 = getValue::return#0 [ main::idx#2 main::$0 ] ( [ main::idx#2 main::$0 ] { } ) always clobbers reg byte a
Statement [6] main::$2 = main::idx#2 << 1 [ main::idx#2 main::$0 main::$2 ] ( [ main::idx#2 main::$0 main::$2 ] { } ) always clobbers reg byte a
@ -253,30 +253,30 @@ Statement [12] getValue::$3 = getValue::$0 << 1 [ getValue::$3 ] ( getValue:3 [
Statement [13] getValue::$1 = arr16[getValue::$3] & $ff [ getValue::$1 ] ( getValue:3 [ main::idx#2 getValue::$1 ] { { getValue::index#0 = main::idx#2 } { getValue::return#0 = getValue::return#1 } } ) always clobbers reg byte a
Statement [14] getValue::$2 = getValue::$1 >> 1 [ getValue::$2 ] ( getValue:3 [ main::idx#2 getValue::$2 ] { { getValue::index#0 = main::idx#2 } { getValue::return#0 = getValue::return#1 } } ) always clobbers reg byte a
Statement [15] getValue::return#1 = (unsigned int)getValue::$2 [ getValue::return#1 ] ( getValue:3 [ main::idx#2 getValue::return#1 ] { { getValue::index#0 = main::idx#2 } { getValue::return#0 = getValue::return#1 } } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::idx#2 main::idx#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[2]:3 [ getValue::index#0 ] : zp[2]:3 ,
Potential registers zp[2]:5 [ getValue::return#0 ] : zp[2]:5 ,
Potential registers zp[2]:7 [ main::$0 ] : zp[2]:7 ,
Potential registers zp[1]:9 [ main::$2 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:10 [ getValue::$0 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:11 [ getValue::$3 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:12 [ getValue::$1 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:13 [ getValue::$2 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:14 [ getValue::return#1 ] : zp[2]:14 ,
Potential registers zp[1]:10 [ main::idx#2 main::idx#1 ] : zp[1]:10 , reg byte x , reg byte y ,
Potential registers zp[2]:5 [ getValue::index#0 ] : zp[2]:5 ,
Potential registers zp[2]:11 [ getValue::return#0 ] : zp[2]:11 ,
Potential registers zp[2]:14 [ main::$0 ] : zp[2]:14 ,
Potential registers zp[1]:13 [ main::$2 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ getValue::$0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ getValue::$3 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ getValue::$1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ getValue::$2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:8 [ getValue::return#1 ] : zp[2]:8 ,
REGISTER UPLIFT SCOPES
Uplift Scope [getValue] 202: zp[1]:10 [ getValue::$0 ] 202: zp[1]:11 [ getValue::$3 ] 202: zp[1]:12 [ getValue::$1 ] 112: zp[2]:3 [ getValue::index#0 ] 101: zp[1]:13 [ getValue::$2 ] 37.33: zp[2]:14 [ getValue::return#1 ] 22: zp[2]:5 [ getValue::return#0 ]
Uplift Scope [main] 22.79: zp[1]:2 [ main::idx#2 main::idx#1 ] 22: zp[1]:9 [ main::$2 ] 11: zp[2]:7 [ main::$0 ]
Uplift Scope [getValue] 202: zp[1]:2 [ getValue::$0 ] 202: zp[1]:3 [ getValue::$3 ] 202: zp[1]:4 [ getValue::$1 ] 112: zp[2]:5 [ getValue::index#0 ] 101: zp[1]:7 [ getValue::$2 ] 37.33: zp[2]:8 [ getValue::return#1 ] 22: zp[2]:11 [ getValue::return#0 ]
Uplift Scope [main] 22.79: zp[1]:10 [ main::idx#2 main::idx#1 ] 22: zp[1]:13 [ main::$2 ] 11: zp[2]:14 [ main::$0 ]
Uplift Scope []
Uplifting [getValue] best 1015 combination reg byte a [ getValue::$0 ] reg byte a [ getValue::$3 ] reg byte a [ getValue::$1 ] zp[2]:3 [ getValue::index#0 ] reg byte a [ getValue::$2 ] zp[2]:14 [ getValue::return#1 ] zp[2]:5 [ getValue::return#0 ]
Uplifting [getValue] best 1015 combination reg byte a [ getValue::$0 ] reg byte a [ getValue::$3 ] reg byte a [ getValue::$1 ] zp[2]:5 [ getValue::index#0 ] reg byte a [ getValue::$2 ] zp[2]:8 [ getValue::return#1 ] zp[2]:11 [ getValue::return#0 ]
Limited combination testing to 100 combinations of 256 possible.
Uplifting [main] best 865 combination reg byte x [ main::idx#2 main::idx#1 ] reg byte a [ main::$2 ] zp[2]:7 [ main::$0 ]
Uplifting [main] best 865 combination reg byte x [ main::idx#2 main::idx#1 ] reg byte a [ main::$2 ] zp[2]:14 [ main::$0 ]
Uplifting [] best 865 combination
Coalescing zero page register [ zp[2]:5 [ getValue::return#0 ] ] with [ zp[2]:7 [ main::$0 ] ] - score: 1
Coalescing zero page register [ zp[2]:5 [ getValue::return#0 main::$0 ] ] with [ zp[2]:14 [ getValue::return#1 ] ] - score: 1
Allocated (was zp[2]:3) zp[2]:2 [ getValue::index#0 ]
Allocated (was zp[2]:5) zp[2]:4 [ getValue::return#0 main::$0 getValue::return#1 ]
Coalescing zero page register [ zp[2]:11 [ getValue::return#0 ] ] with [ zp[2]:14 [ main::$0 ] ] - score: 1
Coalescing zero page register [ zp[2]:11 [ getValue::return#0 main::$0 ] ] with [ zp[2]:8 [ getValue::return#1 ] ] - score: 1
Allocated (was zp[2]:5) zp[2]:2 [ getValue::index#0 ]
Allocated (was zp[2]:11) zp[2]:4 [ getValue::return#0 main::$0 getValue::return#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -199,32 +199,32 @@ Complete equivalence classes
[ main::sub#2 main::sub#1 ]
[ main::$0 ]
[ main::$1 ]
Allocated zp[1]:2 [ main::item#4 main::item#1 ]
Allocated zp[2]:3 [ main::cur_item#4 main::cur_item#1 ]
Allocated zp[1]:5 [ main::sub#2 main::sub#1 ]
Allocated zp[1]:6 [ main::$0 ]
Allocated zp[1]:7 [ main::$1 ]
Allocated zp[1]:2 [ main::sub#2 main::sub#1 ]
Allocated zp[1]:3 [ main::$0 ]
Allocated zp[1]:4 [ main::$1 ]
Allocated zp[1]:5 [ main::item#4 main::item#1 ]
Allocated zp[2]:6 [ main::cur_item#4 main::cur_item#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [3] main::$0 = main::item#4 << 4 [ main::item#4 main::cur_item#4 main::sub#2 main::$0 ] ( [ main::item#4 main::cur_item#4 main::sub#2 main::$0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::item#4 main::item#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::sub#2 main::sub#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::item#4 main::item#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::sub#2 main::sub#1 ]
Statement [8] main::cur_item#1 = main::cur_item#4 + ITEM_SIZE [ main::item#4 main::cur_item#1 ] ( [ main::item#4 main::cur_item#1 ] { } ) always clobbers reg byte a
Statement [3] main::$0 = main::item#4 << 4 [ main::item#4 main::cur_item#4 main::sub#2 main::$0 ] ( [ main::item#4 main::cur_item#4 main::sub#2 main::$0 ] { } ) always clobbers reg byte a
Statement [8] main::cur_item#1 = main::cur_item#4 + ITEM_SIZE [ main::item#4 main::cur_item#1 ] ( [ main::item#4 main::cur_item#1 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::item#4 main::item#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[2]:3 [ main::cur_item#4 main::cur_item#1 ] : zp[2]:3 ,
Potential registers zp[1]:5 [ main::sub#2 main::sub#1 ] : zp[1]:5 , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ main::$0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ main::$1 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ main::item#4 main::item#1 ] : zp[1]:5 , reg byte x , reg byte y ,
Potential registers zp[2]:6 [ main::cur_item#4 main::cur_item#1 ] : zp[2]:6 ,
Potential registers zp[1]:2 [ main::sub#2 main::sub#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::$1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 252.5: zp[1]:5 [ main::sub#2 main::sub#1 ] 202: zp[1]:6 [ main::$0 ] 202: zp[1]:7 [ main::$1 ] 31.88: zp[1]:2 [ main::item#4 main::item#1 ] 24.9: zp[2]:3 [ main::cur_item#4 main::cur_item#1 ]
Uplift Scope [main] 252.5: zp[1]:2 [ main::sub#2 main::sub#1 ] 202: zp[1]:3 [ main::$0 ] 202: zp[1]:4 [ main::$1 ] 31.88: zp[1]:5 [ main::item#4 main::item#1 ] 24.9: zp[2]:6 [ main::cur_item#4 main::cur_item#1 ]
Uplift Scope []
Uplifting [main] best 4406 combination reg byte y [ main::sub#2 main::sub#1 ] reg byte a [ main::$0 ] reg byte a [ main::$1 ] reg byte x [ main::item#4 main::item#1 ] zp[2]:3 [ main::cur_item#4 main::cur_item#1 ]
Uplifting [main] best 4406 combination reg byte y [ main::sub#2 main::sub#1 ] reg byte a [ main::$0 ] reg byte a [ main::$1 ] reg byte x [ main::item#4 main::item#1 ] zp[2]:6 [ main::cur_item#4 main::cur_item#1 ]
Limited combination testing to 100 combinations of 144 possible.
Uplifting [] best 4406 combination
Allocated (was zp[2]:3) zp[2]:2 [ main::cur_item#4 main::cur_item#1 ]
Allocated (was zp[2]:6) zp[2]:2 [ main::cur_item#4 main::cur_item#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -670,12 +670,12 @@ Initial phi equivalence classes
Complete equivalence classes
[ test::a#11 ]
[ test::i#11 ]
Allocated zp[1]:2 [ test::a#11 ]
Allocated zp[1]:3 [ test::i#11 ]
Allocated zp[1]:2 [ test::i#11 ]
Allocated zp[1]:3 [ test::a#11 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [25] screen2#0[test::i#11] = ref[test::i#11] [ test::a#11 test::i#11 ] ( test:1 [ test::a#11 test::i#11 ] { } test:3 [ test::a#11 test::i#11 ] { } test:5 [ test::a#11 test::i#11 ] { } test:7 [ test::a#11 test::i#11 ] { } test:9 [ test::a#11 test::i#11 ] { } test:11 [ test::a#11 test::i#11 ] { } test:13 [ test::a#11 test::i#11 ] { } test:15 [ test::a#11 test::i#11 ] { } test:17 [ test::a#11 test::i#11 ] { } test:19 [ test::a#11 test::i#11 ] { } test:21 [ test::a#11 test::i#11 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ test::a#11 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ test::i#11 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ test::a#11 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ test::i#11 ]
Statement [26] if(ref[test::i#11]==test::a#11) goto test::@1 [ test::i#11 ] ( test:1 [ test::i#11 ] { } test:3 [ test::i#11 ] { } test:5 [ test::i#11 ] { } test:7 [ test::i#11 ] { } test:9 [ test::i#11 ] { } test:11 [ test::i#11 ] { } test:13 [ test::i#11 ] { } test:15 [ test::i#11 ] { } test:17 [ test::i#11 ] { } test:19 [ test::i#11 ] { } test:21 [ test::i#11 ] { } ) always clobbers reg byte a
Statement [27] cols[test::i#11] = RED [ ] ( test:1 [ ] { } test:3 [ ] { } test:5 [ ] { } test:7 [ ] { } test:9 [ ] { } test:11 [ ] { } test:13 [ ] { } test:15 [ ] { } test:17 [ ] { } test:19 [ ] { } test:21 [ ] { } ) always clobbers reg byte a
Statement [29] cols[test::i#11] = GREEN [ ] ( test:1 [ ] { } test:3 [ ] { } test:5 [ ] { } test:7 [ ] { } test:9 [ ] { } test:11 [ ] { } test:13 [ ] { } test:15 [ ] { } test:17 [ ] { } test:19 [ ] { } test:21 [ ] { } ) always clobbers reg byte a
@ -684,19 +684,20 @@ Statement [25] screen2#0[test::i#11] = ref[test::i#11] [ test::a#11 test::i#11 ]
Statement [26] if(ref[test::i#11]==test::a#11) goto test::@1 [ test::i#11 ] ( test:1 [ test::i#11 ] { } test:3 [ test::i#11 ] { } test:5 [ test::i#11 ] { } test:7 [ test::i#11 ] { } test:9 [ test::i#11 ] { } test:11 [ test::i#11 ] { } test:13 [ test::i#11 ] { } test:15 [ test::i#11 ] { } test:17 [ test::i#11 ] { } test:19 [ test::i#11 ] { } test:21 [ test::i#11 ] { } ) always clobbers reg byte a
Statement [27] cols[test::i#11] = RED [ ] ( test:1 [ ] { } test:3 [ ] { } test:5 [ ] { } test:7 [ ] { } test:9 [ ] { } test:11 [ ] { } test:13 [ ] { } test:15 [ ] { } test:17 [ ] { } test:19 [ ] { } test:21 [ ] { } ) always clobbers reg byte a
Statement [29] cols[test::i#11] = GREEN [ ] ( test:1 [ ] { } test:3 [ ] { } test:5 [ ] { } test:7 [ ] { } test:9 [ ] { } test:11 [ ] { } test:13 [ ] { } test:15 [ ] { } test:17 [ ] { } test:19 [ ] { } test:21 [ ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ test::a#11 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ test::i#11 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ test::a#11 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ test::i#11 ] : zp[1]:2 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [test] 16.5: zp[1]:3 [ test::i#11 ] 7.33: zp[1]:2 [ test::a#11 ]
Uplift Scope [test] 16.5: zp[1]:2 [ test::i#11 ] 7.33: zp[1]:3 [ test::a#11 ]
Uplift Scope [main]
Uplift Scope []
Uplifting [test] best 238 combination reg byte x [ test::i#11 ] zp[1]:2 [ test::a#11 ]
Uplifting [test] best 238 combination reg byte x [ test::i#11 ] zp[1]:3 [ test::a#11 ]
Uplifting [main] best 238 combination
Uplifting [] best 238 combination
Attempting to uplift remaining variables inzp[1]:2 [ test::a#11 ]
Uplifting [test] best 238 combination zp[1]:2 [ test::a#11 ]
Attempting to uplift remaining variables inzp[1]:3 [ test::a#11 ]
Uplifting [test] best 238 combination zp[1]:3 [ test::a#11 ]
Allocated (was zp[1]:3) zp[1]:2 [ test::a#11 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -7,8 +7,8 @@
.segmentdef Data [startAfter="Code"]
.segment Basic
:BasicUpstart(__start)
.label line = 9
.label idx = $b
.label line = 7
.label idx = 2
.segment Code
__start: {
// __ma char * line = (char*)0x0400
@ -23,7 +23,7 @@ __start: {
rts
}
main: {
.label s = 2
.label s = $a
lda #<$400
sta.z s
lda #>$400
@ -56,9 +56,9 @@ main: {
}
md5: {
.const c = $98
.label b = 7
.label a = 5
.label b_1 = 4
.label b = 4
.label a = 6
.label b_1 = 9
lda #c
sta.z a
lda #$ef
@ -102,11 +102,11 @@ md5: {
sta.z a
jmp __b1
}
// void print(__register(X) char i, __zp(6) char a, __zp(7) char b, __zp(8) char c)
// void print(__register(X) char i, __zp(5) char a, __zp(4) char b, __zp(3) char c)
print: {
.label a = 6
.label b = 7
.label c = 8
.label a = 5
.label b = 4
.label c = 3
// l/0x10
txa
lsr

View File

@ -707,50 +707,50 @@ Complete equivalence classes
[ print::print323_$1 ]
[ print::print324_$0 ]
[ print::print324_$1 ]
Allocated zp[2]:2 [ main::s#2 main::s#1 ]
Allocated zp[1]:4 [ md5::i#2 md5::i#1 ]
Allocated zp[1]:5 [ md5::a#3 md5::a#8 ]
Allocated zp[1]:6 [ md5::b#2 md5::b#8 ]
Allocated zp[1]:7 [ md5::a#1 md5::a#9 ]
Allocated zp[1]:8 [ print::print321_l#0 print::i#0 print::i#1 ]
Allocated zp[1]:9 [ print::a#2 print::a#0 print::a#1 ]
Allocated zp[1]:10 [ print::b#2 print::b#0 print::b#1 ]
Allocated zp[1]:11 [ print::c#2 print::c#0 print::c#1 ]
Allocated zp[2]:12 [ line ]
Allocated zp[1]:14 [ idx ]
Allocated zp[1]:15 [ md5::$2 ]
Allocated zp[1]:16 [ md5::b#1 ]
Allocated zp[1]:17 [ print::print321_$0 ]
Allocated zp[1]:18 [ print::print321_$1 ]
Allocated zp[1]:19 [ print::print322_$0 ]
Allocated zp[1]:20 [ print::print322_$1 ]
Allocated zp[1]:21 [ print::print323_$0 ]
Allocated zp[1]:22 [ print::print323_$1 ]
Allocated zp[1]:23 [ print::print324_$0 ]
Allocated zp[1]:24 [ print::print324_$1 ]
Allocated zp[1]:2 [ print::print321_$0 ]
Allocated zp[1]:3 [ print::print321_$1 ]
Allocated zp[1]:4 [ print::print322_$0 ]
Allocated zp[1]:5 [ print::print322_$1 ]
Allocated zp[1]:6 [ print::print323_$0 ]
Allocated zp[1]:7 [ print::print323_$1 ]
Allocated zp[1]:8 [ print::print324_$0 ]
Allocated zp[1]:9 [ print::print324_$1 ]
Allocated zp[1]:10 [ print::print321_l#0 print::i#0 print::i#1 ]
Allocated zp[1]:11 [ idx ]
Allocated zp[1]:12 [ print::c#2 print::c#0 print::c#1 ]
Allocated zp[1]:13 [ print::a#2 print::a#0 print::a#1 ]
Allocated zp[1]:14 [ print::b#2 print::b#0 print::b#1 ]
Allocated zp[1]:15 [ md5::a#1 md5::a#9 ]
Allocated zp[2]:16 [ line ]
Allocated zp[1]:18 [ md5::$2 ]
Allocated zp[1]:19 [ md5::a#3 md5::a#8 ]
Allocated zp[1]:20 [ md5::b#2 md5::b#8 ]
Allocated zp[1]:21 [ md5::i#2 md5::i#1 ]
Allocated zp[1]:22 [ md5::b#1 ]
Allocated zp[2]:23 [ main::s#2 main::s#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] line = (char *) 1024 [ line ] ( [ line ] { } ) always clobbers reg byte a
Statement [2] idx = 0 [ line idx ] ( [ line idx ] { } ) always clobbers reg byte a
Statement [8] if(main::s#2<$800) goto main::@2 [ line idx main::s#2 ] ( main:4 [ line idx main::s#2 ] { } ) always clobbers reg byte a
Statement [12] *main::s#2 = ' ' [ line idx main::s#2 ] ( main:4 [ line idx main::s#2 ] { } ) always clobbers reg byte a reg byte y
Statement [37] print::print321_$0 = print::print321_l#0 >> 4 [ line idx print::print321_l#0 print::a#2 print::b#2 print::c#2 print::print321_$0 ] ( main:4::md5:10::print:22 [ md5::i#2 md5::b#2 md5::a#1 line idx print::print321_l#0 print::a#2 print::b#2 print::c#2 print::print321_$0 ] { { print::print321_l#0 = print::i#0 md5::i#2 } { print::a#0 = print::a#2 md5::a#3 } { print::b#0 = print::b#2 md5::b#2 } { print::c#0 = print::c#2 md5::a#1 } } main:4::md5:10::print:31 [ md5::i#2 md5::b#2 md5::a#1 md5::b#1 line idx print::print321_l#0 print::a#2 print::b#2 print::c#2 print::print321_$0 ] { { print::print321_l#0 = print::i#1 md5::i#2 } { print::a#1 = print::a#2 md5::a#1 } { print::b#1 = print::b#2 md5::b#1 } { print::c#1 = print::c#2 md5::b#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:4 [ md5::i#2 md5::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ md5::b#2 md5::b#8 ]
Removing always clobbered register reg byte a as potential for zp[1]:7 [ md5::a#1 md5::a#9 ]
Removing always clobbered register reg byte a as potential for zp[1]:8 [ print::print321_l#0 print::i#0 print::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:9 [ print::a#2 print::a#0 print::a#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:10 [ print::b#2 print::b#0 print::b#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:11 [ print::c#2 print::c#0 print::c#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:16 [ md5::b#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:21 [ md5::i#2 md5::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:20 [ md5::b#2 md5::b#8 ]
Removing always clobbered register reg byte a as potential for zp[1]:15 [ md5::a#1 md5::a#9 ]
Removing always clobbered register reg byte a as potential for zp[1]:10 [ print::print321_l#0 print::i#0 print::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:13 [ print::a#2 print::a#0 print::a#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:14 [ print::b#2 print::b#0 print::b#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:12 [ print::c#2 print::c#0 print::c#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:22 [ md5::b#1 ]
Statement [38] line[idx] = HEX[print::print321_$0] [ line idx print::print321_l#0 print::a#2 print::b#2 print::c#2 ] ( main:4::md5:10::print:22 [ md5::i#2 md5::b#2 md5::a#1 line idx print::print321_l#0 print::a#2 print::b#2 print::c#2 ] { { print::print321_l#0 = print::i#0 md5::i#2 } { print::a#0 = print::a#2 md5::a#3 } { print::b#0 = print::b#2 md5::b#2 } { print::c#0 = print::c#2 md5::a#1 } } main:4::md5:10::print:31 [ md5::i#2 md5::b#2 md5::a#1 md5::b#1 line idx print::print321_l#0 print::a#2 print::b#2 print::c#2 ] { { print::print321_l#0 = print::i#1 md5::i#2 } { print::a#1 = print::a#2 md5::a#1 } { print::b#1 = print::b#2 md5::b#1 } { print::c#1 = print::c#2 md5::b#2 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:4 [ md5::i#2 md5::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:6 [ md5::b#2 md5::b#8 ]
Removing always clobbered register reg byte y as potential for zp[1]:7 [ md5::a#1 md5::a#9 ]
Removing always clobbered register reg byte y as potential for zp[1]:8 [ print::print321_l#0 print::i#0 print::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:9 [ print::a#2 print::a#0 print::a#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:10 [ print::b#2 print::b#0 print::b#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:11 [ print::c#2 print::c#0 print::c#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:16 [ md5::b#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:21 [ md5::i#2 md5::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:20 [ md5::b#2 md5::b#8 ]
Removing always clobbered register reg byte y as potential for zp[1]:15 [ md5::a#1 md5::a#9 ]
Removing always clobbered register reg byte y as potential for zp[1]:10 [ print::print321_l#0 print::i#0 print::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:13 [ print::a#2 print::a#0 print::a#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:14 [ print::b#2 print::b#0 print::b#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:12 [ print::c#2 print::c#0 print::c#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:22 [ md5::b#1 ]
Statement [40] print::print321_$1 = print::print321_l#0 & $f [ line idx print::a#2 print::b#2 print::c#2 print::print321_$1 ] ( main:4::md5:10::print:22 [ md5::i#2 md5::b#2 md5::a#1 line idx print::a#2 print::b#2 print::c#2 print::print321_$1 ] { { print::print321_l#0 = print::i#0 md5::i#2 } { print::a#0 = print::a#2 md5::a#3 } { print::b#0 = print::b#2 md5::b#2 } { print::c#0 = print::c#2 md5::a#1 } } main:4::md5:10::print:31 [ md5::i#2 md5::b#2 md5::a#1 md5::b#1 line idx print::a#2 print::b#2 print::c#2 print::print321_$1 ] { { print::print321_l#0 = print::i#1 md5::i#2 } { print::a#1 = print::a#2 md5::a#1 } { print::b#1 = print::b#2 md5::b#1 } { print::c#1 = print::c#2 md5::b#2 } } ) always clobbers reg byte a
Statement [41] line[idx] = HEX[print::print321_$1] [ line idx print::a#2 print::b#2 print::c#2 ] ( main:4::md5:10::print:22 [ md5::i#2 md5::b#2 md5::a#1 line idx print::a#2 print::b#2 print::c#2 ] { { print::print321_l#0 = print::i#0 md5::i#2 } { print::a#0 = print::a#2 md5::a#3 } { print::b#0 = print::b#2 md5::b#2 } { print::c#0 = print::c#2 md5::a#1 } } main:4::md5:10::print:31 [ md5::i#2 md5::b#2 md5::a#1 md5::b#1 line idx print::a#2 print::b#2 print::c#2 ] { { print::print321_l#0 = print::i#1 md5::i#2 } { print::a#1 = print::a#2 md5::a#1 } { print::b#1 = print::b#2 md5::b#1 } { print::c#1 = print::c#2 md5::b#2 } } ) always clobbers reg byte a reg byte y
Statement [43] line[idx] = ' ' [ line idx print::a#2 print::b#2 print::c#2 ] ( main:4::md5:10::print:22 [ md5::i#2 md5::b#2 md5::a#1 line idx print::a#2 print::b#2 print::c#2 ] { { print::print321_l#0 = print::i#0 md5::i#2 } { print::a#0 = print::a#2 md5::a#3 } { print::b#0 = print::b#2 md5::b#2 } { print::c#0 = print::c#2 md5::a#1 } } main:4::md5:10::print:31 [ md5::i#2 md5::b#2 md5::a#1 md5::b#1 line idx print::a#2 print::b#2 print::c#2 ] { { print::print321_l#0 = print::i#1 md5::i#2 } { print::a#1 = print::a#2 md5::a#1 } { print::b#1 = print::b#2 md5::b#1 } { print::c#1 = print::c#2 md5::b#2 } } ) always clobbers reg byte a reg byte y
@ -798,74 +798,75 @@ Statement [65] line[idx] = HEX[print::print324_$1] [ line idx ] ( main:4::md5:10
Statement [67] line[idx] = ' ' [ line idx ] ( main:4::md5:10::print:22 [ md5::i#2 md5::b#2 md5::a#1 line idx ] { { print::print321_l#0 = print::i#0 md5::i#2 } { print::a#0 = print::a#2 md5::a#3 } { print::b#0 = print::b#2 md5::b#2 } { print::c#0 = print::c#2 md5::a#1 } } main:4::md5:10::print:31 [ md5::i#2 md5::b#2 md5::a#1 md5::b#1 line idx ] { { print::print321_l#0 = print::i#1 md5::i#2 } { print::a#1 = print::a#2 md5::a#1 } { print::b#1 = print::b#2 md5::b#1 } { print::c#1 = print::c#2 md5::b#2 } } ) always clobbers reg byte a reg byte y
Statement [69] line = line + $28 [ line ] ( main:4::md5:10::print:22 [ md5::i#2 md5::b#2 md5::a#1 line ] { { print::print321_l#0 = print::i#0 md5::i#2 } { print::a#0 = print::a#2 md5::a#3 } { print::b#0 = print::b#2 md5::b#2 } { print::c#0 = print::c#2 md5::a#1 } } main:4::md5:10::print:31 [ md5::i#2 md5::b#2 md5::a#1 md5::b#1 line ] { { print::print321_l#0 = print::i#1 md5::i#2 } { print::a#1 = print::a#2 md5::a#1 } { print::b#1 = print::b#2 md5::b#1 } { print::c#1 = print::c#2 md5::b#2 } } ) always clobbers reg byte a
Statement [70] idx = 0 [ line idx ] ( main:4::md5:10::print:22 [ md5::i#2 md5::b#2 md5::a#1 line idx ] { { print::print321_l#0 = print::i#0 md5::i#2 } { print::a#0 = print::a#2 md5::a#3 } { print::b#0 = print::b#2 md5::b#2 } { print::c#0 = print::c#2 md5::a#1 } } main:4::md5:10::print:31 [ md5::i#2 md5::b#2 md5::a#1 md5::b#1 line idx ] { { print::print321_l#0 = print::i#1 md5::i#2 } { print::a#1 = print::a#2 md5::a#1 } { print::b#1 = print::b#2 md5::b#1 } { print::c#1 = print::c#2 md5::b#2 } } ) always clobbers reg byte a
Potential registers zp[2]:2 [ main::s#2 main::s#1 ] : zp[2]:2 ,
Potential registers zp[1]:4 [ md5::i#2 md5::i#1 ] : zp[1]:4 , reg byte x ,
Potential registers zp[1]:5 [ md5::a#3 md5::a#8 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ md5::b#2 md5::b#8 ] : zp[1]:6 , reg byte x ,
Potential registers zp[1]:7 [ md5::a#1 md5::a#9 ] : zp[1]:7 , reg byte x ,
Potential registers zp[1]:8 [ print::print321_l#0 print::i#0 print::i#1 ] : zp[1]:8 , reg byte x ,
Potential registers zp[1]:9 [ print::a#2 print::a#0 print::a#1 ] : zp[1]:9 , reg byte x ,
Potential registers zp[1]:10 [ print::b#2 print::b#0 print::b#1 ] : zp[1]:10 , reg byte x ,
Potential registers zp[1]:11 [ print::c#2 print::c#0 print::c#1 ] : zp[1]:11 , reg byte x ,
Potential registers zp[2]:12 [ line ] : zp[2]:12 ,
Potential registers zp[1]:14 [ idx ] : zp[1]:14 ,
Potential registers zp[1]:15 [ md5::$2 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:16 [ md5::b#1 ] : zp[1]:16 , reg byte x ,
Potential registers zp[1]:17 [ print::print321_$0 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:18 [ print::print321_$1 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:19 [ print::print322_$0 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:20 [ print::print322_$1 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:21 [ print::print323_$0 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:22 [ print::print323_$1 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:23 [ print::print324_$0 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:24 [ print::print324_$1 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:23 [ main::s#2 main::s#1 ] : zp[2]:23 ,
Potential registers zp[1]:21 [ md5::i#2 md5::i#1 ] : zp[1]:21 , reg byte x ,
Potential registers zp[1]:19 [ md5::a#3 md5::a#8 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:20 [ md5::b#2 md5::b#8 ] : zp[1]:20 , reg byte x ,
Potential registers zp[1]:15 [ md5::a#1 md5::a#9 ] : zp[1]:15 , reg byte x ,
Potential registers zp[1]:10 [ print::print321_l#0 print::i#0 print::i#1 ] : zp[1]:10 , reg byte x ,
Potential registers zp[1]:13 [ print::a#2 print::a#0 print::a#1 ] : zp[1]:13 , reg byte x ,
Potential registers zp[1]:14 [ print::b#2 print::b#0 print::b#1 ] : zp[1]:14 , reg byte x ,
Potential registers zp[1]:12 [ print::c#2 print::c#0 print::c#1 ] : zp[1]:12 , reg byte x ,
Potential registers zp[2]:16 [ line ] : zp[2]:16 ,
Potential registers zp[1]:11 [ idx ] : zp[1]:11 ,
Potential registers zp[1]:18 [ md5::$2 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:22 [ md5::b#1 ] : zp[1]:22 , reg byte x ,
Potential registers zp[1]:2 [ print::print321_$0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ print::print321_$1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ print::print322_$0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ print::print322_$1 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ print::print323_$0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ print::print323_$1 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ print::print324_$0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:9 [ print::print324_$1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [print] 20,002: zp[1]:17 [ print::print321_$0 ] 20,002: zp[1]:18 [ print::print321_$1 ] 20,002: zp[1]:19 [ print::print322_$0 ] 20,002: zp[1]:20 [ print::print322_$1 ] 20,002: zp[1]:21 [ print::print323_$0 ] 20,002: zp[1]:22 [ print::print323_$1 ] 20,002: zp[1]:23 [ print::print324_$0 ] 20,002: zp[1]:24 [ print::print324_$1 ] 6,502: zp[1]:8 [ print::print321_l#0 print::i#0 print::i#1 ] 4,789.86: zp[1]:11 [ print::c#2 print::c#0 print::c#1 ] 3,168.33: zp[1]:9 [ print::a#2 print::a#0 print::a#1 ] 3,102.2: zp[1]:10 [ print::b#2 print::b#0 print::b#1 ]
Uplift Scope [md5] 2,237.53: zp[1]:7 [ md5::a#1 md5::a#9 ] 2,002: zp[1]:15 [ md5::$2 ] 1,334.67: zp[1]:5 [ md5::a#3 md5::a#8 ] 1,264.42: zp[1]:6 [ md5::b#2 md5::b#8 ] 875.88: zp[1]:4 [ md5::i#2 md5::i#1 ] 375.38: zp[1]:16 [ md5::b#1 ]
Uplift Scope [] 5,873.63: zp[1]:14 [ idx ] 2,121.45: zp[2]:12 [ line ]
Uplift Scope [main] 336.67: zp[2]:2 [ main::s#2 main::s#1 ]
Uplift Scope [print] 20,002: zp[1]:2 [ print::print321_$0 ] 20,002: zp[1]:3 [ print::print321_$1 ] 20,002: zp[1]:4 [ print::print322_$0 ] 20,002: zp[1]:5 [ print::print322_$1 ] 20,002: zp[1]:6 [ print::print323_$0 ] 20,002: zp[1]:7 [ print::print323_$1 ] 20,002: zp[1]:8 [ print::print324_$0 ] 20,002: zp[1]:9 [ print::print324_$1 ] 6,502: zp[1]:10 [ print::print321_l#0 print::i#0 print::i#1 ] 4,789.86: zp[1]:12 [ print::c#2 print::c#0 print::c#1 ] 3,168.33: zp[1]:13 [ print::a#2 print::a#0 print::a#1 ] 3,102.2: zp[1]:14 [ print::b#2 print::b#0 print::b#1 ]
Uplift Scope [md5] 2,237.53: zp[1]:15 [ md5::a#1 md5::a#9 ] 2,002: zp[1]:18 [ md5::$2 ] 1,334.67: zp[1]:19 [ md5::a#3 md5::a#8 ] 1,264.42: zp[1]:20 [ md5::b#2 md5::b#8 ] 875.88: zp[1]:21 [ md5::i#2 md5::i#1 ] 375.38: zp[1]:22 [ md5::b#1 ]
Uplift Scope [] 5,873.63: zp[1]:11 [ idx ] 2,121.45: zp[2]:16 [ line ]
Uplift Scope [main] 336.67: zp[2]:23 [ main::s#2 main::s#1 ]
Uplift Scope [__start]
Uplifting [print] best 2443 combination reg byte a [ print::print321_$0 ] reg byte a [ print::print321_$1 ] reg byte a [ print::print322_$0 ] reg byte a [ print::print322_$1 ] zp[1]:21 [ print::print323_$0 ] zp[1]:22 [ print::print323_$1 ] zp[1]:23 [ print::print324_$0 ] zp[1]:24 [ print::print324_$1 ] zp[1]:8 [ print::print321_l#0 print::i#0 print::i#1 ] zp[1]:11 [ print::c#2 print::c#0 print::c#1 ] zp[1]:9 [ print::a#2 print::a#0 print::a#1 ] zp[1]:10 [ print::b#2 print::b#0 print::b#1 ]
Uplifting [print] best 2443 combination reg byte a [ print::print321_$0 ] reg byte a [ print::print321_$1 ] reg byte a [ print::print322_$0 ] reg byte a [ print::print322_$1 ] zp[1]:6 [ print::print323_$0 ] zp[1]:7 [ print::print323_$1 ] zp[1]:8 [ print::print324_$0 ] zp[1]:9 [ print::print324_$1 ] zp[1]:10 [ print::print321_l#0 print::i#0 print::i#1 ] zp[1]:12 [ print::c#2 print::c#0 print::c#1 ] zp[1]:13 [ print::a#2 print::a#0 print::a#1 ] zp[1]:14 [ print::b#2 print::b#0 print::b#1 ]
Limited combination testing to 100 combinations of 1048576 possible.
Uplifting [md5] best 2153 combination zp[1]:7 [ md5::a#1 md5::a#9 ] reg byte a [ md5::$2 ] reg byte y [ md5::a#3 md5::a#8 ] zp[1]:6 [ md5::b#2 md5::b#8 ] reg byte x [ md5::i#2 md5::i#1 ] zp[1]:16 [ md5::b#1 ]
Uplifting [md5] best 2153 combination zp[1]:15 [ md5::a#1 md5::a#9 ] reg byte a [ md5::$2 ] reg byte y [ md5::a#3 md5::a#8 ] zp[1]:20 [ md5::b#2 md5::b#8 ] reg byte x [ md5::i#2 md5::i#1 ] zp[1]:22 [ md5::b#1 ]
Limited combination testing to 100 combinations of 256 possible.
Uplifting [] best 2153 combination zp[1]:14 [ idx ] zp[2]:12 [ line ]
Uplifting [main] best 2153 combination zp[2]:2 [ main::s#2 main::s#1 ]
Uplifting [] best 2153 combination zp[1]:11 [ idx ] zp[2]:16 [ line ]
Uplifting [main] best 2153 combination zp[2]:23 [ main::s#2 main::s#1 ]
Uplifting [__start] best 2153 combination
Attempting to uplift remaining variables inzp[1]:21 [ print::print323_$0 ]
Attempting to uplift remaining variables inzp[1]:6 [ print::print323_$0 ]
Uplifting [print] best 2149 combination reg byte a [ print::print323_$0 ]
Attempting to uplift remaining variables inzp[1]:22 [ print::print323_$1 ]
Attempting to uplift remaining variables inzp[1]:7 [ print::print323_$1 ]
Uplifting [print] best 2145 combination reg byte a [ print::print323_$1 ]
Attempting to uplift remaining variables inzp[1]:23 [ print::print324_$0 ]
Attempting to uplift remaining variables inzp[1]:8 [ print::print324_$0 ]
Uplifting [print] best 2141 combination reg byte a [ print::print324_$0 ]
Attempting to uplift remaining variables inzp[1]:24 [ print::print324_$1 ]
Attempting to uplift remaining variables inzp[1]:9 [ print::print324_$1 ]
Uplifting [print] best 2137 combination reg byte a [ print::print324_$1 ]
Attempting to uplift remaining variables inzp[1]:8 [ print::print321_l#0 print::i#0 print::i#1 ]
Attempting to uplift remaining variables inzp[1]:10 [ print::print321_l#0 print::i#0 print::i#1 ]
Uplifting [print] best 2075 combination reg byte x [ print::print321_l#0 print::i#0 print::i#1 ]
Attempting to uplift remaining variables inzp[1]:14 [ idx ]
Uplifting [] best 2075 combination zp[1]:14 [ idx ]
Attempting to uplift remaining variables inzp[1]:11 [ print::c#2 print::c#0 print::c#1 ]
Uplifting [print] best 2075 combination zp[1]:11 [ print::c#2 print::c#0 print::c#1 ]
Attempting to uplift remaining variables inzp[1]:9 [ print::a#2 print::a#0 print::a#1 ]
Uplifting [print] best 2075 combination zp[1]:9 [ print::a#2 print::a#0 print::a#1 ]
Attempting to uplift remaining variables inzp[1]:10 [ print::b#2 print::b#0 print::b#1 ]
Uplifting [print] best 2075 combination zp[1]:10 [ print::b#2 print::b#0 print::b#1 ]
Attempting to uplift remaining variables inzp[1]:7 [ md5::a#1 md5::a#9 ]
Uplifting [md5] best 2075 combination zp[1]:7 [ md5::a#1 md5::a#9 ]
Attempting to uplift remaining variables inzp[1]:6 [ md5::b#2 md5::b#8 ]
Uplifting [md5] best 2075 combination zp[1]:6 [ md5::b#2 md5::b#8 ]
Attempting to uplift remaining variables inzp[1]:16 [ md5::b#1 ]
Uplifting [md5] best 2075 combination zp[1]:16 [ md5::b#1 ]
Coalescing zero page register [ zp[1]:10 [ print::b#2 print::b#0 print::b#1 ] ] with [ zp[1]:16 [ md5::b#1 ] ] - score: 1
Allocated (was zp[1]:6) zp[1]:4 [ md5::b#2 md5::b#8 ]
Allocated (was zp[1]:7) zp[1]:5 [ md5::a#1 md5::a#9 ]
Allocated (was zp[1]:9) zp[1]:6 [ print::a#2 print::a#0 print::a#1 ]
Allocated (was zp[1]:10) zp[1]:7 [ print::b#2 print::b#0 print::b#1 md5::b#1 ]
Allocated (was zp[1]:11) zp[1]:8 [ print::c#2 print::c#0 print::c#1 ]
Allocated (was zp[2]:12) zp[2]:9 [ line ]
Allocated (was zp[1]:14) zp[1]:11 [ idx ]
Attempting to uplift remaining variables inzp[1]:11 [ idx ]
Uplifting [] best 2075 combination zp[1]:11 [ idx ]
Attempting to uplift remaining variables inzp[1]:12 [ print::c#2 print::c#0 print::c#1 ]
Uplifting [print] best 2075 combination zp[1]:12 [ print::c#2 print::c#0 print::c#1 ]
Attempting to uplift remaining variables inzp[1]:13 [ print::a#2 print::a#0 print::a#1 ]
Uplifting [print] best 2075 combination zp[1]:13 [ print::a#2 print::a#0 print::a#1 ]
Attempting to uplift remaining variables inzp[1]:14 [ print::b#2 print::b#0 print::b#1 ]
Uplifting [print] best 2075 combination zp[1]:14 [ print::b#2 print::b#0 print::b#1 ]
Attempting to uplift remaining variables inzp[1]:15 [ md5::a#1 md5::a#9 ]
Uplifting [md5] best 2075 combination zp[1]:15 [ md5::a#1 md5::a#9 ]
Attempting to uplift remaining variables inzp[1]:20 [ md5::b#2 md5::b#8 ]
Uplifting [md5] best 2075 combination zp[1]:20 [ md5::b#2 md5::b#8 ]
Attempting to uplift remaining variables inzp[1]:22 [ md5::b#1 ]
Uplifting [md5] best 2075 combination zp[1]:22 [ md5::b#1 ]
Coalescing zero page register [ zp[1]:14 [ print::b#2 print::b#0 print::b#1 ] ] with [ zp[1]:22 [ md5::b#1 ] ] - score: 1
Allocated (was zp[1]:11) zp[1]:2 [ idx ]
Allocated (was zp[1]:12) zp[1]:3 [ print::c#2 print::c#0 print::c#1 ]
Allocated (was zp[1]:14) zp[1]:4 [ print::b#2 print::b#0 print::b#1 md5::b#1 ]
Allocated (was zp[1]:13) zp[1]:5 [ print::a#2 print::a#0 print::a#1 ]
Allocated (was zp[1]:15) zp[1]:6 [ md5::a#1 md5::a#9 ]
Allocated (was zp[2]:16) zp[2]:7 [ line ]
Allocated (was zp[1]:20) zp[1]:9 [ md5::b#2 md5::b#8 ]
Allocated (was zp[2]:23) zp[2]:10 [ main::s#2 main::s#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -880,8 +881,8 @@ ASSEMBLER BEFORE OPTIMIZATION
.segment Basic
:BasicUpstart(__start)
// Global Constants & labels
.label line = 9
.label idx = $b
.label line = 7
.label idx = 2
.segment Code
// __start
__start: {
@ -913,7 +914,7 @@ __start: {
}
// main
main: {
.label s = 2
.label s = $a
// [7] phi from main to main::@1 [phi:main->main::@1]
__b1_from_main:
// [7] phi main::s#2 = (char *) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1
@ -968,9 +969,9 @@ main: {
// md5
md5: {
.const c = $98
.label b = 7
.label a = 5
.label b_1 = 4
.label b = 4
.label a = 6
.label b_1 = 9
// [15] phi from md5 to md5::@1 [phi:md5->md5::@1]
__b1_from_md5:
// [15] phi md5::a#1 = md5::c#0 [phi:md5->md5::@1#0] -- vbuz1=vbuc1
@ -1072,11 +1073,11 @@ md5: {
jmp __b1
}
// print
// void print(__register(X) char i, __zp(6) char a, __zp(7) char b, __zp(8) char c)
// void print(__register(X) char i, __zp(5) char a, __zp(4) char b, __zp(3) char c)
print: {
.label a = 6
.label b = 7
.label c = 8
.label a = 5
.label b = 4
.label c = 3
jmp print321
// print::print321
print321:
@ -1290,23 +1291,23 @@ Succesful ASM optimization Pass5UnusedLabelElimination
FINAL SYMBOL TABLE
__constant char HEX[] = "0123456789abcdef"
void __start()
__loadstore char idx // zp[1]:11 5873.634920634922
__loadstore char *line // zp[2]:9 2121.4545454545455
__loadstore char idx // zp[1]:2 5873.634920634922
__loadstore char *line // zp[2]:7 2121.4545454545455
void main()
char *main::s
char *main::s#1 // s zp[2]:2 202.0
char *main::s#2 // s zp[2]:2 134.66666666666666
char *main::s#1 // s zp[2]:10 202.0
char *main::s#2 // s zp[2]:10 134.66666666666666
void md5()
char md5::$2 // reg byte a 2002.0
char md5::a
char md5::a#1 // a zp[1]:5 235.52941176470588
char md5::a#1 // a zp[1]:6 235.52941176470588
char md5::a#3 // reg byte y 667.3333333333334
char md5::a#8 // reg byte y 667.3333333333334
char md5::a#9 // a zp[1]:5 2002.0
char md5::a#9 // a zp[1]:6 2002.0
char md5::b
char md5::b#1 // b zp[1]:7 375.375
char md5::b#2 // b_1 zp[1]:4 263.42105263157896
char md5::b#8 // b_1 zp[1]:4 1001.0
char md5::b#1 // b zp[1]:4 375.375
char md5::b#2 // b_1 zp[1]:9 263.42105263157896
char md5::b#8 // b_1 zp[1]:9 1001.0
char md5::c
__constant char md5::c#0 = $98 // c
char md5::i
@ -1315,17 +1316,17 @@ char md5::i#2 // reg byte x 375.375
char md5::temp
void print(char i , char a , char b , char c)
char print::a
char print::a#0 // a zp[1]:6 667.3333333333334
char print::a#1 // a zp[1]:6 667.3333333333334
char print::a#2 // a zp[1]:6 1833.6666666666665
char print::a#0 // a zp[1]:5 667.3333333333334
char print::a#1 // a zp[1]:5 667.3333333333334
char print::a#2 // a zp[1]:5 1833.6666666666665
char print::b
char print::b#0 // b zp[1]:7 1001.0
char print::b#1 // b zp[1]:7 1001.0
char print::b#2 // b zp[1]:7 1100.2
char print::b#0 // b zp[1]:4 1001.0
char print::b#1 // b zp[1]:4 1001.0
char print::b#2 // b zp[1]:4 1100.2
char print::c
char print::c#0 // c zp[1]:8 2002.0
char print::c#1 // c zp[1]:8 2002.0
char print::c#2 // c zp[1]:8 785.8571428571429
char print::c#0 // c zp[1]:3 2002.0
char print::c#1 // c zp[1]:3 2002.0
char print::c#2 // c zp[1]:3 785.8571428571429
char print::i
char print::i#0 // reg byte x 500.5
char print::i#1 // reg byte x 500.5
@ -1343,17 +1344,17 @@ char print::print324_$0 // reg byte a 20002.0
char print::print324_$1 // reg byte a 20002.0
char print::print324_l
zp[2]:2 [ main::s#2 main::s#1 ]
zp[2]:10 [ main::s#2 main::s#1 ]
reg byte x [ md5::i#2 md5::i#1 ]
reg byte y [ md5::a#3 md5::a#8 ]
zp[1]:4 [ md5::b#2 md5::b#8 ]
zp[1]:5 [ md5::a#1 md5::a#9 ]
zp[1]:9 [ md5::b#2 md5::b#8 ]
zp[1]:6 [ md5::a#1 md5::a#9 ]
reg byte x [ print::print321_l#0 print::i#0 print::i#1 ]
zp[1]:6 [ print::a#2 print::a#0 print::a#1 ]
zp[1]:7 [ print::b#2 print::b#0 print::b#1 md5::b#1 ]
zp[1]:8 [ print::c#2 print::c#0 print::c#1 ]
zp[2]:9 [ line ]
zp[1]:11 [ idx ]
zp[1]:5 [ print::a#2 print::a#0 print::a#1 ]
zp[1]:4 [ print::b#2 print::b#0 print::b#1 md5::b#1 ]
zp[1]:3 [ print::c#2 print::c#0 print::c#1 ]
zp[2]:7 [ line ]
zp[1]:2 [ idx ]
reg byte a [ md5::$2 ]
reg byte a [ print::print321_$0 ]
reg byte a [ print::print321_$1 ]
@ -1380,8 +1381,8 @@ Score: 1690
.segment Basic
:BasicUpstart(__start)
// Global Constants & labels
.label line = 9
.label idx = $b
.label line = 7
.label idx = 2
.segment Code
// __start
__start: {
@ -1407,7 +1408,7 @@ __start: {
}
// main
main: {
.label s = 2
.label s = $a
// [7] phi from main to main::@1 [phi:main->main::@1]
// [7] phi main::s#2 = (char *) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1
lda #<$400
@ -1456,9 +1457,9 @@ main: {
// md5
md5: {
.const c = $98
.label b = 7
.label a = 5
.label b_1 = 4
.label b = 4
.label a = 6
.label b_1 = 9
// [15] phi from md5 to md5::@1 [phi:md5->md5::@1]
// [15] phi md5::a#1 = md5::c#0 [phi:md5->md5::@1#0] -- vbuz1=vbuc1
lda #c
@ -1550,11 +1551,11 @@ md5: {
jmp __b1
}
// print
// void print(__register(X) char i, __zp(6) char a, __zp(7) char b, __zp(8) char c)
// void print(__register(X) char i, __zp(5) char a, __zp(4) char b, __zp(3) char c)
print: {
.label a = 6
.label b = 7
.label c = 8
.label a = 5
.label b = 4
.label c = 3
// print::print321
// l/0x10
// [37] print::print321_$0 = print::print321_l#0 >> 4 -- vbuaa=vbuxx_ror_4

View File

@ -1,22 +1,22 @@
__constant char HEX[] = "0123456789abcdef"
void __start()
__loadstore char idx // zp[1]:11 5873.634920634922
__loadstore char *line // zp[2]:9 2121.4545454545455
__loadstore char idx // zp[1]:2 5873.634920634922
__loadstore char *line // zp[2]:7 2121.4545454545455
void main()
char *main::s
char *main::s#1 // s zp[2]:2 202.0
char *main::s#2 // s zp[2]:2 134.66666666666666
char *main::s#1 // s zp[2]:10 202.0
char *main::s#2 // s zp[2]:10 134.66666666666666
void md5()
char md5::$2 // reg byte a 2002.0
char md5::a
char md5::a#1 // a zp[1]:5 235.52941176470588
char md5::a#1 // a zp[1]:6 235.52941176470588
char md5::a#3 // reg byte y 667.3333333333334
char md5::a#8 // reg byte y 667.3333333333334
char md5::a#9 // a zp[1]:5 2002.0
char md5::a#9 // a zp[1]:6 2002.0
char md5::b
char md5::b#1 // b zp[1]:7 375.375
char md5::b#2 // b_1 zp[1]:4 263.42105263157896
char md5::b#8 // b_1 zp[1]:4 1001.0
char md5::b#1 // b zp[1]:4 375.375
char md5::b#2 // b_1 zp[1]:9 263.42105263157896
char md5::b#8 // b_1 zp[1]:9 1001.0
char md5::c
__constant char md5::c#0 = $98 // c
char md5::i
@ -25,17 +25,17 @@ char md5::i#2 // reg byte x 375.375
char md5::temp
void print(char i , char a , char b , char c)
char print::a
char print::a#0 // a zp[1]:6 667.3333333333334
char print::a#1 // a zp[1]:6 667.3333333333334
char print::a#2 // a zp[1]:6 1833.6666666666665
char print::a#0 // a zp[1]:5 667.3333333333334
char print::a#1 // a zp[1]:5 667.3333333333334
char print::a#2 // a zp[1]:5 1833.6666666666665
char print::b
char print::b#0 // b zp[1]:7 1001.0
char print::b#1 // b zp[1]:7 1001.0
char print::b#2 // b zp[1]:7 1100.2
char print::b#0 // b zp[1]:4 1001.0
char print::b#1 // b zp[1]:4 1001.0
char print::b#2 // b zp[1]:4 1100.2
char print::c
char print::c#0 // c zp[1]:8 2002.0
char print::c#1 // c zp[1]:8 2002.0
char print::c#2 // c zp[1]:8 785.8571428571429
char print::c#0 // c zp[1]:3 2002.0
char print::c#1 // c zp[1]:3 2002.0
char print::c#2 // c zp[1]:3 785.8571428571429
char print::i
char print::i#0 // reg byte x 500.5
char print::i#1 // reg byte x 500.5
@ -53,17 +53,17 @@ char print::print324_$0 // reg byte a 20002.0
char print::print324_$1 // reg byte a 20002.0
char print::print324_l
zp[2]:2 [ main::s#2 main::s#1 ]
zp[2]:10 [ main::s#2 main::s#1 ]
reg byte x [ md5::i#2 md5::i#1 ]
reg byte y [ md5::a#3 md5::a#8 ]
zp[1]:4 [ md5::b#2 md5::b#8 ]
zp[1]:5 [ md5::a#1 md5::a#9 ]
zp[1]:9 [ md5::b#2 md5::b#8 ]
zp[1]:6 [ md5::a#1 md5::a#9 ]
reg byte x [ print::print321_l#0 print::i#0 print::i#1 ]
zp[1]:6 [ print::a#2 print::a#0 print::a#1 ]
zp[1]:7 [ print::b#2 print::b#0 print::b#1 md5::b#1 ]
zp[1]:8 [ print::c#2 print::c#0 print::c#1 ]
zp[2]:9 [ line ]
zp[1]:11 [ idx ]
zp[1]:5 [ print::a#2 print::a#0 print::a#1 ]
zp[1]:4 [ print::b#2 print::b#0 print::b#1 md5::b#1 ]
zp[1]:3 [ print::c#2 print::c#0 print::c#1 ]
zp[2]:7 [ line ]
zp[1]:2 [ idx ]
reg byte a [ md5::$2 ]
reg byte a [ print::print321_$0 ]
reg byte a [ print::print321_$1 ]

View File

@ -38,7 +38,7 @@
.label BITMAP = $2000
.segment Code
main: {
.label i = 2
.label i = $10
// fill(BITMAP,40*25*8,0)
ldx #0
lda #<$28*$19*8
@ -104,11 +104,11 @@ main: {
jmp __b1
}
// Fill some memory with a value
// void fill(char *start, __zp(4) int size, __register(X) char val)
// void fill(char *start, __zp($c) int size, __register(X) char val)
fill: {
.label end = 4
.label addr = 6
.label size = 4
.label end = $c
.label addr = $e
.label size = $c
// byte* end = start + size
clc
lda.z end
@ -139,20 +139,20 @@ fill: {
!:
jmp __b1
}
// void circle(int xc, int yc, __zp(6) int r)
// void circle(int xc, int yc, __zp($e) int r)
circle: {
.const xc = $a0
.const yc = $64
.label __0 = 8
.label __5 = $a
.label __6 = $a
.label __7 = 8
.label __9 = $c
.label __10 = 8
.label r = 6
.label p = 8
.label y = 6
.label x1 = 4
.label __0 = $a
.label __5 = 8
.label __6 = 8
.label __7 = $a
.label __9 = 6
.label __10 = $a
.label r = $e
.label p = $a
.label y = $e
.label x1 = $c
// r << 1
lda.z r
asl
@ -389,16 +389,16 @@ circle: {
sta.z p+1
jmp __b4
}
// void plot(__zp($a) int x, __zp($c) int y)
// void plot(__zp(8) int x, __zp(6) int y)
plot: {
.label __8 = $e
.label __11 = $c
.label __12 = $10
.label x = $a
.label y = $c
.label location = $e
.label __15 = $10
.label __16 = $10
.label __8 = 4
.label __11 = 6
.label __12 = 2
.label x = 8
.label y = 6
.label location = 4
.label __15 = 2
.label __16 = 2
// if (x < 0 || x > 319 || y < 0 || y > 199)
lda.z x+1
bpl !__breturn+

View File

@ -1056,34 +1056,34 @@ Complete equivalence classes
[ plot::location#3 ]
[ plot::$13 ]
[ plot::$14 ]
Allocated zp[2]:2 [ main::i#2 main::i#1 ]
Allocated zp[2]:4 [ fill::size#2 ]
Allocated zp[1]:6 [ fill::val#4 ]
Allocated zp[2]:7 [ fill::addr#2 fill::addr#0 fill::addr#1 ]
Allocated zp[2]:9 [ circle::x1#10 circle::x1#1 ]
Allocated zp[2]:11 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ]
Allocated zp[2]:13 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ]
Allocated zp[2]:15 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
Allocated zp[2]:17 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ]
Allocated zp[2]:19 [ fill::end#0 ]
Allocated zp[2]:21 [ circle::$0 ]
Allocated zp[2]:23 [ circle::$5 ]
Allocated zp[2]:25 [ circle::$6 ]
Allocated zp[2]:27 [ circle::$7 ]
Allocated zp[2]:29 [ circle::$9 ]
Allocated zp[2]:31 [ circle::$10 ]
Allocated zp[2]:33 [ plot::$8 ]
Allocated zp[2]:35 [ plot::location#1 ]
Allocated zp[1]:37 [ plot::$9 ]
Allocated zp[1]:38 [ plot::$10 ]
Allocated zp[2]:39 [ plot::location#2 ]
Allocated zp[2]:41 [ plot::$11 ]
Allocated zp[2]:43 [ plot::$15 ]
Allocated zp[2]:45 [ plot::$16 ]
Allocated zp[2]:47 [ plot::$12 ]
Allocated zp[2]:49 [ plot::location#3 ]
Allocated zp[1]:51 [ plot::$13 ]
Allocated zp[1]:52 [ plot::$14 ]
Allocated zp[2]:2 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ]
Allocated zp[2]:4 [ plot::$8 ]
Allocated zp[1]:6 [ plot::$9 ]
Allocated zp[1]:7 [ plot::$10 ]
Allocated zp[2]:8 [ plot::$15 ]
Allocated zp[2]:10 [ plot::$16 ]
Allocated zp[2]:12 [ plot::$12 ]
Allocated zp[1]:14 [ plot::$13 ]
Allocated zp[1]:15 [ plot::$14 ]
Allocated zp[2]:16 [ plot::$11 ]
Allocated zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
Allocated zp[2]:20 [ plot::location#3 ]
Allocated zp[2]:22 [ plot::location#1 ]
Allocated zp[2]:24 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ]
Allocated zp[2]:26 [ plot::location#2 ]
Allocated zp[2]:28 [ circle::x1#10 circle::x1#1 ]
Allocated zp[2]:30 [ circle::$5 ]
Allocated zp[2]:32 [ circle::$6 ]
Allocated zp[2]:34 [ circle::$7 ]
Allocated zp[2]:36 [ circle::$9 ]
Allocated zp[2]:38 [ circle::$10 ]
Allocated zp[2]:40 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ]
Allocated zp[2]:42 [ fill::addr#2 fill::addr#0 fill::addr#1 ]
Allocated zp[2]:44 [ circle::$0 ]
Allocated zp[2]:46 [ main::i#2 main::i#1 ]
Allocated zp[2]:48 [ fill::end#0 ]
Allocated zp[1]:50 [ fill::val#4 ]
Allocated zp[2]:51 [ fill::size#2 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] *BORDER_COLOR = BLUE [ ] ( [ ] { } ) always clobbers reg byte a
Statement [5] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 [ ] ( [ ] { } ) always clobbers reg byte a
@ -1092,10 +1092,10 @@ Statement [8] if(main::i#2<$b4) goto main::@2 [ main::i#2 ] ( [ main::i#2 ] { }
Statement [10] circle::r#0 = main::i#2 [ main::i#2 circle::r#0 ] ( [ main::i#2 circle::r#0 ] { { circle::r#0 = main::i#2 } } ) always clobbers reg byte a
Statement [12] main::i#1 = main::i#2 + 5 [ main::i#1 ] ( [ main::i#1 ] { } ) always clobbers reg byte a
Statement [14] fill::end#0 = fill::addr#0 + fill::size#2 [ fill::addr#0 fill::val#4 fill::end#0 ] ( fill:1 [ fill::addr#0 fill::val#4 fill::end#0 ] { } fill:3 [ fill::addr#0 fill::val#4 fill::end#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:6 [ fill::val#4 ]
Removing always clobbered register reg byte a as potential for zp[1]:50 [ fill::val#4 ]
Statement [16] if(fill::addr#2!=fill::end#0) goto fill::@2 [ fill::val#4 fill::end#0 fill::addr#2 ] ( fill:1 [ fill::val#4 fill::end#0 fill::addr#2 ] { } fill:3 [ fill::val#4 fill::end#0 fill::addr#2 ] { } ) always clobbers reg byte a
Statement [18] *fill::addr#2 = fill::val#4 [ fill::val#4 fill::end#0 fill::addr#2 ] ( fill:1 [ fill::val#4 fill::end#0 fill::addr#2 ] { } fill:3 [ fill::val#4 fill::end#0 fill::addr#2 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:6 [ fill::val#4 ]
Removing always clobbered register reg byte y as potential for zp[1]:50 [ fill::val#4 ]
Statement [20] circle::$0 = circle::r#0 << 1 [ circle::r#0 circle::$0 ] ( circle:11 [ main::i#2 circle::r#0 circle::$0 ] { { circle::r#0 = main::i#2 } } ) always clobbers reg byte a
Statement [21] circle::p#0 = 3 - circle::$0 [ circle::r#0 circle::p#0 ] ( circle:11 [ main::i#2 circle::r#0 circle::p#0 ] { { circle::r#0 = main::i#2 } } ) always clobbers reg byte a
Statement [23] if(circle::x1#10<=circle::y#13) goto circle::@2 [ circle::x1#10 circle::y#13 circle::p#3 ] ( circle:11 [ main::i#2 circle::x1#10 circle::y#13 circle::p#3 ] { { circle::r#0 = main::i#2 } } ) always clobbers reg byte a
@ -1191,76 +1191,76 @@ Statement [74] plot::location#3 = plot::location#2 + plot::$12 [ plot::x#8 plot:
Statement [75] plot::$13 = plot::x#8 & 7 [ plot::location#3 plot::$13 ] ( circle:11::plot:34 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$13 ] { { circle::r#0 = main::i#2 } { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:11::plot:37 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$13 ] { { circle::r#0 = main::i#2 } { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:11::plot:40 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$13 ] { { circle::r#0 = main::i#2 } { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:11::plot:43 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$13 ] { { circle::r#0 = main::i#2 } { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:11::plot:46 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$13 ] { { circle::r#0 = main::i#2 } { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:11::plot:49 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$13 ] { { circle::r#0 = main::i#2 } { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:11::plot:52 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$13 ] { { circle::r#0 = main::i#2 } { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:11::plot:55 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$13 ] { { circle::r#0 = main::i#2 } { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a
Statement [76] plot::$14 = *plot::location#3 | bitmask[plot::$13] [ plot::location#3 plot::$14 ] ( circle:11::plot:34 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$14 ] { { circle::r#0 = main::i#2 } { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:11::plot:37 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$14 ] { { circle::r#0 = main::i#2 } { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:11::plot:40 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$14 ] { { circle::r#0 = main::i#2 } { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:11::plot:43 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$14 ] { { circle::r#0 = main::i#2 } { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:11::plot:46 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$14 ] { { circle::r#0 = main::i#2 } { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:11::plot:49 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$14 ] { { circle::r#0 = main::i#2 } { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:11::plot:52 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$14 ] { { circle::r#0 = main::i#2 } { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:11::plot:55 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$14 ] { { circle::r#0 = main::i#2 } { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a reg byte y
Statement [77] *plot::location#3 = plot::$14 [ ] ( circle:11::plot:34 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 ] { { circle::r#0 = main::i#2 } { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:11::plot:37 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 ] { { circle::r#0 = main::i#2 } { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:11::plot:40 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 ] { { circle::r#0 = main::i#2 } { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:11::plot:43 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 ] { { circle::r#0 = main::i#2 } { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:11::plot:46 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 ] { { circle::r#0 = main::i#2 } { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:11::plot:49 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 ] { { circle::r#0 = main::i#2 } { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:11::plot:52 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 ] { { circle::r#0 = main::i#2 } { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:11::plot:55 [ main::i#2 circle::x1#10 circle::y#10 circle::p#10 ] { { circle::r#0 = main::i#2 } { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte y
Potential registers zp[2]:2 [ main::i#2 main::i#1 ] : zp[2]:2 ,
Potential registers zp[2]:4 [ fill::size#2 ] : zp[2]:4 ,
Potential registers zp[1]:6 [ fill::val#4 ] : zp[1]:6 , reg byte x ,
Potential registers zp[2]:7 [ fill::addr#2 fill::addr#0 fill::addr#1 ] : zp[2]:7 ,
Potential registers zp[2]:9 [ circle::x1#10 circle::x1#1 ] : zp[2]:9 ,
Potential registers zp[2]:11 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] : zp[2]:11 ,
Potential registers zp[2]:13 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] : zp[2]:13 ,
Potential registers zp[2]:15 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] : zp[2]:15 ,
Potential registers zp[2]:17 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] : zp[2]:17 ,
Potential registers zp[2]:19 [ fill::end#0 ] : zp[2]:19 ,
Potential registers zp[2]:21 [ circle::$0 ] : zp[2]:21 ,
Potential registers zp[2]:23 [ circle::$5 ] : zp[2]:23 ,
Potential registers zp[2]:25 [ circle::$6 ] : zp[2]:25 ,
Potential registers zp[2]:27 [ circle::$7 ] : zp[2]:27 ,
Potential registers zp[2]:29 [ circle::$9 ] : zp[2]:29 ,
Potential registers zp[2]:31 [ circle::$10 ] : zp[2]:31 ,
Potential registers zp[2]:33 [ plot::$8 ] : zp[2]:33 ,
Potential registers zp[2]:35 [ plot::location#1 ] : zp[2]:35 ,
Potential registers zp[1]:37 [ plot::$9 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:38 [ plot::$10 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:39 [ plot::location#2 ] : zp[2]:39 ,
Potential registers zp[2]:41 [ plot::$11 ] : zp[2]:41 ,
Potential registers zp[2]:43 [ plot::$15 ] : zp[2]:43 ,
Potential registers zp[2]:45 [ plot::$16 ] : zp[2]:45 ,
Potential registers zp[2]:47 [ plot::$12 ] : zp[2]:47 ,
Potential registers zp[2]:49 [ plot::location#3 ] : zp[2]:49 ,
Potential registers zp[1]:51 [ plot::$13 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:52 [ plot::$14 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:46 [ main::i#2 main::i#1 ] : zp[2]:46 ,
Potential registers zp[2]:51 [ fill::size#2 ] : zp[2]:51 ,
Potential registers zp[1]:50 [ fill::val#4 ] : zp[1]:50 , reg byte x ,
Potential registers zp[2]:42 [ fill::addr#2 fill::addr#0 fill::addr#1 ] : zp[2]:42 ,
Potential registers zp[2]:28 [ circle::x1#10 circle::x1#1 ] : zp[2]:28 ,
Potential registers zp[2]:40 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] : zp[2]:40 ,
Potential registers zp[2]:24 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] : zp[2]:24 ,
Potential registers zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] : zp[2]:18 ,
Potential registers zp[2]:2 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] : zp[2]:2 ,
Potential registers zp[2]:48 [ fill::end#0 ] : zp[2]:48 ,
Potential registers zp[2]:44 [ circle::$0 ] : zp[2]:44 ,
Potential registers zp[2]:30 [ circle::$5 ] : zp[2]:30 ,
Potential registers zp[2]:32 [ circle::$6 ] : zp[2]:32 ,
Potential registers zp[2]:34 [ circle::$7 ] : zp[2]:34 ,
Potential registers zp[2]:36 [ circle::$9 ] : zp[2]:36 ,
Potential registers zp[2]:38 [ circle::$10 ] : zp[2]:38 ,
Potential registers zp[2]:4 [ plot::$8 ] : zp[2]:4 ,
Potential registers zp[2]:22 [ plot::location#1 ] : zp[2]:22 ,
Potential registers zp[1]:6 [ plot::$9 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ plot::$10 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:26 [ plot::location#2 ] : zp[2]:26 ,
Potential registers zp[2]:16 [ plot::$11 ] : zp[2]:16 ,
Potential registers zp[2]:8 [ plot::$15 ] : zp[2]:8 ,
Potential registers zp[2]:10 [ plot::$16 ] : zp[2]:10 ,
Potential registers zp[2]:12 [ plot::$12 ] : zp[2]:12 ,
Potential registers zp[2]:20 [ plot::location#3 ] : zp[2]:20 ,
Potential registers zp[1]:14 [ plot::$13 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:15 [ plot::$14 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [plot] 208,017.2: zp[2]:17 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] 200,002: zp[2]:33 [ plot::$8 ] 200,002: zp[1]:37 [ plot::$9 ] 200,002: zp[1]:38 [ plot::$10 ] 200,002: zp[2]:43 [ plot::$15 ] 200,002: zp[2]:45 [ plot::$16 ] 200,002: zp[2]:47 [ plot::$12 ] 200,002: zp[1]:51 [ plot::$13 ] 200,002: zp[1]:52 [ plot::$14 ] 150,001.5: zp[2]:41 [ plot::$11 ] 112,008.8: zp[2]:15 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] 100,001: zp[2]:49 [ plot::location#3 ] 66,667.33: zp[2]:35 [ plot::location#1 ] 40,000.4: zp[2]:39 [ plot::location#2 ]
Uplift Scope [circle] 47,089.25: zp[2]:13 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] 23,613.47: zp[2]:9 [ circle::x1#10 circle::x1#1 ] 20,002: zp[2]:23 [ circle::$5 ] 20,002: zp[2]:25 [ circle::$6 ] 20,002: zp[2]:27 [ circle::$7 ] 20,002: zp[2]:29 [ circle::$9 ] 20,002: zp[2]:31 [ circle::$10 ] 16,986.96: zp[2]:11 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] 202: zp[2]:21 [ circle::$0 ]
Uplift Scope [fill] 351.33: zp[2]:7 [ fill::addr#2 fill::addr#0 fill::addr#1 ] 22.4: zp[2]:19 [ fill::end#0 ] 16.83: zp[1]:6 [ fill::val#4 ] 11: zp[2]:4 [ fill::size#2 ]
Uplift Scope [main] 33: zp[2]:2 [ main::i#2 main::i#1 ]
Uplift Scope [plot] 208,017.2: zp[2]:2 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] 200,002: zp[2]:4 [ plot::$8 ] 200,002: zp[1]:6 [ plot::$9 ] 200,002: zp[1]:7 [ plot::$10 ] 200,002: zp[2]:8 [ plot::$15 ] 200,002: zp[2]:10 [ plot::$16 ] 200,002: zp[2]:12 [ plot::$12 ] 200,002: zp[1]:14 [ plot::$13 ] 200,002: zp[1]:15 [ plot::$14 ] 150,001.5: zp[2]:16 [ plot::$11 ] 112,008.8: zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] 100,001: zp[2]:20 [ plot::location#3 ] 66,667.33: zp[2]:22 [ plot::location#1 ] 40,000.4: zp[2]:26 [ plot::location#2 ]
Uplift Scope [circle] 47,089.25: zp[2]:24 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] 23,613.47: zp[2]:28 [ circle::x1#10 circle::x1#1 ] 20,002: zp[2]:30 [ circle::$5 ] 20,002: zp[2]:32 [ circle::$6 ] 20,002: zp[2]:34 [ circle::$7 ] 20,002: zp[2]:36 [ circle::$9 ] 20,002: zp[2]:38 [ circle::$10 ] 16,986.96: zp[2]:40 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] 202: zp[2]:44 [ circle::$0 ]
Uplift Scope [fill] 351.33: zp[2]:42 [ fill::addr#2 fill::addr#0 fill::addr#1 ] 22.4: zp[2]:48 [ fill::end#0 ] 16.83: zp[1]:50 [ fill::val#4 ] 11: zp[2]:51 [ fill::size#2 ]
Uplift Scope [main] 33: zp[2]:46 [ main::i#2 main::i#1 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
Uplift Scope []
Uplifting [plot] best 53676 combination zp[2]:17 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] zp[2]:33 [ plot::$8 ] reg byte a [ plot::$9 ] reg byte a [ plot::$10 ] zp[2]:43 [ plot::$15 ] zp[2]:45 [ plot::$16 ] zp[2]:47 [ plot::$12 ] reg byte a [ plot::$13 ] reg byte a [ plot::$14 ] zp[2]:41 [ plot::$11 ] zp[2]:15 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] zp[2]:49 [ plot::location#3 ] zp[2]:35 [ plot::location#1 ] zp[2]:39 [ plot::location#2 ]
Uplifting [plot] best 53676 combination zp[2]:2 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] zp[2]:4 [ plot::$8 ] reg byte a [ plot::$9 ] reg byte a [ plot::$10 ] zp[2]:8 [ plot::$15 ] zp[2]:10 [ plot::$16 ] zp[2]:12 [ plot::$12 ] reg byte a [ plot::$13 ] reg byte a [ plot::$14 ] zp[2]:16 [ plot::$11 ] zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] zp[2]:20 [ plot::location#3 ] zp[2]:22 [ plot::location#1 ] zp[2]:26 [ plot::location#2 ]
Limited combination testing to 100 combinations of 256 possible.
Uplifting [circle] best 53676 combination zp[2]:13 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] zp[2]:9 [ circle::x1#10 circle::x1#1 ] zp[2]:23 [ circle::$5 ] zp[2]:25 [ circle::$6 ] zp[2]:27 [ circle::$7 ] zp[2]:29 [ circle::$9 ] zp[2]:31 [ circle::$10 ] zp[2]:11 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] zp[2]:21 [ circle::$0 ]
Uplifting [fill] best 53660 combination zp[2]:7 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp[2]:19 [ fill::end#0 ] reg byte x [ fill::val#4 ] zp[2]:4 [ fill::size#2 ]
Uplifting [main] best 53660 combination zp[2]:2 [ main::i#2 main::i#1 ]
Uplifting [circle] best 53676 combination zp[2]:24 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] zp[2]:28 [ circle::x1#10 circle::x1#1 ] zp[2]:30 [ circle::$5 ] zp[2]:32 [ circle::$6 ] zp[2]:34 [ circle::$7 ] zp[2]:36 [ circle::$9 ] zp[2]:38 [ circle::$10 ] zp[2]:40 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] zp[2]:44 [ circle::$0 ]
Uplifting [fill] best 53660 combination zp[2]:42 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp[2]:48 [ fill::end#0 ] reg byte x [ fill::val#4 ] zp[2]:51 [ fill::size#2 ]
Uplifting [main] best 53660 combination zp[2]:46 [ main::i#2 main::i#1 ]
Uplifting [MOS6526_CIA] best 53660 combination
Uplifting [MOS6569_VICII] best 53660 combination
Uplifting [MOS6581_SID] best 53660 combination
Uplifting [] best 53660 combination
Coalescing zero page register [ zp[2]:13 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] ] with [ zp[2]:27 [ circle::$7 ] ] - score: 2
Coalescing zero page register [ zp[2]:13 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 ] ] with [ zp[2]:31 [ circle::$10 ] ] - score: 2
Coalescing zero page register [ zp[2]:4 [ fill::size#2 ] ] with [ zp[2]:19 [ fill::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:13 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ] ] with [ zp[2]:21 [ circle::$0 ] ] - score: 1
Coalescing zero page register [ zp[2]:17 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] ] with [ zp[2]:41 [ plot::$11 ] ] - score: 1
Coalescing zero page register [ zp[2]:23 [ circle::$5 ] ] with [ zp[2]:25 [ circle::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:33 [ plot::$8 ] ] with [ zp[2]:35 [ plot::location#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:39 [ plot::location#2 ] ] with [ zp[2]:49 [ plot::location#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:43 [ plot::$15 ] ] with [ zp[2]:45 [ plot::$16 ] ] - score: 1
Coalescing zero page register [ zp[2]:33 [ plot::$8 plot::location#1 ] ] with [ zp[2]:39 [ plot::location#2 plot::location#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:43 [ plot::$15 plot::$16 ] ] with [ zp[2]:47 [ plot::$12 ] ] - score: 1
Coalescing zero page register [ zp[2]:9 [ circle::x1#10 circle::x1#1 ] ] with [ zp[2]:4 [ fill::size#2 fill::end#0 ] ]
Coalescing zero page register [ zp[2]:11 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] ] with [ zp[2]:7 [ fill::addr#2 fill::addr#0 fill::addr#1 ] ]
Coalescing zero page register [ zp[2]:23 [ circle::$5 circle::$6 ] ] with [ zp[2]:15 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] ]
Coalescing zero page register [ zp[2]:29 [ circle::$9 ] ] with [ zp[2]:17 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$11 ] ]
Allocated (was zp[2]:9) zp[2]:4 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ]
Allocated (was zp[2]:11) zp[2]:6 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
Allocated (was zp[2]:13) zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 circle::$0 ]
Allocated (was zp[2]:23) zp[2]:10 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
Allocated (was zp[2]:29) zp[2]:12 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$11 ]
Allocated (was zp[2]:33) zp[2]:14 [ plot::$8 plot::location#1 plot::location#2 plot::location#3 ]
Allocated (was zp[2]:43) zp[2]:16 [ plot::$15 plot::$16 plot::$12 ]
Coalescing zero page register [ zp[2]:24 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] ] with [ zp[2]:34 [ circle::$7 ] ] - score: 2
Coalescing zero page register [ zp[2]:24 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 ] ] with [ zp[2]:38 [ circle::$10 ] ] - score: 2
Coalescing zero page register [ zp[2]:51 [ fill::size#2 ] ] with [ zp[2]:48 [ fill::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:24 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ] ] with [ zp[2]:44 [ circle::$0 ] ] - score: 1
Coalescing zero page register [ zp[2]:2 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] ] with [ zp[2]:16 [ plot::$11 ] ] - score: 1
Coalescing zero page register [ zp[2]:30 [ circle::$5 ] ] with [ zp[2]:32 [ circle::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:4 [ plot::$8 ] ] with [ zp[2]:22 [ plot::location#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:26 [ plot::location#2 ] ] with [ zp[2]:20 [ plot::location#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:8 [ plot::$15 ] ] with [ zp[2]:10 [ plot::$16 ] ] - score: 1
Coalescing zero page register [ zp[2]:4 [ plot::$8 plot::location#1 ] ] with [ zp[2]:26 [ plot::location#2 plot::location#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:8 [ plot::$15 plot::$16 ] ] with [ zp[2]:12 [ plot::$12 ] ] - score: 1
Coalescing zero page register [ zp[2]:28 [ circle::x1#10 circle::x1#1 ] ] with [ zp[2]:51 [ fill::size#2 fill::end#0 ] ]
Coalescing zero page register [ zp[2]:40 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] ] with [ zp[2]:42 [ fill::addr#2 fill::addr#0 fill::addr#1 ] ]
Coalescing zero page register [ zp[2]:30 [ circle::$5 circle::$6 ] ] with [ zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] ]
Coalescing zero page register [ zp[2]:36 [ circle::$9 ] ] with [ zp[2]:2 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$11 ] ]
Allocated (was zp[2]:8) zp[2]:2 [ plot::$15 plot::$16 plot::$12 ]
Allocated (was zp[2]:36) zp[2]:6 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$11 ]
Allocated (was zp[2]:30) zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
Allocated (was zp[2]:24) zp[2]:10 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 circle::$0 ]
Allocated (was zp[2]:28) zp[2]:12 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ]
Allocated (was zp[2]:40) zp[2]:14 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
Allocated (was zp[2]:46) zp[2]:16 [ main::i#2 main::i#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -1307,7 +1307,7 @@ ASSEMBLER BEFORE OPTIMIZATION
.segment Code
// main
main: {
.label i = 2
.label i = $10
// [1] call fill
// [13] phi from main to fill [phi:main->fill]
fill_from_main:
@ -1410,11 +1410,11 @@ main: {
}
// fill
// Fill some memory with a value
// void fill(char *start, __zp(4) int size, __register(X) char val)
// void fill(char *start, __zp($c) int size, __register(X) char val)
fill: {
.label end = 4
.label addr = 6
.label size = 4
.label end = $c
.label addr = $e
.label size = $c
// [14] fill::end#0 = fill::addr#0 + fill::size#2 -- pbuz1=pbuz2_plus_vwsz1
clc
lda.z end
@ -1456,20 +1456,20 @@ fill: {
jmp __b1_from___b2
}
// circle
// void circle(int xc, int yc, __zp(6) int r)
// void circle(int xc, int yc, __zp($e) int r)
circle: {
.const xc = $a0
.const yc = $64
.label __0 = 8
.label __5 = $a
.label __6 = $a
.label __7 = 8
.label __9 = $c
.label __10 = 8
.label r = 6
.label p = 8
.label y = 6
.label x1 = 4
.label __0 = $a
.label __5 = 8
.label __6 = 8
.label __7 = $a
.label __9 = 6
.label __10 = $a
.label r = $e
.label p = $a
.label y = $e
.label x1 = $c
// [20] circle::$0 = circle::r#0 << 1 -- vwsz1=vwsz2_rol_1
lda.z r
asl
@ -1805,16 +1805,16 @@ circle: {
jmp __b4_from___b3
}
// plot
// void plot(__zp($a) int x, __zp($c) int y)
// void plot(__zp(8) int x, __zp(6) int y)
plot: {
.label __8 = $e
.label __11 = $c
.label __12 = $10
.label x = $a
.label y = $c
.label location = $e
.label __15 = $10
.label __16 = $10
.label __8 = 4
.label __11 = 6
.label __12 = 2
.label x = 8
.label y = 6
.label location = 4
.label __15 = 2
.label __16 = 2
// [61] if(plot::x#8<0) goto plot::@return -- vwsz1_lt_0_then_la1
lda.z x+1
bmi __breturn
@ -2040,93 +2040,93 @@ __constant char * const VICII_MEMORY = (char *) 53272
__constant const char VICII_RSEL = 8
__constant char bitmask[] = { $80, $40, $20, $10, 8, 4, 2, 1 }
void circle(int xc , int yc , int r)
int circle::$0 // zp[2]:8 202.0
int circle::$10 // zp[2]:8 20002.0
int circle::$5 // zp[2]:10 20002.0
int circle::$6 // zp[2]:10 20002.0
int circle::$7 // zp[2]:8 20002.0
int circle::$9 // zp[2]:12 20002.0
int circle::$0 // zp[2]:10 202.0
int circle::$10 // zp[2]:10 20002.0
int circle::$5 // zp[2]:8 20002.0
int circle::$6 // zp[2]:8 20002.0
int circle::$7 // zp[2]:10 20002.0
int circle::$9 // zp[2]:6 20002.0
int circle::p
int circle::p#0 // p zp[2]:8 202.0
int circle::p#1 // p zp[2]:8 20002.0
int circle::p#10 // p zp[2]:8 1153.9615384615383
int circle::p#2 // p zp[2]:8 20002.0
int circle::p#3 // p zp[2]:8 5729.285714285716
int circle::p#0 // p zp[2]:10 202.0
int circle::p#1 // p zp[2]:10 20002.0
int circle::p#10 // p zp[2]:10 1153.9615384615383
int circle::p#2 // p zp[2]:10 20002.0
int circle::p#3 // p zp[2]:10 5729.285714285716
int circle::r
int circle::r#0 // r zp[2]:6 71.0
int circle::r#0 // r zp[2]:14 71.0
int circle::x1
int circle::x1#1 // x1 zp[2]:4 20002.0
int circle::x1#10 // x1 zp[2]:4 3611.472222222223
int circle::x1#1 // x1 zp[2]:12 20002.0
int circle::x1#10 // x1 zp[2]:12 3611.472222222223
int circle::xc
__constant int circle::xc#0 = $a0 // xc
int circle::y
int circle::y#1 // y zp[2]:6 6000.6
int circle::y#10 // y zp[2]:6 4231.192307692308
int circle::y#13 // y zp[2]:6 6684.166666666666
int circle::y#1 // y zp[2]:14 6000.6
int circle::y#10 // y zp[2]:14 4231.192307692308
int circle::y#13 // y zp[2]:14 6684.166666666666
int circle::yc
__constant int circle::yc#0 = $64 // yc
void fill(char *start , int size , char val)
char *fill::addr
char *fill::addr#0 // addr zp[2]:6 11.0
char *fill::addr#1 // addr zp[2]:6 202.0
char *fill::addr#2 // addr zp[2]:6 138.33333333333331
char *fill::addr#0 // addr zp[2]:14 11.0
char *fill::addr#1 // addr zp[2]:14 202.0
char *fill::addr#2 // addr zp[2]:14 138.33333333333331
char *fill::end
char *fill::end#0 // end zp[2]:4 22.4
char *fill::end#0 // end zp[2]:12 22.4
int fill::size
int fill::size#2 // size zp[2]:4 11.0
int fill::size#2 // size zp[2]:12 11.0
char *fill::start
char fill::val
char fill::val#4 // reg byte x 16.833333333333332
void main()
int main::i
int main::i#1 // i zp[2]:2 22.0
int main::i#2 // i zp[2]:2 11.0
int main::i#1 // i zp[2]:16 22.0
int main::i#2 // i zp[2]:16 11.0
void plot(int x , int y)
char plot::$10 // reg byte a 200002.0
int plot::$11 // zp[2]:12 150001.5
int plot::$12 // zp[2]:16 200002.0
int plot::$11 // zp[2]:6 150001.5
int plot::$12 // zp[2]:2 200002.0
signed char plot::$13 // reg byte a 200002.0
char plot::$14 // reg byte a 200002.0
int plot::$15 // zp[2]:16 200002.0
int plot::$16 // zp[2]:16 200002.0
int plot::$8 // zp[2]:14 200002.0
int plot::$15 // zp[2]:2 200002.0
int plot::$16 // zp[2]:2 200002.0
int plot::$8 // zp[2]:4 200002.0
char plot::$9 // reg byte a 200002.0
char *plot::location
char *plot::location#1 // location zp[2]:14 66667.33333333333
char *plot::location#2 // location zp[2]:14 40000.4
char *plot::location#3 // location zp[2]:14 100001.0
char *plot::location#1 // location zp[2]:4 66667.33333333333
char *plot::location#2 // location zp[2]:4 40000.4
char *plot::location#3 // location zp[2]:4 100001.0
int plot::x
int plot::x#0 // x zp[2]:10 10001.0
int plot::x#1 // x zp[2]:10 10001.0
int plot::x#2 // x zp[2]:10 10001.0
int plot::x#3 // x zp[2]:10 10001.0
int plot::x#4 // x zp[2]:10 10001.0
int plot::x#5 // x zp[2]:10 10001.0
int plot::x#6 // x zp[2]:10 10001.0
int plot::x#7 // x zp[2]:10 10001.0
int plot::x#8 // x zp[2]:10 32000.800000000003
int plot::x#0 // x zp[2]:8 10001.0
int plot::x#1 // x zp[2]:8 10001.0
int plot::x#2 // x zp[2]:8 10001.0
int plot::x#3 // x zp[2]:8 10001.0
int plot::x#4 // x zp[2]:8 10001.0
int plot::x#5 // x zp[2]:8 10001.0
int plot::x#6 // x zp[2]:8 10001.0
int plot::x#7 // x zp[2]:8 10001.0
int plot::x#8 // x zp[2]:8 32000.800000000003
int plot::y
int plot::y#0 // y zp[2]:12 20002.0
int plot::y#1 // y zp[2]:12 20002.0
int plot::y#2 // y zp[2]:12 20002.0
int plot::y#3 // y zp[2]:12 20002.0
int plot::y#4 // y zp[2]:12 20002.0
int plot::y#5 // y zp[2]:12 20002.0
int plot::y#6 // y zp[2]:12 20002.0
int plot::y#7 // y zp[2]:12 20002.0
int plot::y#8 // y zp[2]:12 48001.2
int plot::y#0 // y zp[2]:6 20002.0
int plot::y#1 // y zp[2]:6 20002.0
int plot::y#2 // y zp[2]:6 20002.0
int plot::y#3 // y zp[2]:6 20002.0
int plot::y#4 // y zp[2]:6 20002.0
int plot::y#5 // y zp[2]:6 20002.0
int plot::y#6 // y zp[2]:6 20002.0
int plot::y#7 // y zp[2]:6 20002.0
int plot::y#8 // y zp[2]:6 48001.2
zp[2]:2 [ main::i#2 main::i#1 ]
zp[2]:16 [ main::i#2 main::i#1 ]
reg byte x [ fill::val#4 ]
zp[2]:4 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ]
zp[2]:6 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 circle::$0 ]
zp[2]:10 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
zp[2]:12 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$11 ]
zp[2]:14 [ plot::$8 plot::location#1 plot::location#2 plot::location#3 ]
zp[2]:12 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ]
zp[2]:14 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
zp[2]:10 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 circle::$0 ]
zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
zp[2]:6 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$11 ]
zp[2]:4 [ plot::$8 plot::location#1 plot::location#2 plot::location#3 ]
reg byte a [ plot::$9 ]
reg byte a [ plot::$10 ]
zp[2]:16 [ plot::$15 plot::$16 plot::$12 ]
zp[2]:2 [ plot::$15 plot::$16 plot::$12 ]
reg byte a [ plot::$13 ]
reg byte a [ plot::$14 ]
@ -2178,7 +2178,7 @@ Score: 51752
.segment Code
// main
main: {
.label i = 2
.label i = $10
// fill(BITMAP,40*25*8,0)
// [1] call fill
// [13] phi from main to fill [phi:main->fill]
@ -2274,11 +2274,11 @@ main: {
}
// fill
// Fill some memory with a value
// void fill(char *start, __zp(4) int size, __register(X) char val)
// void fill(char *start, __zp($c) int size, __register(X) char val)
fill: {
.label end = 4
.label addr = 6
.label size = 4
.label end = $c
.label addr = $e
.label size = $c
// byte* end = start + size
// [14] fill::end#0 = fill::addr#0 + fill::size#2 -- pbuz1=pbuz2_plus_vwsz1
clc
@ -2320,20 +2320,20 @@ fill: {
jmp __b1
}
// circle
// void circle(int xc, int yc, __zp(6) int r)
// void circle(int xc, int yc, __zp($e) int r)
circle: {
.const xc = $a0
.const yc = $64
.label __0 = 8
.label __5 = $a
.label __6 = $a
.label __7 = 8
.label __9 = $c
.label __10 = 8
.label r = 6
.label p = 8
.label y = 6
.label x1 = 4
.label __0 = $a
.label __5 = 8
.label __6 = 8
.label __7 = $a
.label __9 = 6
.label __10 = $a
.label r = $e
.label p = $a
.label y = $e
.label x1 = $c
// r << 1
// [20] circle::$0 = circle::r#0 << 1 -- vwsz1=vwsz2_rol_1
lda.z r
@ -2658,16 +2658,16 @@ circle: {
jmp __b4
}
// plot
// void plot(__zp($a) int x, __zp($c) int y)
// void plot(__zp(8) int x, __zp(6) int y)
plot: {
.label __8 = $e
.label __11 = $c
.label __12 = $10
.label x = $a
.label y = $c
.label location = $e
.label __15 = $10
.label __16 = $10
.label __8 = 4
.label __11 = 6
.label __12 = 2
.label x = 8
.label y = 6
.label location = 4
.label __15 = 2
.label __16 = 2
// if (x < 0 || x > 319 || y < 0 || y > 199)
// [61] if(plot::x#8<0) goto plot::@return -- vwsz1_lt_0_then_la1
lda.z x+1

View File

@ -9,92 +9,92 @@ __constant char * const VICII_MEMORY = (char *) 53272
__constant const char VICII_RSEL = 8
__constant char bitmask[] = { $80, $40, $20, $10, 8, 4, 2, 1 }
void circle(int xc , int yc , int r)
int circle::$0 // zp[2]:8 202.0
int circle::$10 // zp[2]:8 20002.0
int circle::$5 // zp[2]:10 20002.0
int circle::$6 // zp[2]:10 20002.0
int circle::$7 // zp[2]:8 20002.0
int circle::$9 // zp[2]:12 20002.0
int circle::$0 // zp[2]:10 202.0
int circle::$10 // zp[2]:10 20002.0
int circle::$5 // zp[2]:8 20002.0
int circle::$6 // zp[2]:8 20002.0
int circle::$7 // zp[2]:10 20002.0
int circle::$9 // zp[2]:6 20002.0
int circle::p
int circle::p#0 // p zp[2]:8 202.0
int circle::p#1 // p zp[2]:8 20002.0
int circle::p#10 // p zp[2]:8 1153.9615384615383
int circle::p#2 // p zp[2]:8 20002.0
int circle::p#3 // p zp[2]:8 5729.285714285716
int circle::p#0 // p zp[2]:10 202.0
int circle::p#1 // p zp[2]:10 20002.0
int circle::p#10 // p zp[2]:10 1153.9615384615383
int circle::p#2 // p zp[2]:10 20002.0
int circle::p#3 // p zp[2]:10 5729.285714285716
int circle::r
int circle::r#0 // r zp[2]:6 71.0
int circle::r#0 // r zp[2]:14 71.0
int circle::x1
int circle::x1#1 // x1 zp[2]:4 20002.0
int circle::x1#10 // x1 zp[2]:4 3611.472222222223
int circle::x1#1 // x1 zp[2]:12 20002.0
int circle::x1#10 // x1 zp[2]:12 3611.472222222223
int circle::xc
__constant int circle::xc#0 = $a0 // xc
int circle::y
int circle::y#1 // y zp[2]:6 6000.6
int circle::y#10 // y zp[2]:6 4231.192307692308
int circle::y#13 // y zp[2]:6 6684.166666666666
int circle::y#1 // y zp[2]:14 6000.6
int circle::y#10 // y zp[2]:14 4231.192307692308
int circle::y#13 // y zp[2]:14 6684.166666666666
int circle::yc
__constant int circle::yc#0 = $64 // yc
void fill(char *start , int size , char val)
char *fill::addr
char *fill::addr#0 // addr zp[2]:6 11.0
char *fill::addr#1 // addr zp[2]:6 202.0
char *fill::addr#2 // addr zp[2]:6 138.33333333333331
char *fill::addr#0 // addr zp[2]:14 11.0
char *fill::addr#1 // addr zp[2]:14 202.0
char *fill::addr#2 // addr zp[2]:14 138.33333333333331
char *fill::end
char *fill::end#0 // end zp[2]:4 22.4
char *fill::end#0 // end zp[2]:12 22.4
int fill::size
int fill::size#2 // size zp[2]:4 11.0
int fill::size#2 // size zp[2]:12 11.0
char *fill::start
char fill::val
char fill::val#4 // reg byte x 16.833333333333332
void main()
int main::i
int main::i#1 // i zp[2]:2 22.0
int main::i#2 // i zp[2]:2 11.0
int main::i#1 // i zp[2]:16 22.0
int main::i#2 // i zp[2]:16 11.0
void plot(int x , int y)
char plot::$10 // reg byte a 200002.0
int plot::$11 // zp[2]:12 150001.5
int plot::$12 // zp[2]:16 200002.0
int plot::$11 // zp[2]:6 150001.5
int plot::$12 // zp[2]:2 200002.0
signed char plot::$13 // reg byte a 200002.0
char plot::$14 // reg byte a 200002.0
int plot::$15 // zp[2]:16 200002.0
int plot::$16 // zp[2]:16 200002.0
int plot::$8 // zp[2]:14 200002.0
int plot::$15 // zp[2]:2 200002.0
int plot::$16 // zp[2]:2 200002.0
int plot::$8 // zp[2]:4 200002.0
char plot::$9 // reg byte a 200002.0
char *plot::location
char *plot::location#1 // location zp[2]:14 66667.33333333333
char *plot::location#2 // location zp[2]:14 40000.4
char *plot::location#3 // location zp[2]:14 100001.0
char *plot::location#1 // location zp[2]:4 66667.33333333333
char *plot::location#2 // location zp[2]:4 40000.4
char *plot::location#3 // location zp[2]:4 100001.0
int plot::x
int plot::x#0 // x zp[2]:10 10001.0
int plot::x#1 // x zp[2]:10 10001.0
int plot::x#2 // x zp[2]:10 10001.0
int plot::x#3 // x zp[2]:10 10001.0
int plot::x#4 // x zp[2]:10 10001.0
int plot::x#5 // x zp[2]:10 10001.0
int plot::x#6 // x zp[2]:10 10001.0
int plot::x#7 // x zp[2]:10 10001.0
int plot::x#8 // x zp[2]:10 32000.800000000003
int plot::x#0 // x zp[2]:8 10001.0
int plot::x#1 // x zp[2]:8 10001.0
int plot::x#2 // x zp[2]:8 10001.0
int plot::x#3 // x zp[2]:8 10001.0
int plot::x#4 // x zp[2]:8 10001.0
int plot::x#5 // x zp[2]:8 10001.0
int plot::x#6 // x zp[2]:8 10001.0
int plot::x#7 // x zp[2]:8 10001.0
int plot::x#8 // x zp[2]:8 32000.800000000003
int plot::y
int plot::y#0 // y zp[2]:12 20002.0
int plot::y#1 // y zp[2]:12 20002.0
int plot::y#2 // y zp[2]:12 20002.0
int plot::y#3 // y zp[2]:12 20002.0
int plot::y#4 // y zp[2]:12 20002.0
int plot::y#5 // y zp[2]:12 20002.0
int plot::y#6 // y zp[2]:12 20002.0
int plot::y#7 // y zp[2]:12 20002.0
int plot::y#8 // y zp[2]:12 48001.2
int plot::y#0 // y zp[2]:6 20002.0
int plot::y#1 // y zp[2]:6 20002.0
int plot::y#2 // y zp[2]:6 20002.0
int plot::y#3 // y zp[2]:6 20002.0
int plot::y#4 // y zp[2]:6 20002.0
int plot::y#5 // y zp[2]:6 20002.0
int plot::y#6 // y zp[2]:6 20002.0
int plot::y#7 // y zp[2]:6 20002.0
int plot::y#8 // y zp[2]:6 48001.2
zp[2]:2 [ main::i#2 main::i#1 ]
zp[2]:16 [ main::i#2 main::i#1 ]
reg byte x [ fill::val#4 ]
zp[2]:4 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ]
zp[2]:6 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 circle::$0 ]
zp[2]:10 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
zp[2]:12 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$11 ]
zp[2]:14 [ plot::$8 plot::location#1 plot::location#2 plot::location#3 ]
zp[2]:12 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ]
zp[2]:14 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
zp[2]:10 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 circle::$0 ]
zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
zp[2]:6 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$11 ]
zp[2]:4 [ plot::$8 plot::location#1 plot::location#2 plot::location#3 ]
reg byte a [ plot::$9 ]
reg byte a [ plot::$10 ]
zp[2]:16 [ plot::$15 plot::$16 plot::$12 ]
zp[2]:2 [ plot::$15 plot::$16 plot::$12 ]
reg byte a [ plot::$13 ]
reg byte a [ plot::$14 ]

View File

@ -72,11 +72,11 @@ main: {
jmp __b1
}
// Fill some memory with a value
// void fill(char *start, __zp(2) int size, __register(X) char val)
// void fill(char *start, __zp($e) int size, __register(X) char val)
fill: {
.label end = 2
.label addr = 4
.label size = 2
.label end = $e
.label addr = $c
.label size = $e
// byte* end = start + size
clc
lda.z end
@ -114,12 +114,12 @@ circle: {
.const r = $32
.label __5 = 8
.label __6 = 8
.label __7 = 6
.label __9 = $a
.label __10 = 6
.label p = 6
.label y = 4
.label x1 = 2
.label __7 = $a
.label __9 = 6
.label __10 = $a
.label p = $a
.label y = $c
.label x1 = $e
lda #<3-(r<<1)
sta.z p
lda #>3-(r<<1)
@ -349,16 +349,16 @@ circle: {
sta.z p+1
jmp __b4
}
// void plot(__zp(8) int x, __zp($a) int y)
// void plot(__zp(8) int x, __zp(6) int y)
plot: {
.label __0 = $c
.label __2 = $a
.label __3 = $e
.label __0 = 4
.label __2 = 6
.label __3 = 2
.label x = 8
.label y = $a
.label location = $c
.label __7 = $e
.label __8 = $e
.label y = 6
.label location = 4
.label __7 = 2
.label __8 = 2
// x & $fff8
lda.z x
and #<$fff8

View File

@ -955,41 +955,41 @@ Complete equivalence classes
[ plot::location#3 ]
[ plot::$4 ]
[ plot::$5 ]
Allocated zp[2]:2 [ fill::size#2 ]
Allocated zp[1]:4 [ fill::val#4 ]
Allocated zp[2]:5 [ fill::addr#2 fill::addr#0 fill::addr#1 ]
Allocated zp[2]:7 [ circle::x1#10 circle::x1#1 ]
Allocated zp[2]:9 [ circle::y#13 circle::y#10 circle::y#1 ]
Allocated zp[2]:11 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ]
Allocated zp[2]:13 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
Allocated zp[2]:15 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ]
Allocated zp[2]:17 [ fill::end#0 ]
Allocated zp[2]:19 [ circle::$5 ]
Allocated zp[2]:21 [ circle::$6 ]
Allocated zp[2]:23 [ circle::$7 ]
Allocated zp[2]:25 [ circle::$9 ]
Allocated zp[2]:27 [ circle::$10 ]
Allocated zp[2]:29 [ plot::$0 ]
Allocated zp[2]:31 [ plot::location#1 ]
Allocated zp[1]:33 [ plot::$6 ]
Allocated zp[1]:34 [ plot::$1 ]
Allocated zp[2]:35 [ plot::location#2 ]
Allocated zp[2]:37 [ plot::$2 ]
Allocated zp[2]:39 [ plot::$7 ]
Allocated zp[2]:41 [ plot::$8 ]
Allocated zp[2]:43 [ plot::$3 ]
Allocated zp[2]:45 [ plot::location#3 ]
Allocated zp[1]:47 [ plot::$4 ]
Allocated zp[1]:48 [ plot::$5 ]
Allocated zp[2]:2 [ plot::$0 ]
Allocated zp[1]:4 [ plot::$6 ]
Allocated zp[1]:5 [ plot::$1 ]
Allocated zp[2]:6 [ plot::$7 ]
Allocated zp[2]:8 [ plot::$8 ]
Allocated zp[2]:10 [ plot::$3 ]
Allocated zp[1]:12 [ plot::$4 ]
Allocated zp[1]:13 [ plot::$5 ]
Allocated zp[2]:14 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ]
Allocated zp[2]:16 [ plot::$2 ]
Allocated zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
Allocated zp[2]:20 [ plot::location#3 ]
Allocated zp[2]:22 [ plot::location#1 ]
Allocated zp[2]:24 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ]
Allocated zp[2]:26 [ plot::location#2 ]
Allocated zp[2]:28 [ fill::addr#2 fill::addr#0 fill::addr#1 ]
Allocated zp[2]:30 [ circle::x1#10 circle::x1#1 ]
Allocated zp[2]:32 [ circle::$5 ]
Allocated zp[2]:34 [ circle::$6 ]
Allocated zp[2]:36 [ circle::$7 ]
Allocated zp[2]:38 [ circle::$9 ]
Allocated zp[2]:40 [ circle::$10 ]
Allocated zp[2]:42 [ circle::y#13 circle::y#10 circle::y#1 ]
Allocated zp[2]:44 [ fill::end#0 ]
Allocated zp[1]:46 [ fill::val#4 ]
Allocated zp[2]:47 [ fill::size#2 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] *BORDER_COLOR = BLUE [ ] ( [ ] { } ) always clobbers reg byte a
Statement [5] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [6] *VICII_MEMORY = (char)(unsigned int)SCREEN&$3fff/$40|(unsigned int)BITMAP&$3fff/$400 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [10] fill::end#0 = fill::addr#0 + fill::size#2 [ fill::addr#0 fill::val#4 fill::end#0 ] ( fill:1 [ fill::addr#0 fill::val#4 fill::end#0 ] { } fill:3 [ fill::addr#0 fill::val#4 fill::end#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:4 [ fill::val#4 ]
Removing always clobbered register reg byte a as potential for zp[1]:46 [ fill::val#4 ]
Statement [12] if(fill::addr#2!=fill::end#0) goto fill::@2 [ fill::val#4 fill::end#0 fill::addr#2 ] ( fill:1 [ fill::val#4 fill::end#0 fill::addr#2 ] { } fill:3 [ fill::val#4 fill::end#0 fill::addr#2 ] { } ) always clobbers reg byte a
Statement [14] *fill::addr#2 = fill::val#4 [ fill::val#4 fill::end#0 fill::addr#2 ] ( fill:1 [ fill::val#4 fill::end#0 fill::addr#2 ] { } fill:3 [ fill::val#4 fill::end#0 fill::addr#2 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:4 [ fill::val#4 ]
Removing always clobbered register reg byte y as potential for zp[1]:46 [ fill::val#4 ]
Statement [18] if(circle::x1#10<=circle::y#13) goto circle::@2 [ circle::x1#10 circle::y#13 circle::p#3 ] ( circle:7 [ circle::x1#10 circle::y#13 circle::p#3 ] { } ) always clobbers reg byte a
Statement [20] if(circle::p#3<0) goto circle::@3 [ circle::x1#10 circle::y#13 circle::p#3 ] ( circle:7 [ circle::x1#10 circle::y#13 circle::p#3 ] { } ) always clobbers reg byte a
Statement [21] circle::y#1 = circle::y#13 - 1 [ circle::x1#10 circle::p#3 circle::y#1 ] ( circle:7 [ circle::x1#10 circle::p#3 circle::y#1 ] { } ) always clobbers reg byte a
@ -1072,73 +1072,73 @@ Statement [65] plot::location#3 = plot::location#2 + plot::$3 [ plot::x#8 plot::
Statement [66] plot::$4 = plot::x#8 & 7 [ plot::location#3 plot::$4 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a
Statement [67] plot::$5 = *plot::location#3 | bitmask[plot::$4] [ plot::location#3 plot::$5 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a reg byte y
Statement [68] *plot::location#3 = plot::$5 [ ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte y
Potential registers zp[2]:2 [ fill::size#2 ] : zp[2]:2 ,
Potential registers zp[1]:4 [ fill::val#4 ] : zp[1]:4 , reg byte x ,
Potential registers zp[2]:5 [ fill::addr#2 fill::addr#0 fill::addr#1 ] : zp[2]:5 ,
Potential registers zp[2]:7 [ circle::x1#10 circle::x1#1 ] : zp[2]:7 ,
Potential registers zp[2]:9 [ circle::y#13 circle::y#10 circle::y#1 ] : zp[2]:9 ,
Potential registers zp[2]:11 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] : zp[2]:11 ,
Potential registers zp[2]:13 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] : zp[2]:13 ,
Potential registers zp[2]:15 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] : zp[2]:15 ,
Potential registers zp[2]:17 [ fill::end#0 ] : zp[2]:17 ,
Potential registers zp[2]:19 [ circle::$5 ] : zp[2]:19 ,
Potential registers zp[2]:21 [ circle::$6 ] : zp[2]:21 ,
Potential registers zp[2]:23 [ circle::$7 ] : zp[2]:23 ,
Potential registers zp[2]:25 [ circle::$9 ] : zp[2]:25 ,
Potential registers zp[2]:27 [ circle::$10 ] : zp[2]:27 ,
Potential registers zp[2]:29 [ plot::$0 ] : zp[2]:29 ,
Potential registers zp[2]:31 [ plot::location#1 ] : zp[2]:31 ,
Potential registers zp[1]:33 [ plot::$6 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:34 [ plot::$1 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:35 [ plot::location#2 ] : zp[2]:35 ,
Potential registers zp[2]:37 [ plot::$2 ] : zp[2]:37 ,
Potential registers zp[2]:39 [ plot::$7 ] : zp[2]:39 ,
Potential registers zp[2]:41 [ plot::$8 ] : zp[2]:41 ,
Potential registers zp[2]:43 [ plot::$3 ] : zp[2]:43 ,
Potential registers zp[2]:45 [ plot::location#3 ] : zp[2]:45 ,
Potential registers zp[1]:47 [ plot::$4 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:48 [ plot::$5 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:47 [ fill::size#2 ] : zp[2]:47 ,
Potential registers zp[1]:46 [ fill::val#4 ] : zp[1]:46 , reg byte x ,
Potential registers zp[2]:28 [ fill::addr#2 fill::addr#0 fill::addr#1 ] : zp[2]:28 ,
Potential registers zp[2]:30 [ circle::x1#10 circle::x1#1 ] : zp[2]:30 ,
Potential registers zp[2]:42 [ circle::y#13 circle::y#10 circle::y#1 ] : zp[2]:42 ,
Potential registers zp[2]:24 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] : zp[2]:24 ,
Potential registers zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] : zp[2]:18 ,
Potential registers zp[2]:14 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] : zp[2]:14 ,
Potential registers zp[2]:44 [ fill::end#0 ] : zp[2]:44 ,
Potential registers zp[2]:32 [ circle::$5 ] : zp[2]:32 ,
Potential registers zp[2]:34 [ circle::$6 ] : zp[2]:34 ,
Potential registers zp[2]:36 [ circle::$7 ] : zp[2]:36 ,
Potential registers zp[2]:38 [ circle::$9 ] : zp[2]:38 ,
Potential registers zp[2]:40 [ circle::$10 ] : zp[2]:40 ,
Potential registers zp[2]:2 [ plot::$0 ] : zp[2]:2 ,
Potential registers zp[2]:22 [ plot::location#1 ] : zp[2]:22 ,
Potential registers zp[1]:4 [ plot::$6 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ plot::$1 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:26 [ plot::location#2 ] : zp[2]:26 ,
Potential registers zp[2]:16 [ plot::$2 ] : zp[2]:16 ,
Potential registers zp[2]:6 [ plot::$7 ] : zp[2]:6 ,
Potential registers zp[2]:8 [ plot::$8 ] : zp[2]:8 ,
Potential registers zp[2]:10 [ plot::$3 ] : zp[2]:10 ,
Potential registers zp[2]:20 [ plot::location#3 ] : zp[2]:20 ,
Potential registers zp[1]:12 [ plot::$4 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:13 [ plot::$5 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [plot] 2,002: zp[2]:29 [ plot::$0 ] 2,002: zp[1]:33 [ plot::$6 ] 2,002: zp[1]:34 [ plot::$1 ] 2,002: zp[2]:39 [ plot::$7 ] 2,002: zp[2]:41 [ plot::$8 ] 2,002: zp[2]:43 [ plot::$3 ] 2,002: zp[1]:47 [ plot::$4 ] 2,002: zp[1]:48 [ plot::$5 ] 1,917.5: zp[2]:15 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] 1,501.5: zp[2]:37 [ plot::$2 ] 1,063.45: zp[2]:13 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] 1,001: zp[2]:45 [ plot::location#3 ] 667.33: zp[2]:31 [ plot::location#1 ] 400.4: zp[2]:35 [ plot::location#2 ]
Uplift Scope [circle] 473.37: zp[2]:11 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] 238.47: zp[2]:7 [ circle::x1#10 circle::x1#1 ] 202: zp[2]:19 [ circle::$5 ] 202: zp[2]:21 [ circle::$6 ] 202: zp[2]:23 [ circle::$7 ] 202: zp[2]:25 [ circle::$9 ] 202: zp[2]:27 [ circle::$10 ] 170.66: zp[2]:9 [ circle::y#13 circle::y#10 circle::y#1 ]
Uplift Scope [fill] 351.33: zp[2]:5 [ fill::addr#2 fill::addr#0 fill::addr#1 ] 22.4: zp[2]:17 [ fill::end#0 ] 16.83: zp[1]:4 [ fill::val#4 ] 11: zp[2]:2 [ fill::size#2 ]
Uplift Scope [plot] 2,002: zp[2]:2 [ plot::$0 ] 2,002: zp[1]:4 [ plot::$6 ] 2,002: zp[1]:5 [ plot::$1 ] 2,002: zp[2]:6 [ plot::$7 ] 2,002: zp[2]:8 [ plot::$8 ] 2,002: zp[2]:10 [ plot::$3 ] 2,002: zp[1]:12 [ plot::$4 ] 2,002: zp[1]:13 [ plot::$5 ] 1,917.5: zp[2]:14 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] 1,501.5: zp[2]:16 [ plot::$2 ] 1,063.45: zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] 1,001: zp[2]:20 [ plot::location#3 ] 667.33: zp[2]:22 [ plot::location#1 ] 400.4: zp[2]:26 [ plot::location#2 ]
Uplift Scope [circle] 473.37: zp[2]:24 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] 238.47: zp[2]:30 [ circle::x1#10 circle::x1#1 ] 202: zp[2]:32 [ circle::$5 ] 202: zp[2]:34 [ circle::$6 ] 202: zp[2]:36 [ circle::$7 ] 202: zp[2]:38 [ circle::$9 ] 202: zp[2]:40 [ circle::$10 ] 170.66: zp[2]:42 [ circle::y#13 circle::y#10 circle::y#1 ]
Uplift Scope [fill] 351.33: zp[2]:28 [ fill::addr#2 fill::addr#0 fill::addr#1 ] 22.4: zp[2]:44 [ fill::end#0 ] 16.83: zp[1]:46 [ fill::val#4 ] 11: zp[2]:47 [ fill::size#2 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
Uplift Scope [main]
Uplift Scope []
Uplifting [plot] best 6407 combination zp[2]:29 [ plot::$0 ] reg byte a [ plot::$6 ] reg byte a [ plot::$1 ] zp[2]:39 [ plot::$7 ] zp[2]:41 [ plot::$8 ] zp[2]:43 [ plot::$3 ] reg byte a [ plot::$4 ] reg byte a [ plot::$5 ] zp[2]:15 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] zp[2]:37 [ plot::$2 ] zp[2]:13 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] zp[2]:45 [ plot::location#3 ] zp[2]:31 [ plot::location#1 ] zp[2]:35 [ plot::location#2 ]
Uplifting [plot] best 6407 combination zp[2]:2 [ plot::$0 ] reg byte a [ plot::$6 ] reg byte a [ plot::$1 ] zp[2]:6 [ plot::$7 ] zp[2]:8 [ plot::$8 ] zp[2]:10 [ plot::$3 ] reg byte a [ plot::$4 ] reg byte a [ plot::$5 ] zp[2]:14 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] zp[2]:16 [ plot::$2 ] zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] zp[2]:20 [ plot::location#3 ] zp[2]:22 [ plot::location#1 ] zp[2]:26 [ plot::location#2 ]
Limited combination testing to 100 combinations of 256 possible.
Uplifting [circle] best 6407 combination zp[2]:11 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] zp[2]:7 [ circle::x1#10 circle::x1#1 ] zp[2]:19 [ circle::$5 ] zp[2]:21 [ circle::$6 ] zp[2]:23 [ circle::$7 ] zp[2]:25 [ circle::$9 ] zp[2]:27 [ circle::$10 ] zp[2]:9 [ circle::y#13 circle::y#10 circle::y#1 ]
Uplifting [fill] best 6391 combination zp[2]:5 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp[2]:17 [ fill::end#0 ] reg byte x [ fill::val#4 ] zp[2]:2 [ fill::size#2 ]
Uplifting [circle] best 6407 combination zp[2]:24 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] zp[2]:30 [ circle::x1#10 circle::x1#1 ] zp[2]:32 [ circle::$5 ] zp[2]:34 [ circle::$6 ] zp[2]:36 [ circle::$7 ] zp[2]:38 [ circle::$9 ] zp[2]:40 [ circle::$10 ] zp[2]:42 [ circle::y#13 circle::y#10 circle::y#1 ]
Uplifting [fill] best 6391 combination zp[2]:28 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp[2]:44 [ fill::end#0 ] reg byte x [ fill::val#4 ] zp[2]:47 [ fill::size#2 ]
Uplifting [MOS6526_CIA] best 6391 combination
Uplifting [MOS6569_VICII] best 6391 combination
Uplifting [MOS6581_SID] best 6391 combination
Uplifting [main] best 6391 combination
Uplifting [] best 6391 combination
Coalescing zero page register [ zp[2]:11 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] ] with [ zp[2]:23 [ circle::$7 ] ] - score: 2
Coalescing zero page register [ zp[2]:11 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 ] ] with [ zp[2]:27 [ circle::$10 ] ] - score: 2
Coalescing zero page register [ zp[2]:2 [ fill::size#2 ] ] with [ zp[2]:17 [ fill::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:15 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] ] with [ zp[2]:37 [ plot::$2 ] ] - score: 1
Coalescing zero page register [ zp[2]:19 [ circle::$5 ] ] with [ zp[2]:21 [ circle::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:29 [ plot::$0 ] ] with [ zp[2]:31 [ plot::location#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:35 [ plot::location#2 ] ] with [ zp[2]:45 [ plot::location#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:39 [ plot::$7 ] ] with [ zp[2]:41 [ plot::$8 ] ] - score: 1
Coalescing zero page register [ zp[2]:29 [ plot::$0 plot::location#1 ] ] with [ zp[2]:35 [ plot::location#2 plot::location#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:39 [ plot::$7 plot::$8 ] ] with [ zp[2]:43 [ plot::$3 ] ] - score: 1
Coalescing zero page register [ zp[2]:7 [ circle::x1#10 circle::x1#1 ] ] with [ zp[2]:2 [ fill::size#2 fill::end#0 ] ]
Coalescing zero page register [ zp[2]:9 [ circle::y#13 circle::y#10 circle::y#1 ] ] with [ zp[2]:5 [ fill::addr#2 fill::addr#0 fill::addr#1 ] ]
Coalescing zero page register [ zp[2]:19 [ circle::$5 circle::$6 ] ] with [ zp[2]:13 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] ]
Coalescing zero page register [ zp[2]:25 [ circle::$9 ] ] with [ zp[2]:15 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$2 ] ]
Allocated (was zp[2]:7) zp[2]:2 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ]
Allocated (was zp[2]:9) zp[2]:4 [ circle::y#13 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
Allocated (was zp[2]:11) zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ]
Allocated (was zp[2]:19) zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
Allocated (was zp[2]:25) zp[2]:10 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$2 ]
Allocated (was zp[2]:29) zp[2]:12 [ plot::$0 plot::location#1 plot::location#2 plot::location#3 ]
Allocated (was zp[2]:39) zp[2]:14 [ plot::$7 plot::$8 plot::$3 ]
Coalescing zero page register [ zp[2]:24 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] ] with [ zp[2]:36 [ circle::$7 ] ] - score: 2
Coalescing zero page register [ zp[2]:24 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 ] ] with [ zp[2]:40 [ circle::$10 ] ] - score: 2
Coalescing zero page register [ zp[2]:47 [ fill::size#2 ] ] with [ zp[2]:44 [ fill::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:14 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] ] with [ zp[2]:16 [ plot::$2 ] ] - score: 1
Coalescing zero page register [ zp[2]:32 [ circle::$5 ] ] with [ zp[2]:34 [ circle::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:2 [ plot::$0 ] ] with [ zp[2]:22 [ plot::location#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:26 [ plot::location#2 ] ] with [ zp[2]:20 [ plot::location#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:6 [ plot::$7 ] ] with [ zp[2]:8 [ plot::$8 ] ] - score: 1
Coalescing zero page register [ zp[2]:2 [ plot::$0 plot::location#1 ] ] with [ zp[2]:26 [ plot::location#2 plot::location#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:6 [ plot::$7 plot::$8 ] ] with [ zp[2]:10 [ plot::$3 ] ] - score: 1
Coalescing zero page register [ zp[2]:30 [ circle::x1#10 circle::x1#1 ] ] with [ zp[2]:47 [ fill::size#2 fill::end#0 ] ]
Coalescing zero page register [ zp[2]:42 [ circle::y#13 circle::y#10 circle::y#1 ] ] with [ zp[2]:28 [ fill::addr#2 fill::addr#0 fill::addr#1 ] ]
Coalescing zero page register [ zp[2]:32 [ circle::$5 circle::$6 ] ] with [ zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] ]
Coalescing zero page register [ zp[2]:38 [ circle::$9 ] ] with [ zp[2]:14 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$2 ] ]
Allocated (was zp[2]:6) zp[2]:2 [ plot::$7 plot::$8 plot::$3 ]
Allocated (was zp[2]:2) zp[2]:4 [ plot::$0 plot::location#1 plot::location#2 plot::location#3 ]
Allocated (was zp[2]:38) zp[2]:6 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$2 ]
Allocated (was zp[2]:32) zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
Allocated (was zp[2]:24) zp[2]:10 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ]
Allocated (was zp[2]:42) zp[2]:12 [ circle::y#13 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
Allocated (was zp[2]:30) zp[2]:14 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -1245,11 +1245,11 @@ main: {
}
// fill
// Fill some memory with a value
// void fill(char *start, __zp(2) int size, __register(X) char val)
// void fill(char *start, __zp($e) int size, __register(X) char val)
fill: {
.label end = 2
.label addr = 4
.label size = 2
.label end = $e
.label addr = $c
.label size = $e
// [10] fill::end#0 = fill::addr#0 + fill::size#2 -- pbuz1=pbuz2_plus_vwsz1
clc
lda.z end
@ -1298,12 +1298,12 @@ circle: {
.const r = $32
.label __5 = 8
.label __6 = 8
.label __7 = 6
.label __9 = $a
.label __10 = 6
.label p = 6
.label y = 4
.label x1 = 2
.label __7 = $a
.label __9 = 6
.label __10 = $a
.label p = $a
.label y = $c
.label x1 = $e
// [17] phi from circle to circle::@1 [phi:circle->circle::@1]
__b1_from_circle:
// [17] phi circle::p#3 = 3-circle::r#0<<1 [phi:circle->circle::@1#0] -- vwsz1=vwsc1
@ -1632,16 +1632,16 @@ circle: {
jmp __b4_from___b3
}
// plot
// void plot(__zp(8) int x, __zp($a) int y)
// void plot(__zp(8) int x, __zp(6) int y)
plot: {
.label __0 = $c
.label __2 = $a
.label __3 = $e
.label __0 = 4
.label __2 = 6
.label __3 = 2
.label x = 8
.label y = $a
.label location = $c
.label __7 = $e
.label __8 = $e
.label y = 6
.label location = 4
.label __7 = 2
.label __8 = 2
// [56] plot::$0 = plot::x#8 & $fff8 -- vwsz1=vwsz2_band_vdsc1
lda.z x
and #<$fff8
@ -1816,56 +1816,56 @@ __constant char * const VICII_MEMORY = (char *) 53272
__constant const char VICII_RSEL = 8
__constant char bitmask[] = { $80, $40, $20, $10, 8, 4, 2, 1 }
void circle(int xc , int yc , int r)
int circle::$10 // zp[2]:6 202.0
int circle::$10 // zp[2]:10 202.0
int circle::$5 // zp[2]:8 202.0
int circle::$6 // zp[2]:8 202.0
int circle::$7 // zp[2]:6 202.0
int circle::$9 // zp[2]:10 202.0
int circle::$7 // zp[2]:10 202.0
int circle::$9 // zp[2]:6 202.0
int circle::p
int circle::p#1 // p zp[2]:6 202.0
int circle::p#10 // p zp[2]:6 11.653846153846153
int circle::p#2 // p zp[2]:6 202.0
int circle::p#3 // p zp[2]:6 57.714285714285715
int circle::p#1 // p zp[2]:10 202.0
int circle::p#10 // p zp[2]:10 11.653846153846153
int circle::p#2 // p zp[2]:10 202.0
int circle::p#3 // p zp[2]:10 57.714285714285715
int circle::r
__constant int circle::r#0 = $32 // r
int circle::x1
int circle::x1#1 // x1 zp[2]:2 202.0
int circle::x1#10 // x1 zp[2]:2 36.47222222222223
int circle::x1#1 // x1 zp[2]:14 202.0
int circle::x1#10 // x1 zp[2]:14 36.47222222222223
int circle::xc
__constant int circle::xc#0 = $64 // xc
int circle::y
int circle::y#1 // y zp[2]:4 60.599999999999994
int circle::y#10 // y zp[2]:4 42.73076923076923
int circle::y#13 // y zp[2]:4 67.33333333333333
int circle::y#1 // y zp[2]:12 60.599999999999994
int circle::y#10 // y zp[2]:12 42.73076923076923
int circle::y#13 // y zp[2]:12 67.33333333333333
int circle::yc
__constant int circle::yc#0 = $64 // yc
void fill(char *start , int size , char val)
char *fill::addr
char *fill::addr#0 // addr zp[2]:4 11.0
char *fill::addr#1 // addr zp[2]:4 202.0
char *fill::addr#2 // addr zp[2]:4 138.33333333333331
char *fill::addr#0 // addr zp[2]:12 11.0
char *fill::addr#1 // addr zp[2]:12 202.0
char *fill::addr#2 // addr zp[2]:12 138.33333333333331
char *fill::end
char *fill::end#0 // end zp[2]:2 22.4
char *fill::end#0 // end zp[2]:14 22.4
int fill::size
int fill::size#2 // size zp[2]:2 11.0
int fill::size#2 // size zp[2]:14 11.0
char *fill::start
char fill::val
char fill::val#4 // reg byte x 16.833333333333332
void main()
void plot(int x , int y)
int plot::$0 // zp[2]:12 2002.0
int plot::$0 // zp[2]:4 2002.0
char plot::$1 // reg byte a 2002.0
int plot::$2 // zp[2]:10 1501.5
int plot::$3 // zp[2]:14 2002.0
int plot::$2 // zp[2]:6 1501.5
int plot::$3 // zp[2]:2 2002.0
signed char plot::$4 // reg byte a 2002.0
char plot::$5 // reg byte a 2002.0
char plot::$6 // reg byte a 2002.0
int plot::$7 // zp[2]:14 2002.0
int plot::$8 // zp[2]:14 2002.0
int plot::$7 // zp[2]:2 2002.0
int plot::$8 // zp[2]:2 2002.0
char *plot::location
char *plot::location#1 // location zp[2]:12 667.3333333333334
char *plot::location#2 // location zp[2]:12 400.4
char *plot::location#3 // location zp[2]:12 1001.0
char *plot::location#1 // location zp[2]:4 667.3333333333334
char *plot::location#2 // location zp[2]:4 400.4
char *plot::location#3 // location zp[2]:4 1001.0
int plot::x
int plot::x#0 // x zp[2]:8 101.0
int plot::x#1 // x zp[2]:8 101.0
@ -1877,26 +1877,26 @@ int plot::x#6 // x zp[2]:8 101.0
int plot::x#7 // x zp[2]:8 101.0
int plot::x#8 // x zp[2]:8 255.45454545454544
int plot::y
int plot::y#0 // y zp[2]:10 202.0
int plot::y#1 // y zp[2]:10 202.0
int plot::y#2 // y zp[2]:10 202.0
int plot::y#3 // y zp[2]:10 202.0
int plot::y#4 // y zp[2]:10 202.0
int plot::y#5 // y zp[2]:10 202.0
int plot::y#6 // y zp[2]:10 202.0
int plot::y#7 // y zp[2]:10 202.0
int plot::y#8 // y zp[2]:10 301.5
int plot::y#0 // y zp[2]:6 202.0
int plot::y#1 // y zp[2]:6 202.0
int plot::y#2 // y zp[2]:6 202.0
int plot::y#3 // y zp[2]:6 202.0
int plot::y#4 // y zp[2]:6 202.0
int plot::y#5 // y zp[2]:6 202.0
int plot::y#6 // y zp[2]:6 202.0
int plot::y#7 // y zp[2]:6 202.0
int plot::y#8 // y zp[2]:6 301.5
reg byte x [ fill::val#4 ]
zp[2]:2 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ]
zp[2]:4 [ circle::y#13 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ]
zp[2]:14 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ]
zp[2]:12 [ circle::y#13 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
zp[2]:10 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ]
zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
zp[2]:10 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$2 ]
zp[2]:12 [ plot::$0 plot::location#1 plot::location#2 plot::location#3 ]
zp[2]:6 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$2 ]
zp[2]:4 [ plot::$0 plot::location#1 plot::location#2 plot::location#3 ]
reg byte a [ plot::$6 ]
reg byte a [ plot::$1 ]
zp[2]:14 [ plot::$7 plot::$8 plot::$3 ]
zp[2]:2 [ plot::$7 plot::$8 plot::$3 ]
reg byte a [ plot::$4 ]
reg byte a [ plot::$5 ]
@ -2003,11 +2003,11 @@ main: {
}
// fill
// Fill some memory with a value
// void fill(char *start, __zp(2) int size, __register(X) char val)
// void fill(char *start, __zp($e) int size, __register(X) char val)
fill: {
.label end = 2
.label addr = 4
.label size = 2
.label end = $e
.label addr = $c
.label size = $e
// byte* end = start + size
// [10] fill::end#0 = fill::addr#0 + fill::size#2 -- pbuz1=pbuz2_plus_vwsz1
clc
@ -2056,12 +2056,12 @@ circle: {
.const r = $32
.label __5 = 8
.label __6 = 8
.label __7 = 6
.label __9 = $a
.label __10 = 6
.label p = 6
.label y = 4
.label x1 = 2
.label __7 = $a
.label __9 = 6
.label __10 = $a
.label p = $a
.label y = $c
.label x1 = $e
// [17] phi from circle to circle::@1 [phi:circle->circle::@1]
// [17] phi circle::p#3 = 3-circle::r#0<<1 [phi:circle->circle::@1#0] -- vwsz1=vwsc1
lda #<3-(r<<1)
@ -2377,16 +2377,16 @@ circle: {
jmp __b4
}
// plot
// void plot(__zp(8) int x, __zp($a) int y)
// void plot(__zp(8) int x, __zp(6) int y)
plot: {
.label __0 = $c
.label __2 = $a
.label __3 = $e
.label __0 = 4
.label __2 = 6
.label __3 = 2
.label x = 8
.label y = $a
.label location = $c
.label __7 = $e
.label __8 = $e
.label y = 6
.label location = 4
.label __7 = 2
.label __8 = 2
// x & $fff8
// [56] plot::$0 = plot::x#8 & $fff8 -- vwsz1=vwsz2_band_vdsc1
lda.z x

View File

@ -9,56 +9,56 @@ __constant char * const VICII_MEMORY = (char *) 53272
__constant const char VICII_RSEL = 8
__constant char bitmask[] = { $80, $40, $20, $10, 8, 4, 2, 1 }
void circle(int xc , int yc , int r)
int circle::$10 // zp[2]:6 202.0
int circle::$10 // zp[2]:10 202.0
int circle::$5 // zp[2]:8 202.0
int circle::$6 // zp[2]:8 202.0
int circle::$7 // zp[2]:6 202.0
int circle::$9 // zp[2]:10 202.0
int circle::$7 // zp[2]:10 202.0
int circle::$9 // zp[2]:6 202.0
int circle::p
int circle::p#1 // p zp[2]:6 202.0
int circle::p#10 // p zp[2]:6 11.653846153846153
int circle::p#2 // p zp[2]:6 202.0
int circle::p#3 // p zp[2]:6 57.714285714285715
int circle::p#1 // p zp[2]:10 202.0
int circle::p#10 // p zp[2]:10 11.653846153846153
int circle::p#2 // p zp[2]:10 202.0
int circle::p#3 // p zp[2]:10 57.714285714285715
int circle::r
__constant int circle::r#0 = $32 // r
int circle::x1
int circle::x1#1 // x1 zp[2]:2 202.0
int circle::x1#10 // x1 zp[2]:2 36.47222222222223
int circle::x1#1 // x1 zp[2]:14 202.0
int circle::x1#10 // x1 zp[2]:14 36.47222222222223
int circle::xc
__constant int circle::xc#0 = $64 // xc
int circle::y
int circle::y#1 // y zp[2]:4 60.599999999999994
int circle::y#10 // y zp[2]:4 42.73076923076923
int circle::y#13 // y zp[2]:4 67.33333333333333
int circle::y#1 // y zp[2]:12 60.599999999999994
int circle::y#10 // y zp[2]:12 42.73076923076923
int circle::y#13 // y zp[2]:12 67.33333333333333
int circle::yc
__constant int circle::yc#0 = $64 // yc
void fill(char *start , int size , char val)
char *fill::addr
char *fill::addr#0 // addr zp[2]:4 11.0
char *fill::addr#1 // addr zp[2]:4 202.0
char *fill::addr#2 // addr zp[2]:4 138.33333333333331
char *fill::addr#0 // addr zp[2]:12 11.0
char *fill::addr#1 // addr zp[2]:12 202.0
char *fill::addr#2 // addr zp[2]:12 138.33333333333331
char *fill::end
char *fill::end#0 // end zp[2]:2 22.4
char *fill::end#0 // end zp[2]:14 22.4
int fill::size
int fill::size#2 // size zp[2]:2 11.0
int fill::size#2 // size zp[2]:14 11.0
char *fill::start
char fill::val
char fill::val#4 // reg byte x 16.833333333333332
void main()
void plot(int x , int y)
int plot::$0 // zp[2]:12 2002.0
int plot::$0 // zp[2]:4 2002.0
char plot::$1 // reg byte a 2002.0
int plot::$2 // zp[2]:10 1501.5
int plot::$3 // zp[2]:14 2002.0
int plot::$2 // zp[2]:6 1501.5
int plot::$3 // zp[2]:2 2002.0
signed char plot::$4 // reg byte a 2002.0
char plot::$5 // reg byte a 2002.0
char plot::$6 // reg byte a 2002.0
int plot::$7 // zp[2]:14 2002.0
int plot::$8 // zp[2]:14 2002.0
int plot::$7 // zp[2]:2 2002.0
int plot::$8 // zp[2]:2 2002.0
char *plot::location
char *plot::location#1 // location zp[2]:12 667.3333333333334
char *plot::location#2 // location zp[2]:12 400.4
char *plot::location#3 // location zp[2]:12 1001.0
char *plot::location#1 // location zp[2]:4 667.3333333333334
char *plot::location#2 // location zp[2]:4 400.4
char *plot::location#3 // location zp[2]:4 1001.0
int plot::x
int plot::x#0 // x zp[2]:8 101.0
int plot::x#1 // x zp[2]:8 101.0
@ -70,25 +70,25 @@ int plot::x#6 // x zp[2]:8 101.0
int plot::x#7 // x zp[2]:8 101.0
int plot::x#8 // x zp[2]:8 255.45454545454544
int plot::y
int plot::y#0 // y zp[2]:10 202.0
int plot::y#1 // y zp[2]:10 202.0
int plot::y#2 // y zp[2]:10 202.0
int plot::y#3 // y zp[2]:10 202.0
int plot::y#4 // y zp[2]:10 202.0
int plot::y#5 // y zp[2]:10 202.0
int plot::y#6 // y zp[2]:10 202.0
int plot::y#7 // y zp[2]:10 202.0
int plot::y#8 // y zp[2]:10 301.5
int plot::y#0 // y zp[2]:6 202.0
int plot::y#1 // y zp[2]:6 202.0
int plot::y#2 // y zp[2]:6 202.0
int plot::y#3 // y zp[2]:6 202.0
int plot::y#4 // y zp[2]:6 202.0
int plot::y#5 // y zp[2]:6 202.0
int plot::y#6 // y zp[2]:6 202.0
int plot::y#7 // y zp[2]:6 202.0
int plot::y#8 // y zp[2]:6 301.5
reg byte x [ fill::val#4 ]
zp[2]:2 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ]
zp[2]:4 [ circle::y#13 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ]
zp[2]:14 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ]
zp[2]:12 [ circle::y#13 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
zp[2]:10 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ]
zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
zp[2]:10 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$2 ]
zp[2]:12 [ plot::$0 plot::location#1 plot::location#2 plot::location#3 ]
zp[2]:6 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$2 ]
zp[2]:4 [ plot::$0 plot::location#1 plot::location#2 plot::location#3 ]
reg byte a [ plot::$6 ]
reg byte a [ plot::$1 ]
zp[2]:14 [ plot::$7 plot::$8 plot::$3 ]
zp[2]:2 [ plot::$7 plot::$8 plot::$3 ]
reg byte a [ plot::$4 ]
reg byte a [ plot::$5 ]

View File

@ -34,7 +34,7 @@
.label VICII_MEMORY = $d018
.label SCREEN = $400
.label BITMAP = $2000
.label next = $10
.label next = $18
.segment Code
main: {
// *BORDER_COLOR = 0
@ -70,8 +70,8 @@ main: {
// Initialize bitmap plotting tables
// void bitmap_init(char *gfx, char *screen)
bitmap_init: {
.label __7 = $10
.label yoffs = 2
.label __7 = $18
.label yoffs = 8
ldx #0
lda #$80
__b1:
@ -159,7 +159,7 @@ bitmap_clear: {
rts
}
init_screen: {
.label c = 2
.label c = 8
lda #<SCREEN
sta.z c
lda #>SCREEN
@ -187,20 +187,20 @@ init_screen: {
jmp __b1
}
// Draw a line on the bitmap using bresenhams algorithm
// void bitmap_line(unsigned int x1, unsigned int y1, __zp($e) unsigned int x2, unsigned int y2)
// void bitmap_line(unsigned int x1, unsigned int y1, __zp($16) unsigned int x2, unsigned int y2)
bitmap_line: {
.const x1 = 0
.const y1 = 0
.const y2 = $64
.label dx = $11
.label dy = $a
.label sx = $13
.label sy = $c
.label e1 = 4
.label e = 6
.label y = 2
.label x = 8
.label x2 = $e
.label dx = $12
.label dy = $e
.label sx = $14
.label sy = $10
.label e1 = $c
.label e = $a
.label y = 8
.label x = 6
.label x2 = $16
// unsigned int dx = abs_u16(x2-x1)
lda.z x2
sta.z abs_u16.w
@ -411,12 +411,12 @@ bitmap_line: {
rts
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp(8) void *str, __register(X) char c, __zp(6) unsigned int num)
// void * memset(__zp(6) void *str, __register(X) char c, __zp($a) unsigned int num)
memset: {
.label end = 6
.label dst = 8
.label num = 6
.label str = 8
.label end = $a
.label dst = 6
.label num = $a
.label str = 6
// if(num>0)
lda.z num
bne !+
@ -455,10 +455,10 @@ memset: {
jmp __b2
}
// Get the absolute value of a 16-bit unsigned number treated as a signed number.
// __zp($a) unsigned int abs_u16(__zp($a) unsigned int w)
// __zp($e) unsigned int abs_u16(__zp($e) unsigned int w)
abs_u16: {
.label w = $a
.label return = $a
.label w = $e
.label return = $e
// BYTE1(w)
lda.z w+1
// BYTE1(w)&0x80
@ -481,10 +481,10 @@ abs_u16: {
}
// Get the sign of a 16-bit unsigned number treated as a signed number.
// Returns unsigned -1 if the number is
// __zp($c) unsigned int sgn_u16(__zp($15) unsigned int w)
// __zp($10) unsigned int sgn_u16(__zp(2) unsigned int w)
sgn_u16: {
.label w = $15
.label return = $c
.label w = 2
.label return = $10
// BYTE1(w)
lda.z w+1
// BYTE1(w)&0x80
@ -505,11 +505,11 @@ sgn_u16: {
rts
}
// Plot a single dot in the bitmap
// void bitmap_plot(__zp(8) unsigned int x, __register(X) char y)
// void bitmap_plot(__zp(6) unsigned int x, __register(X) char y)
bitmap_plot: {
.label __1 = $17
.label plotter = $15
.label x = 8
.label __1 = 4
.label plotter = 2
.label x = 6
// MAKEWORD( bitmap_plot_yhi[y], bitmap_plot_ylo[y] )
lda bitmap_plot_yhi,x
sta.z plotter+1

View File

@ -2018,57 +2018,57 @@ Complete equivalence classes
[ bitmap_plot::$1 ]
[ bitmap_plot::plotter#1 ]
[ bitmap_plot::$2 ]
Allocated zp[1]:2 [ next#5 next#0 ]
Allocated zp[1]:3 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
Allocated zp[1]:4 [ bitmap_init::x#2 bitmap_init::x#1 ]
Allocated zp[1]:5 [ bitmap_init::y#2 bitmap_init::y#1 ]
Allocated zp[2]:6 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated zp[2]:8 [ init_screen::c#2 init_screen::c#1 ]
Allocated zp[2]:10 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
Allocated zp[2]:12 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ]
Allocated zp[2]:14 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ]
Allocated zp[1]:2 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ]
Allocated zp[2]:3 [ bitmap_plot::$1 ]
Allocated zp[1]:5 [ bitmap_plot::$2 ]
Allocated zp[2]:6 [ bitmap_plot::plotter#1 ]
Allocated zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
Allocated zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ]
Allocated zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ]
Allocated zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
Allocated zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
Allocated zp[2]:18 [ memset::num#2 ]
Allocated zp[2]:20 [ memset::str#3 ]
Allocated zp[1]:22 [ memset::c#4 ]
Allocated zp[2]:23 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[2]:25 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ]
Allocated zp[2]:27 [ sgn_u16::w#2 sgn_u16::w#0 ]
Allocated zp[2]:29 [ sgn_u16::return#4 ]
Allocated zp[1]:31 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ]
Allocated zp[2]:32 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
Allocated zp[2]:34 [ bitmap_line::x2#0 ]
Allocated zp[1]:36 [ bitmap_init::$7 ]
Allocated zp[1]:37 [ bitmap_init::$4 ]
Allocated zp[1]:38 [ bitmap_init::$5 ]
Allocated zp[1]:39 [ bitmap_init::$6 ]
Allocated zp[2]:40 [ abs_u16::return#0 ]
Allocated zp[2]:42 [ bitmap_line::dx#0 ]
Allocated zp[2]:44 [ abs_u16::return#1 ]
Allocated zp[2]:46 [ bitmap_line::dy#0 ]
Allocated zp[2]:48 [ sgn_u16::return#0 ]
Allocated zp[2]:50 [ bitmap_line::sx#0 ]
Allocated zp[2]:52 [ sgn_u16::return#1 ]
Allocated zp[2]:54 [ bitmap_line::sy#0 ]
Allocated zp[2]:56 [ memset::end#0 ]
Allocated zp[1]:58 [ abs_u16::$0 ]
Allocated zp[1]:59 [ abs_u16::$1 ]
Allocated zp[1]:60 [ sgn_u16::$0 ]
Allocated zp[1]:61 [ sgn_u16::$1 ]
Allocated zp[2]:62 [ bitmap_plot::plotter#0 ]
Allocated zp[2]:64 [ bitmap_plot::$1 ]
Allocated zp[2]:66 [ bitmap_plot::plotter#1 ]
Allocated zp[1]:68 [ bitmap_plot::$2 ]
Allocated zp[2]:18 [ bitmap_plot::plotter#0 ]
Allocated zp[2]:20 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ]
Allocated zp[1]:24 [ abs_u16::$0 ]
Allocated zp[1]:25 [ abs_u16::$1 ]
Allocated zp[1]:26 [ sgn_u16::$0 ]
Allocated zp[1]:27 [ sgn_u16::$1 ]
Allocated zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 ]
Allocated zp[2]:30 [ bitmap_line::dy#0 ]
Allocated zp[2]:32 [ bitmap_line::dx#0 ]
Allocated zp[2]:34 [ bitmap_line::sy#0 ]
Allocated zp[2]:36 [ bitmap_line::sx#0 ]
Allocated zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated zp[2]:40 [ bitmap_line::x2#0 ]
Allocated zp[2]:42 [ init_screen::c#2 init_screen::c#1 ]
Allocated zp[1]:44 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
Allocated zp[1]:45 [ bitmap_init::x#2 bitmap_init::x#1 ]
Allocated zp[1]:46 [ bitmap_init::y#2 bitmap_init::y#1 ]
Allocated zp[1]:47 [ bitmap_init::$4 ]
Allocated zp[1]:48 [ bitmap_init::$5 ]
Allocated zp[1]:49 [ bitmap_init::$6 ]
Allocated zp[2]:50 [ abs_u16::return#0 ]
Allocated zp[2]:52 [ abs_u16::return#1 ]
Allocated zp[2]:54 [ sgn_u16::return#0 ]
Allocated zp[2]:56 [ sgn_u16::return#1 ]
Allocated zp[2]:58 [ memset::end#0 ]
Allocated zp[1]:60 [ memset::c#4 ]
Allocated zp[2]:61 [ memset::num#2 ]
Allocated zp[2]:63 [ sgn_u16::return#4 ]
Allocated zp[1]:65 [ bitmap_init::$7 ]
Allocated zp[1]:66 [ next#5 next#0 ]
Allocated zp[2]:67 [ memset::str#3 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Equivalence Class zp[1]:37 [ bitmap_init::$4 ] has ALU potential.
Equivalence Class zp[1]:47 [ bitmap_init::$4 ] has ALU potential.
Statement [0] *BORDER_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [1] *BG_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [3] *VICII_MEMORY = (char)(unsigned int)SCREEN&$3fff/$40|(unsigned int)BITMAP&$3fff/$400 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [10] bitmap_line::x2#0 = next#5 [ next#5 bitmap_line::x2#0 ] ( [ next#5 bitmap_line::x2#0 ] { { next#5 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ next#5 next#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:66 [ next#5 next#0 ]
Statement [30] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + (unsigned int)$28*8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( bitmap_init:4 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:5 [ bitmap_init::y#2 bitmap_init::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:46 [ bitmap_init::y#2 bitmap_init::y#1 ]
Statement [42] if(init_screen::c#2!=SCREEN+$400) goto init_screen::@2 [ init_screen::c#2 ] ( init_screen:8 [ init_screen::c#2 ] { } ) always clobbers reg byte a
Statement [44] *init_screen::c#2 = $14 [ init_screen::c#2 ] ( init_screen:8 [ init_screen::c#2 ] { } ) always clobbers reg byte a reg byte y
Statement [46] abs_u16::w#0 = bitmap_line::x2#0 [ bitmap_line::x2#0 abs_u16::w#0 ] ( bitmap_line:11 [ next#5 bitmap_line::x2#0 abs_u16::w#0 ] { { abs_u16::w#0 = abs_u16::w#2 bitmap_line::x2#0 next#5 } { abs_u16::return#0 = abs_u16::return#4 } } ) always clobbers reg byte a
@ -2102,18 +2102,18 @@ Statement [88] bitmap_line::y#2 = bitmap_line::y#15 + bitmap_line::sy#0 [ bitmap
Statement [89] bitmap_line::e1#2 = bitmap_line::e1#1 - bitmap_line::dx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ( bitmap_line:11 [ next#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] { { next#5 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [91] if(bitmap_line::x#15!=bitmap_line::x2#0) goto bitmap_line::@9 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#13 bitmap_line::e1#6 ] ( bitmap_line:11 [ next#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#13 bitmap_line::e1#6 ] { { next#5 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [95] if(memset::num#2<=0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( bitmap_clear:6::memset:36 [ memset::num#2 memset::str#3 memset::c#4 ] { } bitmap_clear:6::memset:38 [ memset::num#2 memset::str#3 memset::c#4 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:22 [ memset::c#4 ]
Removing always clobbered register reg byte a as potential for zp[1]:60 [ memset::c#4 ]
Statement [96] memset::end#0 = (char *)memset::str#3 + memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( bitmap_clear:6::memset:36 [ memset::str#3 memset::c#4 memset::end#0 ] { } bitmap_clear:6::memset:38 [ memset::str#3 memset::c#4 memset::end#0 ] { } ) always clobbers reg byte a
Statement [97] memset::dst#4 = (char *)memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( bitmap_clear:6::memset:36 [ memset::c#4 memset::end#0 memset::dst#4 ] { } bitmap_clear:6::memset:38 [ memset::c#4 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a
Statement [99] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( bitmap_clear:6::memset:36 [ memset::c#4 memset::end#0 memset::dst#2 ] { } bitmap_clear:6::memset:38 [ memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a
Statement [101] *memset::dst#2 = memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( bitmap_clear:6::memset:36 [ memset::c#4 memset::end#0 memset::dst#2 ] { } bitmap_clear:6::memset:38 [ memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:22 [ memset::c#4 ]
Removing always clobbered register reg byte y as potential for zp[1]:60 [ memset::c#4 ]
Statement [107] abs_u16::return#2 = - abs_u16::w#2 [ abs_u16::return#2 ] ( bitmap_line:11::abs_u16:47 [ next#5 bitmap_line::x2#0 abs_u16::return#2 ] { { abs_u16::w#0 = abs_u16::w#2 bitmap_line::x2#0 next#5 } { abs_u16::return#0 = abs_u16::return#4 } } bitmap_line:11::abs_u16:50 [ next#5 bitmap_line::x2#0 bitmap_line::dx#0 abs_u16::return#2 ] { { next#5 = bitmap_line::x2#0 } { abs_u16::return#1 = abs_u16::return#4 } } ) always clobbers reg byte a
Statement [118] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bitmap_plot_ylo[bitmap_plot::y#4] [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( bitmap_line:11::bitmap_plot:67 [ next#5 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:11::bitmap_plot:78 [ next#5 bitmap_plot::x#4 bitmap_plot::plotter#0 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:11::bitmap_plot:84 [ next#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:11::bitmap_plot:93 [ next#5 bitmap_plot::x#4 bitmap_plot::plotter#0 ] { { next#5 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [119] bitmap_plot::$1 = bitmap_plot::x#4 & $fff8 [ bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( bitmap_line:11::bitmap_plot:67 [ next#5 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:11::bitmap_plot:78 [ next#5 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:11::bitmap_plot:84 [ next#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:11::bitmap_plot:93 [ next#5 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#5 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [120] bitmap_plot::plotter#1 = (char *)bitmap_plot::plotter#0 + bitmap_plot::$1 [ bitmap_plot::x#4 bitmap_plot::plotter#1 ] ( bitmap_line:11::bitmap_plot:67 [ next#5 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:11::bitmap_plot:78 [ next#5 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:11::bitmap_plot:84 [ next#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:11::bitmap_plot:93 [ next#5 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { next#5 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [122] *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$2] [ ] ( bitmap_line:11::bitmap_plot:67 [ next#5 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:11::bitmap_plot:78 [ next#5 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:11::bitmap_plot:84 [ next#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:11::bitmap_plot:93 [ next#5 ] { { next#5 = bitmap_line::x2#0 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:2 [ next#5 next#0 ]
Removing always clobbered register reg byte y as potential for zp[1]:66 [ next#5 next#0 ]
Statement [0] *BORDER_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [1] *BG_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 [ ] ( [ ] { } ) always clobbers reg byte a
@ -2163,113 +2163,113 @@ Statement [118] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bi
Statement [119] bitmap_plot::$1 = bitmap_plot::x#4 & $fff8 [ bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( bitmap_line:11::bitmap_plot:67 [ next#5 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:11::bitmap_plot:78 [ next#5 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:11::bitmap_plot:84 [ next#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:11::bitmap_plot:93 [ next#5 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#5 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [120] bitmap_plot::plotter#1 = (char *)bitmap_plot::plotter#0 + bitmap_plot::$1 [ bitmap_plot::x#4 bitmap_plot::plotter#1 ] ( bitmap_line:11::bitmap_plot:67 [ next#5 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:11::bitmap_plot:78 [ next#5 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:11::bitmap_plot:84 [ next#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:11::bitmap_plot:93 [ next#5 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { next#5 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [122] *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$2] [ ] ( bitmap_line:11::bitmap_plot:67 [ next#5 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:11::bitmap_plot:78 [ next#5 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:11::bitmap_plot:84 [ next#5 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 ] { { next#5 = bitmap_line::x2#0 } { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:11::bitmap_plot:93 [ next#5 ] { { next#5 = bitmap_line::x2#0 } } ) always clobbers reg byte a reg byte y
Potential registers zp[1]:2 [ next#5 next#0 ] : zp[1]:2 , reg byte x ,
Potential registers zp[1]:3 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:5 , reg byte x , reg byte y ,
Potential registers zp[2]:6 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:6 ,
Potential registers zp[2]:8 [ init_screen::c#2 init_screen::c#1 ] : zp[2]:8 ,
Potential registers zp[2]:10 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] : zp[2]:10 ,
Potential registers zp[2]:12 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] : zp[2]:12 ,
Potential registers zp[2]:14 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] : zp[2]:14 ,
Potential registers zp[1]:66 [ next#5 next#0 ] : zp[1]:66 , reg byte x ,
Potential registers zp[1]:44 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:45 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:46 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:46 , reg byte x , reg byte y ,
Potential registers zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:38 ,
Potential registers zp[2]:42 [ init_screen::c#2 init_screen::c#1 ] : zp[2]:42 ,
Potential registers zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] : zp[2]:14 ,
Potential registers zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] : zp[2]:10 ,
Potential registers zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] : zp[2]:12 ,
Potential registers zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] : zp[2]:16 ,
Potential registers zp[2]:18 [ memset::num#2 ] : zp[2]:18 ,
Potential registers zp[2]:20 [ memset::str#3 ] : zp[2]:20 ,
Potential registers zp[1]:22 [ memset::c#4 ] : zp[1]:22 , reg byte x ,
Potential registers zp[2]:23 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:23 ,
Potential registers zp[2]:25 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] : zp[2]:25 ,
Potential registers zp[2]:27 [ sgn_u16::w#2 sgn_u16::w#0 ] : zp[2]:27 ,
Potential registers zp[2]:29 [ sgn_u16::return#4 ] : zp[2]:29 ,
Potential registers zp[1]:31 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:32 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] : zp[2]:32 ,
Potential registers zp[2]:34 [ bitmap_line::x2#0 ] : zp[2]:34 ,
Potential registers zp[1]:36 [ bitmap_init::$7 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:37 [ bitmap_init::$4 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , reg byte alu ,
Potential registers zp[1]:38 [ bitmap_init::$5 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:39 [ bitmap_init::$6 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:40 [ abs_u16::return#0 ] : zp[2]:40 ,
Potential registers zp[2]:42 [ bitmap_line::dx#0 ] : zp[2]:42 ,
Potential registers zp[2]:44 [ abs_u16::return#1 ] : zp[2]:44 ,
Potential registers zp[2]:46 [ bitmap_line::dy#0 ] : zp[2]:46 ,
Potential registers zp[2]:48 [ sgn_u16::return#0 ] : zp[2]:48 ,
Potential registers zp[2]:50 [ bitmap_line::sx#0 ] : zp[2]:50 ,
Potential registers zp[2]:52 [ sgn_u16::return#1 ] : zp[2]:52 ,
Potential registers zp[2]:54 [ bitmap_line::sy#0 ] : zp[2]:54 ,
Potential registers zp[2]:56 [ memset::end#0 ] : zp[2]:56 ,
Potential registers zp[1]:58 [ abs_u16::$0 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:59 [ abs_u16::$1 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:60 [ sgn_u16::$0 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:61 [ sgn_u16::$1 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:62 [ bitmap_plot::plotter#0 ] : zp[2]:62 ,
Potential registers zp[2]:64 [ bitmap_plot::$1 ] : zp[2]:64 ,
Potential registers zp[2]:66 [ bitmap_plot::plotter#1 ] : zp[2]:66 ,
Potential registers zp[1]:68 [ bitmap_plot::$2 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:61 [ memset::num#2 ] : zp[2]:61 ,
Potential registers zp[2]:67 [ memset::str#3 ] : zp[2]:67 ,
Potential registers zp[1]:60 [ memset::c#4 ] : zp[1]:60 , reg byte x ,
Potential registers zp[2]:20 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:20 ,
Potential registers zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] : zp[2]:22 ,
Potential registers zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 ] : zp[2]:28 ,
Potential registers zp[2]:63 [ sgn_u16::return#4 ] : zp[2]:63 ,
Potential registers zp[1]:2 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] : zp[2]:8 ,
Potential registers zp[2]:40 [ bitmap_line::x2#0 ] : zp[2]:40 ,
Potential registers zp[1]:65 [ bitmap_init::$7 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:47 [ bitmap_init::$4 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , reg byte alu ,
Potential registers zp[1]:48 [ bitmap_init::$5 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:49 [ bitmap_init::$6 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:50 [ abs_u16::return#0 ] : zp[2]:50 ,
Potential registers zp[2]:32 [ bitmap_line::dx#0 ] : zp[2]:32 ,
Potential registers zp[2]:52 [ abs_u16::return#1 ] : zp[2]:52 ,
Potential registers zp[2]:30 [ bitmap_line::dy#0 ] : zp[2]:30 ,
Potential registers zp[2]:54 [ sgn_u16::return#0 ] : zp[2]:54 ,
Potential registers zp[2]:36 [ bitmap_line::sx#0 ] : zp[2]:36 ,
Potential registers zp[2]:56 [ sgn_u16::return#1 ] : zp[2]:56 ,
Potential registers zp[2]:34 [ bitmap_line::sy#0 ] : zp[2]:34 ,
Potential registers zp[2]:58 [ memset::end#0 ] : zp[2]:58 ,
Potential registers zp[1]:24 [ abs_u16::$0 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:25 [ abs_u16::$1 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:26 [ sgn_u16::$0 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:27 [ sgn_u16::$1 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:18 [ bitmap_plot::plotter#0 ] : zp[2]:18 ,
Potential registers zp[2]:3 [ bitmap_plot::$1 ] : zp[2]:3 ,
Potential registers zp[2]:6 [ bitmap_plot::plotter#1 ] : zp[2]:6 ,
Potential registers zp[1]:5 [ bitmap_plot::$2 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [bitmap_plot] 260,311: zp[1]:31 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ] 200,002: zp[2]:64 [ bitmap_plot::$1 ] 200,002: zp[1]:68 [ bitmap_plot::$2 ] 150,001.5: zp[2]:66 [ bitmap_plot::plotter#1 ] 75,129.25: zp[2]:32 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] 50,000.5: zp[2]:62 [ bitmap_plot::plotter#0 ]
Uplift Scope [bitmap_line] 69,036.46: zp[2]:12 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] 55,005.5: zp[2]:14 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] 52,560.77: zp[2]:10 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] 52,560.77: zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] 868.77: zp[2]:46 [ bitmap_line::dy#0 ] 800.18: zp[2]:42 [ bitmap_line::dx#0 ] 773.19: zp[2]:54 [ bitmap_line::sy#0 ] 693.21: zp[2]:50 [ bitmap_line::sx#0 ] 340.47: zp[2]:34 [ bitmap_line::x2#0 ]
Uplift Scope [abs_u16] 3,531: zp[2]:25 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] 2,002: zp[1]:58 [ abs_u16::$0 ] 2,002: zp[1]:59 [ abs_u16::$1 ] 202: zp[2]:40 [ abs_u16::return#0 ] 202: zp[2]:44 [ abs_u16::return#1 ]
Uplift Scope [sgn_u16] 2,002: zp[1]:60 [ sgn_u16::$0 ] 2,002: zp[1]:61 [ sgn_u16::$1 ] 1,304: zp[2]:27 [ sgn_u16::w#2 sgn_u16::w#0 ] 202: zp[2]:48 [ sgn_u16::return#0 ] 202: zp[2]:52 [ sgn_u16::return#1 ] 50.5: zp[2]:29 [ sgn_u16::return#4 ]
Uplift Scope [memset] 3,572.33: zp[2]:23 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 183.67: zp[2]:56 [ memset::end#0 ] 125.12: zp[1]:22 [ memset::c#4 ] 101: zp[2]:18 [ memset::num#2 ] 0: zp[2]:20 [ memset::str#3 ]
Uplift Scope [bitmap_init] 366.12: zp[2]:6 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 319.83: zp[1]:3 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 202: zp[1]:4 [ bitmap_init::x#2 bitmap_init::x#1 ] 202: zp[1]:5 [ bitmap_init::y#2 bitmap_init::y#1 ] 202: zp[1]:37 [ bitmap_init::$4 ] 202: zp[1]:38 [ bitmap_init::$5 ] 202: zp[1]:39 [ bitmap_init::$6 ] 50.5: zp[1]:36 [ bitmap_init::$7 ]
Uplift Scope [init_screen] 336.67: zp[2]:8 [ init_screen::c#2 init_screen::c#1 ]
Uplift Scope [] 33: zp[1]:2 [ next#5 next#0 ]
Uplift Scope [bitmap_plot] 260,311: zp[1]:2 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ] 200,002: zp[2]:3 [ bitmap_plot::$1 ] 200,002: zp[1]:5 [ bitmap_plot::$2 ] 150,001.5: zp[2]:6 [ bitmap_plot::plotter#1 ] 75,129.25: zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] 50,000.5: zp[2]:18 [ bitmap_plot::plotter#0 ]
Uplift Scope [bitmap_line] 69,036.46: zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] 55,005.5: zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] 52,560.77: zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] 52,560.77: zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] 868.77: zp[2]:30 [ bitmap_line::dy#0 ] 800.18: zp[2]:32 [ bitmap_line::dx#0 ] 773.19: zp[2]:34 [ bitmap_line::sy#0 ] 693.21: zp[2]:36 [ bitmap_line::sx#0 ] 340.47: zp[2]:40 [ bitmap_line::x2#0 ]
Uplift Scope [abs_u16] 3,531: zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] 2,002: zp[1]:24 [ abs_u16::$0 ] 2,002: zp[1]:25 [ abs_u16::$1 ] 202: zp[2]:50 [ abs_u16::return#0 ] 202: zp[2]:52 [ abs_u16::return#1 ]
Uplift Scope [sgn_u16] 2,002: zp[1]:26 [ sgn_u16::$0 ] 2,002: zp[1]:27 [ sgn_u16::$1 ] 1,304: zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 ] 202: zp[2]:54 [ sgn_u16::return#0 ] 202: zp[2]:56 [ sgn_u16::return#1 ] 50.5: zp[2]:63 [ sgn_u16::return#4 ]
Uplift Scope [memset] 3,572.33: zp[2]:20 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 183.67: zp[2]:58 [ memset::end#0 ] 125.12: zp[1]:60 [ memset::c#4 ] 101: zp[2]:61 [ memset::num#2 ] 0: zp[2]:67 [ memset::str#3 ]
Uplift Scope [bitmap_init] 366.12: zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 319.83: zp[1]:44 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 202: zp[1]:45 [ bitmap_init::x#2 bitmap_init::x#1 ] 202: zp[1]:46 [ bitmap_init::y#2 bitmap_init::y#1 ] 202: zp[1]:47 [ bitmap_init::$4 ] 202: zp[1]:48 [ bitmap_init::$5 ] 202: zp[1]:49 [ bitmap_init::$6 ] 50.5: zp[1]:65 [ bitmap_init::$7 ]
Uplift Scope [init_screen] 336.67: zp[2]:42 [ init_screen::c#2 init_screen::c#1 ]
Uplift Scope [] 33: zp[1]:66 [ next#5 next#0 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
Uplift Scope [bitmap_clear]
Uplift Scope [main]
Uplifting [bitmap_plot] best 36707 combination reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ] zp[2]:64 [ bitmap_plot::$1 ] reg byte x [ bitmap_plot::$2 ] zp[2]:66 [ bitmap_plot::plotter#1 ] zp[2]:32 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] zp[2]:62 [ bitmap_plot::plotter#0 ]
Uplifting [bitmap_line] best 36707 combination zp[2]:12 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] zp[2]:14 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] zp[2]:10 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] zp[2]:46 [ bitmap_line::dy#0 ] zp[2]:42 [ bitmap_line::dx#0 ] zp[2]:54 [ bitmap_line::sy#0 ] zp[2]:50 [ bitmap_line::sx#0 ] zp[2]:34 [ bitmap_line::x2#0 ]
Uplifting [abs_u16] best 36697 combination zp[2]:25 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] reg byte a [ abs_u16::$0 ] reg byte a [ abs_u16::$1 ] zp[2]:40 [ abs_u16::return#0 ] zp[2]:44 [ abs_u16::return#1 ]
Uplifting [sgn_u16] best 36687 combination reg byte a [ sgn_u16::$0 ] reg byte a [ sgn_u16::$1 ] zp[2]:27 [ sgn_u16::w#2 sgn_u16::w#0 ] zp[2]:48 [ sgn_u16::return#0 ] zp[2]:52 [ sgn_u16::return#1 ] zp[2]:29 [ sgn_u16::return#4 ]
Uplifting [memset] best 36671 combination zp[2]:23 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:56 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:18 [ memset::num#2 ] zp[2]:20 [ memset::str#3 ]
Uplifting [bitmap_init] best 36221 combination zp[2]:6 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:38 [ bitmap_init::$5 ] zp[1]:39 [ bitmap_init::$6 ] zp[1]:36 [ bitmap_init::$7 ]
Uplifting [bitmap_plot] best 36707 combination reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ] zp[2]:3 [ bitmap_plot::$1 ] reg byte x [ bitmap_plot::$2 ] zp[2]:6 [ bitmap_plot::plotter#1 ] zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] zp[2]:18 [ bitmap_plot::plotter#0 ]
Uplifting [bitmap_line] best 36707 combination zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] zp[2]:30 [ bitmap_line::dy#0 ] zp[2]:32 [ bitmap_line::dx#0 ] zp[2]:34 [ bitmap_line::sy#0 ] zp[2]:36 [ bitmap_line::sx#0 ] zp[2]:40 [ bitmap_line::x2#0 ]
Uplifting [abs_u16] best 36697 combination zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] reg byte a [ abs_u16::$0 ] reg byte a [ abs_u16::$1 ] zp[2]:50 [ abs_u16::return#0 ] zp[2]:52 [ abs_u16::return#1 ]
Uplifting [sgn_u16] best 36687 combination reg byte a [ sgn_u16::$0 ] reg byte a [ sgn_u16::$1 ] zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 ] zp[2]:54 [ sgn_u16::return#0 ] zp[2]:56 [ sgn_u16::return#1 ] zp[2]:63 [ sgn_u16::return#4 ]
Uplifting [memset] best 36671 combination zp[2]:20 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:58 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:61 [ memset::num#2 ] zp[2]:67 [ memset::str#3 ]
Uplifting [bitmap_init] best 36221 combination zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:48 [ bitmap_init::$5 ] zp[1]:49 [ bitmap_init::$6 ] zp[1]:65 [ bitmap_init::$7 ]
Limited combination testing to 100 combinations of 15360 possible.
Uplifting [init_screen] best 36221 combination zp[2]:8 [ init_screen::c#2 init_screen::c#1 ]
Uplifting [] best 36221 combination zp[1]:2 [ next#5 next#0 ]
Uplifting [init_screen] best 36221 combination zp[2]:42 [ init_screen::c#2 init_screen::c#1 ]
Uplifting [] best 36221 combination zp[1]:66 [ next#5 next#0 ]
Uplifting [MOS6526_CIA] best 36221 combination
Uplifting [MOS6569_VICII] best 36221 combination
Uplifting [MOS6581_SID] best 36221 combination
Uplifting [bitmap_clear] best 36221 combination
Uplifting [main] best 36221 combination
Attempting to uplift remaining variables inzp[1]:38 [ bitmap_init::$5 ]
Attempting to uplift remaining variables inzp[1]:48 [ bitmap_init::$5 ]
Uplifting [bitmap_init] best 36161 combination reg byte a [ bitmap_init::$5 ]
Attempting to uplift remaining variables inzp[1]:39 [ bitmap_init::$6 ]
Attempting to uplift remaining variables inzp[1]:49 [ bitmap_init::$6 ]
Uplifting [bitmap_init] best 36101 combination reg byte a [ bitmap_init::$6 ]
Attempting to uplift remaining variables inzp[1]:36 [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 36101 combination zp[1]:36 [ bitmap_init::$7 ]
Attempting to uplift remaining variables inzp[1]:2 [ next#5 next#0 ]
Uplifting [] best 36101 combination zp[1]:2 [ next#5 next#0 ]
Coalescing zero page register [ zp[2]:12 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] ] with [ zp[2]:32 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] ] - score: 3
Coalescing zero page register [ zp[2]:18 [ memset::num#2 ] ] with [ zp[2]:56 [ memset::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:20 [ memset::str#3 ] ] with [ zp[2]:23 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:25 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] ] with [ zp[2]:40 [ abs_u16::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:25 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 ] ] with [ zp[2]:44 [ abs_u16::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:29 [ sgn_u16::return#4 ] ] with [ zp[2]:48 [ sgn_u16::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:29 [ sgn_u16::return#4 sgn_u16::return#0 ] ] with [ zp[2]:52 [ sgn_u16::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:62 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:66 [ bitmap_plot::plotter#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:25 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 ] ] with [ zp[2]:46 [ bitmap_line::dy#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:29 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 ] ] with [ zp[2]:54 [ bitmap_line::sy#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:8 [ init_screen::c#2 init_screen::c#1 ] ] with [ zp[2]:6 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ]
Coalescing zero page register [ zp[2]:18 [ memset::num#2 memset::end#0 ] ] with [ zp[2]:10 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] ]
Coalescing zero page register [ zp[2]:20 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:12 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] ]
Coalescing zero page register [ zp[1]:36 [ bitmap_init::$7 ] ] with [ zp[1]:2 [ next#5 next#0 ] ]
Coalescing zero page register [ zp[2]:62 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:27 [ sgn_u16::w#2 sgn_u16::w#0 ] ]
Coalescing zero page register [ zp[2]:14 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] ] with [ zp[2]:8 [ init_screen::c#2 init_screen::c#1 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ]
Allocated (was zp[2]:14) zp[2]:2 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 init_screen::c#2 init_screen::c#1 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated (was zp[2]:16) zp[2]:4 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
Allocated (was zp[2]:18) zp[2]:6 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
Allocated (was zp[2]:20) zp[2]:8 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
Allocated (was zp[2]:25) zp[2]:10 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
Allocated (was zp[2]:29) zp[2]:12 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
Allocated (was zp[2]:34) zp[2]:14 [ bitmap_line::x2#0 ]
Allocated (was zp[1]:36) zp[1]:16 [ bitmap_init::$7 next#5 next#0 ]
Allocated (was zp[2]:42) zp[2]:17 [ bitmap_line::dx#0 ]
Allocated (was zp[2]:50) zp[2]:19 [ bitmap_line::sx#0 ]
Allocated (was zp[2]:62) zp[2]:21 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 ]
Allocated (was zp[2]:64) zp[2]:23 [ bitmap_plot::$1 ]
Attempting to uplift remaining variables inzp[1]:65 [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 36101 combination zp[1]:65 [ bitmap_init::$7 ]
Attempting to uplift remaining variables inzp[1]:66 [ next#5 next#0 ]
Uplifting [] best 36101 combination zp[1]:66 [ next#5 next#0 ]
Coalescing zero page register [ zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] ] with [ zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] ] - score: 3
Coalescing zero page register [ zp[2]:61 [ memset::num#2 ] ] with [ zp[2]:58 [ memset::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:67 [ memset::str#3 ] ] with [ zp[2]:20 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] ] with [ zp[2]:50 [ abs_u16::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 ] ] with [ zp[2]:52 [ abs_u16::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:63 [ sgn_u16::return#4 ] ] with [ zp[2]:54 [ sgn_u16::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:63 [ sgn_u16::return#4 sgn_u16::return#0 ] ] with [ zp[2]:56 [ sgn_u16::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:18 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:6 [ bitmap_plot::plotter#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 ] ] with [ zp[2]:30 [ bitmap_line::dy#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:63 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 ] ] with [ zp[2]:34 [ bitmap_line::sy#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:42 [ init_screen::c#2 init_screen::c#1 ] ] with [ zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ]
Coalescing zero page register [ zp[2]:61 [ memset::num#2 memset::end#0 ] ] with [ zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] ]
Coalescing zero page register [ zp[2]:67 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] ]
Coalescing zero page register [ zp[1]:65 [ bitmap_init::$7 ] ] with [ zp[1]:66 [ next#5 next#0 ] ]
Coalescing zero page register [ zp[2]:18 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 ] ]
Coalescing zero page register [ zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] ] with [ zp[2]:42 [ init_screen::c#2 init_screen::c#1 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ]
Allocated (was zp[2]:18) zp[2]:2 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 ]
Allocated (was zp[2]:3) zp[2]:4 [ bitmap_plot::$1 ]
Allocated (was zp[2]:67) zp[2]:6 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
Allocated (was zp[2]:12) zp[2]:8 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 init_screen::c#2 init_screen::c#1 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated (was zp[2]:61) zp[2]:10 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
Allocated (was zp[2]:16) zp[2]:12 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
Allocated (was zp[2]:22) zp[2]:14 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
Allocated (was zp[2]:63) zp[2]:16 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
Allocated (was zp[2]:32) zp[2]:18 [ bitmap_line::dx#0 ]
Allocated (was zp[2]:36) zp[2]:20 [ bitmap_line::sx#0 ]
Allocated (was zp[2]:40) zp[2]:22 [ bitmap_line::x2#0 ]
Allocated (was zp[1]:65) zp[1]:24 [ bitmap_init::$7 next#5 next#0 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -2311,7 +2311,7 @@ ASSEMBLER BEFORE OPTIMIZATION
.label VICII_MEMORY = $d018
.label SCREEN = $400
.label BITMAP = $2000
.label next = $10
.label next = $18
.segment Code
// main
main: {
@ -2378,8 +2378,8 @@ main: {
// Initialize bitmap plotting tables
// void bitmap_init(char *gfx, char *screen)
bitmap_init: {
.label __7 = $10
.label yoffs = 2
.label __7 = $18
.label yoffs = 8
// [14] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1]
__b1_from_bitmap_init:
// [14] phi bitmap_init::x#2 = 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1
@ -2537,7 +2537,7 @@ bitmap_clear: {
}
// init_screen
init_screen: {
.label c = 2
.label c = 8
// [41] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1]
__b1_from_init_screen:
// [41] phi init_screen::c#2 = SCREEN [phi:init_screen->init_screen::@1#0] -- pbuz1=pbuc1
@ -2578,20 +2578,20 @@ init_screen: {
}
// bitmap_line
// Draw a line on the bitmap using bresenhams algorithm
// void bitmap_line(unsigned int x1, unsigned int y1, __zp($e) unsigned int x2, unsigned int y2)
// void bitmap_line(unsigned int x1, unsigned int y1, __zp($16) unsigned int x2, unsigned int y2)
bitmap_line: {
.const x1 = 0
.const y1 = 0
.const y2 = $64
.label dx = $11
.label dy = $a
.label sx = $13
.label sy = $c
.label e1 = 4
.label e = 6
.label y = 2
.label x = 8
.label x2 = $e
.label dx = $12
.label dy = $e
.label sx = $14
.label sy = $10
.label e1 = $c
.label e = $a
.label y = 8
.label x = 6
.label x2 = $16
// [46] abs_u16::w#0 = bitmap_line::x2#0 -- vwuz1=vwuz2
lda.z x2
sta.z abs_u16.w
@ -2931,12 +2931,12 @@ bitmap_line: {
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp(8) void *str, __register(X) char c, __zp(6) unsigned int num)
// void * memset(__zp(6) void *str, __register(X) char c, __zp($a) unsigned int num)
memset: {
.label end = 6
.label dst = 8
.label num = 6
.label str = 8
.label end = $a
.label dst = 6
.label num = $a
.label str = 6
// [95] if(memset::num#2<=0) goto memset::@return -- vwuz1_le_0_then_la1
lda.z num
bne !+
@ -2989,10 +2989,10 @@ memset: {
}
// abs_u16
// Get the absolute value of a 16-bit unsigned number treated as a signed number.
// __zp($a) unsigned int abs_u16(__zp($a) unsigned int w)
// __zp($e) unsigned int abs_u16(__zp($e) unsigned int w)
abs_u16: {
.label w = $a
.label return = $a
.label w = $e
.label return = $e
// [104] abs_u16::$0 = byte1 abs_u16::w#2 -- vbuaa=_byte1_vwuz1
lda.z w+1
// [105] abs_u16::$1 = abs_u16::$0 & $80 -- vbuaa=vbuaa_band_vbuc1
@ -3024,10 +3024,10 @@ abs_u16: {
// sgn_u16
// Get the sign of a 16-bit unsigned number treated as a signed number.
// Returns unsigned -1 if the number is
// __zp($c) unsigned int sgn_u16(__zp($15) unsigned int w)
// __zp($10) unsigned int sgn_u16(__zp(2) unsigned int w)
sgn_u16: {
.label w = $15
.label return = $c
.label w = 2
.label return = $10
// [111] sgn_u16::$0 = byte1 sgn_u16::w#2 -- vbuaa=_byte1_vwuz1
lda.z w+1
// [112] sgn_u16::$1 = sgn_u16::$0 & $80 -- vbuaa=vbuaa_band_vbuc1
@ -3063,11 +3063,11 @@ sgn_u16: {
}
// bitmap_plot
// Plot a single dot in the bitmap
// void bitmap_plot(__zp(8) unsigned int x, __register(X) char y)
// void bitmap_plot(__zp(6) unsigned int x, __register(X) char y)
bitmap_plot: {
.label __1 = $17
.label plotter = $15
.label x = 8
.label __1 = 4
.label plotter = 2
.label x = 6
// [118] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bitmap_plot_ylo[bitmap_plot::y#4] -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx
lda bitmap_plot_yhi,x
sta.z plotter+1
@ -3275,13 +3275,13 @@ unsigned int abs_u16(unsigned int w)
char abs_u16::$0 // reg byte a 2002.0
char abs_u16::$1 // reg byte a 2002.0
unsigned int abs_u16::return
unsigned int abs_u16::return#0 // return zp[2]:10 202.0
unsigned int abs_u16::return#1 // return zp[2]:10 202.0
unsigned int abs_u16::return#2 // return zp[2]:10 2002.0
unsigned int abs_u16::return#4 // return zp[2]:10 551.0
unsigned int abs_u16::return#0 // return zp[2]:14 202.0
unsigned int abs_u16::return#1 // return zp[2]:14 202.0
unsigned int abs_u16::return#2 // return zp[2]:14 2002.0
unsigned int abs_u16::return#4 // return zp[2]:14 551.0
unsigned int abs_u16::w
unsigned int abs_u16::w#0 // w zp[2]:10 202.0
unsigned int abs_u16::w#2 // w zp[2]:10 776.0
unsigned int abs_u16::w#0 // w zp[2]:14 202.0
unsigned int abs_u16::w#2 // w zp[2]:14 776.0
void bitmap_clear(char bgcol , char fgcol)
char bitmap_clear::bgcol
char bitmap_clear::col
@ -3292,7 +3292,7 @@ void bitmap_init(char *gfx , char *screen)
char bitmap_init::$4 // reg byte a 202.0
char bitmap_init::$5 // reg byte a 202.0
char bitmap_init::$6 // reg byte a 202.0
char bitmap_init::$7 // zp[1]:16 50.5
char bitmap_init::$7 // zp[1]:24 50.5
char bitmap_init::bits
char bitmap_init::bits#1 // reg byte a 101.0
char bitmap_init::bits#3 // reg byte a 151.5
@ -3306,63 +3306,63 @@ char bitmap_init::y
char bitmap_init::y#1 // reg byte x 151.5
char bitmap_init::y#2 // reg byte x 50.5
char *bitmap_init::yoffs
char *bitmap_init::yoffs#1 // yoffs zp[2]:2 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:2 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:2 101.0
char *bitmap_init::yoffs#1 // yoffs zp[2]:8 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:8 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:8 101.0
void bitmap_line(unsigned int x1 , unsigned int y1 , unsigned int x2 , unsigned int y2)
unsigned int bitmap_line::dx
unsigned int bitmap_line::dx#0 // dx zp[2]:17 800.1842105263158
unsigned int bitmap_line::dx#0 // dx zp[2]:18 800.1842105263158
unsigned int bitmap_line::dy
unsigned int bitmap_line::dy#0 // dy zp[2]:10 868.7714285714285
unsigned int bitmap_line::dy#0 // dy zp[2]:14 868.7714285714285
unsigned int bitmap_line::e
unsigned int bitmap_line::e#0 // e zp[2]:6 202.0
unsigned int bitmap_line::e#1 // e zp[2]:6 13334.666666666666
unsigned int bitmap_line::e#2 // e zp[2]:6 20002.0
unsigned int bitmap_line::e#3 // e zp[2]:6 4020.6000000000004
unsigned int bitmap_line::e#6 // e zp[2]:6 15001.5
unsigned int bitmap_line::e#0 // e zp[2]:10 202.0
unsigned int bitmap_line::e#1 // e zp[2]:10 13334.666666666666
unsigned int bitmap_line::e#2 // e zp[2]:10 20002.0
unsigned int bitmap_line::e#3 // e zp[2]:10 4020.6000000000004
unsigned int bitmap_line::e#6 // e zp[2]:10 15001.5
unsigned int bitmap_line::e1
unsigned int bitmap_line::e1#0 // e1 zp[2]:4 202.0
unsigned int bitmap_line::e1#1 // e1 zp[2]:4 13334.666666666666
unsigned int bitmap_line::e1#2 // e1 zp[2]:4 20002.0
unsigned int bitmap_line::e1#3 // e1 zp[2]:4 4020.6000000000004
unsigned int bitmap_line::e1#6 // e1 zp[2]:4 15001.5
unsigned int bitmap_line::e1#0 // e1 zp[2]:12 202.0
unsigned int bitmap_line::e1#1 // e1 zp[2]:12 13334.666666666666
unsigned int bitmap_line::e1#2 // e1 zp[2]:12 20002.0
unsigned int bitmap_line::e1#3 // e1 zp[2]:12 4020.6000000000004
unsigned int bitmap_line::e1#6 // e1 zp[2]:12 15001.5
unsigned int bitmap_line::sx
unsigned int bitmap_line::sx#0 // sx zp[2]:19 693.2068965517242
unsigned int bitmap_line::sx#0 // sx zp[2]:20 693.2068965517242
unsigned int bitmap_line::sy
unsigned int bitmap_line::sy#0 // sy zp[2]:12 773.1923076923076
unsigned int bitmap_line::sy#0 // sy zp[2]:16 773.1923076923076
unsigned int bitmap_line::x
unsigned int bitmap_line::x#1 // x zp[2]:8 10001.0
unsigned int bitmap_line::x#12 // x zp[2]:8 20002.0
unsigned int bitmap_line::x#13 // x zp[2]:8 5714.857142857143
unsigned int bitmap_line::x#15 // x zp[2]:8 5714.857142857143
unsigned int bitmap_line::x#6 // x zp[2]:8 20103.0
unsigned int bitmap_line::x#7 // x zp[2]:8 7500.75
unsigned int bitmap_line::x#1 // x zp[2]:6 10001.0
unsigned int bitmap_line::x#12 // x zp[2]:6 20002.0
unsigned int bitmap_line::x#13 // x zp[2]:6 5714.857142857143
unsigned int bitmap_line::x#15 // x zp[2]:6 5714.857142857143
unsigned int bitmap_line::x#6 // x zp[2]:6 20103.0
unsigned int bitmap_line::x#7 // x zp[2]:6 7500.75
unsigned int bitmap_line::x1
__constant unsigned int bitmap_line::x1#0 = 0 // x1
unsigned int bitmap_line::x2
unsigned int bitmap_line::x2#0 // x2 zp[2]:14 340.4666666666667
unsigned int bitmap_line::x2#0 // x2 zp[2]:22 340.4666666666667
unsigned int bitmap_line::y
unsigned int bitmap_line::y#1 // y zp[2]:2 5714.857142857143
unsigned int bitmap_line::y#13 // y zp[2]:2 20002.0
unsigned int bitmap_line::y#15 // y zp[2]:2 4286.142857142857
unsigned int bitmap_line::y#2 // y zp[2]:2 10001.0
unsigned int bitmap_line::y#4 // y zp[2]:2 5000.5
unsigned int bitmap_line::y#7 // y zp[2]:2 10001.0
unsigned int bitmap_line::y#1 // y zp[2]:8 5714.857142857143
unsigned int bitmap_line::y#13 // y zp[2]:8 20002.0
unsigned int bitmap_line::y#15 // y zp[2]:8 4286.142857142857
unsigned int bitmap_line::y#2 // y zp[2]:8 10001.0
unsigned int bitmap_line::y#4 // y zp[2]:8 5000.5
unsigned int bitmap_line::y#7 // y zp[2]:8 10001.0
unsigned int bitmap_line::y1
__constant unsigned int bitmap_line::y1#0 = 0 // y1
unsigned int bitmap_line::y2
__constant unsigned int bitmap_line::y2#0 = $64 // y2
void bitmap_plot(unsigned int x , char y)
unsigned int bitmap_plot::$1 // zp[2]:23 200002.0
unsigned int bitmap_plot::$1 // zp[2]:4 200002.0
char bitmap_plot::$2 // reg byte x 200002.0
char *bitmap_plot::plotter
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:21 50000.5
char *bitmap_plot::plotter#1 // plotter zp[2]:21 150001.5
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:2 50000.5
char *bitmap_plot::plotter#1 // plotter zp[2]:2 150001.5
unsigned int bitmap_plot::x
unsigned int bitmap_plot::x#1 // x zp[2]:8 10001.0
unsigned int bitmap_plot::x#2 // x zp[2]:8 101.0
unsigned int bitmap_plot::x#3 // x zp[2]:8 10001.0
unsigned int bitmap_plot::x#4 // x zp[2]:8 55026.25
unsigned int bitmap_plot::x#1 // x zp[2]:6 10001.0
unsigned int bitmap_plot::x#2 // x zp[2]:6 101.0
unsigned int bitmap_plot::x#3 // x zp[2]:6 10001.0
unsigned int bitmap_plot::x#4 // x zp[2]:6 55026.25
char bitmap_plot::y
char bitmap_plot::y#1 // reg byte x 20002.0
char bitmap_plot::y#2 // reg byte x 202.0
@ -3374,61 +3374,61 @@ __constant const char bitmap_plot_ylo[$100] = { fill( $100, 0) }
char *bitmap_screen
void init_screen()
char *init_screen::c
char *init_screen::c#1 // c zp[2]:2 202.0
char *init_screen::c#2 // c zp[2]:2 134.66666666666666
char *init_screen::c#1 // c zp[2]:8 202.0
char *init_screen::c#2 // c zp[2]:8 134.66666666666666
void main()
void * memset(void *str , char c , unsigned int num)
char memset::c
char memset::c#4 // reg byte x 125.125
char *memset::dst
char *memset::dst#1 // dst zp[2]:8 2002.0
char *memset::dst#2 // dst zp[2]:8 1368.3333333333335
char *memset::dst#4 // dst zp[2]:8 202.0
char *memset::dst#1 // dst zp[2]:6 2002.0
char *memset::dst#2 // dst zp[2]:6 1368.3333333333335
char *memset::dst#4 // dst zp[2]:6 202.0
char *memset::end
char *memset::end#0 // end zp[2]:6 183.66666666666669
char *memset::end#0 // end zp[2]:10 183.66666666666669
unsigned int memset::num
unsigned int memset::num#2 // num zp[2]:6 101.0
unsigned int memset::num#2 // num zp[2]:10 101.0
void *memset::return
void *memset::str
void *memset::str#3 // str zp[2]:8
void *memset::str#3 // str zp[2]:6
char next
char next#0 // next zp[1]:16 22.0
char next#5 // next zp[1]:16 11.0
char next#0 // next zp[1]:24 22.0
char next#5 // next zp[1]:24 11.0
unsigned int sgn_u16(unsigned int w)
char sgn_u16::$0 // reg byte a 2002.0
char sgn_u16::$1 // reg byte a 2002.0
unsigned int sgn_u16::return
unsigned int sgn_u16::return#0 // return zp[2]:12 202.0
unsigned int sgn_u16::return#1 // return zp[2]:12 202.0
unsigned int sgn_u16::return#4 // return zp[2]:12 50.5
unsigned int sgn_u16::return#0 // return zp[2]:16 202.0
unsigned int sgn_u16::return#1 // return zp[2]:16 202.0
unsigned int sgn_u16::return#4 // return zp[2]:16 50.5
unsigned int sgn_u16::w
unsigned int sgn_u16::w#0 // w zp[2]:21 202.0
unsigned int sgn_u16::w#2 // w zp[2]:21 1102.0
unsigned int sgn_u16::w#0 // w zp[2]:2 202.0
unsigned int sgn_u16::w#2 // w zp[2]:2 1102.0
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp[2]:2 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 init_screen::c#2 init_screen::c#1 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp[2]:4 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
zp[2]:6 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
zp[2]:8 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
zp[2]:8 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 init_screen::c#2 init_screen::c#1 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp[2]:12 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
zp[2]:10 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
zp[2]:6 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
reg byte x [ memset::c#4 ]
zp[2]:10 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:12 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
zp[2]:14 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:16 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ]
zp[2]:14 [ bitmap_line::x2#0 ]
zp[1]:16 [ bitmap_init::$7 next#5 next#0 ]
zp[2]:22 [ bitmap_line::x2#0 ]
zp[1]:24 [ bitmap_init::$7 next#5 next#0 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp[2]:17 [ bitmap_line::dx#0 ]
zp[2]:19 [ bitmap_line::sx#0 ]
zp[2]:18 [ bitmap_line::dx#0 ]
zp[2]:20 [ bitmap_line::sx#0 ]
reg byte a [ abs_u16::$0 ]
reg byte a [ abs_u16::$1 ]
reg byte a [ sgn_u16::$0 ]
reg byte a [ sgn_u16::$1 ]
zp[2]:21 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 ]
zp[2]:23 [ bitmap_plot::$1 ]
zp[2]:2 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 ]
zp[2]:4 [ bitmap_plot::$1 ]
reg byte x [ bitmap_plot::$2 ]
@ -3474,7 +3474,7 @@ Score: 30070
.label VICII_MEMORY = $d018
.label SCREEN = $400
.label BITMAP = $2000
.label next = $10
.label next = $18
.segment Code
// main
main: {
@ -3535,8 +3535,8 @@ main: {
// Initialize bitmap plotting tables
// void bitmap_init(char *gfx, char *screen)
bitmap_init: {
.label __7 = $10
.label yoffs = 2
.label __7 = $18
.label yoffs = 8
// [14] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1]
// [14] phi bitmap_init::x#2 = 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1
ldx #0
@ -3682,7 +3682,7 @@ bitmap_clear: {
}
// init_screen
init_screen: {
.label c = 2
.label c = 8
// [41] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1]
// [41] phi init_screen::c#2 = SCREEN [phi:init_screen->init_screen::@1#0] -- pbuz1=pbuc1
lda #<SCREEN
@ -3722,20 +3722,20 @@ init_screen: {
}
// bitmap_line
// Draw a line on the bitmap using bresenhams algorithm
// void bitmap_line(unsigned int x1, unsigned int y1, __zp($e) unsigned int x2, unsigned int y2)
// void bitmap_line(unsigned int x1, unsigned int y1, __zp($16) unsigned int x2, unsigned int y2)
bitmap_line: {
.const x1 = 0
.const y1 = 0
.const y2 = $64
.label dx = $11
.label dy = $a
.label sx = $13
.label sy = $c
.label e1 = 4
.label e = 6
.label y = 2
.label x = 8
.label x2 = $e
.label dx = $12
.label dy = $e
.label sx = $14
.label sy = $10
.label e1 = $c
.label e = $a
.label y = 8
.label x = 6
.label x2 = $16
// unsigned int dx = abs_u16(x2-x1)
// [46] abs_u16::w#0 = bitmap_line::x2#0 -- vwuz1=vwuz2
lda.z x2
@ -4054,12 +4054,12 @@ bitmap_line: {
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp(8) void *str, __register(X) char c, __zp(6) unsigned int num)
// void * memset(__zp(6) void *str, __register(X) char c, __zp($a) unsigned int num)
memset: {
.label end = 6
.label dst = 8
.label num = 6
.label str = 8
.label end = $a
.label dst = 6
.label num = $a
.label str = 6
// if(num>0)
// [95] if(memset::num#2<=0) goto memset::@return -- vwuz1_le_0_then_la1
lda.z num
@ -4112,10 +4112,10 @@ memset: {
}
// abs_u16
// Get the absolute value of a 16-bit unsigned number treated as a signed number.
// __zp($a) unsigned int abs_u16(__zp($a) unsigned int w)
// __zp($e) unsigned int abs_u16(__zp($e) unsigned int w)
abs_u16: {
.label w = $a
.label return = $a
.label w = $e
.label return = $e
// BYTE1(w)
// [104] abs_u16::$0 = byte1 abs_u16::w#2 -- vbuaa=_byte1_vwuz1
lda.z w+1
@ -4148,10 +4148,10 @@ abs_u16: {
// sgn_u16
// Get the sign of a 16-bit unsigned number treated as a signed number.
// Returns unsigned -1 if the number is
// __zp($c) unsigned int sgn_u16(__zp($15) unsigned int w)
// __zp($10) unsigned int sgn_u16(__zp(2) unsigned int w)
sgn_u16: {
.label w = $15
.label return = $c
.label w = 2
.label return = $10
// BYTE1(w)
// [111] sgn_u16::$0 = byte1 sgn_u16::w#2 -- vbuaa=_byte1_vwuz1
lda.z w+1
@ -4184,11 +4184,11 @@ sgn_u16: {
}
// bitmap_plot
// Plot a single dot in the bitmap
// void bitmap_plot(__zp(8) unsigned int x, __register(X) char y)
// void bitmap_plot(__zp(6) unsigned int x, __register(X) char y)
bitmap_plot: {
.label __1 = $17
.label plotter = $15
.label x = 8
.label __1 = 4
.label plotter = 2
.label x = 6
// MAKEWORD( bitmap_plot_yhi[y], bitmap_plot_ylo[y] )
// [118] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bitmap_plot_ylo[bitmap_plot::y#4] -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx
lda bitmap_plot_yhi,x

View File

@ -12,13 +12,13 @@ unsigned int abs_u16(unsigned int w)
char abs_u16::$0 // reg byte a 2002.0
char abs_u16::$1 // reg byte a 2002.0
unsigned int abs_u16::return
unsigned int abs_u16::return#0 // return zp[2]:10 202.0
unsigned int abs_u16::return#1 // return zp[2]:10 202.0
unsigned int abs_u16::return#2 // return zp[2]:10 2002.0
unsigned int abs_u16::return#4 // return zp[2]:10 551.0
unsigned int abs_u16::return#0 // return zp[2]:14 202.0
unsigned int abs_u16::return#1 // return zp[2]:14 202.0
unsigned int abs_u16::return#2 // return zp[2]:14 2002.0
unsigned int abs_u16::return#4 // return zp[2]:14 551.0
unsigned int abs_u16::w
unsigned int abs_u16::w#0 // w zp[2]:10 202.0
unsigned int abs_u16::w#2 // w zp[2]:10 776.0
unsigned int abs_u16::w#0 // w zp[2]:14 202.0
unsigned int abs_u16::w#2 // w zp[2]:14 776.0
void bitmap_clear(char bgcol , char fgcol)
char bitmap_clear::bgcol
char bitmap_clear::col
@ -29,7 +29,7 @@ void bitmap_init(char *gfx , char *screen)
char bitmap_init::$4 // reg byte a 202.0
char bitmap_init::$5 // reg byte a 202.0
char bitmap_init::$6 // reg byte a 202.0
char bitmap_init::$7 // zp[1]:16 50.5
char bitmap_init::$7 // zp[1]:24 50.5
char bitmap_init::bits
char bitmap_init::bits#1 // reg byte a 101.0
char bitmap_init::bits#3 // reg byte a 151.5
@ -43,63 +43,63 @@ char bitmap_init::y
char bitmap_init::y#1 // reg byte x 151.5
char bitmap_init::y#2 // reg byte x 50.5
char *bitmap_init::yoffs
char *bitmap_init::yoffs#1 // yoffs zp[2]:2 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:2 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:2 101.0
char *bitmap_init::yoffs#1 // yoffs zp[2]:8 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:8 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:8 101.0
void bitmap_line(unsigned int x1 , unsigned int y1 , unsigned int x2 , unsigned int y2)
unsigned int bitmap_line::dx
unsigned int bitmap_line::dx#0 // dx zp[2]:17 800.1842105263158
unsigned int bitmap_line::dx#0 // dx zp[2]:18 800.1842105263158
unsigned int bitmap_line::dy
unsigned int bitmap_line::dy#0 // dy zp[2]:10 868.7714285714285
unsigned int bitmap_line::dy#0 // dy zp[2]:14 868.7714285714285
unsigned int bitmap_line::e
unsigned int bitmap_line::e#0 // e zp[2]:6 202.0
unsigned int bitmap_line::e#1 // e zp[2]:6 13334.666666666666
unsigned int bitmap_line::e#2 // e zp[2]:6 20002.0
unsigned int bitmap_line::e#3 // e zp[2]:6 4020.6000000000004
unsigned int bitmap_line::e#6 // e zp[2]:6 15001.5
unsigned int bitmap_line::e#0 // e zp[2]:10 202.0
unsigned int bitmap_line::e#1 // e zp[2]:10 13334.666666666666
unsigned int bitmap_line::e#2 // e zp[2]:10 20002.0
unsigned int bitmap_line::e#3 // e zp[2]:10 4020.6000000000004
unsigned int bitmap_line::e#6 // e zp[2]:10 15001.5
unsigned int bitmap_line::e1
unsigned int bitmap_line::e1#0 // e1 zp[2]:4 202.0
unsigned int bitmap_line::e1#1 // e1 zp[2]:4 13334.666666666666
unsigned int bitmap_line::e1#2 // e1 zp[2]:4 20002.0
unsigned int bitmap_line::e1#3 // e1 zp[2]:4 4020.6000000000004
unsigned int bitmap_line::e1#6 // e1 zp[2]:4 15001.5
unsigned int bitmap_line::e1#0 // e1 zp[2]:12 202.0
unsigned int bitmap_line::e1#1 // e1 zp[2]:12 13334.666666666666
unsigned int bitmap_line::e1#2 // e1 zp[2]:12 20002.0
unsigned int bitmap_line::e1#3 // e1 zp[2]:12 4020.6000000000004
unsigned int bitmap_line::e1#6 // e1 zp[2]:12 15001.5
unsigned int bitmap_line::sx
unsigned int bitmap_line::sx#0 // sx zp[2]:19 693.2068965517242
unsigned int bitmap_line::sx#0 // sx zp[2]:20 693.2068965517242
unsigned int bitmap_line::sy
unsigned int bitmap_line::sy#0 // sy zp[2]:12 773.1923076923076
unsigned int bitmap_line::sy#0 // sy zp[2]:16 773.1923076923076
unsigned int bitmap_line::x
unsigned int bitmap_line::x#1 // x zp[2]:8 10001.0
unsigned int bitmap_line::x#12 // x zp[2]:8 20002.0
unsigned int bitmap_line::x#13 // x zp[2]:8 5714.857142857143
unsigned int bitmap_line::x#15 // x zp[2]:8 5714.857142857143
unsigned int bitmap_line::x#6 // x zp[2]:8 20103.0
unsigned int bitmap_line::x#7 // x zp[2]:8 7500.75
unsigned int bitmap_line::x#1 // x zp[2]:6 10001.0
unsigned int bitmap_line::x#12 // x zp[2]:6 20002.0
unsigned int bitmap_line::x#13 // x zp[2]:6 5714.857142857143
unsigned int bitmap_line::x#15 // x zp[2]:6 5714.857142857143
unsigned int bitmap_line::x#6 // x zp[2]:6 20103.0
unsigned int bitmap_line::x#7 // x zp[2]:6 7500.75
unsigned int bitmap_line::x1
__constant unsigned int bitmap_line::x1#0 = 0 // x1
unsigned int bitmap_line::x2
unsigned int bitmap_line::x2#0 // x2 zp[2]:14 340.4666666666667
unsigned int bitmap_line::x2#0 // x2 zp[2]:22 340.4666666666667
unsigned int bitmap_line::y
unsigned int bitmap_line::y#1 // y zp[2]:2 5714.857142857143
unsigned int bitmap_line::y#13 // y zp[2]:2 20002.0
unsigned int bitmap_line::y#15 // y zp[2]:2 4286.142857142857
unsigned int bitmap_line::y#2 // y zp[2]:2 10001.0
unsigned int bitmap_line::y#4 // y zp[2]:2 5000.5
unsigned int bitmap_line::y#7 // y zp[2]:2 10001.0
unsigned int bitmap_line::y#1 // y zp[2]:8 5714.857142857143
unsigned int bitmap_line::y#13 // y zp[2]:8 20002.0
unsigned int bitmap_line::y#15 // y zp[2]:8 4286.142857142857
unsigned int bitmap_line::y#2 // y zp[2]:8 10001.0
unsigned int bitmap_line::y#4 // y zp[2]:8 5000.5
unsigned int bitmap_line::y#7 // y zp[2]:8 10001.0
unsigned int bitmap_line::y1
__constant unsigned int bitmap_line::y1#0 = 0 // y1
unsigned int bitmap_line::y2
__constant unsigned int bitmap_line::y2#0 = $64 // y2
void bitmap_plot(unsigned int x , char y)
unsigned int bitmap_plot::$1 // zp[2]:23 200002.0
unsigned int bitmap_plot::$1 // zp[2]:4 200002.0
char bitmap_plot::$2 // reg byte x 200002.0
char *bitmap_plot::plotter
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:21 50000.5
char *bitmap_plot::plotter#1 // plotter zp[2]:21 150001.5
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:2 50000.5
char *bitmap_plot::plotter#1 // plotter zp[2]:2 150001.5
unsigned int bitmap_plot::x
unsigned int bitmap_plot::x#1 // x zp[2]:8 10001.0
unsigned int bitmap_plot::x#2 // x zp[2]:8 101.0
unsigned int bitmap_plot::x#3 // x zp[2]:8 10001.0
unsigned int bitmap_plot::x#4 // x zp[2]:8 55026.25
unsigned int bitmap_plot::x#1 // x zp[2]:6 10001.0
unsigned int bitmap_plot::x#2 // x zp[2]:6 101.0
unsigned int bitmap_plot::x#3 // x zp[2]:6 10001.0
unsigned int bitmap_plot::x#4 // x zp[2]:6 55026.25
char bitmap_plot::y
char bitmap_plot::y#1 // reg byte x 20002.0
char bitmap_plot::y#2 // reg byte x 202.0
@ -111,59 +111,59 @@ __constant const char bitmap_plot_ylo[$100] = { fill( $100, 0) }
char *bitmap_screen
void init_screen()
char *init_screen::c
char *init_screen::c#1 // c zp[2]:2 202.0
char *init_screen::c#2 // c zp[2]:2 134.66666666666666
char *init_screen::c#1 // c zp[2]:8 202.0
char *init_screen::c#2 // c zp[2]:8 134.66666666666666
void main()
void * memset(void *str , char c , unsigned int num)
char memset::c
char memset::c#4 // reg byte x 125.125
char *memset::dst
char *memset::dst#1 // dst zp[2]:8 2002.0
char *memset::dst#2 // dst zp[2]:8 1368.3333333333335
char *memset::dst#4 // dst zp[2]:8 202.0
char *memset::dst#1 // dst zp[2]:6 2002.0
char *memset::dst#2 // dst zp[2]:6 1368.3333333333335
char *memset::dst#4 // dst zp[2]:6 202.0
char *memset::end
char *memset::end#0 // end zp[2]:6 183.66666666666669
char *memset::end#0 // end zp[2]:10 183.66666666666669
unsigned int memset::num
unsigned int memset::num#2 // num zp[2]:6 101.0
unsigned int memset::num#2 // num zp[2]:10 101.0
void *memset::return
void *memset::str
void *memset::str#3 // str zp[2]:8
void *memset::str#3 // str zp[2]:6
char next
char next#0 // next zp[1]:16 22.0
char next#5 // next zp[1]:16 11.0
char next#0 // next zp[1]:24 22.0
char next#5 // next zp[1]:24 11.0
unsigned int sgn_u16(unsigned int w)
char sgn_u16::$0 // reg byte a 2002.0
char sgn_u16::$1 // reg byte a 2002.0
unsigned int sgn_u16::return
unsigned int sgn_u16::return#0 // return zp[2]:12 202.0
unsigned int sgn_u16::return#1 // return zp[2]:12 202.0
unsigned int sgn_u16::return#4 // return zp[2]:12 50.5
unsigned int sgn_u16::return#0 // return zp[2]:16 202.0
unsigned int sgn_u16::return#1 // return zp[2]:16 202.0
unsigned int sgn_u16::return#4 // return zp[2]:16 50.5
unsigned int sgn_u16::w
unsigned int sgn_u16::w#0 // w zp[2]:21 202.0
unsigned int sgn_u16::w#2 // w zp[2]:21 1102.0
unsigned int sgn_u16::w#0 // w zp[2]:2 202.0
unsigned int sgn_u16::w#2 // w zp[2]:2 1102.0
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp[2]:2 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 init_screen::c#2 init_screen::c#1 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp[2]:4 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
zp[2]:6 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
zp[2]:8 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
zp[2]:8 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 init_screen::c#2 init_screen::c#1 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp[2]:12 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
zp[2]:10 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
zp[2]:6 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
reg byte x [ memset::c#4 ]
zp[2]:10 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:12 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
zp[2]:14 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:16 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ]
zp[2]:14 [ bitmap_line::x2#0 ]
zp[1]:16 [ bitmap_init::$7 next#5 next#0 ]
zp[2]:22 [ bitmap_line::x2#0 ]
zp[1]:24 [ bitmap_init::$7 next#5 next#0 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp[2]:17 [ bitmap_line::dx#0 ]
zp[2]:19 [ bitmap_line::sx#0 ]
zp[2]:18 [ bitmap_line::dx#0 ]
zp[2]:20 [ bitmap_line::sx#0 ]
reg byte a [ abs_u16::$0 ]
reg byte a [ abs_u16::$1 ]
reg byte a [ sgn_u16::$0 ]
reg byte a [ sgn_u16::$1 ]
zp[2]:21 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 ]
zp[2]:23 [ bitmap_plot::$1 ]
zp[2]:2 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 ]
zp[2]:4 [ bitmap_plot::$1 ]
reg byte x [ bitmap_plot::$2 ]

View File

@ -35,7 +35,7 @@
.label VICII_MEMORY = $d018
.label SCREEN = $400
.label BITMAP = $2000
.label next = 2
.label next = $14
.segment Code
main: {
// *BORDER_COLOR = 0
@ -79,8 +79,8 @@ main: {
// Initialize bitmap plotting tables
// void bitmap_init(char *gfx, char *screen)
bitmap_init: {
.label __7 = $10
.label yoffs = 2
.label __7 = $18
.label yoffs = $14
ldx #0
lda #$80
__b1:
@ -168,20 +168,20 @@ bitmap_clear: {
rts
}
// Draw a line on the bitmap using bresenhams algorithm
// void bitmap_line(unsigned int x1, unsigned int y1, __zp(2) unsigned int x2, unsigned int y2)
// void bitmap_line(unsigned int x1, unsigned int y1, __zp($14) unsigned int x2, unsigned int y2)
bitmap_line: {
.const x1 = 0
.const y1 = 0
.const y2 = $64
.label dx = $11
.label dy = $c
.label sx = $13
.label sy = $e
.label e1 = 6
.label e = 8
.label y = 4
.label x = $a
.label x2 = 2
.label dx = $12
.label dy = $e
.label sx = $16
.label sy = $10
.label e1 = $c
.label e = $a
.label y = 8
.label x = 6
.label x2 = $14
// unsigned int dx = abs_u16(x2-x1)
lda.z x2
sta.z abs_u16.w
@ -392,12 +392,12 @@ bitmap_line: {
rts
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp($a) void *str, __register(X) char c, __zp(8) unsigned int num)
// void * memset(__zp(6) void *str, __register(X) char c, __zp($a) unsigned int num)
memset: {
.label end = 8
.label dst = $a
.label num = 8
.label str = $a
.label end = $a
.label dst = 6
.label num = $a
.label str = 6
// if(num>0)
lda.z num
bne !+
@ -436,10 +436,10 @@ memset: {
jmp __b2
}
// Get the absolute value of a 16-bit unsigned number treated as a signed number.
// __zp($c) unsigned int abs_u16(__zp($c) unsigned int w)
// __zp($e) unsigned int abs_u16(__zp($e) unsigned int w)
abs_u16: {
.label w = $c
.label return = $c
.label w = $e
.label return = $e
// BYTE1(w)
lda.z w+1
// BYTE1(w)&0x80
@ -462,10 +462,10 @@ abs_u16: {
}
// Get the sign of a 16-bit unsigned number treated as a signed number.
// Returns unsigned -1 if the number is
// __zp($e) unsigned int sgn_u16(__zp($15) unsigned int w)
// __zp($10) unsigned int sgn_u16(__zp(2) unsigned int w)
sgn_u16: {
.label w = $15
.label return = $e
.label w = 2
.label return = $10
// BYTE1(w)
lda.z w+1
// BYTE1(w)&0x80
@ -486,11 +486,11 @@ sgn_u16: {
rts
}
// Plot a single dot in the bitmap
// void bitmap_plot(__zp($a) unsigned int x, __register(X) char y)
// void bitmap_plot(__zp(6) unsigned int x, __register(X) char y)
bitmap_plot: {
.label __1 = $17
.label plotter = $15
.label x = $a
.label __1 = 4
.label plotter = 2
.label x = 6
// MAKEWORD( bitmap_plot_yhi[y], bitmap_plot_ylo[y] )
lda bitmap_plot_yhi,x
sta.z plotter+1

View File

@ -1994,48 +1994,48 @@ Complete equivalence classes
[ bitmap_plot::$1 ]
[ bitmap_plot::plotter#1 ]
[ bitmap_plot::$2 ]
Allocated zp[2]:2 [ next#6 next#11 next#0 ]
Allocated zp[1]:4 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
Allocated zp[1]:5 [ bitmap_init::x#2 bitmap_init::x#1 ]
Allocated zp[1]:6 [ bitmap_init::y#2 bitmap_init::y#1 ]
Allocated zp[2]:7 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated zp[2]:9 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
Allocated zp[2]:11 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ]
Allocated zp[2]:13 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ]
Allocated zp[2]:15 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
Allocated zp[2]:17 [ memset::num#2 ]
Allocated zp[2]:19 [ memset::str#3 ]
Allocated zp[1]:21 [ memset::c#4 ]
Allocated zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ]
Allocated zp[2]:26 [ sgn_u16::w#2 sgn_u16::w#0 ]
Allocated zp[2]:28 [ sgn_u16::return#4 ]
Allocated zp[1]:30 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ]
Allocated zp[2]:31 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
Allocated zp[2]:33 [ bitmap_line::x2#0 ]
Allocated zp[1]:35 [ bitmap_init::$7 ]
Allocated zp[1]:36 [ bitmap_init::$4 ]
Allocated zp[1]:37 [ bitmap_init::$5 ]
Allocated zp[1]:38 [ bitmap_init::$6 ]
Allocated zp[2]:39 [ abs_u16::return#0 ]
Allocated zp[2]:41 [ bitmap_line::dx#0 ]
Allocated zp[2]:43 [ abs_u16::return#1 ]
Allocated zp[2]:45 [ bitmap_line::dy#0 ]
Allocated zp[2]:47 [ sgn_u16::return#0 ]
Allocated zp[2]:49 [ bitmap_line::sx#0 ]
Allocated zp[2]:51 [ sgn_u16::return#1 ]
Allocated zp[2]:53 [ bitmap_line::sy#0 ]
Allocated zp[2]:55 [ memset::end#0 ]
Allocated zp[1]:57 [ abs_u16::$0 ]
Allocated zp[1]:58 [ abs_u16::$1 ]
Allocated zp[1]:59 [ sgn_u16::$0 ]
Allocated zp[1]:60 [ sgn_u16::$1 ]
Allocated zp[2]:61 [ bitmap_plot::plotter#0 ]
Allocated zp[2]:63 [ bitmap_plot::$1 ]
Allocated zp[2]:65 [ bitmap_plot::plotter#1 ]
Allocated zp[1]:67 [ bitmap_plot::$2 ]
Allocated zp[1]:2 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ]
Allocated zp[2]:3 [ bitmap_plot::$1 ]
Allocated zp[1]:5 [ bitmap_plot::$2 ]
Allocated zp[2]:6 [ bitmap_plot::plotter#1 ]
Allocated zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
Allocated zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ]
Allocated zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ]
Allocated zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
Allocated zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
Allocated zp[2]:18 [ bitmap_plot::plotter#0 ]
Allocated zp[2]:20 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ]
Allocated zp[1]:24 [ abs_u16::$0 ]
Allocated zp[1]:25 [ abs_u16::$1 ]
Allocated zp[1]:26 [ sgn_u16::$0 ]
Allocated zp[1]:27 [ sgn_u16::$1 ]
Allocated zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 ]
Allocated zp[2]:30 [ bitmap_line::dy#0 ]
Allocated zp[2]:32 [ bitmap_line::dx#0 ]
Allocated zp[2]:34 [ bitmap_line::sy#0 ]
Allocated zp[2]:36 [ bitmap_line::sx#0 ]
Allocated zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated zp[2]:40 [ bitmap_line::x2#0 ]
Allocated zp[1]:42 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
Allocated zp[1]:43 [ bitmap_init::x#2 bitmap_init::x#1 ]
Allocated zp[1]:44 [ bitmap_init::y#2 bitmap_init::y#1 ]
Allocated zp[1]:45 [ bitmap_init::$4 ]
Allocated zp[1]:46 [ bitmap_init::$5 ]
Allocated zp[1]:47 [ bitmap_init::$6 ]
Allocated zp[2]:48 [ abs_u16::return#0 ]
Allocated zp[2]:50 [ abs_u16::return#1 ]
Allocated zp[2]:52 [ sgn_u16::return#0 ]
Allocated zp[2]:54 [ sgn_u16::return#1 ]
Allocated zp[2]:56 [ memset::end#0 ]
Allocated zp[1]:58 [ memset::c#4 ]
Allocated zp[2]:59 [ memset::num#2 ]
Allocated zp[2]:61 [ sgn_u16::return#4 ]
Allocated zp[1]:63 [ bitmap_init::$7 ]
Allocated zp[2]:64 [ next#6 next#11 next#0 ]
Allocated zp[2]:66 [ memset::str#3 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Equivalence Class zp[1]:36 [ bitmap_init::$4 ] has ALU potential.
Equivalence Class zp[1]:45 [ bitmap_init::$4 ] has ALU potential.
Statement [0] *BORDER_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [1] *BG_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 [ ] ( [ ] { } ) always clobbers reg byte a
@ -2043,7 +2043,7 @@ Statement [3] *VICII_MEMORY = (char)(unsigned int)SCREEN&$3fff/$40|(unsigned int
Statement [8] bitmap_line::x2#0 = next#6 [ next#6 bitmap_line::x2#0 ] ( [ next#6 bitmap_line::x2#0 ] { { next#6 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [11] if(next#0!=$140) goto main::@5 [ next#0 ] ( [ next#0 ] { } ) always clobbers reg byte a
Statement [31] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + (unsigned int)$28*8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( bitmap_init:4 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:6 [ bitmap_init::y#2 bitmap_init::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:44 [ bitmap_init::y#2 bitmap_init::y#1 ]
Statement [41] abs_u16::w#0 = bitmap_line::x2#0 [ bitmap_line::x2#0 abs_u16::w#0 ] ( bitmap_line:9 [ next#6 bitmap_line::x2#0 abs_u16::w#0 ] { { abs_u16::w#0 = abs_u16::w#2 bitmap_line::x2#0 next#6 } { abs_u16::return#0 = abs_u16::return#4 } } ) always clobbers reg byte a
Statement [43] abs_u16::return#0 = abs_u16::return#4 [ bitmap_line::x2#0 abs_u16::return#0 ] ( bitmap_line:9 [ next#6 bitmap_line::x2#0 abs_u16::return#0 ] { { abs_u16::w#0 = abs_u16::w#2 bitmap_line::x2#0 next#6 } { abs_u16::return#0 = abs_u16::return#4 } } ) always clobbers reg byte a
Statement [44] bitmap_line::dx#0 = abs_u16::return#0 [ bitmap_line::x2#0 bitmap_line::dx#0 ] ( bitmap_line:9 [ next#6 bitmap_line::x2#0 bitmap_line::dx#0 ] { { next#6 = bitmap_line::x2#0 } { abs_u16::return#1 = abs_u16::return#4 } } ) always clobbers reg byte a
@ -2075,12 +2075,12 @@ Statement [83] bitmap_line::y#2 = bitmap_line::y#15 + bitmap_line::sy#0 [ bitmap
Statement [84] bitmap_line::e1#2 = bitmap_line::e1#1 - bitmap_line::dx#0 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] ( bitmap_line:9 [ next#6 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#2 bitmap_line::e1#2 ] { { next#6 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [86] if(bitmap_line::x#15!=bitmap_line::x2#0) goto bitmap_line::@9 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#13 bitmap_line::e1#6 ] ( bitmap_line:9 [ next#6 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#13 bitmap_line::e1#6 ] { { next#6 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [90] if(memset::num#2<=0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( bitmap_clear:6::memset:37 [ memset::num#2 memset::str#3 memset::c#4 ] { } bitmap_clear:6::memset:39 [ memset::num#2 memset::str#3 memset::c#4 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:21 [ memset::c#4 ]
Removing always clobbered register reg byte a as potential for zp[1]:58 [ memset::c#4 ]
Statement [91] memset::end#0 = (char *)memset::str#3 + memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( bitmap_clear:6::memset:37 [ memset::str#3 memset::c#4 memset::end#0 ] { } bitmap_clear:6::memset:39 [ memset::str#3 memset::c#4 memset::end#0 ] { } ) always clobbers reg byte a
Statement [92] memset::dst#4 = (char *)memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( bitmap_clear:6::memset:37 [ memset::c#4 memset::end#0 memset::dst#4 ] { } bitmap_clear:6::memset:39 [ memset::c#4 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a
Statement [94] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( bitmap_clear:6::memset:37 [ memset::c#4 memset::end#0 memset::dst#2 ] { } bitmap_clear:6::memset:39 [ memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a
Statement [96] *memset::dst#2 = memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( bitmap_clear:6::memset:37 [ memset::c#4 memset::end#0 memset::dst#2 ] { } bitmap_clear:6::memset:39 [ memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:21 [ memset::c#4 ]
Removing always clobbered register reg byte y as potential for zp[1]:58 [ memset::c#4 ]
Statement [102] abs_u16::return#2 = - abs_u16::w#2 [ abs_u16::return#2 ] ( bitmap_line:9::abs_u16:42 [ next#6 bitmap_line::x2#0 abs_u16::return#2 ] { { abs_u16::w#0 = abs_u16::w#2 bitmap_line::x2#0 next#6 } { abs_u16::return#0 = abs_u16::return#4 } } bitmap_line:9::abs_u16:45 [ next#6 bitmap_line::x2#0 bitmap_line::dx#0 abs_u16::return#2 ] { { next#6 = bitmap_line::x2#0 } { abs_u16::return#1 = abs_u16::return#4 } } ) always clobbers reg byte a
Statement [113] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bitmap_plot_ylo[bitmap_plot::y#4] [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( bitmap_line:9::bitmap_plot:62 [ next#6 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:9::bitmap_plot:73 [ next#6 bitmap_plot::x#4 bitmap_plot::plotter#0 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:9::bitmap_plot:79 [ next#6 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:9::bitmap_plot:88 [ next#6 bitmap_plot::x#4 bitmap_plot::plotter#0 ] { { next#6 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [114] bitmap_plot::$1 = bitmap_plot::x#4 & $fff8 [ bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( bitmap_line:9::bitmap_plot:62 [ next#6 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:9::bitmap_plot:73 [ next#6 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:9::bitmap_plot:79 [ next#6 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:9::bitmap_plot:88 [ next#6 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#6 = bitmap_line::x2#0 } } ) always clobbers reg byte a
@ -2134,107 +2134,107 @@ Statement [113] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bi
Statement [114] bitmap_plot::$1 = bitmap_plot::x#4 & $fff8 [ bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( bitmap_line:9::bitmap_plot:62 [ next#6 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:9::bitmap_plot:73 [ next#6 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:9::bitmap_plot:79 [ next#6 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:9::bitmap_plot:88 [ next#6 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { next#6 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [115] bitmap_plot::plotter#1 = (char *)bitmap_plot::plotter#0 + bitmap_plot::$1 [ bitmap_plot::x#4 bitmap_plot::plotter#1 ] ( bitmap_line:9::bitmap_plot:62 [ next#6 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:9::bitmap_plot:73 [ next#6 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:9::bitmap_plot:79 [ next#6 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:9::bitmap_plot:88 [ next#6 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { next#6 = bitmap_line::x2#0 } } ) always clobbers reg byte a
Statement [117] *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$2] [ ] ( bitmap_line:9::bitmap_plot:62 [ next#6 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:9::bitmap_plot:73 [ next#6 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:9::bitmap_plot:79 [ next#6 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 ] { { next#6 = bitmap_line::x2#0 } { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:9::bitmap_plot:88 [ next#6 ] { { next#6 = bitmap_line::x2#0 } } ) always clobbers reg byte a reg byte y
Potential registers zp[2]:2 [ next#6 next#11 next#0 ] : zp[2]:2 ,
Potential registers zp[1]:4 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:6 , reg byte x , reg byte y ,
Potential registers zp[2]:7 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:7 ,
Potential registers zp[2]:9 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] : zp[2]:9 ,
Potential registers zp[2]:11 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] : zp[2]:11 ,
Potential registers zp[2]:13 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] : zp[2]:13 ,
Potential registers zp[2]:15 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] : zp[2]:15 ,
Potential registers zp[2]:17 [ memset::num#2 ] : zp[2]:17 ,
Potential registers zp[2]:19 [ memset::str#3 ] : zp[2]:19 ,
Potential registers zp[1]:21 [ memset::c#4 ] : zp[1]:21 , reg byte x ,
Potential registers zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:22 ,
Potential registers zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] : zp[2]:24 ,
Potential registers zp[2]:26 [ sgn_u16::w#2 sgn_u16::w#0 ] : zp[2]:26 ,
Potential registers zp[2]:28 [ sgn_u16::return#4 ] : zp[2]:28 ,
Potential registers zp[1]:30 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:31 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] : zp[2]:31 ,
Potential registers zp[2]:33 [ bitmap_line::x2#0 ] : zp[2]:33 ,
Potential registers zp[1]:35 [ bitmap_init::$7 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:36 [ bitmap_init::$4 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , reg byte alu ,
Potential registers zp[1]:37 [ bitmap_init::$5 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:38 [ bitmap_init::$6 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:39 [ abs_u16::return#0 ] : zp[2]:39 ,
Potential registers zp[2]:41 [ bitmap_line::dx#0 ] : zp[2]:41 ,
Potential registers zp[2]:43 [ abs_u16::return#1 ] : zp[2]:43 ,
Potential registers zp[2]:45 [ bitmap_line::dy#0 ] : zp[2]:45 ,
Potential registers zp[2]:47 [ sgn_u16::return#0 ] : zp[2]:47 ,
Potential registers zp[2]:49 [ bitmap_line::sx#0 ] : zp[2]:49 ,
Potential registers zp[2]:51 [ sgn_u16::return#1 ] : zp[2]:51 ,
Potential registers zp[2]:53 [ bitmap_line::sy#0 ] : zp[2]:53 ,
Potential registers zp[2]:55 [ memset::end#0 ] : zp[2]:55 ,
Potential registers zp[1]:57 [ abs_u16::$0 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:58 [ abs_u16::$1 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:59 [ sgn_u16::$0 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:60 [ sgn_u16::$1 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:61 [ bitmap_plot::plotter#0 ] : zp[2]:61 ,
Potential registers zp[2]:63 [ bitmap_plot::$1 ] : zp[2]:63 ,
Potential registers zp[2]:65 [ bitmap_plot::plotter#1 ] : zp[2]:65 ,
Potential registers zp[1]:67 [ bitmap_plot::$2 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:64 [ next#6 next#11 next#0 ] : zp[2]:64 ,
Potential registers zp[1]:42 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:43 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:44 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:44 , reg byte x , reg byte y ,
Potential registers zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:38 ,
Potential registers zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] : zp[2]:14 ,
Potential registers zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] : zp[2]:10 ,
Potential registers zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] : zp[2]:12 ,
Potential registers zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] : zp[2]:16 ,
Potential registers zp[2]:59 [ memset::num#2 ] : zp[2]:59 ,
Potential registers zp[2]:66 [ memset::str#3 ] : zp[2]:66 ,
Potential registers zp[1]:58 [ memset::c#4 ] : zp[1]:58 , reg byte x ,
Potential registers zp[2]:20 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:20 ,
Potential registers zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] : zp[2]:22 ,
Potential registers zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 ] : zp[2]:28 ,
Potential registers zp[2]:61 [ sgn_u16::return#4 ] : zp[2]:61 ,
Potential registers zp[1]:2 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] : zp[2]:8 ,
Potential registers zp[2]:40 [ bitmap_line::x2#0 ] : zp[2]:40 ,
Potential registers zp[1]:63 [ bitmap_init::$7 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:45 [ bitmap_init::$4 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , reg byte alu ,
Potential registers zp[1]:46 [ bitmap_init::$5 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:47 [ bitmap_init::$6 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:48 [ abs_u16::return#0 ] : zp[2]:48 ,
Potential registers zp[2]:32 [ bitmap_line::dx#0 ] : zp[2]:32 ,
Potential registers zp[2]:50 [ abs_u16::return#1 ] : zp[2]:50 ,
Potential registers zp[2]:30 [ bitmap_line::dy#0 ] : zp[2]:30 ,
Potential registers zp[2]:52 [ sgn_u16::return#0 ] : zp[2]:52 ,
Potential registers zp[2]:36 [ bitmap_line::sx#0 ] : zp[2]:36 ,
Potential registers zp[2]:54 [ sgn_u16::return#1 ] : zp[2]:54 ,
Potential registers zp[2]:34 [ bitmap_line::sy#0 ] : zp[2]:34 ,
Potential registers zp[2]:56 [ memset::end#0 ] : zp[2]:56 ,
Potential registers zp[1]:24 [ abs_u16::$0 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:25 [ abs_u16::$1 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:26 [ sgn_u16::$0 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:27 [ sgn_u16::$1 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:18 [ bitmap_plot::plotter#0 ] : zp[2]:18 ,
Potential registers zp[2]:3 [ bitmap_plot::$1 ] : zp[2]:3 ,
Potential registers zp[2]:6 [ bitmap_plot::plotter#1 ] : zp[2]:6 ,
Potential registers zp[1]:5 [ bitmap_plot::$2 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [bitmap_plot] 260,311: zp[1]:30 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ] 200,002: zp[2]:63 [ bitmap_plot::$1 ] 200,002: zp[1]:67 [ bitmap_plot::$2 ] 150,001.5: zp[2]:65 [ bitmap_plot::plotter#1 ] 75,129.25: zp[2]:31 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] 50,000.5: zp[2]:61 [ bitmap_plot::plotter#0 ]
Uplift Scope [bitmap_line] 69,036.46: zp[2]:11 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] 55,005.5: zp[2]:13 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] 52,560.77: zp[2]:9 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] 52,560.77: zp[2]:15 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] 868.77: zp[2]:45 [ bitmap_line::dy#0 ] 800.18: zp[2]:41 [ bitmap_line::dx#0 ] 773.19: zp[2]:53 [ bitmap_line::sy#0 ] 693.21: zp[2]:49 [ bitmap_line::sx#0 ] 340.47: zp[2]:33 [ bitmap_line::x2#0 ]
Uplift Scope [abs_u16] 3,531: zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] 2,002: zp[1]:57 [ abs_u16::$0 ] 2,002: zp[1]:58 [ abs_u16::$1 ] 202: zp[2]:39 [ abs_u16::return#0 ] 202: zp[2]:43 [ abs_u16::return#1 ]
Uplift Scope [sgn_u16] 2,002: zp[1]:59 [ sgn_u16::$0 ] 2,002: zp[1]:60 [ sgn_u16::$1 ] 1,304: zp[2]:26 [ sgn_u16::w#2 sgn_u16::w#0 ] 202: zp[2]:47 [ sgn_u16::return#0 ] 202: zp[2]:51 [ sgn_u16::return#1 ] 50.5: zp[2]:28 [ sgn_u16::return#4 ]
Uplift Scope [memset] 3,572.33: zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 183.67: zp[2]:55 [ memset::end#0 ] 125.12: zp[1]:21 [ memset::c#4 ] 101: zp[2]:17 [ memset::num#2 ] 0: zp[2]:19 [ memset::str#3 ]
Uplift Scope [bitmap_init] 366.12: zp[2]:7 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 319.83: zp[1]:4 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 202: zp[1]:5 [ bitmap_init::x#2 bitmap_init::x#1 ] 202: zp[1]:6 [ bitmap_init::y#2 bitmap_init::y#1 ] 202: zp[1]:36 [ bitmap_init::$4 ] 202: zp[1]:37 [ bitmap_init::$5 ] 202: zp[1]:38 [ bitmap_init::$6 ] 50.5: zp[1]:35 [ bitmap_init::$7 ]
Uplift Scope [] 44: zp[2]:2 [ next#6 next#11 next#0 ]
Uplift Scope [bitmap_plot] 260,311: zp[1]:2 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ] 200,002: zp[2]:3 [ bitmap_plot::$1 ] 200,002: zp[1]:5 [ bitmap_plot::$2 ] 150,001.5: zp[2]:6 [ bitmap_plot::plotter#1 ] 75,129.25: zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] 50,000.5: zp[2]:18 [ bitmap_plot::plotter#0 ]
Uplift Scope [bitmap_line] 69,036.46: zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] 55,005.5: zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] 52,560.77: zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] 52,560.77: zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] 868.77: zp[2]:30 [ bitmap_line::dy#0 ] 800.18: zp[2]:32 [ bitmap_line::dx#0 ] 773.19: zp[2]:34 [ bitmap_line::sy#0 ] 693.21: zp[2]:36 [ bitmap_line::sx#0 ] 340.47: zp[2]:40 [ bitmap_line::x2#0 ]
Uplift Scope [abs_u16] 3,531: zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] 2,002: zp[1]:24 [ abs_u16::$0 ] 2,002: zp[1]:25 [ abs_u16::$1 ] 202: zp[2]:48 [ abs_u16::return#0 ] 202: zp[2]:50 [ abs_u16::return#1 ]
Uplift Scope [sgn_u16] 2,002: zp[1]:26 [ sgn_u16::$0 ] 2,002: zp[1]:27 [ sgn_u16::$1 ] 1,304: zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 ] 202: zp[2]:52 [ sgn_u16::return#0 ] 202: zp[2]:54 [ sgn_u16::return#1 ] 50.5: zp[2]:61 [ sgn_u16::return#4 ]
Uplift Scope [memset] 3,572.33: zp[2]:20 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 183.67: zp[2]:56 [ memset::end#0 ] 125.12: zp[1]:58 [ memset::c#4 ] 101: zp[2]:59 [ memset::num#2 ] 0: zp[2]:66 [ memset::str#3 ]
Uplift Scope [bitmap_init] 366.12: zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 319.83: zp[1]:42 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 202: zp[1]:43 [ bitmap_init::x#2 bitmap_init::x#1 ] 202: zp[1]:44 [ bitmap_init::y#2 bitmap_init::y#1 ] 202: zp[1]:45 [ bitmap_init::$4 ] 202: zp[1]:46 [ bitmap_init::$5 ] 202: zp[1]:47 [ bitmap_init::$6 ] 50.5: zp[1]:63 [ bitmap_init::$7 ]
Uplift Scope [] 44: zp[2]:64 [ next#6 next#11 next#0 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
Uplift Scope [bitmap_clear]
Uplift Scope [main]
Uplifting [bitmap_plot] best 36602 combination reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ] zp[2]:63 [ bitmap_plot::$1 ] reg byte x [ bitmap_plot::$2 ] zp[2]:65 [ bitmap_plot::plotter#1 ] zp[2]:31 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] zp[2]:61 [ bitmap_plot::plotter#0 ]
Uplifting [bitmap_line] best 36602 combination zp[2]:11 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] zp[2]:13 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] zp[2]:9 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] zp[2]:15 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] zp[2]:45 [ bitmap_line::dy#0 ] zp[2]:41 [ bitmap_line::dx#0 ] zp[2]:53 [ bitmap_line::sy#0 ] zp[2]:49 [ bitmap_line::sx#0 ] zp[2]:33 [ bitmap_line::x2#0 ]
Uplifting [abs_u16] best 36592 combination zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] reg byte a [ abs_u16::$0 ] reg byte a [ abs_u16::$1 ] zp[2]:39 [ abs_u16::return#0 ] zp[2]:43 [ abs_u16::return#1 ]
Uplifting [sgn_u16] best 36582 combination reg byte a [ sgn_u16::$0 ] reg byte a [ sgn_u16::$1 ] zp[2]:26 [ sgn_u16::w#2 sgn_u16::w#0 ] zp[2]:47 [ sgn_u16::return#0 ] zp[2]:51 [ sgn_u16::return#1 ] zp[2]:28 [ sgn_u16::return#4 ]
Uplifting [memset] best 36566 combination zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:55 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:17 [ memset::num#2 ] zp[2]:19 [ memset::str#3 ]
Uplifting [bitmap_init] best 36116 combination zp[2]:7 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:37 [ bitmap_init::$5 ] zp[1]:38 [ bitmap_init::$6 ] zp[1]:35 [ bitmap_init::$7 ]
Uplifting [bitmap_plot] best 36602 combination reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ] zp[2]:3 [ bitmap_plot::$1 ] reg byte x [ bitmap_plot::$2 ] zp[2]:6 [ bitmap_plot::plotter#1 ] zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] zp[2]:18 [ bitmap_plot::plotter#0 ]
Uplifting [bitmap_line] best 36602 combination zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ] zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] zp[2]:30 [ bitmap_line::dy#0 ] zp[2]:32 [ bitmap_line::dx#0 ] zp[2]:34 [ bitmap_line::sy#0 ] zp[2]:36 [ bitmap_line::sx#0 ] zp[2]:40 [ bitmap_line::x2#0 ]
Uplifting [abs_u16] best 36592 combination zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] reg byte a [ abs_u16::$0 ] reg byte a [ abs_u16::$1 ] zp[2]:48 [ abs_u16::return#0 ] zp[2]:50 [ abs_u16::return#1 ]
Uplifting [sgn_u16] best 36582 combination reg byte a [ sgn_u16::$0 ] reg byte a [ sgn_u16::$1 ] zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 ] zp[2]:52 [ sgn_u16::return#0 ] zp[2]:54 [ sgn_u16::return#1 ] zp[2]:61 [ sgn_u16::return#4 ]
Uplifting [memset] best 36566 combination zp[2]:20 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:56 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:59 [ memset::num#2 ] zp[2]:66 [ memset::str#3 ]
Uplifting [bitmap_init] best 36116 combination zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:46 [ bitmap_init::$5 ] zp[1]:47 [ bitmap_init::$6 ] zp[1]:63 [ bitmap_init::$7 ]
Limited combination testing to 100 combinations of 15360 possible.
Uplifting [] best 36116 combination zp[2]:2 [ next#6 next#11 next#0 ]
Uplifting [] best 36116 combination zp[2]:64 [ next#6 next#11 next#0 ]
Uplifting [MOS6526_CIA] best 36116 combination
Uplifting [MOS6569_VICII] best 36116 combination
Uplifting [MOS6581_SID] best 36116 combination
Uplifting [bitmap_clear] best 36116 combination
Uplifting [main] best 36116 combination
Attempting to uplift remaining variables inzp[1]:37 [ bitmap_init::$5 ]
Attempting to uplift remaining variables inzp[1]:46 [ bitmap_init::$5 ]
Uplifting [bitmap_init] best 36056 combination reg byte a [ bitmap_init::$5 ]
Attempting to uplift remaining variables inzp[1]:38 [ bitmap_init::$6 ]
Attempting to uplift remaining variables inzp[1]:47 [ bitmap_init::$6 ]
Uplifting [bitmap_init] best 35996 combination reg byte a [ bitmap_init::$6 ]
Attempting to uplift remaining variables inzp[1]:35 [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 35996 combination zp[1]:35 [ bitmap_init::$7 ]
Coalescing zero page register [ zp[2]:11 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] ] with [ zp[2]:31 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] ] - score: 3
Coalescing zero page register [ zp[2]:2 [ next#6 next#11 next#0 ] ] with [ zp[2]:33 [ bitmap_line::x2#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:17 [ memset::num#2 ] ] with [ zp[2]:55 [ memset::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:19 [ memset::str#3 ] ] with [ zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] ] with [ zp[2]:39 [ abs_u16::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 ] ] with [ zp[2]:43 [ abs_u16::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:28 [ sgn_u16::return#4 ] ] with [ zp[2]:47 [ sgn_u16::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:28 [ sgn_u16::return#4 sgn_u16::return#0 ] ] with [ zp[2]:51 [ sgn_u16::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:61 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:65 [ bitmap_plot::plotter#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 ] ] with [ zp[2]:45 [ bitmap_line::dy#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:28 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 ] ] with [ zp[2]:53 [ bitmap_line::sy#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:7 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp[2]:2 [ next#6 next#11 next#0 bitmap_line::x2#0 ] ]
Coalescing zero page register [ zp[2]:17 [ memset::num#2 memset::end#0 ] ] with [ zp[2]:9 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] ]
Coalescing zero page register [ zp[2]:19 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:11 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] ]
Coalescing zero page register [ zp[2]:61 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:26 [ sgn_u16::w#2 sgn_u16::w#0 ] ]
Allocated (was zp[2]:7) zp[2]:2 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 next#6 next#11 next#0 bitmap_line::x2#0 ]
Allocated (was zp[2]:13) zp[2]:4 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ]
Allocated (was zp[2]:15) zp[2]:6 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
Allocated (was zp[2]:17) zp[2]:8 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
Allocated (was zp[2]:19) zp[2]:10 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
Allocated (was zp[2]:24) zp[2]:12 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
Allocated (was zp[2]:28) zp[2]:14 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
Allocated (was zp[1]:35) zp[1]:16 [ bitmap_init::$7 ]
Allocated (was zp[2]:41) zp[2]:17 [ bitmap_line::dx#0 ]
Allocated (was zp[2]:49) zp[2]:19 [ bitmap_line::sx#0 ]
Allocated (was zp[2]:61) zp[2]:21 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 ]
Allocated (was zp[2]:63) zp[2]:23 [ bitmap_plot::$1 ]
Attempting to uplift remaining variables inzp[1]:63 [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 35996 combination zp[1]:63 [ bitmap_init::$7 ]
Coalescing zero page register [ zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 ] ] with [ zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] ] - score: 3
Coalescing zero page register [ zp[2]:64 [ next#6 next#11 next#0 ] ] with [ zp[2]:40 [ bitmap_line::x2#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:59 [ memset::num#2 ] ] with [ zp[2]:56 [ memset::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:66 [ memset::str#3 ] ] with [ zp[2]:20 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 ] ] with [ zp[2]:48 [ abs_u16::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 ] ] with [ zp[2]:50 [ abs_u16::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:61 [ sgn_u16::return#4 ] ] with [ zp[2]:52 [ sgn_u16::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:61 [ sgn_u16::return#4 sgn_u16::return#0 ] ] with [ zp[2]:54 [ sgn_u16::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:18 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:6 [ bitmap_plot::plotter#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:22 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 ] ] with [ zp[2]:30 [ bitmap_line::dy#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:61 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 ] ] with [ zp[2]:34 [ bitmap_line::sy#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp[2]:64 [ next#6 next#11 next#0 bitmap_line::x2#0 ] ]
Coalescing zero page register [ zp[2]:59 [ memset::num#2 memset::end#0 ] ] with [ zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] ]
Coalescing zero page register [ zp[2]:66 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ] ]
Coalescing zero page register [ zp[2]:18 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 ] ]
Allocated (was zp[2]:18) zp[2]:2 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 ]
Allocated (was zp[2]:3) zp[2]:4 [ bitmap_plot::$1 ]
Allocated (was zp[2]:66) zp[2]:6 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
Allocated (was zp[2]:12) zp[2]:8 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ]
Allocated (was zp[2]:59) zp[2]:10 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
Allocated (was zp[2]:16) zp[2]:12 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
Allocated (was zp[2]:22) zp[2]:14 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
Allocated (was zp[2]:61) zp[2]:16 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
Allocated (was zp[2]:32) zp[2]:18 [ bitmap_line::dx#0 ]
Allocated (was zp[2]:38) zp[2]:20 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 next#6 next#11 next#0 bitmap_line::x2#0 ]
Allocated (was zp[2]:36) zp[2]:22 [ bitmap_line::sx#0 ]
Allocated (was zp[1]:63) zp[1]:24 [ bitmap_init::$7 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -2277,7 +2277,7 @@ ASSEMBLER BEFORE OPTIMIZATION
.label VICII_MEMORY = $d018
.label SCREEN = $400
.label BITMAP = $2000
.label next = 2
.label next = $14
.segment Code
// main
main: {
@ -2362,8 +2362,8 @@ main: {
// Initialize bitmap plotting tables
// void bitmap_init(char *gfx, char *screen)
bitmap_init: {
.label __7 = $10
.label yoffs = 2
.label __7 = $18
.label yoffs = $14
// [15] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1]
__b1_from_bitmap_init:
// [15] phi bitmap_init::x#2 = 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1
@ -2521,20 +2521,20 @@ bitmap_clear: {
}
// bitmap_line
// Draw a line on the bitmap using bresenhams algorithm
// void bitmap_line(unsigned int x1, unsigned int y1, __zp(2) unsigned int x2, unsigned int y2)
// void bitmap_line(unsigned int x1, unsigned int y1, __zp($14) unsigned int x2, unsigned int y2)
bitmap_line: {
.const x1 = 0
.const y1 = 0
.const y2 = $64
.label dx = $11
.label dy = $c
.label sx = $13
.label sy = $e
.label e1 = 6
.label e = 8
.label y = 4
.label x = $a
.label x2 = 2
.label dx = $12
.label dy = $e
.label sx = $16
.label sy = $10
.label e1 = $c
.label e = $a
.label y = 8
.label x = 6
.label x2 = $14
// [41] abs_u16::w#0 = bitmap_line::x2#0 -- vwuz1=vwuz2
lda.z x2
sta.z abs_u16.w
@ -2874,12 +2874,12 @@ bitmap_line: {
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp($a) void *str, __register(X) char c, __zp(8) unsigned int num)
// void * memset(__zp(6) void *str, __register(X) char c, __zp($a) unsigned int num)
memset: {
.label end = 8
.label dst = $a
.label num = 8
.label str = $a
.label end = $a
.label dst = 6
.label num = $a
.label str = 6
// [90] if(memset::num#2<=0) goto memset::@return -- vwuz1_le_0_then_la1
lda.z num
bne !+
@ -2932,10 +2932,10 @@ memset: {
}
// abs_u16
// Get the absolute value of a 16-bit unsigned number treated as a signed number.
// __zp($c) unsigned int abs_u16(__zp($c) unsigned int w)
// __zp($e) unsigned int abs_u16(__zp($e) unsigned int w)
abs_u16: {
.label w = $c
.label return = $c
.label w = $e
.label return = $e
// [99] abs_u16::$0 = byte1 abs_u16::w#2 -- vbuaa=_byte1_vwuz1
lda.z w+1
// [100] abs_u16::$1 = abs_u16::$0 & $80 -- vbuaa=vbuaa_band_vbuc1
@ -2967,10 +2967,10 @@ abs_u16: {
// sgn_u16
// Get the sign of a 16-bit unsigned number treated as a signed number.
// Returns unsigned -1 if the number is
// __zp($e) unsigned int sgn_u16(__zp($15) unsigned int w)
// __zp($10) unsigned int sgn_u16(__zp(2) unsigned int w)
sgn_u16: {
.label w = $15
.label return = $e
.label w = 2
.label return = $10
// [106] sgn_u16::$0 = byte1 sgn_u16::w#2 -- vbuaa=_byte1_vwuz1
lda.z w+1
// [107] sgn_u16::$1 = sgn_u16::$0 & $80 -- vbuaa=vbuaa_band_vbuc1
@ -3006,11 +3006,11 @@ sgn_u16: {
}
// bitmap_plot
// Plot a single dot in the bitmap
// void bitmap_plot(__zp($a) unsigned int x, __register(X) char y)
// void bitmap_plot(__zp(6) unsigned int x, __register(X) char y)
bitmap_plot: {
.label __1 = $17
.label plotter = $15
.label x = $a
.label __1 = 4
.label plotter = 2
.label x = 6
// [113] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bitmap_plot_ylo[bitmap_plot::y#4] -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx
lda bitmap_plot_yhi,x
sta.z plotter+1
@ -3226,13 +3226,13 @@ unsigned int abs_u16(unsigned int w)
char abs_u16::$0 // reg byte a 2002.0
char abs_u16::$1 // reg byte a 2002.0
unsigned int abs_u16::return
unsigned int abs_u16::return#0 // return zp[2]:12 202.0
unsigned int abs_u16::return#1 // return zp[2]:12 202.0
unsigned int abs_u16::return#2 // return zp[2]:12 2002.0
unsigned int abs_u16::return#4 // return zp[2]:12 551.0
unsigned int abs_u16::return#0 // return zp[2]:14 202.0
unsigned int abs_u16::return#1 // return zp[2]:14 202.0
unsigned int abs_u16::return#2 // return zp[2]:14 2002.0
unsigned int abs_u16::return#4 // return zp[2]:14 551.0
unsigned int abs_u16::w
unsigned int abs_u16::w#0 // w zp[2]:12 202.0
unsigned int abs_u16::w#2 // w zp[2]:12 776.0
unsigned int abs_u16::w#0 // w zp[2]:14 202.0
unsigned int abs_u16::w#2 // w zp[2]:14 776.0
void bitmap_clear(char bgcol , char fgcol)
char bitmap_clear::bgcol
char bitmap_clear::col
@ -3243,7 +3243,7 @@ void bitmap_init(char *gfx , char *screen)
char bitmap_init::$4 // reg byte a 202.0
char bitmap_init::$5 // reg byte a 202.0
char bitmap_init::$6 // reg byte a 202.0
char bitmap_init::$7 // zp[1]:16 50.5
char bitmap_init::$7 // zp[1]:24 50.5
char bitmap_init::bits
char bitmap_init::bits#1 // reg byte a 101.0
char bitmap_init::bits#3 // reg byte a 151.5
@ -3257,63 +3257,63 @@ char bitmap_init::y
char bitmap_init::y#1 // reg byte x 151.5
char bitmap_init::y#2 // reg byte x 50.5
char *bitmap_init::yoffs
char *bitmap_init::yoffs#1 // yoffs zp[2]:2 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:2 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:2 101.0
char *bitmap_init::yoffs#1 // yoffs zp[2]:20 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:20 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:20 101.0
void bitmap_line(unsigned int x1 , unsigned int y1 , unsigned int x2 , unsigned int y2)
unsigned int bitmap_line::dx
unsigned int bitmap_line::dx#0 // dx zp[2]:17 800.1842105263158
unsigned int bitmap_line::dx#0 // dx zp[2]:18 800.1842105263158
unsigned int bitmap_line::dy
unsigned int bitmap_line::dy#0 // dy zp[2]:12 868.7714285714285
unsigned int bitmap_line::dy#0 // dy zp[2]:14 868.7714285714285
unsigned int bitmap_line::e
unsigned int bitmap_line::e#0 // e zp[2]:8 202.0
unsigned int bitmap_line::e#1 // e zp[2]:8 13334.666666666666
unsigned int bitmap_line::e#2 // e zp[2]:8 20002.0
unsigned int bitmap_line::e#3 // e zp[2]:8 4020.6000000000004
unsigned int bitmap_line::e#6 // e zp[2]:8 15001.5
unsigned int bitmap_line::e#0 // e zp[2]:10 202.0
unsigned int bitmap_line::e#1 // e zp[2]:10 13334.666666666666
unsigned int bitmap_line::e#2 // e zp[2]:10 20002.0
unsigned int bitmap_line::e#3 // e zp[2]:10 4020.6000000000004
unsigned int bitmap_line::e#6 // e zp[2]:10 15001.5
unsigned int bitmap_line::e1
unsigned int bitmap_line::e1#0 // e1 zp[2]:6 202.0
unsigned int bitmap_line::e1#1 // e1 zp[2]:6 13334.666666666666
unsigned int bitmap_line::e1#2 // e1 zp[2]:6 20002.0
unsigned int bitmap_line::e1#3 // e1 zp[2]:6 4020.6000000000004
unsigned int bitmap_line::e1#6 // e1 zp[2]:6 15001.5
unsigned int bitmap_line::e1#0 // e1 zp[2]:12 202.0
unsigned int bitmap_line::e1#1 // e1 zp[2]:12 13334.666666666666
unsigned int bitmap_line::e1#2 // e1 zp[2]:12 20002.0
unsigned int bitmap_line::e1#3 // e1 zp[2]:12 4020.6000000000004
unsigned int bitmap_line::e1#6 // e1 zp[2]:12 15001.5
unsigned int bitmap_line::sx
unsigned int bitmap_line::sx#0 // sx zp[2]:19 693.2068965517242
unsigned int bitmap_line::sx#0 // sx zp[2]:22 693.2068965517242
unsigned int bitmap_line::sy
unsigned int bitmap_line::sy#0 // sy zp[2]:14 773.1923076923076
unsigned int bitmap_line::sy#0 // sy zp[2]:16 773.1923076923076
unsigned int bitmap_line::x
unsigned int bitmap_line::x#1 // x zp[2]:10 10001.0
unsigned int bitmap_line::x#12 // x zp[2]:10 20002.0
unsigned int bitmap_line::x#13 // x zp[2]:10 5714.857142857143
unsigned int bitmap_line::x#15 // x zp[2]:10 5714.857142857143
unsigned int bitmap_line::x#6 // x zp[2]:10 20103.0
unsigned int bitmap_line::x#7 // x zp[2]:10 7500.75
unsigned int bitmap_line::x#1 // x zp[2]:6 10001.0
unsigned int bitmap_line::x#12 // x zp[2]:6 20002.0
unsigned int bitmap_line::x#13 // x zp[2]:6 5714.857142857143
unsigned int bitmap_line::x#15 // x zp[2]:6 5714.857142857143
unsigned int bitmap_line::x#6 // x zp[2]:6 20103.0
unsigned int bitmap_line::x#7 // x zp[2]:6 7500.75
unsigned int bitmap_line::x1
__constant unsigned int bitmap_line::x1#0 = 0 // x1
unsigned int bitmap_line::x2
unsigned int bitmap_line::x2#0 // x2 zp[2]:2 340.4666666666667
unsigned int bitmap_line::x2#0 // x2 zp[2]:20 340.4666666666667
unsigned int bitmap_line::y
unsigned int bitmap_line::y#1 // y zp[2]:4 5714.857142857143
unsigned int bitmap_line::y#13 // y zp[2]:4 20002.0
unsigned int bitmap_line::y#15 // y zp[2]:4 4286.142857142857
unsigned int bitmap_line::y#2 // y zp[2]:4 10001.0
unsigned int bitmap_line::y#4 // y zp[2]:4 5000.5
unsigned int bitmap_line::y#7 // y zp[2]:4 10001.0
unsigned int bitmap_line::y#1 // y zp[2]:8 5714.857142857143
unsigned int bitmap_line::y#13 // y zp[2]:8 20002.0
unsigned int bitmap_line::y#15 // y zp[2]:8 4286.142857142857
unsigned int bitmap_line::y#2 // y zp[2]:8 10001.0
unsigned int bitmap_line::y#4 // y zp[2]:8 5000.5
unsigned int bitmap_line::y#7 // y zp[2]:8 10001.0
unsigned int bitmap_line::y1
__constant unsigned int bitmap_line::y1#0 = 0 // y1
unsigned int bitmap_line::y2
__constant unsigned int bitmap_line::y2#0 = $64 // y2
void bitmap_plot(unsigned int x , char y)
unsigned int bitmap_plot::$1 // zp[2]:23 200002.0
unsigned int bitmap_plot::$1 // zp[2]:4 200002.0
char bitmap_plot::$2 // reg byte x 200002.0
char *bitmap_plot::plotter
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:21 50000.5
char *bitmap_plot::plotter#1 // plotter zp[2]:21 150001.5
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:2 50000.5
char *bitmap_plot::plotter#1 // plotter zp[2]:2 150001.5
unsigned int bitmap_plot::x
unsigned int bitmap_plot::x#1 // x zp[2]:10 10001.0
unsigned int bitmap_plot::x#2 // x zp[2]:10 101.0
unsigned int bitmap_plot::x#3 // x zp[2]:10 10001.0
unsigned int bitmap_plot::x#4 // x zp[2]:10 55026.25
unsigned int bitmap_plot::x#1 // x zp[2]:6 10001.0
unsigned int bitmap_plot::x#2 // x zp[2]:6 101.0
unsigned int bitmap_plot::x#3 // x zp[2]:6 10001.0
unsigned int bitmap_plot::x#4 // x zp[2]:6 55026.25
char bitmap_plot::y
char bitmap_plot::y#1 // reg byte x 20002.0
char bitmap_plot::y#2 // reg byte x 202.0
@ -3328,55 +3328,55 @@ void * memset(void *str , char c , unsigned int num)
char memset::c
char memset::c#4 // reg byte x 125.125
char *memset::dst
char *memset::dst#1 // dst zp[2]:10 2002.0
char *memset::dst#2 // dst zp[2]:10 1368.3333333333335
char *memset::dst#4 // dst zp[2]:10 202.0
char *memset::dst#1 // dst zp[2]:6 2002.0
char *memset::dst#2 // dst zp[2]:6 1368.3333333333335
char *memset::dst#4 // dst zp[2]:6 202.0
char *memset::end
char *memset::end#0 // end zp[2]:8 183.66666666666669
char *memset::end#0 // end zp[2]:10 183.66666666666669
unsigned int memset::num
unsigned int memset::num#2 // num zp[2]:8 101.0
unsigned int memset::num#2 // num zp[2]:10 101.0
void *memset::return
void *memset::str
void *memset::str#3 // str zp[2]:10
void *memset::str#3 // str zp[2]:6
unsigned int next
unsigned int next#0 // next zp[2]:2 11.0
unsigned int next#11 // next zp[2]:2 22.0
unsigned int next#6 // next zp[2]:2 11.0
unsigned int next#0 // next zp[2]:20 11.0
unsigned int next#11 // next zp[2]:20 22.0
unsigned int next#6 // next zp[2]:20 11.0
unsigned int sgn_u16(unsigned int w)
char sgn_u16::$0 // reg byte a 2002.0
char sgn_u16::$1 // reg byte a 2002.0
unsigned int sgn_u16::return
unsigned int sgn_u16::return#0 // return zp[2]:14 202.0
unsigned int sgn_u16::return#1 // return zp[2]:14 202.0
unsigned int sgn_u16::return#4 // return zp[2]:14 50.5
unsigned int sgn_u16::return#0 // return zp[2]:16 202.0
unsigned int sgn_u16::return#1 // return zp[2]:16 202.0
unsigned int sgn_u16::return#4 // return zp[2]:16 50.5
unsigned int sgn_u16::w
unsigned int sgn_u16::w#0 // w zp[2]:21 202.0
unsigned int sgn_u16::w#2 // w zp[2]:21 1102.0
unsigned int sgn_u16::w#0 // w zp[2]:2 202.0
unsigned int sgn_u16::w#2 // w zp[2]:2 1102.0
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp[2]:2 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 next#6 next#11 next#0 bitmap_line::x2#0 ]
zp[2]:4 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ]
zp[2]:6 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
zp[2]:8 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
zp[2]:10 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
zp[2]:20 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 next#6 next#11 next#0 bitmap_line::x2#0 ]
zp[2]:8 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ]
zp[2]:12 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
zp[2]:10 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
zp[2]:6 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
reg byte x [ memset::c#4 ]
zp[2]:12 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:14 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
zp[2]:14 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:16 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ]
zp[1]:16 [ bitmap_init::$7 ]
zp[1]:24 [ bitmap_init::$7 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp[2]:17 [ bitmap_line::dx#0 ]
zp[2]:19 [ bitmap_line::sx#0 ]
zp[2]:18 [ bitmap_line::dx#0 ]
zp[2]:22 [ bitmap_line::sx#0 ]
reg byte a [ abs_u16::$0 ]
reg byte a [ abs_u16::$1 ]
reg byte a [ sgn_u16::$0 ]
reg byte a [ sgn_u16::$1 ]
zp[2]:21 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 ]
zp[2]:23 [ bitmap_plot::$1 ]
zp[2]:2 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 ]
zp[2]:4 [ bitmap_plot::$1 ]
reg byte x [ bitmap_plot::$2 ]
@ -3423,7 +3423,7 @@ Score: 29778
.label VICII_MEMORY = $d018
.label SCREEN = $400
.label BITMAP = $2000
.label next = 2
.label next = $14
.segment Code
// main
main: {
@ -3496,8 +3496,8 @@ main: {
// Initialize bitmap plotting tables
// void bitmap_init(char *gfx, char *screen)
bitmap_init: {
.label __7 = $10
.label yoffs = 2
.label __7 = $18
.label yoffs = $14
// [15] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1]
// [15] phi bitmap_init::x#2 = 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1
ldx #0
@ -3643,20 +3643,20 @@ bitmap_clear: {
}
// bitmap_line
// Draw a line on the bitmap using bresenhams algorithm
// void bitmap_line(unsigned int x1, unsigned int y1, __zp(2) unsigned int x2, unsigned int y2)
// void bitmap_line(unsigned int x1, unsigned int y1, __zp($14) unsigned int x2, unsigned int y2)
bitmap_line: {
.const x1 = 0
.const y1 = 0
.const y2 = $64
.label dx = $11
.label dy = $c
.label sx = $13
.label sy = $e
.label e1 = 6
.label e = 8
.label y = 4
.label x = $a
.label x2 = 2
.label dx = $12
.label dy = $e
.label sx = $16
.label sy = $10
.label e1 = $c
.label e = $a
.label y = 8
.label x = 6
.label x2 = $14
// unsigned int dx = abs_u16(x2-x1)
// [41] abs_u16::w#0 = bitmap_line::x2#0 -- vwuz1=vwuz2
lda.z x2
@ -3975,12 +3975,12 @@ bitmap_line: {
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp($a) void *str, __register(X) char c, __zp(8) unsigned int num)
// void * memset(__zp(6) void *str, __register(X) char c, __zp($a) unsigned int num)
memset: {
.label end = 8
.label dst = $a
.label num = 8
.label str = $a
.label end = $a
.label dst = 6
.label num = $a
.label str = 6
// if(num>0)
// [90] if(memset::num#2<=0) goto memset::@return -- vwuz1_le_0_then_la1
lda.z num
@ -4033,10 +4033,10 @@ memset: {
}
// abs_u16
// Get the absolute value of a 16-bit unsigned number treated as a signed number.
// __zp($c) unsigned int abs_u16(__zp($c) unsigned int w)
// __zp($e) unsigned int abs_u16(__zp($e) unsigned int w)
abs_u16: {
.label w = $c
.label return = $c
.label w = $e
.label return = $e
// BYTE1(w)
// [99] abs_u16::$0 = byte1 abs_u16::w#2 -- vbuaa=_byte1_vwuz1
lda.z w+1
@ -4069,10 +4069,10 @@ abs_u16: {
// sgn_u16
// Get the sign of a 16-bit unsigned number treated as a signed number.
// Returns unsigned -1 if the number is
// __zp($e) unsigned int sgn_u16(__zp($15) unsigned int w)
// __zp($10) unsigned int sgn_u16(__zp(2) unsigned int w)
sgn_u16: {
.label w = $15
.label return = $e
.label w = 2
.label return = $10
// BYTE1(w)
// [106] sgn_u16::$0 = byte1 sgn_u16::w#2 -- vbuaa=_byte1_vwuz1
lda.z w+1
@ -4105,11 +4105,11 @@ sgn_u16: {
}
// bitmap_plot
// Plot a single dot in the bitmap
// void bitmap_plot(__zp($a) unsigned int x, __register(X) char y)
// void bitmap_plot(__zp(6) unsigned int x, __register(X) char y)
bitmap_plot: {
.label __1 = $17
.label plotter = $15
.label x = $a
.label __1 = 4
.label plotter = 2
.label x = 6
// MAKEWORD( bitmap_plot_yhi[y], bitmap_plot_ylo[y] )
// [113] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bitmap_plot_ylo[bitmap_plot::y#4] -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx
lda bitmap_plot_yhi,x

View File

@ -13,13 +13,13 @@ unsigned int abs_u16(unsigned int w)
char abs_u16::$0 // reg byte a 2002.0
char abs_u16::$1 // reg byte a 2002.0
unsigned int abs_u16::return
unsigned int abs_u16::return#0 // return zp[2]:12 202.0
unsigned int abs_u16::return#1 // return zp[2]:12 202.0
unsigned int abs_u16::return#2 // return zp[2]:12 2002.0
unsigned int abs_u16::return#4 // return zp[2]:12 551.0
unsigned int abs_u16::return#0 // return zp[2]:14 202.0
unsigned int abs_u16::return#1 // return zp[2]:14 202.0
unsigned int abs_u16::return#2 // return zp[2]:14 2002.0
unsigned int abs_u16::return#4 // return zp[2]:14 551.0
unsigned int abs_u16::w
unsigned int abs_u16::w#0 // w zp[2]:12 202.0
unsigned int abs_u16::w#2 // w zp[2]:12 776.0
unsigned int abs_u16::w#0 // w zp[2]:14 202.0
unsigned int abs_u16::w#2 // w zp[2]:14 776.0
void bitmap_clear(char bgcol , char fgcol)
char bitmap_clear::bgcol
char bitmap_clear::col
@ -30,7 +30,7 @@ void bitmap_init(char *gfx , char *screen)
char bitmap_init::$4 // reg byte a 202.0
char bitmap_init::$5 // reg byte a 202.0
char bitmap_init::$6 // reg byte a 202.0
char bitmap_init::$7 // zp[1]:16 50.5
char bitmap_init::$7 // zp[1]:24 50.5
char bitmap_init::bits
char bitmap_init::bits#1 // reg byte a 101.0
char bitmap_init::bits#3 // reg byte a 151.5
@ -44,63 +44,63 @@ char bitmap_init::y
char bitmap_init::y#1 // reg byte x 151.5
char bitmap_init::y#2 // reg byte x 50.5
char *bitmap_init::yoffs
char *bitmap_init::yoffs#1 // yoffs zp[2]:2 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:2 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:2 101.0
char *bitmap_init::yoffs#1 // yoffs zp[2]:20 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:20 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:20 101.0
void bitmap_line(unsigned int x1 , unsigned int y1 , unsigned int x2 , unsigned int y2)
unsigned int bitmap_line::dx
unsigned int bitmap_line::dx#0 // dx zp[2]:17 800.1842105263158
unsigned int bitmap_line::dx#0 // dx zp[2]:18 800.1842105263158
unsigned int bitmap_line::dy
unsigned int bitmap_line::dy#0 // dy zp[2]:12 868.7714285714285
unsigned int bitmap_line::dy#0 // dy zp[2]:14 868.7714285714285
unsigned int bitmap_line::e
unsigned int bitmap_line::e#0 // e zp[2]:8 202.0
unsigned int bitmap_line::e#1 // e zp[2]:8 13334.666666666666
unsigned int bitmap_line::e#2 // e zp[2]:8 20002.0
unsigned int bitmap_line::e#3 // e zp[2]:8 4020.6000000000004
unsigned int bitmap_line::e#6 // e zp[2]:8 15001.5
unsigned int bitmap_line::e#0 // e zp[2]:10 202.0
unsigned int bitmap_line::e#1 // e zp[2]:10 13334.666666666666
unsigned int bitmap_line::e#2 // e zp[2]:10 20002.0
unsigned int bitmap_line::e#3 // e zp[2]:10 4020.6000000000004
unsigned int bitmap_line::e#6 // e zp[2]:10 15001.5
unsigned int bitmap_line::e1
unsigned int bitmap_line::e1#0 // e1 zp[2]:6 202.0
unsigned int bitmap_line::e1#1 // e1 zp[2]:6 13334.666666666666
unsigned int bitmap_line::e1#2 // e1 zp[2]:6 20002.0
unsigned int bitmap_line::e1#3 // e1 zp[2]:6 4020.6000000000004
unsigned int bitmap_line::e1#6 // e1 zp[2]:6 15001.5
unsigned int bitmap_line::e1#0 // e1 zp[2]:12 202.0
unsigned int bitmap_line::e1#1 // e1 zp[2]:12 13334.666666666666
unsigned int bitmap_line::e1#2 // e1 zp[2]:12 20002.0
unsigned int bitmap_line::e1#3 // e1 zp[2]:12 4020.6000000000004
unsigned int bitmap_line::e1#6 // e1 zp[2]:12 15001.5
unsigned int bitmap_line::sx
unsigned int bitmap_line::sx#0 // sx zp[2]:19 693.2068965517242
unsigned int bitmap_line::sx#0 // sx zp[2]:22 693.2068965517242
unsigned int bitmap_line::sy
unsigned int bitmap_line::sy#0 // sy zp[2]:14 773.1923076923076
unsigned int bitmap_line::sy#0 // sy zp[2]:16 773.1923076923076
unsigned int bitmap_line::x
unsigned int bitmap_line::x#1 // x zp[2]:10 10001.0
unsigned int bitmap_line::x#12 // x zp[2]:10 20002.0
unsigned int bitmap_line::x#13 // x zp[2]:10 5714.857142857143
unsigned int bitmap_line::x#15 // x zp[2]:10 5714.857142857143
unsigned int bitmap_line::x#6 // x zp[2]:10 20103.0
unsigned int bitmap_line::x#7 // x zp[2]:10 7500.75
unsigned int bitmap_line::x#1 // x zp[2]:6 10001.0
unsigned int bitmap_line::x#12 // x zp[2]:6 20002.0
unsigned int bitmap_line::x#13 // x zp[2]:6 5714.857142857143
unsigned int bitmap_line::x#15 // x zp[2]:6 5714.857142857143
unsigned int bitmap_line::x#6 // x zp[2]:6 20103.0
unsigned int bitmap_line::x#7 // x zp[2]:6 7500.75
unsigned int bitmap_line::x1
__constant unsigned int bitmap_line::x1#0 = 0 // x1
unsigned int bitmap_line::x2
unsigned int bitmap_line::x2#0 // x2 zp[2]:2 340.4666666666667
unsigned int bitmap_line::x2#0 // x2 zp[2]:20 340.4666666666667
unsigned int bitmap_line::y
unsigned int bitmap_line::y#1 // y zp[2]:4 5714.857142857143
unsigned int bitmap_line::y#13 // y zp[2]:4 20002.0
unsigned int bitmap_line::y#15 // y zp[2]:4 4286.142857142857
unsigned int bitmap_line::y#2 // y zp[2]:4 10001.0
unsigned int bitmap_line::y#4 // y zp[2]:4 5000.5
unsigned int bitmap_line::y#7 // y zp[2]:4 10001.0
unsigned int bitmap_line::y#1 // y zp[2]:8 5714.857142857143
unsigned int bitmap_line::y#13 // y zp[2]:8 20002.0
unsigned int bitmap_line::y#15 // y zp[2]:8 4286.142857142857
unsigned int bitmap_line::y#2 // y zp[2]:8 10001.0
unsigned int bitmap_line::y#4 // y zp[2]:8 5000.5
unsigned int bitmap_line::y#7 // y zp[2]:8 10001.0
unsigned int bitmap_line::y1
__constant unsigned int bitmap_line::y1#0 = 0 // y1
unsigned int bitmap_line::y2
__constant unsigned int bitmap_line::y2#0 = $64 // y2
void bitmap_plot(unsigned int x , char y)
unsigned int bitmap_plot::$1 // zp[2]:23 200002.0
unsigned int bitmap_plot::$1 // zp[2]:4 200002.0
char bitmap_plot::$2 // reg byte x 200002.0
char *bitmap_plot::plotter
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:21 50000.5
char *bitmap_plot::plotter#1 // plotter zp[2]:21 150001.5
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:2 50000.5
char *bitmap_plot::plotter#1 // plotter zp[2]:2 150001.5
unsigned int bitmap_plot::x
unsigned int bitmap_plot::x#1 // x zp[2]:10 10001.0
unsigned int bitmap_plot::x#2 // x zp[2]:10 101.0
unsigned int bitmap_plot::x#3 // x zp[2]:10 10001.0
unsigned int bitmap_plot::x#4 // x zp[2]:10 55026.25
unsigned int bitmap_plot::x#1 // x zp[2]:6 10001.0
unsigned int bitmap_plot::x#2 // x zp[2]:6 101.0
unsigned int bitmap_plot::x#3 // x zp[2]:6 10001.0
unsigned int bitmap_plot::x#4 // x zp[2]:6 55026.25
char bitmap_plot::y
char bitmap_plot::y#1 // reg byte x 20002.0
char bitmap_plot::y#2 // reg byte x 202.0
@ -115,53 +115,53 @@ void * memset(void *str , char c , unsigned int num)
char memset::c
char memset::c#4 // reg byte x 125.125
char *memset::dst
char *memset::dst#1 // dst zp[2]:10 2002.0
char *memset::dst#2 // dst zp[2]:10 1368.3333333333335
char *memset::dst#4 // dst zp[2]:10 202.0
char *memset::dst#1 // dst zp[2]:6 2002.0
char *memset::dst#2 // dst zp[2]:6 1368.3333333333335
char *memset::dst#4 // dst zp[2]:6 202.0
char *memset::end
char *memset::end#0 // end zp[2]:8 183.66666666666669
char *memset::end#0 // end zp[2]:10 183.66666666666669
unsigned int memset::num
unsigned int memset::num#2 // num zp[2]:8 101.0
unsigned int memset::num#2 // num zp[2]:10 101.0
void *memset::return
void *memset::str
void *memset::str#3 // str zp[2]:10
void *memset::str#3 // str zp[2]:6
unsigned int next
unsigned int next#0 // next zp[2]:2 11.0
unsigned int next#11 // next zp[2]:2 22.0
unsigned int next#6 // next zp[2]:2 11.0
unsigned int next#0 // next zp[2]:20 11.0
unsigned int next#11 // next zp[2]:20 22.0
unsigned int next#6 // next zp[2]:20 11.0
unsigned int sgn_u16(unsigned int w)
char sgn_u16::$0 // reg byte a 2002.0
char sgn_u16::$1 // reg byte a 2002.0
unsigned int sgn_u16::return
unsigned int sgn_u16::return#0 // return zp[2]:14 202.0
unsigned int sgn_u16::return#1 // return zp[2]:14 202.0
unsigned int sgn_u16::return#4 // return zp[2]:14 50.5
unsigned int sgn_u16::return#0 // return zp[2]:16 202.0
unsigned int sgn_u16::return#1 // return zp[2]:16 202.0
unsigned int sgn_u16::return#4 // return zp[2]:16 50.5
unsigned int sgn_u16::w
unsigned int sgn_u16::w#0 // w zp[2]:21 202.0
unsigned int sgn_u16::w#2 // w zp[2]:21 1102.0
unsigned int sgn_u16::w#0 // w zp[2]:2 202.0
unsigned int sgn_u16::w#2 // w zp[2]:2 1102.0
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp[2]:2 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 next#6 next#11 next#0 bitmap_line::x2#0 ]
zp[2]:4 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ]
zp[2]:6 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
zp[2]:8 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
zp[2]:10 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
zp[2]:20 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 next#6 next#11 next#0 bitmap_line::x2#0 ]
zp[2]:8 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#1 bitmap_line::y#2 ]
zp[2]:12 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
zp[2]:10 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
zp[2]:6 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
reg byte x [ memset::c#4 ]
zp[2]:12 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:14 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
zp[2]:14 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:16 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ]
zp[1]:16 [ bitmap_init::$7 ]
zp[1]:24 [ bitmap_init::$7 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp[2]:17 [ bitmap_line::dx#0 ]
zp[2]:19 [ bitmap_line::sx#0 ]
zp[2]:18 [ bitmap_line::dx#0 ]
zp[2]:22 [ bitmap_line::sx#0 ]
reg byte a [ abs_u16::$0 ]
reg byte a [ abs_u16::$1 ]
reg byte a [ sgn_u16::$0 ]
reg byte a [ sgn_u16::$1 ]
zp[2]:21 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 ]
zp[2]:23 [ bitmap_plot::$1 ]
zp[2]:2 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 ]
zp[2]:4 [ bitmap_plot::$1 ]
reg byte x [ bitmap_plot::$2 ]

View File

@ -80,7 +80,7 @@
.label BITMAP = $2000
.label SCREEN = $400
// Counts frames - updated by the IRQ
.label frame_cnt = 8
.label frame_cnt = $d
.segment Code
__start: {
// volatile byte frame_cnt = 1
@ -115,10 +115,10 @@ irq: {
}
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label x = 2
.label y = 4
.label vx = 5
.label vy = 7
.label x = 6
.label y = $c
.label vx = $a
.label vy = 9
// bitmap_init(BITMAP, SCREEN)
jsr bitmap_init
// bitmap_clear(BLACK, WHITE)
@ -199,8 +199,8 @@ main: {
// Initialize bitmap plotting tables
// void bitmap_init(char *gfx, char *screen)
bitmap_init: {
.label __7 = 9
.label yoffs = $c
.label __7 = 8
.label yoffs = 4
ldx #0
lda #$80
__b1:
@ -326,11 +326,11 @@ init_irq: {
rts
}
// Plot a single dot in the bitmap
// void bitmap_plot(__zp(2) unsigned int x, __register(X) char y)
// void bitmap_plot(__zp(6) unsigned int x, __register(X) char y)
bitmap_plot: {
.label __1 = $c
.label plotter = $a
.label x = 2
.label __1 = 4
.label plotter = 2
.label x = 6
// MAKEWORD( bitmap_plot_yhi[y], bitmap_plot_ylo[y] )
lda bitmap_plot_yhi,x
sta.z plotter+1
@ -362,12 +362,12 @@ bitmap_plot: {
rts
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp($a) void *str, __register(X) char c, __zp($c) unsigned int num)
// void * memset(__zp(2) void *str, __register(X) char c, __zp(4) unsigned int num)
memset: {
.label end = $c
.label dst = $a
.label num = $c
.label str = $a
.label end = 4
.label dst = 2
.label num = 4
.label str = 2
// if(num>0)
lda.z num
bne !+

View File

@ -1444,32 +1444,32 @@ Complete equivalence classes
[ bitmap_plot::plotter#1 ]
[ bitmap_plot::$2 ]
[ memset::end#0 ]
Allocated zp[2]:2 [ main::x#2 main::x#1 ]
Allocated zp[1]:4 [ main::y#2 main::y#1 ]
Allocated zp[2]:5 [ main::vx#2 main::vx#6 main::vx#1 ]
Allocated zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ]
Allocated zp[1]:8 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
Allocated zp[1]:9 [ bitmap_init::x#2 bitmap_init::x#1 ]
Allocated zp[1]:10 [ bitmap_init::y#2 bitmap_init::y#1 ]
Allocated zp[2]:11 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated zp[2]:13 [ memset::num#2 ]
Allocated zp[2]:15 [ memset::str#3 ]
Allocated zp[1]:17 [ memset::c#4 ]
Allocated zp[2]:18 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[1]:20 [ frame_cnt ]
Allocated zp[2]:21 [ bitmap_plot::x#0 ]
Allocated zp[1]:23 [ bitmap_plot::y#0 ]
Allocated zp[1]:24 [ bitmap_init::$7 ]
Allocated zp[1]:25 [ bitmap_init::$4 ]
Allocated zp[1]:26 [ bitmap_init::$5 ]
Allocated zp[1]:27 [ bitmap_init::$6 ]
Allocated zp[2]:28 [ bitmap_plot::plotter#0 ]
Allocated zp[2]:30 [ bitmap_plot::$1 ]
Allocated zp[2]:32 [ bitmap_plot::plotter#1 ]
Allocated zp[1]:34 [ bitmap_plot::$2 ]
Allocated zp[2]:35 [ memset::end#0 ]
Allocated zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[2]:4 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated zp[1]:6 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
Allocated zp[1]:7 [ bitmap_plot::y#0 ]
Allocated zp[1]:8 [ bitmap_init::x#2 bitmap_init::x#1 ]
Allocated zp[1]:9 [ bitmap_init::y#2 bitmap_init::y#1 ]
Allocated zp[1]:10 [ bitmap_init::$4 ]
Allocated zp[1]:11 [ bitmap_init::$5 ]
Allocated zp[1]:12 [ bitmap_init::$6 ]
Allocated zp[2]:13 [ bitmap_plot::$1 ]
Allocated zp[1]:15 [ bitmap_plot::$2 ]
Allocated zp[2]:16 [ memset::end#0 ]
Allocated zp[2]:18 [ bitmap_plot::plotter#1 ]
Allocated zp[1]:20 [ memset::c#4 ]
Allocated zp[2]:21 [ memset::num#2 ]
Allocated zp[1]:23 [ bitmap_init::$7 ]
Allocated zp[2]:24 [ bitmap_plot::plotter#0 ]
Allocated zp[2]:26 [ bitmap_plot::x#0 ]
Allocated zp[1]:28 [ main::vy#2 main::vy#8 main::vy#1 ]
Allocated zp[2]:29 [ main::vx#2 main::vx#6 main::vx#1 ]
Allocated zp[2]:31 [ main::x#2 main::x#1 ]
Allocated zp[1]:33 [ main::y#2 main::y#1 ]
Allocated zp[1]:34 [ frame_cnt ]
Allocated zp[2]:35 [ memset::str#3 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Equivalence Class zp[1]:25 [ bitmap_init::$4 ] has ALU potential.
Equivalence Class zp[1]:10 [ bitmap_init::$4 ] has ALU potential.
Statement [1] frame_cnt = 1 [ frame_cnt ] ( [ frame_cnt ] { } ) always clobbers reg byte a
Statement [5] *BG_COLOR = WHITE [ frame_cnt ] ( [ frame_cnt ] { } ) always clobbers reg byte a
Statement [6] if(0==frame_cnt) goto irq::@1 [ frame_cnt ] ( [ frame_cnt ] { } ) always clobbers reg byte a
@ -1479,8 +1479,8 @@ Statement [10] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x r
Statement [15] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 [ frame_cnt ] ( main:3 [ frame_cnt ] { } ) always clobbers reg byte a
Statement [17] *D018 = main::toD0181_return#0 [ frame_cnt ] ( main:3 [ frame_cnt ] { } ) always clobbers reg byte a
Statement [20] bitmap_plot::x#0 = main::x#2 [ frame_cnt main::x#2 main::y#2 main::vx#2 main::vy#2 bitmap_plot::x#0 ] ( main:3 [ frame_cnt main::x#2 main::y#2 main::vx#2 main::vy#2 bitmap_plot::x#0 ] { { bitmap_plot::x#0 = main::x#2 } { bitmap_plot::y#0 = main::y#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::y#2 main::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:33 [ main::y#2 main::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:28 [ main::vy#2 main::vy#8 main::vy#1 ]
Statement [23] main::x#1 = main::x#2 + main::vx#2 [ frame_cnt main::y#2 main::vx#2 main::vy#2 main::x#1 ] ( main:3 [ frame_cnt main::y#2 main::vx#2 main::vy#2 main::x#1 ] { } ) always clobbers reg byte a
Statement [24] main::y#1 = main::y#2 + main::vy#2 [ frame_cnt main::vx#2 main::vy#2 main::x#1 main::y#1 ] ( main:3 [ frame_cnt main::vx#2 main::vy#2 main::x#1 main::y#1 ] { } ) always clobbers reg byte a
Statement [25] if(main::x#1==$13f) goto main::@5 [ frame_cnt main::vx#2 main::vy#2 main::x#1 main::y#1 ] ( main:3 [ frame_cnt main::vx#2 main::vy#2 main::x#1 main::y#1 ] { } ) always clobbers reg byte a
@ -1488,10 +1488,10 @@ Statement [26] if(main::x#1!=0) goto main::@3 [ frame_cnt main::vx#2 main::vy#2
Statement [27] main::vx#1 = - main::vx#2 [ frame_cnt main::vy#2 main::x#1 main::y#1 main::vx#1 ] ( main:3 [ frame_cnt main::vy#2 main::x#1 main::y#1 main::vx#1 ] { } ) always clobbers reg byte a
Statement [31] main::vy#1 = - main::vy#2 [ frame_cnt main::x#1 main::y#1 main::vx#6 main::vy#1 ] ( main:3 [ frame_cnt main::x#1 main::y#1 main::vx#6 main::vy#1 ] { } ) always clobbers reg byte a
Statement [33] plots_per_frame[frame_cnt] = ++ plots_per_frame[frame_cnt] [ frame_cnt main::x#1 main::y#1 main::vx#6 main::vy#8 ] ( main:3 [ frame_cnt main::x#1 main::y#1 main::vx#6 main::vy#8 ] { } ) always clobbers reg byte x
Removing always clobbered register reg byte x as potential for zp[1]:4 [ main::y#2 main::y#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:33 [ main::y#2 main::y#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:28 [ main::vy#2 main::vy#8 main::vy#1 ]
Statement [51] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + (unsigned int)$28*8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:12 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:10 [ bitmap_init::y#2 bitmap_init::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:9 [ bitmap_init::y#2 bitmap_init::y#1 ]
Statement [62] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:18 [ frame_cnt ] { } ) always clobbers reg byte a
Statement [63] *PROCPORT = PROCPORT_RAM_IO [ ] ( main:3::init_irq:18 [ frame_cnt ] { } ) always clobbers reg byte a
Statement [64] *((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:18 [ frame_cnt ] { } ) always clobbers reg byte a
@ -1503,15 +1503,15 @@ Statement [71] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#0] w= bit
Statement [72] bitmap_plot::$1 = bitmap_plot::x#0 & $fff8 [ bitmap_plot::x#0 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:3::bitmap_plot:22 [ frame_cnt main::x#2 main::y#2 main::vx#2 main::vy#2 bitmap_plot::x#0 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { bitmap_plot::x#0 = main::x#2 } { bitmap_plot::y#0 = main::y#2 } } ) always clobbers reg byte a
Statement [73] bitmap_plot::plotter#1 = (char *)bitmap_plot::plotter#0 + bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:3::bitmap_plot:22 [ frame_cnt main::x#2 main::y#2 main::vx#2 main::vy#2 bitmap_plot::x#0 bitmap_plot::plotter#1 ] { { bitmap_plot::x#0 = main::x#2 } { bitmap_plot::y#0 = main::y#2 } } ) always clobbers reg byte a
Statement [75] *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$2] [ ] ( main:3::bitmap_plot:22 [ frame_cnt main::x#2 main::y#2 main::vx#2 main::vy#2 ] { { bitmap_plot::x#0 = main::x#2 } { bitmap_plot::y#0 = main::y#2 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::y#2 main::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:33 [ main::y#2 main::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:28 [ main::vy#2 main::vy#8 main::vy#1 ]
Statement [78] if(memset::num#2<=0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:3::bitmap_clear:14::memset:57 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] { } main:3::bitmap_clear:14::memset:59 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:17 [ memset::c#4 ]
Removing always clobbered register reg byte a as potential for zp[1]:20 [ memset::c#4 ]
Statement [79] memset::end#0 = (char *)memset::str#3 + memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::bitmap_clear:14::memset:57 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] { } main:3::bitmap_clear:14::memset:59 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] { } ) always clobbers reg byte a
Statement [80] memset::dst#4 = (char *)memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::bitmap_clear:14::memset:57 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] { } main:3::bitmap_clear:14::memset:59 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a
Statement [82] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:14::memset:57 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] { } main:3::bitmap_clear:14::memset:59 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a
Statement [84] *memset::dst#2 = memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:14::memset:57 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] { } main:3::bitmap_clear:14::memset:59 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:17 [ memset::c#4 ]
Removing always clobbered register reg byte y as potential for zp[1]:20 [ memset::c#4 ]
Statement [1] frame_cnt = 1 [ frame_cnt ] ( [ frame_cnt ] { } ) always clobbers reg byte a
Statement [5] *BG_COLOR = WHITE [ frame_cnt ] ( [ frame_cnt ] { } ) always clobbers reg byte a
Statement [6] if(0==frame_cnt) goto irq::@1 [ frame_cnt ] ( [ frame_cnt ] { } ) always clobbers reg byte a
@ -1548,37 +1548,37 @@ Statement [79] memset::end#0 = (char *)memset::str#3 + memset::num#2 [ memset::s
Statement [80] memset::dst#4 = (char *)memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::bitmap_clear:14::memset:57 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] { } main:3::bitmap_clear:14::memset:59 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a
Statement [82] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:14::memset:57 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] { } main:3::bitmap_clear:14::memset:59 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a
Statement [84] *memset::dst#2 = memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:14::memset:57 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] { } main:3::bitmap_clear:14::memset:59 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
Potential registers zp[2]:2 [ main::x#2 main::x#1 ] : zp[2]:2 ,
Potential registers zp[1]:4 [ main::y#2 main::y#1 ] : zp[1]:4 ,
Potential registers zp[2]:5 [ main::vx#2 main::vx#6 main::vx#1 ] : zp[2]:5 ,
Potential registers zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ] : zp[1]:7 ,
Potential registers zp[1]:8 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:9 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:10 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:10 , reg byte x , reg byte y ,
Potential registers zp[2]:11 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:11 ,
Potential registers zp[2]:13 [ memset::num#2 ] : zp[2]:13 ,
Potential registers zp[2]:15 [ memset::str#3 ] : zp[2]:15 ,
Potential registers zp[1]:17 [ memset::c#4 ] : zp[1]:17 , reg byte x ,
Potential registers zp[2]:18 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:18 ,
Potential registers zp[1]:20 [ frame_cnt ] : zp[1]:20 ,
Potential registers zp[2]:21 [ bitmap_plot::x#0 ] : zp[2]:21 ,
Potential registers zp[1]:23 [ bitmap_plot::y#0 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:24 [ bitmap_init::$7 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:25 [ bitmap_init::$4 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , reg byte alu ,
Potential registers zp[1]:26 [ bitmap_init::$5 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:27 [ bitmap_init::$6 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:28 [ bitmap_plot::plotter#0 ] : zp[2]:28 ,
Potential registers zp[2]:30 [ bitmap_plot::$1 ] : zp[2]:30 ,
Potential registers zp[2]:32 [ bitmap_plot::plotter#1 ] : zp[2]:32 ,
Potential registers zp[1]:34 [ bitmap_plot::$2 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:35 [ memset::end#0 ] : zp[2]:35 ,
Potential registers zp[2]:31 [ main::x#2 main::x#1 ] : zp[2]:31 ,
Potential registers zp[1]:33 [ main::y#2 main::y#1 ] : zp[1]:33 ,
Potential registers zp[2]:29 [ main::vx#2 main::vx#6 main::vx#1 ] : zp[2]:29 ,
Potential registers zp[1]:28 [ main::vy#2 main::vy#8 main::vy#1 ] : zp[1]:28 ,
Potential registers zp[1]:6 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:9 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:9 , reg byte x , reg byte y ,
Potential registers zp[2]:4 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:4 ,
Potential registers zp[2]:21 [ memset::num#2 ] : zp[2]:21 ,
Potential registers zp[2]:35 [ memset::str#3 ] : zp[2]:35 ,
Potential registers zp[1]:20 [ memset::c#4 ] : zp[1]:20 , reg byte x ,
Potential registers zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:2 ,
Potential registers zp[1]:34 [ frame_cnt ] : zp[1]:34 ,
Potential registers zp[2]:26 [ bitmap_plot::x#0 ] : zp[2]:26 ,
Potential registers zp[1]:7 [ bitmap_plot::y#0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:23 [ bitmap_init::$7 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:10 [ bitmap_init::$4 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , reg byte alu ,
Potential registers zp[1]:11 [ bitmap_init::$5 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:12 [ bitmap_init::$6 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:24 [ bitmap_plot::plotter#0 ] : zp[2]:24 ,
Potential registers zp[2]:13 [ bitmap_plot::$1 ] : zp[2]:13 ,
Potential registers zp[2]:18 [ bitmap_plot::plotter#1 ] : zp[2]:18 ,
Potential registers zp[1]:15 [ bitmap_plot::$2 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:16 [ memset::end#0 ] : zp[2]:16 ,
REGISTER UPLIFT SCOPES
Uplift Scope [memset] 35,672.33: zp[2]:18 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 1,833.67: zp[2]:35 [ memset::end#0 ] 1,250.12: zp[1]:17 [ memset::c#4 ] 1,001: zp[2]:13 [ memset::num#2 ] 0: zp[2]:15 [ memset::str#3 ]
Uplift Scope [bitmap_init] 3,628.62: zp[2]:11 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 3,169.83: zp[1]:8 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 2,002: zp[1]:9 [ bitmap_init::x#2 bitmap_init::x#1 ] 2,002: zp[1]:10 [ bitmap_init::y#2 bitmap_init::y#1 ] 2,002: zp[1]:25 [ bitmap_init::$4 ] 2,002: zp[1]:26 [ bitmap_init::$5 ] 2,002: zp[1]:27 [ bitmap_init::$6 ] 500.5: zp[1]:24 [ bitmap_init::$7 ]
Uplift Scope [bitmap_plot] 2,103: zp[1]:23 [ bitmap_plot::y#0 ] 2,002: zp[2]:30 [ bitmap_plot::$1 ] 2,002: zp[1]:34 [ bitmap_plot::$2 ] 1,501.5: zp[2]:32 [ bitmap_plot::plotter#1 ] 500.5: zp[2]:28 [ bitmap_plot::plotter#0 ] 420.6: zp[2]:21 [ bitmap_plot::x#0 ]
Uplift Scope [main] 387.17: zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ] 303: zp[2]:5 [ main::vx#2 main::vx#6 main::vx#1 ] 112.48: zp[2]:2 [ main::x#2 main::x#1 ] 101: zp[1]:4 [ main::y#2 main::y#1 ]
Uplift Scope [] 7.78: zp[1]:20 [ frame_cnt ]
Uplift Scope [memset] 35,672.33: zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 1,833.67: zp[2]:16 [ memset::end#0 ] 1,250.12: zp[1]:20 [ memset::c#4 ] 1,001: zp[2]:21 [ memset::num#2 ] 0: zp[2]:35 [ memset::str#3 ]
Uplift Scope [bitmap_init] 3,628.62: zp[2]:4 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 3,169.83: zp[1]:6 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 2,002: zp[1]:8 [ bitmap_init::x#2 bitmap_init::x#1 ] 2,002: zp[1]:9 [ bitmap_init::y#2 bitmap_init::y#1 ] 2,002: zp[1]:10 [ bitmap_init::$4 ] 2,002: zp[1]:11 [ bitmap_init::$5 ] 2,002: zp[1]:12 [ bitmap_init::$6 ] 500.5: zp[1]:23 [ bitmap_init::$7 ]
Uplift Scope [bitmap_plot] 2,103: zp[1]:7 [ bitmap_plot::y#0 ] 2,002: zp[2]:13 [ bitmap_plot::$1 ] 2,002: zp[1]:15 [ bitmap_plot::$2 ] 1,501.5: zp[2]:18 [ bitmap_plot::plotter#1 ] 500.5: zp[2]:24 [ bitmap_plot::plotter#0 ] 420.6: zp[2]:26 [ bitmap_plot::x#0 ]
Uplift Scope [main] 387.17: zp[1]:28 [ main::vy#2 main::vy#8 main::vy#1 ] 303: zp[2]:29 [ main::vx#2 main::vx#6 main::vx#1 ] 112.48: zp[2]:31 [ main::x#2 main::x#1 ] 101: zp[1]:33 [ main::y#2 main::y#1 ]
Uplift Scope [] 7.78: zp[1]:34 [ frame_cnt ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
@ -1587,12 +1587,12 @@ Uplift Scope [init_irq]
Uplift Scope [irq]
Uplift Scope [__start]
Uplifting [memset] best 4870 combination zp[2]:18 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:35 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:13 [ memset::num#2 ] zp[2]:15 [ memset::str#3 ]
Uplifting [bitmap_init] best 4420 combination zp[2]:11 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:26 [ bitmap_init::$5 ] zp[1]:27 [ bitmap_init::$6 ] zp[1]:24 [ bitmap_init::$7 ]
Uplifting [memset] best 4870 combination zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:16 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:21 [ memset::num#2 ] zp[2]:35 [ memset::str#3 ]
Uplifting [bitmap_init] best 4420 combination zp[2]:4 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:11 [ bitmap_init::$5 ] zp[1]:12 [ bitmap_init::$6 ] zp[1]:23 [ bitmap_init::$7 ]
Limited combination testing to 100 combinations of 15360 possible.
Uplifting [bitmap_plot] best 4381 combination reg byte x [ bitmap_plot::y#0 ] zp[2]:30 [ bitmap_plot::$1 ] reg byte x [ bitmap_plot::$2 ] zp[2]:32 [ bitmap_plot::plotter#1 ] zp[2]:28 [ bitmap_plot::plotter#0 ] zp[2]:21 [ bitmap_plot::x#0 ]
Uplifting [main] best 4381 combination zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ] zp[2]:5 [ main::vx#2 main::vx#6 main::vx#1 ] zp[2]:2 [ main::x#2 main::x#1 ] zp[1]:4 [ main::y#2 main::y#1 ]
Uplifting [] best 4381 combination zp[1]:20 [ frame_cnt ]
Uplifting [bitmap_plot] best 4381 combination reg byte x [ bitmap_plot::y#0 ] zp[2]:13 [ bitmap_plot::$1 ] reg byte x [ bitmap_plot::$2 ] zp[2]:18 [ bitmap_plot::plotter#1 ] zp[2]:24 [ bitmap_plot::plotter#0 ] zp[2]:26 [ bitmap_plot::x#0 ]
Uplifting [main] best 4381 combination zp[1]:28 [ main::vy#2 main::vy#8 main::vy#1 ] zp[2]:29 [ main::vx#2 main::vx#6 main::vx#1 ] zp[2]:31 [ main::x#2 main::x#1 ] zp[1]:33 [ main::y#2 main::y#1 ]
Uplifting [] best 4381 combination zp[1]:34 [ frame_cnt ]
Uplifting [MOS6526_CIA] best 4381 combination
Uplifting [MOS6569_VICII] best 4381 combination
Uplifting [MOS6581_SID] best 4381 combination
@ -1600,29 +1600,33 @@ Uplifting [bitmap_clear] best 4381 combination
Uplifting [init_irq] best 4381 combination
Uplifting [irq] best 4381 combination
Uplifting [__start] best 4381 combination
Attempting to uplift remaining variables inzp[1]:26 [ bitmap_init::$5 ]
Attempting to uplift remaining variables inzp[1]:11 [ bitmap_init::$5 ]
Uplifting [bitmap_init] best 4321 combination reg byte a [ bitmap_init::$5 ]
Attempting to uplift remaining variables inzp[1]:27 [ bitmap_init::$6 ]
Attempting to uplift remaining variables inzp[1]:12 [ bitmap_init::$6 ]
Uplifting [bitmap_init] best 4261 combination reg byte a [ bitmap_init::$6 ]
Attempting to uplift remaining variables inzp[1]:24 [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 4261 combination zp[1]:24 [ bitmap_init::$7 ]
Attempting to uplift remaining variables inzp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ]
Uplifting [main] best 4261 combination zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ]
Attempting to uplift remaining variables inzp[1]:4 [ main::y#2 main::y#1 ]
Uplifting [main] best 4261 combination zp[1]:4 [ main::y#2 main::y#1 ]
Attempting to uplift remaining variables inzp[1]:20 [ frame_cnt ]
Uplifting [] best 4261 combination zp[1]:20 [ frame_cnt ]
Coalescing zero page register [ zp[2]:2 [ main::x#2 main::x#1 ] ] with [ zp[2]:21 [ bitmap_plot::x#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:13 [ memset::num#2 ] ] with [ zp[2]:35 [ memset::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:15 [ memset::str#3 ] ] with [ zp[2]:18 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:28 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:32 [ bitmap_plot::plotter#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:13 [ memset::num#2 memset::end#0 ] ] with [ zp[2]:11 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ]
Coalescing zero page register [ zp[2]:28 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:15 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ]
Coalescing zero page register [ zp[2]:30 [ bitmap_plot::$1 ] ] with [ zp[2]:13 [ memset::num#2 memset::end#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ]
Allocated (was zp[1]:20) zp[1]:8 [ frame_cnt ]
Allocated (was zp[1]:24) zp[1]:9 [ bitmap_init::$7 ]
Allocated (was zp[2]:28) zp[2]:10 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated (was zp[2]:30) zp[2]:12 [ bitmap_plot::$1 memset::num#2 memset::end#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Attempting to uplift remaining variables inzp[1]:23 [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 4261 combination zp[1]:23 [ bitmap_init::$7 ]
Attempting to uplift remaining variables inzp[1]:28 [ main::vy#2 main::vy#8 main::vy#1 ]
Uplifting [main] best 4261 combination zp[1]:28 [ main::vy#2 main::vy#8 main::vy#1 ]
Attempting to uplift remaining variables inzp[1]:33 [ main::y#2 main::y#1 ]
Uplifting [main] best 4261 combination zp[1]:33 [ main::y#2 main::y#1 ]
Attempting to uplift remaining variables inzp[1]:34 [ frame_cnt ]
Uplifting [] best 4261 combination zp[1]:34 [ frame_cnt ]
Coalescing zero page register [ zp[2]:31 [ main::x#2 main::x#1 ] ] with [ zp[2]:26 [ bitmap_plot::x#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:21 [ memset::num#2 ] ] with [ zp[2]:16 [ memset::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:35 [ memset::str#3 ] ] with [ zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:24 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:18 [ bitmap_plot::plotter#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:21 [ memset::num#2 memset::end#0 ] ] with [ zp[2]:4 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ]
Coalescing zero page register [ zp[2]:24 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:35 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ]
Coalescing zero page register [ zp[2]:13 [ bitmap_plot::$1 ] ] with [ zp[2]:21 [ memset::num#2 memset::end#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ]
Allocated (was zp[2]:24) zp[2]:2 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated (was zp[2]:13) zp[2]:4 [ bitmap_plot::$1 memset::num#2 memset::end#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated (was zp[2]:31) zp[2]:6 [ main::x#2 main::x#1 bitmap_plot::x#0 ]
Allocated (was zp[1]:23) zp[1]:8 [ bitmap_init::$7 ]
Allocated (was zp[1]:28) zp[1]:9 [ main::vy#2 main::vy#8 main::vy#1 ]
Allocated (was zp[2]:29) zp[2]:10 [ main::vx#2 main::vx#6 main::vx#1 ]
Allocated (was zp[1]:33) zp[1]:12 [ main::y#2 main::y#1 ]
Allocated (was zp[1]:34) zp[1]:13 [ frame_cnt ]
Interrupt procedure irq clobbers AnzP
ASSEMBLER BEFORE OPTIMIZATION
@ -1711,7 +1715,7 @@ ASSEMBLER BEFORE OPTIMIZATION
.label BITMAP = $2000
.label SCREEN = $400
// Counts frames - updated by the IRQ
.label frame_cnt = 8
.label frame_cnt = $d
.segment Code
// __start
__start: {
@ -1774,10 +1778,10 @@ irq: {
// main
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label x = 2
.label y = 4
.label vx = 5
.label vy = 7
.label x = 6
.label y = $c
.label vx = $a
.label vy = 9
// [12] call bitmap_init
// [34] phi from main to bitmap_init [phi:main->bitmap_init]
bitmap_init_from_main:
@ -1929,8 +1933,8 @@ main: {
// Initialize bitmap plotting tables
// void bitmap_init(char *gfx, char *screen)
bitmap_init: {
.label __7 = 9
.label yoffs = $c
.label __7 = 8
.label yoffs = 4
// [35] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1]
__b1_from_bitmap_init:
// [35] phi bitmap_init::x#2 = 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1
@ -2130,11 +2134,11 @@ init_irq: {
}
// bitmap_plot
// Plot a single dot in the bitmap
// void bitmap_plot(__zp(2) unsigned int x, __register(X) char y)
// void bitmap_plot(__zp(6) unsigned int x, __register(X) char y)
bitmap_plot: {
.label __1 = $c
.label plotter = $a
.label x = 2
.label __1 = 4
.label plotter = 2
.label x = 6
// [71] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#0] w= bitmap_plot_ylo[bitmap_plot::y#0] -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx
lda bitmap_plot_yhi,x
sta.z plotter+1
@ -2170,12 +2174,12 @@ bitmap_plot: {
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp($a) void *str, __register(X) char c, __zp($c) unsigned int num)
// void * memset(__zp(2) void *str, __register(X) char c, __zp(4) unsigned int num)
memset: {
.label end = $c
.label dst = $a
.label num = $c
.label str = $a
.label end = 4
.label dst = 2
.label num = 4
.label str = 2
// [78] if(memset::num#2<=0) goto memset::@return -- vwuz1_le_0_then_la1
lda.z num
bne !+
@ -2371,7 +2375,7 @@ void bitmap_init(char *gfx , char *screen)
char bitmap_init::$4 // reg byte a 2002.0
char bitmap_init::$5 // reg byte a 2002.0
char bitmap_init::$6 // reg byte a 2002.0
char bitmap_init::$7 // zp[1]:9 500.5
char bitmap_init::$7 // zp[1]:8 500.5
char bitmap_init::bits
char bitmap_init::bits#1 // reg byte a 1001.0
char bitmap_init::bits#3 // reg byte a 1501.5
@ -2385,24 +2389,24 @@ char bitmap_init::y
char bitmap_init::y#1 // reg byte x 1501.5
char bitmap_init::y#2 // reg byte x 500.5
char *bitmap_init::yoffs
char *bitmap_init::yoffs#1 // yoffs zp[2]:12 2002.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:12 625.625
char *bitmap_init::yoffs#4 // yoffs zp[2]:12 1001.0
char *bitmap_init::yoffs#1 // yoffs zp[2]:4 2002.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:4 625.625
char *bitmap_init::yoffs#4 // yoffs zp[2]:4 1001.0
void bitmap_plot(unsigned int x , char y)
unsigned int bitmap_plot::$1 // zp[2]:12 2002.0
unsigned int bitmap_plot::$1 // zp[2]:4 2002.0
char bitmap_plot::$2 // reg byte x 2002.0
char *bitmap_plot::plotter
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:10 500.5
char *bitmap_plot::plotter#1 // plotter zp[2]:10 1501.5
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:2 500.5
char *bitmap_plot::plotter#1 // plotter zp[2]:2 1501.5
unsigned int bitmap_plot::x
unsigned int bitmap_plot::x#0 // x zp[2]:2 420.59999999999997
unsigned int bitmap_plot::x#0 // x zp[2]:6 420.59999999999997
char bitmap_plot::y
char bitmap_plot::y#0 // reg byte x 2103.0
__constant const char bitmap_plot_bit[$100] = { fill( $100, 0) }
__constant const char bitmap_plot_yhi[$100] = { fill( $100, 0) }
__constant const char bitmap_plot_ylo[$100] = { fill( $100, 0) }
char *bitmap_screen
__loadstore volatile char frame_cnt // zp[1]:8 7.777777777777779
__loadstore volatile char frame_cnt // zp[1]:13 7.777777777777779
void init_irq()
__interrupt(hardware_clobber) void irq()
void main()
@ -2411,51 +2415,51 @@ char main::toD0181_return
__constant char main::toD0181_return#0 = byte1 (unsigned int)SCREEN&$3fff*4|byte1 (unsigned int)BITMAP/4&$f // toD0181_return
char *main::toD0181_screen
unsigned int main::vx
unsigned int main::vx#1 // vx zp[2]:5 202.0
unsigned int main::vx#2 // vx zp[2]:5 50.5
unsigned int main::vx#6 // vx zp[2]:5 50.5
unsigned int main::vx#1 // vx zp[2]:10 202.0
unsigned int main::vx#2 // vx zp[2]:10 50.5
unsigned int main::vx#6 // vx zp[2]:10 50.5
char main::vy
char main::vy#1 // vy zp[1]:7 202.0
char main::vy#2 // vy zp[1]:7 33.666666666666664
char main::vy#8 // vy zp[1]:7 151.5
char main::vy#1 // vy zp[1]:9 202.0
char main::vy#2 // vy zp[1]:9 33.666666666666664
char main::vy#8 // vy zp[1]:9 151.5
unsigned int main::x
unsigned int main::x#1 // x zp[2]:2 36.72727272727273
unsigned int main::x#2 // x zp[2]:2 75.75
unsigned int main::x#1 // x zp[2]:6 36.72727272727273
unsigned int main::x#2 // x zp[2]:6 75.75
char main::y
char main::y#1 // y zp[1]:4 40.4
char main::y#2 // y zp[1]:4 60.599999999999994
char main::y#1 // y zp[1]:12 40.4
char main::y#2 // y zp[1]:12 60.599999999999994
void * memset(void *str , char c , unsigned int num)
char memset::c
char memset::c#4 // reg byte x 1250.125
char *memset::dst
char *memset::dst#1 // dst zp[2]:10 20002.0
char *memset::dst#2 // dst zp[2]:10 13668.333333333332
char *memset::dst#4 // dst zp[2]:10 2002.0
char *memset::dst#1 // dst zp[2]:2 20002.0
char *memset::dst#2 // dst zp[2]:2 13668.333333333332
char *memset::dst#4 // dst zp[2]:2 2002.0
char *memset::end
char *memset::end#0 // end zp[2]:12 1833.6666666666665
char *memset::end#0 // end zp[2]:4 1833.6666666666665
unsigned int memset::num
unsigned int memset::num#2 // num zp[2]:12 1001.0
unsigned int memset::num#2 // num zp[2]:4 1001.0
void *memset::return
void *memset::str
void *memset::str#3 // str zp[2]:10
void *memset::str#3 // str zp[2]:2
__constant char plots_per_frame[$100] = { fill( $100, 0) }
zp[2]:2 [ main::x#2 main::x#1 bitmap_plot::x#0 ]
zp[1]:4 [ main::y#2 main::y#1 ]
zp[2]:5 [ main::vx#2 main::vx#6 main::vx#1 ]
zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ]
zp[2]:6 [ main::x#2 main::x#1 bitmap_plot::x#0 ]
zp[1]:12 [ main::y#2 main::y#1 ]
zp[2]:10 [ main::vx#2 main::vx#6 main::vx#1 ]
zp[1]:9 [ main::vy#2 main::vy#8 main::vy#1 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
reg byte x [ memset::c#4 ]
zp[1]:8 [ frame_cnt ]
zp[1]:13 [ frame_cnt ]
reg byte x [ bitmap_plot::y#0 ]
zp[1]:9 [ bitmap_init::$7 ]
zp[1]:8 [ bitmap_init::$7 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp[2]:10 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
zp[2]:12 [ bitmap_plot::$1 memset::num#2 memset::end#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp[2]:2 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
zp[2]:4 [ bitmap_plot::$1 memset::num#2 memset::end#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
reg byte x [ bitmap_plot::$2 ]
@ -2547,7 +2551,7 @@ Score: 3200
.label BITMAP = $2000
.label SCREEN = $400
// Counts frames - updated by the IRQ
.label frame_cnt = 8
.label frame_cnt = $d
.segment Code
// __start
__start: {
@ -2604,10 +2608,10 @@ irq: {
// main
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label x = 2
.label y = 4
.label vx = 5
.label vy = 7
.label x = 6
.label y = $c
.label vx = $a
.label vy = 9
// bitmap_init(BITMAP, SCREEN)
// [12] call bitmap_init
// [34] phi from main to bitmap_init [phi:main->bitmap_init]
@ -2737,8 +2741,8 @@ main: {
// Initialize bitmap plotting tables
// void bitmap_init(char *gfx, char *screen)
bitmap_init: {
.label __7 = 9
.label yoffs = $c
.label __7 = 8
.label yoffs = 4
// [35] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1]
// [35] phi bitmap_init::x#2 = 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1
ldx #0
@ -2934,11 +2938,11 @@ init_irq: {
}
// bitmap_plot
// Plot a single dot in the bitmap
// void bitmap_plot(__zp(2) unsigned int x, __register(X) char y)
// void bitmap_plot(__zp(6) unsigned int x, __register(X) char y)
bitmap_plot: {
.label __1 = $c
.label plotter = $a
.label x = 2
.label __1 = 4
.label plotter = 2
.label x = 6
// MAKEWORD( bitmap_plot_yhi[y], bitmap_plot_ylo[y] )
// [71] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#0] w= bitmap_plot_ylo[bitmap_plot::y#0] -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx
lda bitmap_plot_yhi,x
@ -2978,12 +2982,12 @@ bitmap_plot: {
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp($a) void *str, __register(X) char c, __zp($c) unsigned int num)
// void * memset(__zp(2) void *str, __register(X) char c, __zp(4) unsigned int num)
memset: {
.label end = $c
.label dst = $a
.label num = $c
.label str = $a
.label end = 4
.label dst = 2
.label num = 4
.label str = 2
// if(num>0)
// [78] if(memset::num#2<=0) goto memset::@return -- vwuz1_le_0_then_la1
lda.z num

View File

@ -32,7 +32,7 @@ void bitmap_init(char *gfx , char *screen)
char bitmap_init::$4 // reg byte a 2002.0
char bitmap_init::$5 // reg byte a 2002.0
char bitmap_init::$6 // reg byte a 2002.0
char bitmap_init::$7 // zp[1]:9 500.5
char bitmap_init::$7 // zp[1]:8 500.5
char bitmap_init::bits
char bitmap_init::bits#1 // reg byte a 1001.0
char bitmap_init::bits#3 // reg byte a 1501.5
@ -46,24 +46,24 @@ char bitmap_init::y
char bitmap_init::y#1 // reg byte x 1501.5
char bitmap_init::y#2 // reg byte x 500.5
char *bitmap_init::yoffs
char *bitmap_init::yoffs#1 // yoffs zp[2]:12 2002.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:12 625.625
char *bitmap_init::yoffs#4 // yoffs zp[2]:12 1001.0
char *bitmap_init::yoffs#1 // yoffs zp[2]:4 2002.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:4 625.625
char *bitmap_init::yoffs#4 // yoffs zp[2]:4 1001.0
void bitmap_plot(unsigned int x , char y)
unsigned int bitmap_plot::$1 // zp[2]:12 2002.0
unsigned int bitmap_plot::$1 // zp[2]:4 2002.0
char bitmap_plot::$2 // reg byte x 2002.0
char *bitmap_plot::plotter
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:10 500.5
char *bitmap_plot::plotter#1 // plotter zp[2]:10 1501.5
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:2 500.5
char *bitmap_plot::plotter#1 // plotter zp[2]:2 1501.5
unsigned int bitmap_plot::x
unsigned int bitmap_plot::x#0 // x zp[2]:2 420.59999999999997
unsigned int bitmap_plot::x#0 // x zp[2]:6 420.59999999999997
char bitmap_plot::y
char bitmap_plot::y#0 // reg byte x 2103.0
__constant const char bitmap_plot_bit[$100] = { fill( $100, 0) }
__constant const char bitmap_plot_yhi[$100] = { fill( $100, 0) }
__constant const char bitmap_plot_ylo[$100] = { fill( $100, 0) }
char *bitmap_screen
__loadstore volatile char frame_cnt // zp[1]:8 7.777777777777779
__loadstore volatile char frame_cnt // zp[1]:13 7.777777777777779
void init_irq()
__interrupt(hardware_clobber) void irq()
void main()
@ -72,49 +72,49 @@ char main::toD0181_return
__constant char main::toD0181_return#0 = byte1 (unsigned int)SCREEN&$3fff*4|byte1 (unsigned int)BITMAP/4&$f // toD0181_return
char *main::toD0181_screen
unsigned int main::vx
unsigned int main::vx#1 // vx zp[2]:5 202.0
unsigned int main::vx#2 // vx zp[2]:5 50.5
unsigned int main::vx#6 // vx zp[2]:5 50.5
unsigned int main::vx#1 // vx zp[2]:10 202.0
unsigned int main::vx#2 // vx zp[2]:10 50.5
unsigned int main::vx#6 // vx zp[2]:10 50.5
char main::vy
char main::vy#1 // vy zp[1]:7 202.0
char main::vy#2 // vy zp[1]:7 33.666666666666664
char main::vy#8 // vy zp[1]:7 151.5
char main::vy#1 // vy zp[1]:9 202.0
char main::vy#2 // vy zp[1]:9 33.666666666666664
char main::vy#8 // vy zp[1]:9 151.5
unsigned int main::x
unsigned int main::x#1 // x zp[2]:2 36.72727272727273
unsigned int main::x#2 // x zp[2]:2 75.75
unsigned int main::x#1 // x zp[2]:6 36.72727272727273
unsigned int main::x#2 // x zp[2]:6 75.75
char main::y
char main::y#1 // y zp[1]:4 40.4
char main::y#2 // y zp[1]:4 60.599999999999994
char main::y#1 // y zp[1]:12 40.4
char main::y#2 // y zp[1]:12 60.599999999999994
void * memset(void *str , char c , unsigned int num)
char memset::c
char memset::c#4 // reg byte x 1250.125
char *memset::dst
char *memset::dst#1 // dst zp[2]:10 20002.0
char *memset::dst#2 // dst zp[2]:10 13668.333333333332
char *memset::dst#4 // dst zp[2]:10 2002.0
char *memset::dst#1 // dst zp[2]:2 20002.0
char *memset::dst#2 // dst zp[2]:2 13668.333333333332
char *memset::dst#4 // dst zp[2]:2 2002.0
char *memset::end
char *memset::end#0 // end zp[2]:12 1833.6666666666665
char *memset::end#0 // end zp[2]:4 1833.6666666666665
unsigned int memset::num
unsigned int memset::num#2 // num zp[2]:12 1001.0
unsigned int memset::num#2 // num zp[2]:4 1001.0
void *memset::return
void *memset::str
void *memset::str#3 // str zp[2]:10
void *memset::str#3 // str zp[2]:2
__constant char plots_per_frame[$100] = { fill( $100, 0) }
zp[2]:2 [ main::x#2 main::x#1 bitmap_plot::x#0 ]
zp[1]:4 [ main::y#2 main::y#1 ]
zp[2]:5 [ main::vx#2 main::vx#6 main::vx#1 ]
zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ]
zp[2]:6 [ main::x#2 main::x#1 bitmap_plot::x#0 ]
zp[1]:12 [ main::y#2 main::y#1 ]
zp[2]:10 [ main::vx#2 main::vx#6 main::vx#1 ]
zp[1]:9 [ main::vy#2 main::vy#8 main::vy#1 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
reg byte x [ memset::c#4 ]
zp[1]:8 [ frame_cnt ]
zp[1]:13 [ frame_cnt ]
reg byte x [ bitmap_plot::y#0 ]
zp[1]:9 [ bitmap_init::$7 ]
zp[1]:8 [ bitmap_init::$7 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp[2]:10 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
zp[2]:12 [ bitmap_plot::$1 memset::num#2 memset::end#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp[2]:2 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
zp[2]:4 [ bitmap_plot::$1 memset::num#2 memset::end#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
reg byte x [ bitmap_plot::$2 ]

View File

@ -38,9 +38,9 @@
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label __13 = 6
.label __14 = $10
.label a = 3
.label i = 2
.label __14 = $16
.label a = $1c
.label i = $1b
// bitmap_init(BITMAP, SCREEN)
jsr bitmap_init
// bitmap_clear(BLACK, WHITE)
@ -113,8 +113,8 @@ main: {
// Initialize bitmap plotting tables
// void bitmap_init(char *gfx, char *screen)
bitmap_init: {
.label __7 = $14
.label yoffs = 4
.label __7 = $1a
.label yoffs = $c
ldx #0
lda #$80
__b1:
@ -202,20 +202,20 @@ bitmap_clear: {
rts
}
// Draw a line on the bitmap using bresenhams algorithm
// void bitmap_line(__zp(6) unsigned int x1, __zp(8) unsigned int y1, __zp($10) unsigned int x2, __zp($12) unsigned int y2)
// void bitmap_line(__zp(6) unsigned int x1, __zp($a) unsigned int y1, __zp($16) unsigned int x2, __zp($18) unsigned int y2)
bitmap_line: {
.label dx = $15
.label dy = $c
.label sx = $17
.label sy = $e
.label e1 = $a
.label e = 4
.label y = 8
.label dx = $12
.label dy = $e
.label sx = $14
.label sy = $10
.label e1 = 8
.label e = $c
.label y = $a
.label x = 6
.label x1 = 6
.label y1 = 8
.label x2 = $10
.label y2 = $12
.label y1 = $a
.label x2 = $16
.label y2 = $18
// unsigned int dx = abs_u16(x2-x1)
lda.z x2
sec
@ -418,12 +418,12 @@ bitmap_line: {
rts
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp($a) void *str, __register(X) char c, __zp(8) unsigned int num)
// void * memset(__zp(8) void *str, __register(X) char c, __zp($a) unsigned int num)
memset: {
.label end = 8
.label dst = $a
.label num = 8
.label str = $a
.label end = $a
.label dst = 8
.label num = $a
.label str = 8
// if(num>0)
lda.z num
bne !+
@ -462,10 +462,10 @@ memset: {
jmp __b2
}
// Get the absolute value of a 16-bit unsigned number treated as a signed number.
// __zp($c) unsigned int abs_u16(__zp($c) unsigned int w)
// __zp($e) unsigned int abs_u16(__zp($e) unsigned int w)
abs_u16: {
.label w = $c
.label return = $c
.label w = $e
.label return = $e
// BYTE1(w)
lda.z w+1
// BYTE1(w)&0x80
@ -488,10 +488,10 @@ abs_u16: {
}
// Get the sign of a 16-bit unsigned number treated as a signed number.
// Returns unsigned -1 if the number is
// __zp($e) unsigned int sgn_u16(__zp($19) unsigned int w)
// __zp($10) unsigned int sgn_u16(__zp(2) unsigned int w)
sgn_u16: {
.label w = $19
.label return = $e
.label w = 2
.label return = $10
// BYTE1(w)
lda.z w+1
// BYTE1(w)&0x80
@ -514,8 +514,8 @@ sgn_u16: {
// Plot a single dot in the bitmap
// void bitmap_plot(__zp(6) unsigned int x, __register(X) char y)
bitmap_plot: {
.label __1 = $1b
.label plotter = $19
.label __1 = 4
.label plotter = 2
.label x = 6
// MAKEWORD( bitmap_plot_yhi[y], bitmap_plot_ylo[y] )
lda bitmap_plot_yhi,x

View File

@ -2144,57 +2144,57 @@ Complete equivalence classes
[ bitmap_plot::$1 ]
[ bitmap_plot::plotter#1 ]
[ bitmap_plot::$2 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:3 [ main::a#2 main::a#1 ]
Allocated zp[1]:4 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
Allocated zp[1]:5 [ bitmap_init::x#2 bitmap_init::x#1 ]
Allocated zp[1]:6 [ bitmap_init::y#2 bitmap_init::y#1 ]
Allocated zp[2]:7 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated zp[2]:9 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
Allocated zp[2]:11 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ]
Allocated zp[2]:13 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ]
Allocated zp[2]:15 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
Allocated zp[2]:17 [ memset::num#2 ]
Allocated zp[2]:19 [ memset::str#3 ]
Allocated zp[1]:21 [ memset::c#4 ]
Allocated zp[1]:2 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ]
Allocated zp[2]:3 [ bitmap_plot::$1 ]
Allocated zp[1]:5 [ bitmap_plot::$2 ]
Allocated zp[2]:6 [ bitmap_plot::plotter#1 ]
Allocated zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 ]
Allocated zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ]
Allocated zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ]
Allocated zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
Allocated zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
Allocated zp[2]:18 [ bitmap_plot::plotter#0 ]
Allocated zp[2]:20 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ]
Allocated zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ]
Allocated zp[2]:26 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ]
Allocated zp[2]:28 [ sgn_u16::return#4 ]
Allocated zp[1]:30 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ]
Allocated zp[2]:31 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 ]
Allocated zp[2]:33 [ main::$13 ]
Allocated zp[2]:35 [ main::$14 ]
Allocated zp[2]:37 [ bitmap_line::x2#0 ]
Allocated zp[2]:39 [ bitmap_line::y2#0 ]
Allocated zp[1]:41 [ bitmap_init::$7 ]
Allocated zp[1]:42 [ bitmap_init::$4 ]
Allocated zp[1]:43 [ bitmap_init::$5 ]
Allocated zp[1]:44 [ bitmap_init::$6 ]
Allocated zp[2]:45 [ abs_u16::return#0 ]
Allocated zp[2]:47 [ bitmap_line::dx#0 ]
Allocated zp[2]:49 [ abs_u16::return#1 ]
Allocated zp[2]:51 [ bitmap_line::dy#0 ]
Allocated zp[2]:53 [ sgn_u16::return#0 ]
Allocated zp[2]:55 [ bitmap_line::sx#0 ]
Allocated zp[2]:57 [ sgn_u16::return#1 ]
Allocated zp[2]:59 [ bitmap_line::sy#0 ]
Allocated zp[2]:61 [ memset::end#0 ]
Allocated zp[1]:63 [ abs_u16::$0 ]
Allocated zp[1]:64 [ abs_u16::$1 ]
Allocated zp[1]:65 [ sgn_u16::$0 ]
Allocated zp[1]:66 [ sgn_u16::$1 ]
Allocated zp[2]:67 [ bitmap_plot::plotter#0 ]
Allocated zp[2]:69 [ bitmap_plot::$1 ]
Allocated zp[2]:71 [ bitmap_plot::plotter#1 ]
Allocated zp[1]:73 [ bitmap_plot::$2 ]
Allocated zp[1]:24 [ abs_u16::$0 ]
Allocated zp[1]:25 [ abs_u16::$1 ]
Allocated zp[1]:26 [ sgn_u16::$0 ]
Allocated zp[1]:27 [ sgn_u16::$1 ]
Allocated zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ]
Allocated zp[2]:30 [ bitmap_line::dy#0 ]
Allocated zp[2]:32 [ bitmap_line::sy#0 ]
Allocated zp[2]:34 [ bitmap_line::dx#0 ]
Allocated zp[2]:36 [ bitmap_line::sx#0 ]
Allocated zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated zp[1]:40 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
Allocated zp[2]:41 [ bitmap_line::y2#0 ]
Allocated zp[2]:43 [ bitmap_line::x2#0 ]
Allocated zp[1]:45 [ bitmap_init::x#2 bitmap_init::x#1 ]
Allocated zp[1]:46 [ bitmap_init::y#2 bitmap_init::y#1 ]
Allocated zp[1]:47 [ bitmap_init::$4 ]
Allocated zp[1]:48 [ bitmap_init::$5 ]
Allocated zp[1]:49 [ bitmap_init::$6 ]
Allocated zp[2]:50 [ abs_u16::return#0 ]
Allocated zp[2]:52 [ abs_u16::return#1 ]
Allocated zp[2]:54 [ sgn_u16::return#0 ]
Allocated zp[2]:56 [ sgn_u16::return#1 ]
Allocated zp[2]:58 [ memset::end#0 ]
Allocated zp[1]:60 [ memset::c#4 ]
Allocated zp[2]:61 [ memset::num#2 ]
Allocated zp[2]:63 [ sgn_u16::return#4 ]
Allocated zp[1]:65 [ bitmap_init::$7 ]
Allocated zp[1]:66 [ main::i#2 main::i#1 ]
Allocated zp[2]:67 [ main::$13 ]
Allocated zp[2]:69 [ main::$14 ]
Allocated zp[1]:71 [ main::a#2 main::a#1 ]
Allocated zp[2]:72 [ memset::str#3 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Equivalence Class zp[1]:42 [ bitmap_init::$4 ] has ALU potential.
Equivalence Class zp[1]:47 [ bitmap_init::$4 ] has ALU potential.
Statement [4] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [6] *D018 = main::toD0181_return#0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [10] main::$13 = (unsigned int)COSTAB[main::a#2] [ main::i#2 main::a#2 main::$13 ] ( [ main::i#2 main::a#2 main::$13 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::a#2 main::a#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:66 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:71 [ main::a#2 main::a#1 ]
Statement [11] bitmap_line::x1#0 = main::$13 + $78 [ main::i#2 main::a#2 bitmap_line::x1#0 ] ( [ main::i#2 main::a#2 bitmap_line::x1#0 ] { } ) always clobbers reg byte a
Statement [12] main::$14 = (unsigned int)(COSTAB+$20)[main::a#2] [ main::i#2 main::a#2 bitmap_line::x1#0 main::$14 ] ( [ main::i#2 main::a#2 bitmap_line::x1#0 main::$14 ] { } ) always clobbers reg byte a
Statement [13] bitmap_line::x2#0 = main::$14 + $78 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 ] ( [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 ] { } ) always clobbers reg byte a
@ -2202,7 +2202,7 @@ Statement [14] bitmap_line::y1#0 = (unsigned int)SINTAB[main::a#2] [ main::i#2 m
Statement [15] bitmap_line::y2#0 = (unsigned int)(SINTAB+$20)[main::a#2] [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 ] ( [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 ] { } ) always clobbers reg byte a
Statement [17] main::a#1 = main::a#2 + $20 [ main::i#2 main::a#1 ] ( [ main::i#2 main::a#1 ] { } ) always clobbers reg byte a
Statement [36] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + (unsigned int)$28*8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( bitmap_init:1 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:6 [ bitmap_init::y#2 bitmap_init::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:46 [ bitmap_init::y#2 bitmap_init::y#1 ]
Statement [46] abs_u16::w#0 = bitmap_line::x2#0 - bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 abs_u16::w#0 ] ( bitmap_line:16 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 abs_u16::w#0 ] { { abs_u16::w#0 = abs_u16::w#2 } { abs_u16::return#0 = abs_u16::return#4 } } ) always clobbers reg byte a
Statement [48] abs_u16::return#0 = abs_u16::return#4 [ bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 abs_u16::return#0 ] ( bitmap_line:16 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 abs_u16::return#0 ] { { abs_u16::w#0 = abs_u16::w#2 } { abs_u16::return#0 = abs_u16::return#4 } } ) always clobbers reg byte a
Statement [49] bitmap_line::dx#0 = abs_u16::return#0 [ bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 ] ( bitmap_line:16 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 ] { { abs_u16::w#1 = abs_u16::w#2 } { abs_u16::return#1 = abs_u16::return#4 } } ) always clobbers reg byte a
@ -2237,19 +2237,19 @@ Statement [91] bitmap_line::e1#2 = bitmap_line::e1#1 - bitmap_line::dx#0 [ bitma
Statement [93] if(bitmap_line::x#15!=bitmap_line::x2#0) goto bitmap_line::@9 [ bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#13 bitmap_line::e1#6 ] ( bitmap_line:16 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#15 bitmap_line::y#13 bitmap_line::e1#6 ] { } ) always clobbers reg byte a
Statement [94] bitmap_plot::x#0 = bitmap_line::x1#0 [ bitmap_line::y1#0 bitmap_plot::x#0 ] ( bitmap_line:16 [ main::i#2 main::a#2 bitmap_line::y1#0 bitmap_plot::x#0 ] { { bitmap_plot::y#0 = bitmap_plot::y#4 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line::x1#0 } } ) always clobbers reg byte a
Statement [98] if(memset::num#2<=0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( bitmap_clear:3::memset:42 [ memset::num#2 memset::str#3 memset::c#4 ] { } bitmap_clear:3::memset:44 [ memset::num#2 memset::str#3 memset::c#4 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:21 [ memset::c#4 ]
Removing always clobbered register reg byte a as potential for zp[1]:60 [ memset::c#4 ]
Statement [99] memset::end#0 = (char *)memset::str#3 + memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( bitmap_clear:3::memset:42 [ memset::str#3 memset::c#4 memset::end#0 ] { } bitmap_clear:3::memset:44 [ memset::str#3 memset::c#4 memset::end#0 ] { } ) always clobbers reg byte a
Statement [100] memset::dst#4 = (char *)memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( bitmap_clear:3::memset:42 [ memset::c#4 memset::end#0 memset::dst#4 ] { } bitmap_clear:3::memset:44 [ memset::c#4 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a
Statement [102] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( bitmap_clear:3::memset:42 [ memset::c#4 memset::end#0 memset::dst#2 ] { } bitmap_clear:3::memset:44 [ memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a
Statement [104] *memset::dst#2 = memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( bitmap_clear:3::memset:42 [ memset::c#4 memset::end#0 memset::dst#2 ] { } bitmap_clear:3::memset:44 [ memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:21 [ memset::c#4 ]
Removing always clobbered register reg byte y as potential for zp[1]:60 [ memset::c#4 ]
Statement [110] abs_u16::return#2 = - abs_u16::w#2 [ abs_u16::return#2 ] ( bitmap_line:16::abs_u16:47 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 abs_u16::return#2 ] { { abs_u16::w#0 = abs_u16::w#2 } { abs_u16::return#0 = abs_u16::return#4 } } bitmap_line:16::abs_u16:51 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 bitmap_line::dx#0 abs_u16::return#2 ] { { abs_u16::w#1 = abs_u16::w#2 } { abs_u16::return#1 = abs_u16::return#4 } } ) always clobbers reg byte a
Statement [121] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bitmap_plot_ylo[bitmap_plot::y#4] [ bitmap_plot::x#4 bitmap_plot::plotter#0 ] ( bitmap_line:16::bitmap_plot:69 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] { { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:16::bitmap_plot:80 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 ] { { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:16::bitmap_plot:86 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 ] { { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:16::bitmap_plot:96 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 ] { { bitmap_plot::y#0 = bitmap_plot::y#4 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line::x1#0 } } ) always clobbers reg byte a
Statement [122] bitmap_plot::$1 = bitmap_plot::x#4 & $fff8 [ bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( bitmap_line:16::bitmap_plot:69 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:16::bitmap_plot:80 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:16::bitmap_plot:86 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:16::bitmap_plot:96 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { bitmap_plot::y#0 = bitmap_plot::y#4 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line::x1#0 } } ) always clobbers reg byte a
Statement [123] bitmap_plot::plotter#1 = (char *)bitmap_plot::plotter#0 + bitmap_plot::$1 [ bitmap_plot::x#4 bitmap_plot::plotter#1 ] ( bitmap_line:16::bitmap_plot:69 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:16::bitmap_plot:80 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:16::bitmap_plot:86 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:16::bitmap_plot:96 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { bitmap_plot::y#0 = bitmap_plot::y#4 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line::x1#0 } } ) always clobbers reg byte a
Statement [125] *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$2] [ ] ( bitmap_line:16::bitmap_plot:69 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 ] { { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:16::bitmap_plot:80 [ main::i#2 main::a#2 ] { { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:16::bitmap_plot:86 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 ] { { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:16::bitmap_plot:96 [ main::i#2 main::a#2 ] { { bitmap_plot::y#0 = bitmap_plot::y#4 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line::x1#0 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::a#2 main::a#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:66 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:71 [ main::a#2 main::a#1 ]
Statement [4] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [6] *D018 = main::toD0181_return#0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [10] main::$13 = (unsigned int)COSTAB[main::a#2] [ main::i#2 main::a#2 main::$13 ] ( [ main::i#2 main::a#2 main::$13 ] { } ) always clobbers reg byte a
@ -2259,7 +2259,7 @@ Statement [13] bitmap_line::x2#0 = main::$14 + $78 [ main::i#2 main::a#2 bitmap_
Statement [14] bitmap_line::y1#0 = (unsigned int)SINTAB[main::a#2] [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 ] ( [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 ] { } ) always clobbers reg byte a
Statement [15] bitmap_line::y2#0 = (unsigned int)(SINTAB+$20)[main::a#2] [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 ] ( [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 ] { } ) always clobbers reg byte a
Statement [17] main::a#1 = main::a#2 + $20 [ main::i#2 main::a#1 ] ( [ main::i#2 main::a#1 ] { } ) always clobbers reg byte a reg byte x
Removing always clobbered register reg byte x as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:66 [ main::i#2 main::i#1 ]
Statement [29] bitmap_init::$7 = bitmap_init::y#2 & 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( bitmap_init:1 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] { } ) always clobbers reg byte a
Statement [36] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + (unsigned int)$28*8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( bitmap_init:1 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] { } ) always clobbers reg byte a
Statement [46] abs_u16::w#0 = bitmap_line::x2#0 - bitmap_line::x1#0 [ bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 abs_u16::w#0 ] ( bitmap_line:16 [ main::i#2 main::a#2 bitmap_line::x1#0 bitmap_line::x2#0 bitmap_line::y1#0 bitmap_line::y2#0 abs_u16::w#0 ] { { abs_u16::w#0 = abs_u16::w#2 } { abs_u16::return#0 = abs_u16::return#4 } } ) always clobbers reg byte a
@ -2360,59 +2360,59 @@ Statement [121] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bi
Statement [122] bitmap_plot::$1 = bitmap_plot::x#4 & $fff8 [ bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( bitmap_line:16::bitmap_plot:69 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:16::bitmap_plot:80 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:16::bitmap_plot:86 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:16::bitmap_plot:96 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#0 bitmap_plot::$1 ] { { bitmap_plot::y#0 = bitmap_plot::y#4 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line::x1#0 } } ) always clobbers reg byte a
Statement [123] bitmap_plot::plotter#1 = (char *)bitmap_plot::plotter#0 + bitmap_plot::$1 [ bitmap_plot::x#4 bitmap_plot::plotter#1 ] ( bitmap_line:16::bitmap_plot:69 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:16::bitmap_plot:80 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:16::bitmap_plot:86 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:16::bitmap_plot:96 [ main::i#2 main::a#2 bitmap_plot::x#4 bitmap_plot::plotter#1 ] { { bitmap_plot::y#0 = bitmap_plot::y#4 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line::x1#0 } } ) always clobbers reg byte a
Statement [125] *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$2] [ ] ( bitmap_line:16::bitmap_plot:69 [ main::i#2 main::a#2 bitmap_line::y2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#13 bitmap_line::y#4 bitmap_line::e#3 ] { { bitmap_plot::y#1 = bitmap_plot::y#4 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line::x#13 } } bitmap_line:16::bitmap_plot:80 [ main::i#2 main::a#2 ] { { bitmap_plot::y#2 = bitmap_plot::y#4 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line::x#6 } } bitmap_line:16::bitmap_plot:86 [ main::i#2 main::a#2 bitmap_line::x2#0 bitmap_line::dx#0 bitmap_line::dy#0 bitmap_line::sx#0 bitmap_line::sy#0 bitmap_line::x#7 bitmap_line::y#15 bitmap_line::e1#3 ] { { bitmap_plot::y#3 = bitmap_plot::y#4 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line::x#7 } } bitmap_line:16::bitmap_plot:96 [ main::i#2 main::a#2 ] { { bitmap_plot::y#0 = bitmap_plot::y#4 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line::x1#0 } } ) always clobbers reg byte a reg byte y
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 ,
Potential registers zp[1]:3 [ main::a#2 main::a#1 ] : zp[1]:3 , reg byte x ,
Potential registers zp[1]:4 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:6 , reg byte x , reg byte y ,
Potential registers zp[2]:7 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:7 ,
Potential registers zp[2]:9 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] : zp[2]:9 ,
Potential registers zp[2]:11 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] : zp[2]:11 ,
Potential registers zp[2]:13 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] : zp[2]:13 ,
Potential registers zp[2]:15 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] : zp[2]:15 ,
Potential registers zp[2]:17 [ memset::num#2 ] : zp[2]:17 ,
Potential registers zp[2]:19 [ memset::str#3 ] : zp[2]:19 ,
Potential registers zp[1]:21 [ memset::c#4 ] : zp[1]:21 , reg byte x ,
Potential registers zp[1]:66 [ main::i#2 main::i#1 ] : zp[1]:66 ,
Potential registers zp[1]:71 [ main::a#2 main::a#1 ] : zp[1]:71 , reg byte x ,
Potential registers zp[1]:40 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:45 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:46 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:46 , reg byte x , reg byte y ,
Potential registers zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:38 ,
Potential registers zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] : zp[2]:14 ,
Potential registers zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] : zp[2]:10 ,
Potential registers zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] : zp[2]:12 ,
Potential registers zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] : zp[2]:16 ,
Potential registers zp[2]:61 [ memset::num#2 ] : zp[2]:61 ,
Potential registers zp[2]:72 [ memset::str#3 ] : zp[2]:72 ,
Potential registers zp[1]:60 [ memset::c#4 ] : zp[1]:60 , reg byte x ,
Potential registers zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:22 ,
Potential registers zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] : zp[2]:24 ,
Potential registers zp[2]:26 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] : zp[2]:26 ,
Potential registers zp[2]:28 [ sgn_u16::return#4 ] : zp[2]:28 ,
Potential registers zp[1]:30 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:31 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 ] : zp[2]:31 ,
Potential registers zp[2]:33 [ main::$13 ] : zp[2]:33 ,
Potential registers zp[2]:35 [ main::$14 ] : zp[2]:35 ,
Potential registers zp[2]:37 [ bitmap_line::x2#0 ] : zp[2]:37 ,
Potential registers zp[2]:39 [ bitmap_line::y2#0 ] : zp[2]:39 ,
Potential registers zp[1]:41 [ bitmap_init::$7 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:42 [ bitmap_init::$4 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , reg byte alu ,
Potential registers zp[1]:43 [ bitmap_init::$5 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:44 [ bitmap_init::$6 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:45 [ abs_u16::return#0 ] : zp[2]:45 ,
Potential registers zp[2]:47 [ bitmap_line::dx#0 ] : zp[2]:47 ,
Potential registers zp[2]:49 [ abs_u16::return#1 ] : zp[2]:49 ,
Potential registers zp[2]:51 [ bitmap_line::dy#0 ] : zp[2]:51 ,
Potential registers zp[2]:53 [ sgn_u16::return#0 ] : zp[2]:53 ,
Potential registers zp[2]:55 [ bitmap_line::sx#0 ] : zp[2]:55 ,
Potential registers zp[2]:57 [ sgn_u16::return#1 ] : zp[2]:57 ,
Potential registers zp[2]:59 [ bitmap_line::sy#0 ] : zp[2]:59 ,
Potential registers zp[2]:61 [ memset::end#0 ] : zp[2]:61 ,
Potential registers zp[1]:63 [ abs_u16::$0 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:64 [ abs_u16::$1 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:65 [ sgn_u16::$0 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:66 [ sgn_u16::$1 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:67 [ bitmap_plot::plotter#0 ] : zp[2]:67 ,
Potential registers zp[2]:69 [ bitmap_plot::$1 ] : zp[2]:69 ,
Potential registers zp[2]:71 [ bitmap_plot::plotter#1 ] : zp[2]:71 ,
Potential registers zp[1]:73 [ bitmap_plot::$2 ] : zp[1]:73 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:20 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] : zp[2]:20 ,
Potential registers zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] : zp[2]:28 ,
Potential registers zp[2]:63 [ sgn_u16::return#4 ] : zp[2]:63 ,
Potential registers zp[1]:2 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 ] : zp[2]:8 ,
Potential registers zp[2]:67 [ main::$13 ] : zp[2]:67 ,
Potential registers zp[2]:69 [ main::$14 ] : zp[2]:69 ,
Potential registers zp[2]:43 [ bitmap_line::x2#0 ] : zp[2]:43 ,
Potential registers zp[2]:41 [ bitmap_line::y2#0 ] : zp[2]:41 ,
Potential registers zp[1]:65 [ bitmap_init::$7 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:47 [ bitmap_init::$4 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , reg byte alu ,
Potential registers zp[1]:48 [ bitmap_init::$5 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:49 [ bitmap_init::$6 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:50 [ abs_u16::return#0 ] : zp[2]:50 ,
Potential registers zp[2]:34 [ bitmap_line::dx#0 ] : zp[2]:34 ,
Potential registers zp[2]:52 [ abs_u16::return#1 ] : zp[2]:52 ,
Potential registers zp[2]:30 [ bitmap_line::dy#0 ] : zp[2]:30 ,
Potential registers zp[2]:54 [ sgn_u16::return#0 ] : zp[2]:54 ,
Potential registers zp[2]:36 [ bitmap_line::sx#0 ] : zp[2]:36 ,
Potential registers zp[2]:56 [ sgn_u16::return#1 ] : zp[2]:56 ,
Potential registers zp[2]:32 [ bitmap_line::sy#0 ] : zp[2]:32 ,
Potential registers zp[2]:58 [ memset::end#0 ] : zp[2]:58 ,
Potential registers zp[1]:24 [ abs_u16::$0 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:25 [ abs_u16::$1 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:26 [ sgn_u16::$0 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:27 [ sgn_u16::$1 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:18 [ bitmap_plot::plotter#0 ] : zp[2]:18 ,
Potential registers zp[2]:3 [ bitmap_plot::$1 ] : zp[2]:3 ,
Potential registers zp[2]:6 [ bitmap_plot::plotter#1 ] : zp[2]:6 ,
Potential registers zp[1]:5 [ bitmap_plot::$2 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [bitmap_plot] 260,614: zp[1]:30 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ] 200,002: zp[2]:69 [ bitmap_plot::$1 ] 200,002: zp[1]:73 [ bitmap_plot::$2 ] 150,001.5: zp[2]:71 [ bitmap_plot::plotter#1 ] 75,255.5: zp[2]:31 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 ] 50,000.5: zp[2]:67 [ bitmap_plot::plotter#0 ]
Uplift Scope [bitmap_line] 69,095.99: zp[2]:11 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] 55,062.47: zp[2]:13 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] 52,560.77: zp[2]:9 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] 52,560.77: zp[2]:15 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] 844.64: zp[2]:51 [ bitmap_line::dy#0 ] 773.19: zp[2]:59 [ bitmap_line::sy#0 ] 760.17: zp[2]:47 [ bitmap_line::dx#0 ] 670.1: zp[2]:55 [ bitmap_line::sx#0 ] 319.19: zp[2]:39 [ bitmap_line::y2#0 ] 300.41: zp[2]:37 [ bitmap_line::x2#0 ]
Uplift Scope [abs_u16] 3,758.25: zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] 2,002: zp[1]:63 [ abs_u16::$0 ] 2,002: zp[1]:64 [ abs_u16::$1 ] 202: zp[2]:45 [ abs_u16::return#0 ] 202: zp[2]:49 [ abs_u16::return#1 ]
Uplift Scope [sgn_u16] 2,002: zp[1]:65 [ sgn_u16::$0 ] 2,002: zp[1]:66 [ sgn_u16::$1 ] 1,607: zp[2]:26 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] 202: zp[2]:53 [ sgn_u16::return#0 ] 202: zp[2]:57 [ sgn_u16::return#1 ] 50.5: zp[2]:28 [ sgn_u16::return#4 ]
Uplift Scope [memset] 3,572.33: zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 183.67: zp[2]:61 [ memset::end#0 ] 125.12: zp[1]:21 [ memset::c#4 ] 101: zp[2]:17 [ memset::num#2 ] 0: zp[2]:19 [ memset::str#3 ]
Uplift Scope [bitmap_init] 366.12: zp[2]:7 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 319.83: zp[1]:4 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 202: zp[1]:5 [ bitmap_init::x#2 bitmap_init::x#1 ] 202: zp[1]:6 [ bitmap_init::y#2 bitmap_init::y#1 ] 202: zp[1]:42 [ bitmap_init::$4 ] 202: zp[1]:43 [ bitmap_init::$5 ] 202: zp[1]:44 [ bitmap_init::$6 ] 50.5: zp[1]:41 [ bitmap_init::$7 ]
Uplift Scope [main] 25.3: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[2]:33 [ main::$13 ] 22: zp[2]:35 [ main::$14 ] 13.44: zp[1]:3 [ main::a#2 main::a#1 ]
Uplift Scope [bitmap_plot] 260,614: zp[1]:2 [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ] 200,002: zp[2]:3 [ bitmap_plot::$1 ] 200,002: zp[1]:5 [ bitmap_plot::$2 ] 150,001.5: zp[2]:6 [ bitmap_plot::plotter#1 ] 75,255.5: zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 ] 50,000.5: zp[2]:18 [ bitmap_plot::plotter#0 ]
Uplift Scope [bitmap_line] 69,095.99: zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] 55,062.47: zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] 52,560.77: zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] 52,560.77: zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] 844.64: zp[2]:30 [ bitmap_line::dy#0 ] 773.19: zp[2]:32 [ bitmap_line::sy#0 ] 760.17: zp[2]:34 [ bitmap_line::dx#0 ] 670.1: zp[2]:36 [ bitmap_line::sx#0 ] 319.19: zp[2]:41 [ bitmap_line::y2#0 ] 300.41: zp[2]:43 [ bitmap_line::x2#0 ]
Uplift Scope [abs_u16] 3,758.25: zp[2]:20 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] 2,002: zp[1]:24 [ abs_u16::$0 ] 2,002: zp[1]:25 [ abs_u16::$1 ] 202: zp[2]:50 [ abs_u16::return#0 ] 202: zp[2]:52 [ abs_u16::return#1 ]
Uplift Scope [sgn_u16] 2,002: zp[1]:26 [ sgn_u16::$0 ] 2,002: zp[1]:27 [ sgn_u16::$1 ] 1,607: zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] 202: zp[2]:54 [ sgn_u16::return#0 ] 202: zp[2]:56 [ sgn_u16::return#1 ] 50.5: zp[2]:63 [ sgn_u16::return#4 ]
Uplift Scope [memset] 3,572.33: zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 183.67: zp[2]:58 [ memset::end#0 ] 125.12: zp[1]:60 [ memset::c#4 ] 101: zp[2]:61 [ memset::num#2 ] 0: zp[2]:72 [ memset::str#3 ]
Uplift Scope [bitmap_init] 366.12: zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 319.83: zp[1]:40 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 202: zp[1]:45 [ bitmap_init::x#2 bitmap_init::x#1 ] 202: zp[1]:46 [ bitmap_init::y#2 bitmap_init::y#1 ] 202: zp[1]:47 [ bitmap_init::$4 ] 202: zp[1]:48 [ bitmap_init::$5 ] 202: zp[1]:49 [ bitmap_init::$6 ] 50.5: zp[1]:65 [ bitmap_init::$7 ]
Uplift Scope [main] 25.3: zp[1]:66 [ main::i#2 main::i#1 ] 22: zp[2]:67 [ main::$13 ] 22: zp[2]:69 [ main::$14 ] 13.44: zp[1]:71 [ main::a#2 main::a#1 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
@ -2420,59 +2420,61 @@ Uplift Scope [bitmap_clear]
Uplift Scope [RADIX]
Uplift Scope []
Uplifting [bitmap_plot] best 32982 combination reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ] zp[2]:69 [ bitmap_plot::$1 ] reg byte x [ bitmap_plot::$2 ] zp[2]:71 [ bitmap_plot::plotter#1 ] zp[2]:31 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 ] zp[2]:67 [ bitmap_plot::plotter#0 ]
Uplifting [bitmap_line] best 32982 combination zp[2]:11 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] zp[2]:13 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] zp[2]:9 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] zp[2]:15 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] zp[2]:51 [ bitmap_line::dy#0 ] zp[2]:59 [ bitmap_line::sy#0 ] zp[2]:47 [ bitmap_line::dx#0 ] zp[2]:55 [ bitmap_line::sx#0 ] zp[2]:39 [ bitmap_line::y2#0 ] zp[2]:37 [ bitmap_line::x2#0 ]
Uplifting [abs_u16] best 32972 combination zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] reg byte a [ abs_u16::$0 ] reg byte a [ abs_u16::$1 ] zp[2]:45 [ abs_u16::return#0 ] zp[2]:49 [ abs_u16::return#1 ]
Uplifting [sgn_u16] best 32962 combination reg byte a [ sgn_u16::$0 ] reg byte a [ sgn_u16::$1 ] zp[2]:26 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] zp[2]:53 [ sgn_u16::return#0 ] zp[2]:57 [ sgn_u16::return#1 ] zp[2]:28 [ sgn_u16::return#4 ]
Uplifting [memset] best 32946 combination zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:61 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:17 [ memset::num#2 ] zp[2]:19 [ memset::str#3 ]
Uplifting [bitmap_init] best 32496 combination zp[2]:7 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:43 [ bitmap_init::$5 ] zp[1]:44 [ bitmap_init::$6 ] zp[1]:41 [ bitmap_init::$7 ]
Uplifting [bitmap_plot] best 32982 combination reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ] zp[2]:3 [ bitmap_plot::$1 ] reg byte x [ bitmap_plot::$2 ] zp[2]:6 [ bitmap_plot::plotter#1 ] zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 ] zp[2]:18 [ bitmap_plot::plotter#0 ]
Uplifting [bitmap_line] best 32982 combination zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] zp[2]:30 [ bitmap_line::dy#0 ] zp[2]:32 [ bitmap_line::sy#0 ] zp[2]:34 [ bitmap_line::dx#0 ] zp[2]:36 [ bitmap_line::sx#0 ] zp[2]:41 [ bitmap_line::y2#0 ] zp[2]:43 [ bitmap_line::x2#0 ]
Uplifting [abs_u16] best 32972 combination zp[2]:20 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] reg byte a [ abs_u16::$0 ] reg byte a [ abs_u16::$1 ] zp[2]:50 [ abs_u16::return#0 ] zp[2]:52 [ abs_u16::return#1 ]
Uplifting [sgn_u16] best 32962 combination reg byte a [ sgn_u16::$0 ] reg byte a [ sgn_u16::$1 ] zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] zp[2]:54 [ sgn_u16::return#0 ] zp[2]:56 [ sgn_u16::return#1 ] zp[2]:63 [ sgn_u16::return#4 ]
Uplifting [memset] best 32946 combination zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:58 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:61 [ memset::num#2 ] zp[2]:72 [ memset::str#3 ]
Uplifting [bitmap_init] best 32496 combination zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:48 [ bitmap_init::$5 ] zp[1]:49 [ bitmap_init::$6 ] zp[1]:65 [ bitmap_init::$7 ]
Limited combination testing to 100 combinations of 15360 possible.
Uplifting [main] best 32496 combination zp[1]:2 [ main::i#2 main::i#1 ] zp[2]:33 [ main::$13 ] zp[2]:35 [ main::$14 ] zp[1]:3 [ main::a#2 main::a#1 ]
Uplifting [main] best 32496 combination zp[1]:66 [ main::i#2 main::i#1 ] zp[2]:67 [ main::$13 ] zp[2]:69 [ main::$14 ] zp[1]:71 [ main::a#2 main::a#1 ]
Uplifting [MOS6526_CIA] best 32496 combination
Uplifting [MOS6569_VICII] best 32496 combination
Uplifting [MOS6581_SID] best 32496 combination
Uplifting [bitmap_clear] best 32496 combination
Uplifting [RADIX] best 32496 combination
Uplifting [] best 32496 combination
Attempting to uplift remaining variables inzp[1]:43 [ bitmap_init::$5 ]
Attempting to uplift remaining variables inzp[1]:48 [ bitmap_init::$5 ]
Uplifting [bitmap_init] best 32436 combination reg byte a [ bitmap_init::$5 ]
Attempting to uplift remaining variables inzp[1]:44 [ bitmap_init::$6 ]
Attempting to uplift remaining variables inzp[1]:49 [ bitmap_init::$6 ]
Uplifting [bitmap_init] best 32376 combination reg byte a [ bitmap_init::$6 ]
Attempting to uplift remaining variables inzp[1]:41 [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 32376 combination zp[1]:41 [ bitmap_init::$7 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::i#2 main::i#1 ]
Uplifting [main] best 32376 combination zp[1]:2 [ main::i#2 main::i#1 ]
Attempting to uplift remaining variables inzp[1]:3 [ main::a#2 main::a#1 ]
Uplifting [main] best 32376 combination zp[1]:3 [ main::a#2 main::a#1 ]
Coalescing zero page register [ zp[2]:11 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] ] with [ zp[2]:31 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 ] ] - score: 4
Coalescing zero page register [ zp[2]:11 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 ] ] with [ zp[2]:33 [ main::$13 ] ] - score: 1
Coalescing zero page register [ zp[2]:17 [ memset::num#2 ] ] with [ zp[2]:61 [ memset::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:19 [ memset::str#3 ] ] with [ zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] ] with [ zp[2]:45 [ abs_u16::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 ] ] with [ zp[2]:49 [ abs_u16::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:28 [ sgn_u16::return#4 ] ] with [ zp[2]:53 [ sgn_u16::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:28 [ sgn_u16::return#4 sgn_u16::return#0 ] ] with [ zp[2]:57 [ sgn_u16::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:35 [ main::$14 ] ] with [ zp[2]:37 [ bitmap_line::x2#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:67 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:71 [ bitmap_plot::plotter#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:24 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 ] ] with [ zp[2]:51 [ bitmap_line::dy#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:28 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 ] ] with [ zp[2]:59 [ bitmap_line::sy#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:9 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] ] with [ zp[2]:7 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ]
Coalescing zero page register [ zp[2]:17 [ memset::num#2 memset::end#0 ] ] with [ zp[2]:13 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] ]
Coalescing zero page register [ zp[2]:19 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:15 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] ]
Coalescing zero page register [ zp[2]:67 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:26 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] ]
Allocated (was zp[2]:9) zp[2]:4 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated (was zp[2]:11) zp[2]:6 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 main::$13 ]
Allocated (was zp[2]:17) zp[2]:8 [ memset::num#2 memset::end#0 bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ]
Allocated (was zp[2]:19) zp[2]:10 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
Allocated (was zp[2]:24) zp[2]:12 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
Allocated (was zp[2]:28) zp[2]:14 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
Allocated (was zp[2]:35) zp[2]:16 [ main::$14 bitmap_line::x2#0 ]
Allocated (was zp[2]:39) zp[2]:18 [ bitmap_line::y2#0 ]
Allocated (was zp[1]:41) zp[1]:20 [ bitmap_init::$7 ]
Allocated (was zp[2]:47) zp[2]:21 [ bitmap_line::dx#0 ]
Allocated (was zp[2]:55) zp[2]:23 [ bitmap_line::sx#0 ]
Allocated (was zp[2]:67) zp[2]:25 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ]
Allocated (was zp[2]:69) zp[2]:27 [ bitmap_plot::$1 ]
Attempting to uplift remaining variables inzp[1]:65 [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 32376 combination zp[1]:65 [ bitmap_init::$7 ]
Attempting to uplift remaining variables inzp[1]:66 [ main::i#2 main::i#1 ]
Uplifting [main] best 32376 combination zp[1]:66 [ main::i#2 main::i#1 ]
Attempting to uplift remaining variables inzp[1]:71 [ main::a#2 main::a#1 ]
Uplifting [main] best 32376 combination zp[1]:71 [ main::a#2 main::a#1 ]
Coalescing zero page register [ zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] ] with [ zp[2]:8 [ bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 ] ] - score: 4
Coalescing zero page register [ zp[2]:10 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 ] ] with [ zp[2]:67 [ main::$13 ] ] - score: 1
Coalescing zero page register [ zp[2]:61 [ memset::num#2 ] ] with [ zp[2]:58 [ memset::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:72 [ memset::str#3 ] ] with [ zp[2]:22 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:20 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] ] with [ zp[2]:50 [ abs_u16::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:20 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 ] ] with [ zp[2]:52 [ abs_u16::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:63 [ sgn_u16::return#4 ] ] with [ zp[2]:54 [ sgn_u16::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:63 [ sgn_u16::return#4 sgn_u16::return#0 ] ] with [ zp[2]:56 [ sgn_u16::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:69 [ main::$14 ] ] with [ zp[2]:43 [ bitmap_line::x2#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:18 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:6 [ bitmap_plot::plotter#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:20 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 ] ] with [ zp[2]:30 [ bitmap_line::dy#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:63 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 ] ] with [ zp[2]:32 [ bitmap_line::sy#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:14 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] ] with [ zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ]
Coalescing zero page register [ zp[2]:61 [ memset::num#2 memset::end#0 ] ] with [ zp[2]:12 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] ]
Coalescing zero page register [ zp[2]:72 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:16 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] ]
Coalescing zero page register [ zp[2]:18 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:28 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] ]
Allocated (was zp[2]:18) zp[2]:2 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ]
Allocated (was zp[2]:3) zp[2]:4 [ bitmap_plot::$1 ]
Allocated (was zp[2]:10) zp[2]:6 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 main::$13 ]
Allocated (was zp[2]:72) zp[2]:8 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
Allocated (was zp[2]:61) zp[2]:10 [ memset::num#2 memset::end#0 bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ]
Allocated (was zp[2]:14) zp[2]:12 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated (was zp[2]:20) zp[2]:14 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
Allocated (was zp[2]:63) zp[2]:16 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
Allocated (was zp[2]:34) zp[2]:18 [ bitmap_line::dx#0 ]
Allocated (was zp[2]:36) zp[2]:20 [ bitmap_line::sx#0 ]
Allocated (was zp[2]:69) zp[2]:22 [ main::$14 bitmap_line::x2#0 ]
Allocated (was zp[2]:41) zp[2]:24 [ bitmap_line::y2#0 ]
Allocated (was zp[1]:65) zp[1]:26 [ bitmap_init::$7 ]
Allocated (was zp[1]:66) zp[1]:27 [ main::i#2 main::i#1 ]
Allocated (was zp[1]:71) zp[1]:28 [ main::a#2 main::a#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -2519,9 +2521,9 @@ ASSEMBLER BEFORE OPTIMIZATION
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label __13 = 6
.label __14 = $10
.label a = 3
.label i = 2
.label __14 = $16
.label a = $1c
.label i = $1b
// [1] call bitmap_init
// [19] phi from main to bitmap_init [phi:main->bitmap_init]
bitmap_init_from_main:
@ -2636,8 +2638,8 @@ main: {
// Initialize bitmap plotting tables
// void bitmap_init(char *gfx, char *screen)
bitmap_init: {
.label __7 = $14
.label yoffs = 4
.label __7 = $1a
.label yoffs = $c
// [20] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1]
__b1_from_bitmap_init:
// [20] phi bitmap_init::x#2 = 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1
@ -2795,20 +2797,20 @@ bitmap_clear: {
}
// bitmap_line
// Draw a line on the bitmap using bresenhams algorithm
// void bitmap_line(__zp(6) unsigned int x1, __zp(8) unsigned int y1, __zp($10) unsigned int x2, __zp($12) unsigned int y2)
// void bitmap_line(__zp(6) unsigned int x1, __zp($a) unsigned int y1, __zp($16) unsigned int x2, __zp($18) unsigned int y2)
bitmap_line: {
.label dx = $15
.label dy = $c
.label sx = $17
.label sy = $e
.label e1 = $a
.label e = 4
.label y = 8
.label dx = $12
.label dy = $e
.label sx = $14
.label sy = $10
.label e1 = 8
.label e = $c
.label y = $a
.label x = 6
.label x1 = 6
.label y1 = 8
.label x2 = $10
.label y2 = $12
.label y1 = $a
.label x2 = $16
.label y2 = $18
// [46] abs_u16::w#0 = bitmap_line::x2#0 - bitmap_line::x1#0 -- vwuz1=vwuz2_minus_vwuz3
lda.z x2
sec
@ -3131,12 +3133,12 @@ bitmap_line: {
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp($a) void *str, __register(X) char c, __zp(8) unsigned int num)
// void * memset(__zp(8) void *str, __register(X) char c, __zp($a) unsigned int num)
memset: {
.label end = 8
.label dst = $a
.label num = 8
.label str = $a
.label end = $a
.label dst = 8
.label num = $a
.label str = 8
// [98] if(memset::num#2<=0) goto memset::@return -- vwuz1_le_0_then_la1
lda.z num
bne !+
@ -3189,10 +3191,10 @@ memset: {
}
// abs_u16
// Get the absolute value of a 16-bit unsigned number treated as a signed number.
// __zp($c) unsigned int abs_u16(__zp($c) unsigned int w)
// __zp($e) unsigned int abs_u16(__zp($e) unsigned int w)
abs_u16: {
.label w = $c
.label return = $c
.label w = $e
.label return = $e
// [107] abs_u16::$0 = byte1 abs_u16::w#2 -- vbuaa=_byte1_vwuz1
lda.z w+1
// [108] abs_u16::$1 = abs_u16::$0 & $80 -- vbuaa=vbuaa_band_vbuc1
@ -3224,10 +3226,10 @@ abs_u16: {
// sgn_u16
// Get the sign of a 16-bit unsigned number treated as a signed number.
// Returns unsigned -1 if the number is
// __zp($e) unsigned int sgn_u16(__zp($19) unsigned int w)
// __zp($10) unsigned int sgn_u16(__zp(2) unsigned int w)
sgn_u16: {
.label w = $19
.label return = $e
.label w = 2
.label return = $10
// [114] sgn_u16::$0 = byte1 sgn_u16::w#2 -- vbuaa=_byte1_vwuz1
lda.z w+1
// [115] sgn_u16::$1 = sgn_u16::$0 & $80 -- vbuaa=vbuaa_band_vbuc1
@ -3265,8 +3267,8 @@ sgn_u16: {
// Plot a single dot in the bitmap
// void bitmap_plot(__zp(6) unsigned int x, __register(X) char y)
bitmap_plot: {
.label __1 = $1b
.label plotter = $19
.label __1 = 4
.label plotter = 2
.label x = 6
// [121] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bitmap_plot_ylo[bitmap_plot::y#4] -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx
lda bitmap_plot_yhi,x
@ -3477,14 +3479,14 @@ unsigned int abs_u16(unsigned int w)
char abs_u16::$0 // reg byte a 2002.0
char abs_u16::$1 // reg byte a 2002.0
unsigned int abs_u16::return
unsigned int abs_u16::return#0 // return zp[2]:12 202.0
unsigned int abs_u16::return#1 // return zp[2]:12 202.0
unsigned int abs_u16::return#2 // return zp[2]:12 2002.0
unsigned int abs_u16::return#4 // return zp[2]:12 551.0
unsigned int abs_u16::return#0 // return zp[2]:14 202.0
unsigned int abs_u16::return#1 // return zp[2]:14 202.0
unsigned int abs_u16::return#2 // return zp[2]:14 2002.0
unsigned int abs_u16::return#4 // return zp[2]:14 551.0
unsigned int abs_u16::w
unsigned int abs_u16::w#0 // w zp[2]:12 202.0
unsigned int abs_u16::w#1 // w zp[2]:12 202.0
unsigned int abs_u16::w#2 // w zp[2]:12 801.25
unsigned int abs_u16::w#0 // w zp[2]:14 202.0
unsigned int abs_u16::w#1 // w zp[2]:14 202.0
unsigned int abs_u16::w#2 // w zp[2]:14 801.25
void bitmap_clear(char bgcol , char fgcol)
char bitmap_clear::bgcol
char bitmap_clear::col
@ -3495,7 +3497,7 @@ void bitmap_init(char *gfx , char *screen)
char bitmap_init::$4 // reg byte a 202.0
char bitmap_init::$5 // reg byte a 202.0
char bitmap_init::$6 // reg byte a 202.0
char bitmap_init::$7 // zp[1]:20 50.5
char bitmap_init::$7 // zp[1]:26 50.5
char bitmap_init::bits
char bitmap_init::bits#1 // reg byte a 101.0
char bitmap_init::bits#3 // reg byte a 151.5
@ -3509,30 +3511,30 @@ char bitmap_init::y
char bitmap_init::y#1 // reg byte x 151.5
char bitmap_init::y#2 // reg byte x 50.5
char *bitmap_init::yoffs
char *bitmap_init::yoffs#1 // yoffs zp[2]:4 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:4 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:4 101.0
char *bitmap_init::yoffs#1 // yoffs zp[2]:12 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:12 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:12 101.0
void bitmap_line(unsigned int x1 , unsigned int y1 , unsigned int x2 , unsigned int y2)
unsigned int bitmap_line::dx
unsigned int bitmap_line::dx#0 // dx zp[2]:21 760.175
unsigned int bitmap_line::dx#0 // dx zp[2]:18 760.175
unsigned int bitmap_line::dy
unsigned int bitmap_line::dy#0 // dy zp[2]:12 844.6388888888889
unsigned int bitmap_line::dy#0 // dy zp[2]:14 844.6388888888889
unsigned int bitmap_line::e
unsigned int bitmap_line::e#0 // e zp[2]:4 202.0
unsigned int bitmap_line::e#1 // e zp[2]:4 13334.666666666666
unsigned int bitmap_line::e#2 // e zp[2]:4 20002.0
unsigned int bitmap_line::e#3 // e zp[2]:4 4020.6000000000004
unsigned int bitmap_line::e#6 // e zp[2]:4 15001.5
unsigned int bitmap_line::e#0 // e zp[2]:12 202.0
unsigned int bitmap_line::e#1 // e zp[2]:12 13334.666666666666
unsigned int bitmap_line::e#2 // e zp[2]:12 20002.0
unsigned int bitmap_line::e#3 // e zp[2]:12 4020.6000000000004
unsigned int bitmap_line::e#6 // e zp[2]:12 15001.5
unsigned int bitmap_line::e1
unsigned int bitmap_line::e1#0 // e1 zp[2]:10 202.0
unsigned int bitmap_line::e1#1 // e1 zp[2]:10 13334.666666666666
unsigned int bitmap_line::e1#2 // e1 zp[2]:10 20002.0
unsigned int bitmap_line::e1#3 // e1 zp[2]:10 4020.6000000000004
unsigned int bitmap_line::e1#6 // e1 zp[2]:10 15001.5
unsigned int bitmap_line::e1#0 // e1 zp[2]:8 202.0
unsigned int bitmap_line::e1#1 // e1 zp[2]:8 13334.666666666666
unsigned int bitmap_line::e1#2 // e1 zp[2]:8 20002.0
unsigned int bitmap_line::e1#3 // e1 zp[2]:8 4020.6000000000004
unsigned int bitmap_line::e1#6 // e1 zp[2]:8 15001.5
unsigned int bitmap_line::sx
unsigned int bitmap_line::sx#0 // sx zp[2]:23 670.1
unsigned int bitmap_line::sx#0 // sx zp[2]:20 670.1
unsigned int bitmap_line::sy
unsigned int bitmap_line::sy#0 // sy zp[2]:14 773.1923076923076
unsigned int bitmap_line::sy#0 // sy zp[2]:16 773.1923076923076
unsigned int bitmap_line::x
unsigned int bitmap_line::x#1 // x zp[2]:6 10001.0
unsigned int bitmap_line::x#12 // x zp[2]:6 20002.0
@ -3543,24 +3545,24 @@ unsigned int bitmap_line::x#7 // x zp[2]:6 7526.0
unsigned int bitmap_line::x1
unsigned int bitmap_line::x1#0 // x1 zp[2]:6 19.846153846153847
unsigned int bitmap_line::x2
unsigned int bitmap_line::x2#0 // x2 zp[2]:16 300.4117647058823
unsigned int bitmap_line::x2#0 // x2 zp[2]:22 300.4117647058823
unsigned int bitmap_line::y
unsigned int bitmap_line::y#1 // y zp[2]:8 5714.857142857143
unsigned int bitmap_line::y#13 // y zp[2]:8 20002.0
unsigned int bitmap_line::y#15 // y zp[2]:8 4300.571428571429
unsigned int bitmap_line::y#2 // y zp[2]:8 10001.0
unsigned int bitmap_line::y#4 // y zp[2]:8 5025.75
unsigned int bitmap_line::y#7 // y zp[2]:8 10001.0
unsigned int bitmap_line::y#1 // y zp[2]:10 5714.857142857143
unsigned int bitmap_line::y#13 // y zp[2]:10 20002.0
unsigned int bitmap_line::y#15 // y zp[2]:10 4300.571428571429
unsigned int bitmap_line::y#2 // y zp[2]:10 10001.0
unsigned int bitmap_line::y#4 // y zp[2]:10 5025.75
unsigned int bitmap_line::y#7 // y zp[2]:10 10001.0
unsigned int bitmap_line::y1
unsigned int bitmap_line::y1#0 // y1 zp[2]:8 17.291666666666664
unsigned int bitmap_line::y1#0 // y1 zp[2]:10 17.291666666666664
unsigned int bitmap_line::y2
unsigned int bitmap_line::y2#0 // y2 zp[2]:18 319.1875
unsigned int bitmap_line::y2#0 // y2 zp[2]:24 319.1875
void bitmap_plot(unsigned int x , char y)
unsigned int bitmap_plot::$1 // zp[2]:27 200002.0
unsigned int bitmap_plot::$1 // zp[2]:4 200002.0
char bitmap_plot::$2 // reg byte x 200002.0
char *bitmap_plot::plotter
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:25 50000.5
char *bitmap_plot::plotter#1 // plotter zp[2]:25 150001.5
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:2 50000.5
char *bitmap_plot::plotter#1 // plotter zp[2]:2 150001.5
unsigned int bitmap_plot::x
unsigned int bitmap_plot::x#0 // x zp[2]:6 101.0
unsigned int bitmap_plot::x#1 // x zp[2]:6 10001.0
@ -3579,13 +3581,13 @@ __constant const char bitmap_plot_ylo[$100] = { fill( $100, 0) }
char *bitmap_screen
void main()
unsigned int main::$13 // zp[2]:6 22.0
unsigned int main::$14 // zp[2]:16 22.0
unsigned int main::$14 // zp[2]:22 22.0
char main::a
char main::a#1 // a zp[1]:3 11.0
char main::a#2 // a zp[1]:3 2.4444444444444446
char main::a#1 // a zp[1]:28 11.0
char main::a#2 // a zp[1]:28 2.4444444444444446
char main::i
char main::i#1 // i zp[1]:2 22.0
char main::i#2 // i zp[1]:2 3.3000000000000003
char main::i#1 // i zp[1]:27 22.0
char main::i#2 // i zp[1]:27 3.3000000000000003
char *main::toD0181_gfx
char main::toD0181_return
__constant char main::toD0181_return#0 = byte1 (unsigned int)SCREEN&$3fff*4|byte1 (unsigned int)BITMAP/4&$f // toD0181_return
@ -3594,55 +3596,55 @@ void * memset(void *str , char c , unsigned int num)
char memset::c
char memset::c#4 // reg byte x 125.125
char *memset::dst
char *memset::dst#1 // dst zp[2]:10 2002.0
char *memset::dst#2 // dst zp[2]:10 1368.3333333333335
char *memset::dst#4 // dst zp[2]:10 202.0
char *memset::dst#1 // dst zp[2]:8 2002.0
char *memset::dst#2 // dst zp[2]:8 1368.3333333333335
char *memset::dst#4 // dst zp[2]:8 202.0
char *memset::end
char *memset::end#0 // end zp[2]:8 183.66666666666669
char *memset::end#0 // end zp[2]:10 183.66666666666669
unsigned int memset::num
unsigned int memset::num#2 // num zp[2]:8 101.0
unsigned int memset::num#2 // num zp[2]:10 101.0
void *memset::return
void *memset::str
void *memset::str#3 // str zp[2]:10
void *memset::str#3 // str zp[2]:8
unsigned int sgn_u16(unsigned int w)
char sgn_u16::$0 // reg byte a 2002.0
char sgn_u16::$1 // reg byte a 2002.0
unsigned int sgn_u16::return
unsigned int sgn_u16::return#0 // return zp[2]:14 202.0
unsigned int sgn_u16::return#1 // return zp[2]:14 202.0
unsigned int sgn_u16::return#4 // return zp[2]:14 50.5
unsigned int sgn_u16::return#0 // return zp[2]:16 202.0
unsigned int sgn_u16::return#1 // return zp[2]:16 202.0
unsigned int sgn_u16::return#4 // return zp[2]:16 50.5
unsigned int sgn_u16::w
unsigned int sgn_u16::w#0 // w zp[2]:25 202.0
unsigned int sgn_u16::w#1 // w zp[2]:25 202.0
unsigned int sgn_u16::w#2 // w zp[2]:25 1203.0
unsigned int sgn_u16::w#0 // w zp[2]:2 202.0
unsigned int sgn_u16::w#1 // w zp[2]:2 202.0
unsigned int sgn_u16::w#2 // w zp[2]:2 1203.0
zp[1]:2 [ main::i#2 main::i#1 ]
zp[1]:3 [ main::a#2 main::a#1 ]
zp[1]:27 [ main::i#2 main::i#1 ]
zp[1]:28 [ main::a#2 main::a#1 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp[2]:4 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp[2]:12 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp[2]:6 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 main::$13 ]
zp[2]:8 [ memset::num#2 memset::end#0 bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ]
zp[2]:10 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
zp[2]:10 [ memset::num#2 memset::end#0 bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ]
zp[2]:8 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
reg byte x [ memset::c#4 ]
zp[2]:12 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:14 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
zp[2]:14 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:16 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ]
zp[2]:16 [ main::$14 bitmap_line::x2#0 ]
zp[2]:18 [ bitmap_line::y2#0 ]
zp[1]:20 [ bitmap_init::$7 ]
zp[2]:22 [ main::$14 bitmap_line::x2#0 ]
zp[2]:24 [ bitmap_line::y2#0 ]
zp[1]:26 [ bitmap_init::$7 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp[2]:21 [ bitmap_line::dx#0 ]
zp[2]:23 [ bitmap_line::sx#0 ]
zp[2]:18 [ bitmap_line::dx#0 ]
zp[2]:20 [ bitmap_line::sx#0 ]
reg byte a [ abs_u16::$0 ]
reg byte a [ abs_u16::$1 ]
reg byte a [ sgn_u16::$0 ]
reg byte a [ sgn_u16::$1 ]
zp[2]:25 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ]
zp[2]:27 [ bitmap_plot::$1 ]
zp[2]:2 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ]
zp[2]:4 [ bitmap_plot::$1 ]
reg byte x [ bitmap_plot::$2 ]
@ -3693,9 +3695,9 @@ Score: 26875
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label __13 = 6
.label __14 = $10
.label a = 3
.label i = 2
.label __14 = $16
.label a = $1c
.label i = $1b
// bitmap_init(BITMAP, SCREEN)
// [1] call bitmap_init
// [19] phi from main to bitmap_init [phi:main->bitmap_init]
@ -3802,8 +3804,8 @@ main: {
// Initialize bitmap plotting tables
// void bitmap_init(char *gfx, char *screen)
bitmap_init: {
.label __7 = $14
.label yoffs = 4
.label __7 = $1a
.label yoffs = $c
// [20] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1]
// [20] phi bitmap_init::x#2 = 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1
ldx #0
@ -3949,20 +3951,20 @@ bitmap_clear: {
}
// bitmap_line
// Draw a line on the bitmap using bresenhams algorithm
// void bitmap_line(__zp(6) unsigned int x1, __zp(8) unsigned int y1, __zp($10) unsigned int x2, __zp($12) unsigned int y2)
// void bitmap_line(__zp(6) unsigned int x1, __zp($a) unsigned int y1, __zp($16) unsigned int x2, __zp($18) unsigned int y2)
bitmap_line: {
.label dx = $15
.label dy = $c
.label sx = $17
.label sy = $e
.label e1 = $a
.label e = 4
.label y = 8
.label dx = $12
.label dy = $e
.label sx = $14
.label sy = $10
.label e1 = 8
.label e = $c
.label y = $a
.label x = 6
.label x1 = 6
.label y1 = 8
.label x2 = $10
.label y2 = $12
.label y1 = $a
.label x2 = $16
.label y2 = $18
// unsigned int dx = abs_u16(x2-x1)
// [46] abs_u16::w#0 = bitmap_line::x2#0 - bitmap_line::x1#0 -- vwuz1=vwuz2_minus_vwuz3
lda.z x2
@ -4268,12 +4270,12 @@ bitmap_line: {
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp($a) void *str, __register(X) char c, __zp(8) unsigned int num)
// void * memset(__zp(8) void *str, __register(X) char c, __zp($a) unsigned int num)
memset: {
.label end = 8
.label dst = $a
.label num = 8
.label str = $a
.label end = $a
.label dst = 8
.label num = $a
.label str = 8
// if(num>0)
// [98] if(memset::num#2<=0) goto memset::@return -- vwuz1_le_0_then_la1
lda.z num
@ -4326,10 +4328,10 @@ memset: {
}
// abs_u16
// Get the absolute value of a 16-bit unsigned number treated as a signed number.
// __zp($c) unsigned int abs_u16(__zp($c) unsigned int w)
// __zp($e) unsigned int abs_u16(__zp($e) unsigned int w)
abs_u16: {
.label w = $c
.label return = $c
.label w = $e
.label return = $e
// BYTE1(w)
// [107] abs_u16::$0 = byte1 abs_u16::w#2 -- vbuaa=_byte1_vwuz1
lda.z w+1
@ -4362,10 +4364,10 @@ abs_u16: {
// sgn_u16
// Get the sign of a 16-bit unsigned number treated as a signed number.
// Returns unsigned -1 if the number is
// __zp($e) unsigned int sgn_u16(__zp($19) unsigned int w)
// __zp($10) unsigned int sgn_u16(__zp(2) unsigned int w)
sgn_u16: {
.label w = $19
.label return = $e
.label w = 2
.label return = $10
// BYTE1(w)
// [114] sgn_u16::$0 = byte1 sgn_u16::w#2 -- vbuaa=_byte1_vwuz1
lda.z w+1
@ -4400,8 +4402,8 @@ sgn_u16: {
// Plot a single dot in the bitmap
// void bitmap_plot(__zp(6) unsigned int x, __register(X) char y)
bitmap_plot: {
.label __1 = $1b
.label plotter = $19
.label __1 = 4
.label plotter = 2
.label x = 6
// MAKEWORD( bitmap_plot_yhi[y], bitmap_plot_ylo[y] )
// [121] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bitmap_plot_ylo[bitmap_plot::y#4] -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx

View File

@ -16,14 +16,14 @@ unsigned int abs_u16(unsigned int w)
char abs_u16::$0 // reg byte a 2002.0
char abs_u16::$1 // reg byte a 2002.0
unsigned int abs_u16::return
unsigned int abs_u16::return#0 // return zp[2]:12 202.0
unsigned int abs_u16::return#1 // return zp[2]:12 202.0
unsigned int abs_u16::return#2 // return zp[2]:12 2002.0
unsigned int abs_u16::return#4 // return zp[2]:12 551.0
unsigned int abs_u16::return#0 // return zp[2]:14 202.0
unsigned int abs_u16::return#1 // return zp[2]:14 202.0
unsigned int abs_u16::return#2 // return zp[2]:14 2002.0
unsigned int abs_u16::return#4 // return zp[2]:14 551.0
unsigned int abs_u16::w
unsigned int abs_u16::w#0 // w zp[2]:12 202.0
unsigned int abs_u16::w#1 // w zp[2]:12 202.0
unsigned int abs_u16::w#2 // w zp[2]:12 801.25
unsigned int abs_u16::w#0 // w zp[2]:14 202.0
unsigned int abs_u16::w#1 // w zp[2]:14 202.0
unsigned int abs_u16::w#2 // w zp[2]:14 801.25
void bitmap_clear(char bgcol , char fgcol)
char bitmap_clear::bgcol
char bitmap_clear::col
@ -34,7 +34,7 @@ void bitmap_init(char *gfx , char *screen)
char bitmap_init::$4 // reg byte a 202.0
char bitmap_init::$5 // reg byte a 202.0
char bitmap_init::$6 // reg byte a 202.0
char bitmap_init::$7 // zp[1]:20 50.5
char bitmap_init::$7 // zp[1]:26 50.5
char bitmap_init::bits
char bitmap_init::bits#1 // reg byte a 101.0
char bitmap_init::bits#3 // reg byte a 151.5
@ -48,30 +48,30 @@ char bitmap_init::y
char bitmap_init::y#1 // reg byte x 151.5
char bitmap_init::y#2 // reg byte x 50.5
char *bitmap_init::yoffs
char *bitmap_init::yoffs#1 // yoffs zp[2]:4 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:4 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:4 101.0
char *bitmap_init::yoffs#1 // yoffs zp[2]:12 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:12 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:12 101.0
void bitmap_line(unsigned int x1 , unsigned int y1 , unsigned int x2 , unsigned int y2)
unsigned int bitmap_line::dx
unsigned int bitmap_line::dx#0 // dx zp[2]:21 760.175
unsigned int bitmap_line::dx#0 // dx zp[2]:18 760.175
unsigned int bitmap_line::dy
unsigned int bitmap_line::dy#0 // dy zp[2]:12 844.6388888888889
unsigned int bitmap_line::dy#0 // dy zp[2]:14 844.6388888888889
unsigned int bitmap_line::e
unsigned int bitmap_line::e#0 // e zp[2]:4 202.0
unsigned int bitmap_line::e#1 // e zp[2]:4 13334.666666666666
unsigned int bitmap_line::e#2 // e zp[2]:4 20002.0
unsigned int bitmap_line::e#3 // e zp[2]:4 4020.6000000000004
unsigned int bitmap_line::e#6 // e zp[2]:4 15001.5
unsigned int bitmap_line::e#0 // e zp[2]:12 202.0
unsigned int bitmap_line::e#1 // e zp[2]:12 13334.666666666666
unsigned int bitmap_line::e#2 // e zp[2]:12 20002.0
unsigned int bitmap_line::e#3 // e zp[2]:12 4020.6000000000004
unsigned int bitmap_line::e#6 // e zp[2]:12 15001.5
unsigned int bitmap_line::e1
unsigned int bitmap_line::e1#0 // e1 zp[2]:10 202.0
unsigned int bitmap_line::e1#1 // e1 zp[2]:10 13334.666666666666
unsigned int bitmap_line::e1#2 // e1 zp[2]:10 20002.0
unsigned int bitmap_line::e1#3 // e1 zp[2]:10 4020.6000000000004
unsigned int bitmap_line::e1#6 // e1 zp[2]:10 15001.5
unsigned int bitmap_line::e1#0 // e1 zp[2]:8 202.0
unsigned int bitmap_line::e1#1 // e1 zp[2]:8 13334.666666666666
unsigned int bitmap_line::e1#2 // e1 zp[2]:8 20002.0
unsigned int bitmap_line::e1#3 // e1 zp[2]:8 4020.6000000000004
unsigned int bitmap_line::e1#6 // e1 zp[2]:8 15001.5
unsigned int bitmap_line::sx
unsigned int bitmap_line::sx#0 // sx zp[2]:23 670.1
unsigned int bitmap_line::sx#0 // sx zp[2]:20 670.1
unsigned int bitmap_line::sy
unsigned int bitmap_line::sy#0 // sy zp[2]:14 773.1923076923076
unsigned int bitmap_line::sy#0 // sy zp[2]:16 773.1923076923076
unsigned int bitmap_line::x
unsigned int bitmap_line::x#1 // x zp[2]:6 10001.0
unsigned int bitmap_line::x#12 // x zp[2]:6 20002.0
@ -82,24 +82,24 @@ unsigned int bitmap_line::x#7 // x zp[2]:6 7526.0
unsigned int bitmap_line::x1
unsigned int bitmap_line::x1#0 // x1 zp[2]:6 19.846153846153847
unsigned int bitmap_line::x2
unsigned int bitmap_line::x2#0 // x2 zp[2]:16 300.4117647058823
unsigned int bitmap_line::x2#0 // x2 zp[2]:22 300.4117647058823
unsigned int bitmap_line::y
unsigned int bitmap_line::y#1 // y zp[2]:8 5714.857142857143
unsigned int bitmap_line::y#13 // y zp[2]:8 20002.0
unsigned int bitmap_line::y#15 // y zp[2]:8 4300.571428571429
unsigned int bitmap_line::y#2 // y zp[2]:8 10001.0
unsigned int bitmap_line::y#4 // y zp[2]:8 5025.75
unsigned int bitmap_line::y#7 // y zp[2]:8 10001.0
unsigned int bitmap_line::y#1 // y zp[2]:10 5714.857142857143
unsigned int bitmap_line::y#13 // y zp[2]:10 20002.0
unsigned int bitmap_line::y#15 // y zp[2]:10 4300.571428571429
unsigned int bitmap_line::y#2 // y zp[2]:10 10001.0
unsigned int bitmap_line::y#4 // y zp[2]:10 5025.75
unsigned int bitmap_line::y#7 // y zp[2]:10 10001.0
unsigned int bitmap_line::y1
unsigned int bitmap_line::y1#0 // y1 zp[2]:8 17.291666666666664
unsigned int bitmap_line::y1#0 // y1 zp[2]:10 17.291666666666664
unsigned int bitmap_line::y2
unsigned int bitmap_line::y2#0 // y2 zp[2]:18 319.1875
unsigned int bitmap_line::y2#0 // y2 zp[2]:24 319.1875
void bitmap_plot(unsigned int x , char y)
unsigned int bitmap_plot::$1 // zp[2]:27 200002.0
unsigned int bitmap_plot::$1 // zp[2]:4 200002.0
char bitmap_plot::$2 // reg byte x 200002.0
char *bitmap_plot::plotter
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:25 50000.5
char *bitmap_plot::plotter#1 // plotter zp[2]:25 150001.5
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:2 50000.5
char *bitmap_plot::plotter#1 // plotter zp[2]:2 150001.5
unsigned int bitmap_plot::x
unsigned int bitmap_plot::x#0 // x zp[2]:6 101.0
unsigned int bitmap_plot::x#1 // x zp[2]:6 10001.0
@ -118,13 +118,13 @@ __constant const char bitmap_plot_ylo[$100] = { fill( $100, 0) }
char *bitmap_screen
void main()
unsigned int main::$13 // zp[2]:6 22.0
unsigned int main::$14 // zp[2]:16 22.0
unsigned int main::$14 // zp[2]:22 22.0
char main::a
char main::a#1 // a zp[1]:3 11.0
char main::a#2 // a zp[1]:3 2.4444444444444446
char main::a#1 // a zp[1]:28 11.0
char main::a#2 // a zp[1]:28 2.4444444444444446
char main::i
char main::i#1 // i zp[1]:2 22.0
char main::i#2 // i zp[1]:2 3.3000000000000003
char main::i#1 // i zp[1]:27 22.0
char main::i#2 // i zp[1]:27 3.3000000000000003
char *main::toD0181_gfx
char main::toD0181_return
__constant char main::toD0181_return#0 = byte1 (unsigned int)SCREEN&$3fff*4|byte1 (unsigned int)BITMAP/4&$f // toD0181_return
@ -133,53 +133,53 @@ void * memset(void *str , char c , unsigned int num)
char memset::c
char memset::c#4 // reg byte x 125.125
char *memset::dst
char *memset::dst#1 // dst zp[2]:10 2002.0
char *memset::dst#2 // dst zp[2]:10 1368.3333333333335
char *memset::dst#4 // dst zp[2]:10 202.0
char *memset::dst#1 // dst zp[2]:8 2002.0
char *memset::dst#2 // dst zp[2]:8 1368.3333333333335
char *memset::dst#4 // dst zp[2]:8 202.0
char *memset::end
char *memset::end#0 // end zp[2]:8 183.66666666666669
char *memset::end#0 // end zp[2]:10 183.66666666666669
unsigned int memset::num
unsigned int memset::num#2 // num zp[2]:8 101.0
unsigned int memset::num#2 // num zp[2]:10 101.0
void *memset::return
void *memset::str
void *memset::str#3 // str zp[2]:10
void *memset::str#3 // str zp[2]:8
unsigned int sgn_u16(unsigned int w)
char sgn_u16::$0 // reg byte a 2002.0
char sgn_u16::$1 // reg byte a 2002.0
unsigned int sgn_u16::return
unsigned int sgn_u16::return#0 // return zp[2]:14 202.0
unsigned int sgn_u16::return#1 // return zp[2]:14 202.0
unsigned int sgn_u16::return#4 // return zp[2]:14 50.5
unsigned int sgn_u16::return#0 // return zp[2]:16 202.0
unsigned int sgn_u16::return#1 // return zp[2]:16 202.0
unsigned int sgn_u16::return#4 // return zp[2]:16 50.5
unsigned int sgn_u16::w
unsigned int sgn_u16::w#0 // w zp[2]:25 202.0
unsigned int sgn_u16::w#1 // w zp[2]:25 202.0
unsigned int sgn_u16::w#2 // w zp[2]:25 1203.0
unsigned int sgn_u16::w#0 // w zp[2]:2 202.0
unsigned int sgn_u16::w#1 // w zp[2]:2 202.0
unsigned int sgn_u16::w#2 // w zp[2]:2 1203.0
zp[1]:2 [ main::i#2 main::i#1 ]
zp[1]:3 [ main::a#2 main::a#1 ]
zp[1]:27 [ main::i#2 main::i#1 ]
zp[1]:28 [ main::a#2 main::a#1 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp[2]:4 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp[2]:12 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp[2]:6 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 main::$13 ]
zp[2]:8 [ memset::num#2 memset::end#0 bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ]
zp[2]:10 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
zp[2]:10 [ memset::num#2 memset::end#0 bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ]
zp[2]:8 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
reg byte x [ memset::c#4 ]
zp[2]:12 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:14 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
zp[2]:14 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:16 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ]
zp[2]:16 [ main::$14 bitmap_line::x2#0 ]
zp[2]:18 [ bitmap_line::y2#0 ]
zp[1]:20 [ bitmap_init::$7 ]
zp[2]:22 [ main::$14 bitmap_line::x2#0 ]
zp[2]:24 [ bitmap_line::y2#0 ]
zp[1]:26 [ bitmap_init::$7 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp[2]:21 [ bitmap_line::dx#0 ]
zp[2]:23 [ bitmap_line::sx#0 ]
zp[2]:18 [ bitmap_line::dx#0 ]
zp[2]:20 [ bitmap_line::sx#0 ]
reg byte a [ abs_u16::$0 ]
reg byte a [ abs_u16::$1 ]
reg byte a [ sgn_u16::$0 ]
reg byte a [ sgn_u16::$1 ]
zp[2]:25 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ]
zp[2]:27 [ bitmap_plot::$1 ]
zp[2]:2 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ]
zp[2]:4 [ bitmap_plot::$1 ]
reg byte x [ bitmap_plot::$2 ]

View File

@ -48,7 +48,7 @@ main: {
jmp __b1
}
init_screen: {
.label b = 6
.label b = 2
.label c = 4
lda #<BITMAP
sta.z b
@ -100,8 +100,8 @@ init_screen: {
jmp __b1
}
init_plot_tables: {
.label __9 = 2
.label yoffs = 6
.label __9 = 7
.label yoffs = 2
ldy #$80
ldx #0
__b1:
@ -186,12 +186,12 @@ plots: {
inx
jmp __b1
}
// void plot(__zp(2) char x, __zp(3) char y)
// void plot(__zp(7) char x, __zp(6) char y)
plot: {
.label x = 2
.label y = 3
.label x = 7
.label y = 6
.label plotter_x = 4
.label plotter_y = 6
.label plotter_y = 2
.label plotter = 4
// BYTE1(plotter_x) = plot_xhi[x]
ldy.z x

View File

@ -806,32 +806,32 @@ Complete equivalence classes
[ plot::plotter_y#2 ]
[ plot::plotter#0 ]
[ plot::$5 ]
Allocated zp[2]:2 [ init_screen::b#2 init_screen::b#1 ]
Allocated zp[2]:4 [ init_screen::c#2 init_screen::c#1 ]
Allocated zp[1]:6 [ init_plot_tables::x#2 init_plot_tables::x#1 ]
Allocated zp[1]:7 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ]
Allocated zp[1]:8 [ init_plot_tables::y#2 init_plot_tables::y#1 ]
Allocated zp[2]:9 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ]
Allocated zp[1]:11 [ plots::i#2 plots::i#1 ]
Allocated zp[1]:12 [ init_plot_tables::$0 ]
Allocated zp[1]:13 [ init_plot_tables::$9 ]
Allocated zp[1]:14 [ init_plot_tables::$6 ]
Allocated zp[1]:15 [ init_plot_tables::$7 ]
Allocated zp[1]:16 [ init_plot_tables::$8 ]
Allocated zp[1]:17 [ plot::x#0 ]
Allocated zp[1]:2 [ plot::$6 ]
Allocated zp[1]:3 [ plot::$7 ]
Allocated zp[1]:4 [ plot::$8 ]
Allocated zp[1]:5 [ plot::$9 ]
Allocated zp[2]:6 [ plot::plotter_y#2 ]
Allocated zp[1]:8 [ plot::$5 ]
Allocated zp[2]:9 [ plot::plotter#0 ]
Allocated zp[2]:11 [ plot::plotter_x#1 ]
Allocated zp[2]:13 [ plot::plotter_y#1 ]
Allocated zp[2]:15 [ plot::plotter_x#2 ]
Allocated zp[1]:17 [ plots::i#2 plots::i#1 ]
Allocated zp[1]:18 [ plot::y#0 ]
Allocated zp[1]:19 [ plot::$6 ]
Allocated zp[2]:20 [ plot::plotter_x#1 ]
Allocated zp[1]:22 [ plot::$7 ]
Allocated zp[2]:23 [ plot::plotter_x#2 ]
Allocated zp[1]:25 [ plot::$8 ]
Allocated zp[2]:26 [ plot::plotter_y#1 ]
Allocated zp[1]:28 [ plot::$9 ]
Allocated zp[2]:29 [ plot::plotter_y#2 ]
Allocated zp[2]:31 [ plot::plotter#0 ]
Allocated zp[1]:33 [ plot::$5 ]
Allocated zp[1]:19 [ plot::x#0 ]
Allocated zp[2]:20 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ]
Allocated zp[2]:22 [ init_screen::b#2 init_screen::b#1 ]
Allocated zp[2]:24 [ init_screen::c#2 init_screen::c#1 ]
Allocated zp[1]:26 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ]
Allocated zp[1]:27 [ init_plot_tables::x#2 init_plot_tables::x#1 ]
Allocated zp[1]:28 [ init_plot_tables::y#2 init_plot_tables::y#1 ]
Allocated zp[1]:29 [ init_plot_tables::$0 ]
Allocated zp[1]:30 [ init_plot_tables::$6 ]
Allocated zp[1]:31 [ init_plot_tables::$7 ]
Allocated zp[1]:32 [ init_plot_tables::$8 ]
Allocated zp[1]:33 [ init_plot_tables::$9 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Equivalence Class zp[1]:14 [ init_plot_tables::$6 ] has ALU potential.
Equivalence Class zp[1]:30 [ init_plot_tables::$6 ] has ALU potential.
Statement [0] *BG_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [1] *FGCOL = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *D011 = BMM|DEN|RSEL|3 [ ] ( [ ] { } ) always clobbers reg byte a
@ -842,20 +842,20 @@ Statement [15] if(init_screen::c#2!=SCREEN+$400) goto init_screen::@4 [ init_scr
Statement [17] *init_screen::c#2 = $14 [ init_screen::c#2 ] ( init_screen:4 [ init_screen::c#2 ] { } ) always clobbers reg byte a reg byte y
Statement [19] *init_screen::b#2 = 0 [ init_screen::b#2 ] ( init_screen:4 [ init_screen::b#2 ] { } ) always clobbers reg byte a reg byte y
Statement [25] plot_xhi[init_plot_tables::x#2] = byte1 BITMAP [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( init_plot_tables:6 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:6 [ init_plot_tables::x#2 init_plot_tables::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:7 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:27 [ init_plot_tables::x#2 init_plot_tables::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:26 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ]
Statement [26] plot_bit[init_plot_tables::x#2] = init_plot_tables::bits#3 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( init_plot_tables:6 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] { } ) always clobbers reg byte a
Statement [41] init_plot_tables::yoffs#1 = init_plot_tables::yoffs#2 + (unsigned int)$28*8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( init_plot_tables:6 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:8 [ init_plot_tables::y#2 init_plot_tables::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:28 [ init_plot_tables::y#2 init_plot_tables::y#1 ]
Statement [55] plot::plotter_x#1 = (char *) 0 byte1= plot::$6 [ plot::x#0 plot::y#0 plot::plotter_x#1 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:11 [ plots::i#2 plots::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:17 [ plot::x#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:17 [ plots::i#2 plots::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:19 [ plot::x#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:18 [ plot::y#0 ]
Statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 [ plot::x#0 plot::y#0 plot::plotter_x#2 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 ] { } ) always clobbers reg byte a
Statement [61] plot::plotter_y#2 = plot::plotter_y#1 byte0= plot::$9 [ plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] { } ) always clobbers reg byte a
Statement [62] plot::plotter#0 = plot::plotter_x#2 + plot::plotter_y#2 [ plot::x#0 plot::plotter#0 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::plotter#0 ] { } ) always clobbers reg byte a
Statement [63] plot::$5 = *plot::plotter#0 | plot_bit[plot::x#0] [ plot::plotter#0 plot::$5 ] ( plots:9::plot:52 [ plots::i#2 plot::plotter#0 plot::$5 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:11 [ plots::i#2 plots::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:17 [ plots::i#2 plots::i#1 ]
Statement [64] *plot::plotter#0 = plot::$5 [ ] ( plots:9::plot:52 [ plots::i#2 ] { } ) always clobbers reg byte y
Statement [0] *BG_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [1] *FGCOL = 0 [ ] ( [ ] { } ) always clobbers reg byte a
@ -877,72 +877,72 @@ Statement [61] plot::plotter_y#2 = plot::plotter_y#1 byte0= plot::$9 [ plot::x#0
Statement [62] plot::plotter#0 = plot::plotter_x#2 + plot::plotter_y#2 [ plot::x#0 plot::plotter#0 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::plotter#0 ] { } ) always clobbers reg byte a
Statement [63] plot::$5 = *plot::plotter#0 | plot_bit[plot::x#0] [ plot::plotter#0 plot::$5 ] ( plots:9::plot:52 [ plots::i#2 plot::plotter#0 plot::$5 ] { } ) always clobbers reg byte a reg byte y
Statement [64] *plot::plotter#0 = plot::$5 [ ] ( plots:9::plot:52 [ plots::i#2 ] { } ) always clobbers reg byte y
Potential registers zp[2]:2 [ init_screen::b#2 init_screen::b#1 ] : zp[2]:2 ,
Potential registers zp[2]:4 [ init_screen::c#2 init_screen::c#1 ] : zp[2]:4 ,
Potential registers zp[1]:6 [ init_plot_tables::x#2 init_plot_tables::x#1 ] : zp[1]:6 , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] : zp[1]:7 , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ init_plot_tables::y#2 init_plot_tables::y#1 ] : zp[1]:8 , reg byte x , reg byte y ,
Potential registers zp[2]:9 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] : zp[2]:9 ,
Potential registers zp[1]:11 [ plots::i#2 plots::i#1 ] : zp[1]:11 , reg byte x ,
Potential registers zp[1]:12 [ init_plot_tables::$0 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:13 [ init_plot_tables::$9 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:14 [ init_plot_tables::$6 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , reg byte alu ,
Potential registers zp[1]:15 [ init_plot_tables::$7 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:16 [ init_plot_tables::$8 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:17 [ plot::x#0 ] : zp[1]:17 , reg byte x , reg byte y ,
Potential registers zp[2]:22 [ init_screen::b#2 init_screen::b#1 ] : zp[2]:22 ,
Potential registers zp[2]:24 [ init_screen::c#2 init_screen::c#1 ] : zp[2]:24 ,
Potential registers zp[1]:27 [ init_plot_tables::x#2 init_plot_tables::x#1 ] : zp[1]:27 , reg byte x , reg byte y ,
Potential registers zp[1]:26 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] : zp[1]:26 , reg byte x , reg byte y ,
Potential registers zp[1]:28 [ init_plot_tables::y#2 init_plot_tables::y#1 ] : zp[1]:28 , reg byte x , reg byte y ,
Potential registers zp[2]:20 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] : zp[2]:20 ,
Potential registers zp[1]:17 [ plots::i#2 plots::i#1 ] : zp[1]:17 , reg byte x ,
Potential registers zp[1]:29 [ init_plot_tables::$0 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:33 [ init_plot_tables::$9 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:30 [ init_plot_tables::$6 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , reg byte alu ,
Potential registers zp[1]:31 [ init_plot_tables::$7 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:32 [ init_plot_tables::$8 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:19 [ plot::x#0 ] : zp[1]:19 , reg byte x , reg byte y ,
Potential registers zp[1]:18 [ plot::y#0 ] : zp[1]:18 , reg byte x , reg byte y ,
Potential registers zp[1]:19 [ plot::$6 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:20 [ plot::plotter_x#1 ] : zp[2]:20 ,
Potential registers zp[1]:22 [ plot::$7 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:23 [ plot::plotter_x#2 ] : zp[2]:23 ,
Potential registers zp[1]:25 [ plot::$8 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:26 [ plot::plotter_y#1 ] : zp[2]:26 ,
Potential registers zp[1]:28 [ plot::$9 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:29 [ plot::plotter_y#2 ] : zp[2]:29 ,
Potential registers zp[2]:31 [ plot::plotter#0 ] : zp[2]:31 ,
Potential registers zp[1]:33 [ plot::$5 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ plot::$6 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:11 [ plot::plotter_x#1 ] : zp[2]:11 ,
Potential registers zp[1]:3 [ plot::$7 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:15 [ plot::plotter_x#2 ] : zp[2]:15 ,
Potential registers zp[1]:4 [ plot::$8 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:13 [ plot::plotter_y#1 ] : zp[2]:13 ,
Potential registers zp[1]:5 [ plot::$9 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:6 [ plot::plotter_y#2 ] : zp[2]:6 ,
Potential registers zp[2]:9 [ plot::plotter#0 ] : zp[2]:9 ,
Potential registers zp[1]:8 [ plot::$5 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [plot] 200,002: zp[1]:19 [ plot::$6 ] 200,002: zp[1]:22 [ plot::$7 ] 200,002: zp[1]:25 [ plot::$8 ] 200,002: zp[1]:28 [ plot::$9 ] 200,002: zp[2]:29 [ plot::plotter_y#2 ] 200,002: zp[1]:33 [ plot::$5 ] 150,001.5: zp[2]:31 [ plot::plotter#0 ] 100,001: zp[2]:20 [ plot::plotter_x#1 ] 100,001: zp[2]:26 [ plot::plotter_y#1 ] 40,000.4: zp[2]:23 [ plot::plotter_x#2 ] 30,000.43: zp[1]:18 [ plot::y#0 ] 28,182.18: zp[1]:17 [ plot::x#0 ]
Uplift Scope [plots] 30,003: zp[1]:11 [ plots::i#2 plots::i#1 ]
Uplift Scope [init_plot_tables] 366.12: zp[2]:9 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] 228.93: zp[1]:7 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] 218.83: zp[1]:6 [ init_plot_tables::x#2 init_plot_tables::x#1 ] 202: zp[1]:8 [ init_plot_tables::y#2 init_plot_tables::y#1 ] 202: zp[1]:12 [ init_plot_tables::$0 ] 202: zp[1]:14 [ init_plot_tables::$6 ] 202: zp[1]:15 [ init_plot_tables::$7 ] 202: zp[1]:16 [ init_plot_tables::$8 ] 50.5: zp[1]:13 [ init_plot_tables::$9 ]
Uplift Scope [init_screen] 336.67: zp[2]:2 [ init_screen::b#2 init_screen::b#1 ] 336.67: zp[2]:4 [ init_screen::c#2 init_screen::c#1 ]
Uplift Scope [plot] 200,002: zp[1]:2 [ plot::$6 ] 200,002: zp[1]:3 [ plot::$7 ] 200,002: zp[1]:4 [ plot::$8 ] 200,002: zp[1]:5 [ plot::$9 ] 200,002: zp[2]:6 [ plot::plotter_y#2 ] 200,002: zp[1]:8 [ plot::$5 ] 150,001.5: zp[2]:9 [ plot::plotter#0 ] 100,001: zp[2]:11 [ plot::plotter_x#1 ] 100,001: zp[2]:13 [ plot::plotter_y#1 ] 40,000.4: zp[2]:15 [ plot::plotter_x#2 ] 30,000.43: zp[1]:18 [ plot::y#0 ] 28,182.18: zp[1]:19 [ plot::x#0 ]
Uplift Scope [plots] 30,003: zp[1]:17 [ plots::i#2 plots::i#1 ]
Uplift Scope [init_plot_tables] 366.12: zp[2]:20 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] 228.93: zp[1]:26 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] 218.83: zp[1]:27 [ init_plot_tables::x#2 init_plot_tables::x#1 ] 202: zp[1]:28 [ init_plot_tables::y#2 init_plot_tables::y#1 ] 202: zp[1]:29 [ init_plot_tables::$0 ] 202: zp[1]:30 [ init_plot_tables::$6 ] 202: zp[1]:31 [ init_plot_tables::$7 ] 202: zp[1]:32 [ init_plot_tables::$8 ] 50.5: zp[1]:33 [ init_plot_tables::$9 ]
Uplift Scope [init_screen] 336.67: zp[2]:22 [ init_screen::b#2 init_screen::b#1 ] 336.67: zp[2]:24 [ init_screen::c#2 init_screen::c#1 ]
Uplift Scope [main]
Uplift Scope []
Uplifting [plot] best 10319 combination reg byte a [ plot::$6 ] reg byte a [ plot::$7 ] reg byte a [ plot::$8 ] reg byte a [ plot::$9 ] zp[2]:29 [ plot::plotter_y#2 ] zp[1]:33 [ plot::$5 ] zp[2]:31 [ plot::plotter#0 ] zp[2]:20 [ plot::plotter_x#1 ] zp[2]:26 [ plot::plotter_y#1 ] zp[2]:23 [ plot::plotter_x#2 ] zp[1]:18 [ plot::y#0 ] zp[1]:17 [ plot::x#0 ]
Uplifting [plot] best 10319 combination reg byte a [ plot::$6 ] reg byte a [ plot::$7 ] reg byte a [ plot::$8 ] reg byte a [ plot::$9 ] zp[2]:6 [ plot::plotter_y#2 ] zp[1]:8 [ plot::$5 ] zp[2]:9 [ plot::plotter#0 ] zp[2]:11 [ plot::plotter_x#1 ] zp[2]:13 [ plot::plotter_y#1 ] zp[2]:15 [ plot::plotter_x#2 ] zp[1]:18 [ plot::y#0 ] zp[1]:19 [ plot::x#0 ]
Limited combination testing to 100 combinations of 9216 possible.
Uplifting [plots] best 8819 combination reg byte x [ plots::i#2 plots::i#1 ]
Uplifting [init_plot_tables] best 8359 combination zp[2]:9 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] reg byte a [ init_plot_tables::$0 ] zp[1]:14 [ init_plot_tables::$6 ] zp[1]:15 [ init_plot_tables::$7 ] zp[1]:16 [ init_plot_tables::$8 ] zp[1]:13 [ init_plot_tables::$9 ]
Uplifting [init_plot_tables] best 8359 combination zp[2]:20 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] reg byte a [ init_plot_tables::$0 ] zp[1]:30 [ init_plot_tables::$6 ] zp[1]:31 [ init_plot_tables::$7 ] zp[1]:32 [ init_plot_tables::$8 ] zp[1]:33 [ init_plot_tables::$9 ]
Limited combination testing to 100 combinations of 34560 possible.
Uplifting [init_screen] best 8359 combination zp[2]:2 [ init_screen::b#2 init_screen::b#1 ] zp[2]:4 [ init_screen::c#2 init_screen::c#1 ]
Uplifting [init_screen] best 8359 combination zp[2]:22 [ init_screen::b#2 init_screen::b#1 ] zp[2]:24 [ init_screen::c#2 init_screen::c#1 ]
Uplifting [main] best 8359 combination
Uplifting [] best 8359 combination
Attempting to uplift remaining variables inzp[1]:33 [ plot::$5 ]
Attempting to uplift remaining variables inzp[1]:8 [ plot::$5 ]
Uplifting [plot] best 8353 combination reg byte a [ plot::$5 ]
Attempting to uplift remaining variables inzp[1]:18 [ plot::y#0 ]
Uplifting [plot] best 8353 combination zp[1]:18 [ plot::y#0 ]
Attempting to uplift remaining variables inzp[1]:17 [ plot::x#0 ]
Uplifting [plot] best 8353 combination zp[1]:17 [ plot::x#0 ]
Attempting to uplift remaining variables inzp[1]:14 [ init_plot_tables::$6 ]
Attempting to uplift remaining variables inzp[1]:19 [ plot::x#0 ]
Uplifting [plot] best 8353 combination zp[1]:19 [ plot::x#0 ]
Attempting to uplift remaining variables inzp[1]:30 [ init_plot_tables::$6 ]
Uplifting [init_plot_tables] best 8293 combination reg byte a [ init_plot_tables::$6 ]
Attempting to uplift remaining variables inzp[1]:15 [ init_plot_tables::$7 ]
Attempting to uplift remaining variables inzp[1]:31 [ init_plot_tables::$7 ]
Uplifting [init_plot_tables] best 8233 combination reg byte a [ init_plot_tables::$7 ]
Attempting to uplift remaining variables inzp[1]:16 [ init_plot_tables::$8 ]
Attempting to uplift remaining variables inzp[1]:32 [ init_plot_tables::$8 ]
Uplifting [init_plot_tables] best 8173 combination reg byte a [ init_plot_tables::$8 ]
Attempting to uplift remaining variables inzp[1]:13 [ init_plot_tables::$9 ]
Uplifting [init_plot_tables] best 8173 combination zp[1]:13 [ init_plot_tables::$9 ]
Coalescing zero page register [ zp[2]:20 [ plot::plotter_x#1 ] ] with [ zp[2]:23 [ plot::plotter_x#2 ] ] - score: 1
Coalescing zero page register [ zp[2]:26 [ plot::plotter_y#1 ] ] with [ zp[2]:29 [ plot::plotter_y#2 ] ] - score: 1
Coalescing zero page register [ zp[2]:20 [ plot::plotter_x#1 plot::plotter_x#2 ] ] with [ zp[2]:31 [ plot::plotter#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:9 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] ] with [ zp[2]:2 [ init_screen::b#2 init_screen::b#1 ] ]
Coalescing zero page register [ zp[1]:17 [ plot::x#0 ] ] with [ zp[1]:13 [ init_plot_tables::$9 ] ]
Coalescing zero page register [ zp[2]:20 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 ] ] with [ zp[2]:4 [ init_screen::c#2 init_screen::c#1 ] ]
Coalescing zero page register [ zp[2]:26 [ plot::plotter_y#1 plot::plotter_y#2 ] ] with [ zp[2]:9 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ] ]
Allocated (was zp[1]:17) zp[1]:2 [ plot::x#0 init_plot_tables::$9 ]
Allocated (was zp[1]:18) zp[1]:3 [ plot::y#0 ]
Allocated (was zp[2]:20) zp[2]:4 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ]
Allocated (was zp[2]:26) zp[2]:6 [ plot::plotter_y#1 plot::plotter_y#2 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ]
Attempting to uplift remaining variables inzp[1]:33 [ init_plot_tables::$9 ]
Uplifting [init_plot_tables] best 8173 combination zp[1]:33 [ init_plot_tables::$9 ]
Coalescing zero page register [ zp[2]:11 [ plot::plotter_x#1 ] ] with [ zp[2]:15 [ plot::plotter_x#2 ] ] - score: 1
Coalescing zero page register [ zp[2]:13 [ plot::plotter_y#1 ] ] with [ zp[2]:6 [ plot::plotter_y#2 ] ] - score: 1
Coalescing zero page register [ zp[2]:11 [ plot::plotter_x#1 plot::plotter_x#2 ] ] with [ zp[2]:9 [ plot::plotter#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:20 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] ] with [ zp[2]:22 [ init_screen::b#2 init_screen::b#1 ] ]
Coalescing zero page register [ zp[1]:19 [ plot::x#0 ] ] with [ zp[1]:33 [ init_plot_tables::$9 ] ]
Coalescing zero page register [ zp[2]:11 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 ] ] with [ zp[2]:24 [ init_screen::c#2 init_screen::c#1 ] ]
Coalescing zero page register [ zp[2]:13 [ plot::plotter_y#1 plot::plotter_y#2 ] ] with [ zp[2]:20 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ] ]
Allocated (was zp[2]:13) zp[2]:2 [ plot::plotter_y#1 plot::plotter_y#2 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ]
Allocated (was zp[2]:11) zp[2]:4 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ]
Allocated (was zp[1]:18) zp[1]:6 [ plot::y#0 ]
Allocated (was zp[1]:19) zp[1]:7 [ plot::x#0 init_plot_tables::$9 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -1020,7 +1020,7 @@ main: {
}
// init_screen
init_screen: {
.label b = 6
.label b = 2
.label c = 4
// [12] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1]
__b1_from_init_screen:
@ -1094,8 +1094,8 @@ init_screen: {
}
// init_plot_tables
init_plot_tables: {
.label __9 = 2
.label yoffs = 6
.label __9 = 7
.label yoffs = 2
// [22] phi from init_plot_tables to init_plot_tables::@1 [phi:init_plot_tables->init_plot_tables::@1]
__b1_from_init_plot_tables:
// [22] phi init_plot_tables::bits#3 = $80 [phi:init_plot_tables->init_plot_tables::@1#0] -- vbuyy=vbuc1
@ -1250,12 +1250,12 @@ plots: {
jmp __b1
}
// plot
// void plot(__zp(2) char x, __zp(3) char y)
// void plot(__zp(7) char x, __zp(6) char y)
plot: {
.label x = 2
.label y = 3
.label x = 7
.label y = 6
.label plotter_x = 4
.label plotter_y = 6
.label plotter_y = 2
.label plotter = 4
// [54] plot::$6 = plot_xhi[plot::x#0] -- vbuaa=pbuc1_derefidx_vbuz1
ldy.z x
@ -1396,7 +1396,7 @@ char init_plot_tables::$0 // reg byte a 202.0
char init_plot_tables::$6 // reg byte a 202.0
char init_plot_tables::$7 // reg byte a 202.0
char init_plot_tables::$8 // reg byte a 202.0
char init_plot_tables::$9 // zp[1]:2 50.5
char init_plot_tables::$9 // zp[1]:7 50.5
char init_plot_tables::bits
char init_plot_tables::bits#1 // reg byte y 101.0
char init_plot_tables::bits#3 // reg byte y 60.599999999999994
@ -1408,13 +1408,13 @@ char init_plot_tables::y
char init_plot_tables::y#1 // reg byte x 151.5
char init_plot_tables::y#2 // reg byte x 50.5
char *init_plot_tables::yoffs
char *init_plot_tables::yoffs#1 // yoffs zp[2]:6 202.0
char *init_plot_tables::yoffs#2 // yoffs zp[2]:6 63.125
char *init_plot_tables::yoffs#4 // yoffs zp[2]:6 101.0
char *init_plot_tables::yoffs#1 // yoffs zp[2]:2 202.0
char *init_plot_tables::yoffs#2 // yoffs zp[2]:2 63.125
char *init_plot_tables::yoffs#4 // yoffs zp[2]:2 101.0
void init_screen()
char *init_screen::b
char *init_screen::b#1 // b zp[2]:6 202.0
char *init_screen::b#2 // b zp[2]:6 134.66666666666666
char *init_screen::b#1 // b zp[2]:2 202.0
char *init_screen::b#2 // b zp[2]:2 134.66666666666666
char *init_screen::c
char *init_screen::c#1 // c zp[2]:4 202.0
char *init_screen::c#2 // c zp[2]:4 134.66666666666666
@ -1431,12 +1431,12 @@ char *plot::plotter_x
char *plot::plotter_x#1 // plotter_x zp[2]:4 100001.0
char *plot::plotter_x#2 // plotter_x zp[2]:4 40000.4
unsigned int plot::plotter_y
unsigned int plot::plotter_y#1 // plotter_y zp[2]:6 100001.0
unsigned int plot::plotter_y#2 // plotter_y zp[2]:6 200002.0
unsigned int plot::plotter_y#1 // plotter_y zp[2]:2 100001.0
unsigned int plot::plotter_y#2 // plotter_y zp[2]:2 200002.0
char plot::x
char plot::x#0 // x zp[1]:2 28182.181818181816
char plot::x#0 // x zp[1]:7 28182.181818181816
char plot::y
char plot::y#0 // y zp[1]:3 30000.428571428572
char plot::y#0 // y zp[1]:6 30000.428571428572
__constant const char plot_bit[$100] = { fill( $100, 0) }
__constant const char plot_xhi[$100] = { fill( $100, 0) }
__constant const char plot_xlo[$100] = { fill( $100, 0) }
@ -1458,13 +1458,13 @@ reg byte a [ init_plot_tables::$0 ]
reg byte a [ init_plot_tables::$6 ]
reg byte a [ init_plot_tables::$7 ]
reg byte a [ init_plot_tables::$8 ]
zp[1]:2 [ plot::x#0 init_plot_tables::$9 ]
zp[1]:3 [ plot::y#0 ]
zp[1]:7 [ plot::x#0 init_plot_tables::$9 ]
zp[1]:6 [ plot::y#0 ]
reg byte a [ plot::$6 ]
zp[2]:4 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ]
reg byte a [ plot::$7 ]
reg byte a [ plot::$8 ]
zp[2]:6 [ plot::plotter_y#1 plot::plotter_y#2 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ]
zp[2]:2 [ plot::plotter_y#1 plot::plotter_y#2 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ]
reg byte a [ plot::$9 ]
reg byte a [ plot::$5 ]
@ -1545,7 +1545,7 @@ main: {
}
// init_screen
init_screen: {
.label b = 6
.label b = 2
.label c = 4
// [12] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1]
// [12] phi init_screen::b#2 = BITMAP [phi:init_screen->init_screen::@1#0] -- pbuz1=pbuc1
@ -1618,8 +1618,8 @@ init_screen: {
}
// init_plot_tables
init_plot_tables: {
.label __9 = 2
.label yoffs = 6
.label __9 = 7
.label yoffs = 2
// [22] phi from init_plot_tables to init_plot_tables::@1 [phi:init_plot_tables->init_plot_tables::@1]
// [22] phi init_plot_tables::bits#3 = $80 [phi:init_plot_tables->init_plot_tables::@1#0] -- vbuyy=vbuc1
ldy #$80
@ -1765,12 +1765,12 @@ plots: {
jmp __b1
}
// plot
// void plot(__zp(2) char x, __zp(3) char y)
// void plot(__zp(7) char x, __zp(6) char y)
plot: {
.label x = 2
.label y = 3
.label x = 7
.label y = 6
.label plotter_x = 4
.label plotter_y = 6
.label plotter_y = 2
.label plotter = 4
// BYTE1(plotter_x) = plot_xhi[x]
// [54] plot::$6 = plot_xhi[plot::x#0] -- vbuaa=pbuc1_derefidx_vbuz1

View File

@ -13,7 +13,7 @@ char init_plot_tables::$0 // reg byte a 202.0
char init_plot_tables::$6 // reg byte a 202.0
char init_plot_tables::$7 // reg byte a 202.0
char init_plot_tables::$8 // reg byte a 202.0
char init_plot_tables::$9 // zp[1]:2 50.5
char init_plot_tables::$9 // zp[1]:7 50.5
char init_plot_tables::bits
char init_plot_tables::bits#1 // reg byte y 101.0
char init_plot_tables::bits#3 // reg byte y 60.599999999999994
@ -25,13 +25,13 @@ char init_plot_tables::y
char init_plot_tables::y#1 // reg byte x 151.5
char init_plot_tables::y#2 // reg byte x 50.5
char *init_plot_tables::yoffs
char *init_plot_tables::yoffs#1 // yoffs zp[2]:6 202.0
char *init_plot_tables::yoffs#2 // yoffs zp[2]:6 63.125
char *init_plot_tables::yoffs#4 // yoffs zp[2]:6 101.0
char *init_plot_tables::yoffs#1 // yoffs zp[2]:2 202.0
char *init_plot_tables::yoffs#2 // yoffs zp[2]:2 63.125
char *init_plot_tables::yoffs#4 // yoffs zp[2]:2 101.0
void init_screen()
char *init_screen::b
char *init_screen::b#1 // b zp[2]:6 202.0
char *init_screen::b#2 // b zp[2]:6 134.66666666666666
char *init_screen::b#1 // b zp[2]:2 202.0
char *init_screen::b#2 // b zp[2]:2 134.66666666666666
char *init_screen::c
char *init_screen::c#1 // c zp[2]:4 202.0
char *init_screen::c#2 // c zp[2]:4 134.66666666666666
@ -48,12 +48,12 @@ char *plot::plotter_x
char *plot::plotter_x#1 // plotter_x zp[2]:4 100001.0
char *plot::plotter_x#2 // plotter_x zp[2]:4 40000.4
unsigned int plot::plotter_y
unsigned int plot::plotter_y#1 // plotter_y zp[2]:6 100001.0
unsigned int plot::plotter_y#2 // plotter_y zp[2]:6 200002.0
unsigned int plot::plotter_y#1 // plotter_y zp[2]:2 100001.0
unsigned int plot::plotter_y#2 // plotter_y zp[2]:2 200002.0
char plot::x
char plot::x#0 // x zp[1]:2 28182.181818181816
char plot::x#0 // x zp[1]:7 28182.181818181816
char plot::y
char plot::y#0 // y zp[1]:3 30000.428571428572
char plot::y#0 // y zp[1]:6 30000.428571428572
__constant const char plot_bit[$100] = { fill( $100, 0) }
__constant const char plot_xhi[$100] = { fill( $100, 0) }
__constant const char plot_xlo[$100] = { fill( $100, 0) }
@ -75,12 +75,12 @@ reg byte a [ init_plot_tables::$0 ]
reg byte a [ init_plot_tables::$6 ]
reg byte a [ init_plot_tables::$7 ]
reg byte a [ init_plot_tables::$8 ]
zp[1]:2 [ plot::x#0 init_plot_tables::$9 ]
zp[1]:3 [ plot::y#0 ]
zp[1]:7 [ plot::x#0 init_plot_tables::$9 ]
zp[1]:6 [ plot::y#0 ]
reg byte a [ plot::$6 ]
zp[2]:4 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ]
reg byte a [ plot::$7 ]
reg byte a [ plot::$8 ]
zp[2]:6 [ plot::plotter_y#1 plot::plotter_y#2 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ]
zp[2]:2 [ plot::plotter_y#1 plot::plotter_y#2 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ]
reg byte a [ plot::$9 ]
reg byte a [ plot::$5 ]

View File

@ -195,17 +195,17 @@ Initial phi equivalence classes
Complete equivalence classes
[ main::i#2 main::i#1 ]
[ main::pos#2 main::pos#1 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:3 [ main::pos#2 main::pos#1 ]
Allocated zp[1]:2 [ main::pos#2 main::pos#1 ]
Allocated zp[1]:3 [ main::i#2 main::i#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [5] main::pos#1 = main::pos#2 + main::move [ main::i#2 main::pos#1 ] ( [ main::i#2 main::pos#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::i#2 main::i#1 ]
Statement [5] main::pos#1 = main::pos#2 + main::move [ main::i#2 main::pos#1 ] ( [ main::i#2 main::pos#1 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::pos#2 main::pos#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::i#2 main::i#1 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ main::pos#2 main::pos#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 303: zp[1]:3 [ main::pos#2 main::pos#1 ] 26.71: zp[1]:2 [ main::i#2 main::i#1 ]
Uplift Scope [main] 303: zp[1]:2 [ main::pos#2 main::pos#1 ] 26.71: zp[1]:3 [ main::i#2 main::i#1 ]
Uplift Scope []
Uplifting [main] best 2911 combination reg byte a [ main::pos#2 main::pos#1 ] reg byte x [ main::i#2 main::i#1 ]

View File

@ -238,22 +238,22 @@ Complete equivalence classes
[ isSet::$0 ]
[ isSet::$1 ]
[ isSet::return#1 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:3 [ main::$0 ]
Allocated zp[1]:4 [ isSet::b#0 ]
Allocated zp[1]:5 [ isSet::i#0 ]
Allocated zp[1]:6 [ isSet::return#0 ]
Allocated zp[1]:7 [ main::$2 ]
Allocated zp[1]:8 [ isSet::$0 ]
Allocated zp[1]:9 [ isSet::$1 ]
Allocated zp[1]:10 [ isSet::return#1 ]
Allocated zp[1]:2 [ isSet::$0 ]
Allocated zp[1]:3 [ isSet::$1 ]
Allocated zp[1]:4 [ isSet::i#0 ]
Allocated zp[1]:5 [ isSet::return#1 ]
Allocated zp[1]:6 [ isSet::b#0 ]
Allocated zp[1]:7 [ main::i#2 main::i#1 ]
Allocated zp[1]:8 [ main::$0 ]
Allocated zp[1]:9 [ isSet::return#0 ]
Allocated zp[1]:10 [ main::$2 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [3] isSet::b#0 = main::$0 == 0 [ main::i#2 isSet::b#0 ] ( [ main::i#2 isSet::b#0 ] { { isSet::i#0 = main::i#2 } { isSet::return#0 = isSet::return#1 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::i#2 main::i#1 ]
Statement [9] main::screen[main::i#2] = ' ' [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a
Statement [13] main::screen[main::i#2] = '*' [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a
Statement [15] isSet::$1 = isSet::$0 != 0 [ isSet::b#0 isSet::$1 ] ( isSet:5 [ main::i#2 isSet::b#0 isSet::$1 ] { { isSet::i#0 = main::i#2 } { isSet::return#0 = isSet::return#1 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:4 [ isSet::b#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ isSet::b#0 ]
Statement [16] isSet::return#1 = isSet::b#0 || isSet::$1 [ isSet::return#1 ] ( isSet:5 [ main::i#2 isSet::return#1 ] { { isSet::i#0 = main::i#2 } { isSet::return#0 = isSet::return#1 } } ) always clobbers reg byte a
Statement [2] main::$0 = main::i#2 & 1 [ main::i#2 main::$0 ] ( [ main::i#2 main::$0 ] { { isSet::i#0 = main::i#2 } { isSet::return#0 = isSet::return#1 } } ) always clobbers reg byte a
Statement [3] isSet::b#0 = main::$0 == 0 [ main::i#2 isSet::b#0 ] ( [ main::i#2 isSet::b#0 ] { { isSet::i#0 = main::i#2 } { isSet::return#0 = isSet::return#1 } } ) always clobbers reg byte a
@ -261,28 +261,28 @@ Statement [9] main::screen[main::i#2] = ' ' [ main::i#2 ] ( [ main::i#2 ] { }
Statement [13] main::screen[main::i#2] = '*' [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a
Statement [15] isSet::$1 = isSet::$0 != 0 [ isSet::b#0 isSet::$1 ] ( isSet:5 [ main::i#2 isSet::b#0 isSet::$1 ] { { isSet::i#0 = main::i#2 } { isSet::return#0 = isSet::return#1 } } ) always clobbers reg byte a
Statement [16] isSet::return#1 = isSet::b#0 || isSet::$1 [ isSet::return#1 ] ( isSet:5 [ main::i#2 isSet::return#1 ] { { isSet::i#0 = main::i#2 } { isSet::return#0 = isSet::return#1 } } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ isSet::b#0 ] : zp[1]:4 , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ isSet::i#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ isSet::return#0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ main::$2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ isSet::$0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:9 [ isSet::$1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:10 [ isSet::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ main::i#2 main::i#1 ] : zp[1]:7 , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ main::$0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ isSet::b#0 ] : zp[1]:6 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ isSet::i#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:9 [ isSet::return#0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:10 [ main::$2 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ isSet::$0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ isSet::$1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ isSet::return#1 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [isSet] 202: zp[1]:8 [ isSet::$0 ] 202: zp[1]:9 [ isSet::$1 ] 112: zp[1]:5 [ isSet::i#0 ] 37.33: zp[1]:10 [ isSet::return#1 ] 28: zp[1]:4 [ isSet::b#0 ] 22: zp[1]:6 [ isSet::return#0 ]
Uplift Scope [main] 23.1: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:3 [ main::$0 ] 22: zp[1]:7 [ main::$2 ]
Uplift Scope [isSet] 202: zp[1]:2 [ isSet::$0 ] 202: zp[1]:3 [ isSet::$1 ] 112: zp[1]:4 [ isSet::i#0 ] 37.33: zp[1]:5 [ isSet::return#1 ] 28: zp[1]:6 [ isSet::b#0 ] 22: zp[1]:9 [ isSet::return#0 ]
Uplift Scope [main] 23.1: zp[1]:7 [ main::i#2 main::i#1 ] 22: zp[1]:8 [ main::$0 ] 22: zp[1]:10 [ main::$2 ]
Uplift Scope []
Uplifting [isSet] best 1091 combination reg byte a [ isSet::$0 ] reg byte a [ isSet::$1 ] reg byte a [ isSet::i#0 ] reg byte a [ isSet::return#1 ] zp[1]:4 [ isSet::b#0 ] zp[1]:6 [ isSet::return#0 ]
Uplifting [isSet] best 1091 combination reg byte a [ isSet::$0 ] reg byte a [ isSet::$1 ] reg byte a [ isSet::i#0 ] reg byte a [ isSet::return#1 ] zp[1]:6 [ isSet::b#0 ] zp[1]:9 [ isSet::return#0 ]
Limited combination testing to 100 combinations of 3072 possible.
Uplifting [main] best 801 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$0 ] reg byte a [ main::$2 ]
Uplifting [] best 801 combination
Attempting to uplift remaining variables inzp[1]:4 [ isSet::b#0 ]
Attempting to uplift remaining variables inzp[1]:6 [ isSet::b#0 ]
Uplifting [isSet] best 794 combination reg byte y [ isSet::b#0 ]
Attempting to uplift remaining variables inzp[1]:6 [ isSet::return#0 ]
Attempting to uplift remaining variables inzp[1]:9 [ isSet::return#0 ]
Uplifting [isSet] best 734 combination reg byte a [ isSet::return#0 ]
ASSEMBLER BEFORE OPTIMIZATION

View File

@ -181,15 +181,15 @@ Complete equivalence classes
[ main::c#0 ]
[ main::$0 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:3 [ main::c#0 ]
Allocated zp[1]:4 [ main::$0 ]
Allocated zp[1]:3 [ main::$0 ]
Allocated zp[1]:4 [ main::c#0 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::c#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::$0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::c#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 23.83: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:4 [ main::$0 ] 11: zp[1]:3 [ main::c#0 ]
Uplift Scope [main] 23.83: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:3 [ main::$0 ] 11: zp[1]:4 [ main::c#0 ]
Uplift Scope []
Uplifting [main] best 446 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$0 ] reg byte a [ main::c#0 ]

View File

@ -179,15 +179,15 @@ Complete equivalence classes
[ main::c#0 ]
[ main::b#0 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:3 [ main::c#0 ]
Allocated zp[1]:4 [ main::b#0 ]
Allocated zp[1]:3 [ main::b#0 ]
Allocated zp[1]:4 [ main::c#0 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::c#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::b#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::c#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::b#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 23.83: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:4 [ main::b#0 ] 11: zp[1]:3 [ main::c#0 ]
Uplift Scope [main] 23.83: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:3 [ main::b#0 ] 11: zp[1]:4 [ main::c#0 ]
Uplift Scope []
Uplifting [main] best 446 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::b#0 ] reg byte a [ main::c#0 ]

View File

@ -608,12 +608,12 @@ Allocated zp[1]:2 [ bool_and::i#2 bool_and::i#1 ]
Allocated zp[1]:3 [ bool_or::i#2 bool_or::i#1 ]
Allocated zp[1]:4 [ bool_not::i#2 bool_not::i#1 ]
Allocated zp[1]:5 [ bool_complex::i#2 bool_complex::i#1 ]
Allocated zp[1]:6 [ bool_and::$1 ]
Allocated zp[1]:7 [ bool_or::$1 ]
Allocated zp[1]:8 [ bool_not::$1 ]
Allocated zp[1]:9 [ bool_complex::o1#0 ]
Allocated zp[1]:10 [ bool_complex::$1 ]
Allocated zp[1]:11 [ bool_complex::o2#0 ]
Allocated zp[1]:6 [ bool_complex::$1 ]
Allocated zp[1]:7 [ bool_and::$1 ]
Allocated zp[1]:8 [ bool_or::$1 ]
Allocated zp[1]:9 [ bool_not::$1 ]
Allocated zp[1]:10 [ bool_complex::o2#0 ]
Allocated zp[1]:11 [ bool_complex::o1#0 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [14] bool_and::screen[bool_and::i#2] = ' ' [ bool_and::i#2 ] ( bool_and:1 [ bool_and::i#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ bool_and::i#2 bool_and::i#1 ]
@ -627,7 +627,7 @@ Statement [38] bool_not::screen[bool_not::i#2] = ' ' [ bool_not::i#2 ] ( bool_no
Statement [41] bool_complex::o1#0 = bool_complex::i#2 < $a [ bool_complex::i#2 bool_complex::o1#0 ] ( bool_complex:7 [ bool_complex::i#2 bool_complex::o1#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:5 [ bool_complex::i#2 bool_complex::i#1 ]
Statement [42] bool_complex::$1 = bool_complex::i#2 & 1 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::$1 ] ( bool_complex:7 [ 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[1]:9 [ bool_complex::o1#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:11 [ bool_complex::o1#0 ]
Statement [43] bool_complex::o2#0 = bool_complex::$1 == 0 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::o2#0 ] ( bool_complex:7 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::o2#0 ] { } ) always clobbers reg byte a
Statement [48] bool_complex::screen[bool_complex::i#2] = '*' [ bool_complex::i#2 ] ( bool_complex:7 [ bool_complex::i#2 ] { } ) always clobbers reg byte a
Statement [52] bool_complex::screen[bool_complex::i#2] = ' ' [ bool_complex::i#2 ] ( bool_complex:7 [ bool_complex::i#2 ] { } ) always clobbers reg byte a
@ -649,18 +649,18 @@ Potential registers zp[1]:2 [ bool_and::i#2 bool_and::i#1 ] : zp[1]:2 , reg byte
Potential registers zp[1]:3 [ bool_or::i#2 bool_or::i#1 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ bool_not::i#2 bool_not::i#1 ] : zp[1]:4 , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ bool_complex::i#2 bool_complex::i#1 ] : zp[1]:5 , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ bool_and::$1 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ bool_or::$1 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ bool_not::$1 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:9 [ bool_complex::o1#0 ] : zp[1]:9 , reg byte x , reg byte y ,
Potential registers zp[1]:10 [ bool_complex::$1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:11 [ bool_complex::o2#0 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ bool_and::$1 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ bool_or::$1 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:9 [ bool_not::$1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:11 [ bool_complex::o1#0 ] : zp[1]:11 , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ bool_complex::$1 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:10 [ bool_complex::o2#0 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [bool_complex] 212.1: zp[1]:5 [ bool_complex::i#2 bool_complex::i#1 ] 202: zp[1]:10 [ bool_complex::$1 ] 75.75: zp[1]:11 [ bool_complex::o2#0 ] 60.6: zp[1]:9 [ bool_complex::o1#0 ]
Uplift Scope [bool_and] 252.5: zp[1]:2 [ bool_and::i#2 bool_and::i#1 ] 101: zp[1]:6 [ bool_and::$1 ]
Uplift Scope [bool_or] 252.5: zp[1]:3 [ bool_or::i#2 bool_or::i#1 ] 101: zp[1]:7 [ bool_or::$1 ]
Uplift Scope [bool_not] 252.5: zp[1]:4 [ bool_not::i#2 bool_not::i#1 ] 101: zp[1]:8 [ bool_not::$1 ]
Uplift Scope [bool_complex] 212.1: zp[1]:5 [ bool_complex::i#2 bool_complex::i#1 ] 202: zp[1]:6 [ bool_complex::$1 ] 75.75: zp[1]:10 [ bool_complex::o2#0 ] 60.6: zp[1]:11 [ bool_complex::o1#0 ]
Uplift Scope [bool_and] 252.5: zp[1]:2 [ bool_and::i#2 bool_and::i#1 ] 101: zp[1]:7 [ bool_and::$1 ]
Uplift Scope [bool_or] 252.5: zp[1]:3 [ bool_or::i#2 bool_or::i#1 ] 101: zp[1]:8 [ bool_or::$1 ]
Uplift Scope [bool_not] 252.5: zp[1]:4 [ bool_not::i#2 bool_not::i#1 ] 101: zp[1]:9 [ bool_not::$1 ]
Uplift Scope [main]
Uplift Scope []

View File

@ -16,9 +16,9 @@ main: {
.const y1 = $18
.const xd = x1-x0
.const yd = y1-y0
.label x = 4
.label x = 5
.label cursor = 2
.label y = 5
.label y = 4
lda #y0
sta.z y
ldx #yd/2

View File

@ -323,21 +323,21 @@ Complete equivalence classes
[ main::x#2 main::x#1 ]
[ main::e#3 main::e#5 main::e#1 main::e#2 ]
[ main::y#2 main::y#4 main::y#1 ]
Allocated zp[2]:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ]
Allocated zp[1]:4 [ main::x#2 main::x#1 ]
Allocated zp[1]:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Allocated zp[1]:6 [ main::y#2 main::y#4 main::y#1 ]
Allocated zp[1]:2 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Allocated zp[2]:3 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ]
Allocated zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Allocated zp[1]:6 [ main::x#2 main::x#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [2] *main::cursor#3 = STAR [ main::cursor#3 main::x#2 main::e#3 main::y#2 ] ( [ main::cursor#3 main::x#2 main::e#3 main::y#2 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Removing always clobbered register reg byte y as potential for zp[1]:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::y#2 main::y#4 main::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::y#2 main::y#4 main::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Statement [5] main::e#1 = main::e#3 + main::yd#0 [ main::y#2 main::x#1 main::cursor#1 main::e#1 ] ( [ main::y#2 main::x#1 main::cursor#1 main::e#1 ] { } ) always clobbers reg byte a reg byte x
Removing always clobbered register reg byte x as potential for zp[1]:6 [ main::y#2 main::y#4 main::y#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:4 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:6 [ main::x#2 main::x#1 ]
Statement [8] main::cursor#2 = main::cursor#1 + $28 [ main::x#1 main::e#1 main::y#1 main::cursor#2 ] ( [ main::x#1 main::e#1 main::y#1 main::cursor#2 ] { } ) always clobbers reg byte a
Statement [9] main::e#2 = main::e#1 - main::xd#0 [ main::x#1 main::y#1 main::cursor#2 main::e#2 ] ( [ main::x#1 main::y#1 main::cursor#2 main::e#2 ] { } ) always clobbers reg byte a reg byte x
Statement [11] if(main::x#1<main::x1+1) goto main::@1 [ main::cursor#5 main::x#1 main::e#5 main::y#4 ] ( [ main::cursor#5 main::x#1 main::e#5 main::y#4 ] { } ) always clobbers reg byte a
@ -346,22 +346,24 @@ Statement [5] main::e#1 = main::e#3 + main::yd#0 [ main::y#2 main::x#1 main::cur
Statement [8] main::cursor#2 = main::cursor#1 + $28 [ main::x#1 main::e#1 main::y#1 main::cursor#2 ] ( [ main::x#1 main::e#1 main::y#1 main::cursor#2 ] { } ) always clobbers reg byte a
Statement [9] main::e#2 = main::e#1 - main::xd#0 [ main::x#1 main::y#1 main::cursor#2 main::e#2 ] ( [ main::x#1 main::y#1 main::cursor#2 main::e#2 ] { } ) always clobbers reg byte a reg byte x
Statement [11] if(main::x#1<main::x1+1) goto main::@1 [ main::cursor#5 main::x#1 main::e#5 main::y#4 ] ( [ main::cursor#5 main::x#1 main::e#5 main::y#4 ] { } ) always clobbers reg byte a
Potential registers zp[2]:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] : zp[2]:2 ,
Potential registers zp[1]:4 [ main::x#2 main::x#1 ] : zp[1]:4 ,
Potential registers zp[1]:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] : zp[1]:5 , reg byte x ,
Potential registers zp[1]:6 [ main::y#2 main::y#4 main::y#1 ] : zp[1]:6 ,
Potential registers zp[2]:3 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] : zp[2]:3 ,
Potential registers zp[1]:6 [ main::x#2 main::x#1 ] : zp[1]:6 ,
Potential registers zp[1]:2 [ main::e#3 main::e#5 main::e#1 main::e#2 ] : zp[1]:2 , reg byte x ,
Potential registers zp[1]:5 [ main::y#2 main::y#4 main::y#1 ] : zp[1]:5 ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 55: zp[1]:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] 46.75: zp[2]:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] 29.33: zp[1]:6 [ main::y#2 main::y#4 main::y#1 ] 14.67: zp[1]:4 [ main::x#2 main::x#1 ]
Uplift Scope [main] 55: zp[1]:2 [ main::e#3 main::e#5 main::e#1 main::e#2 ] 46.75: zp[2]:3 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] 29.33: zp[1]:5 [ main::y#2 main::y#4 main::y#1 ] 14.67: zp[1]:6 [ main::x#2 main::x#1 ]
Uplift Scope []
Uplifting [main] best 1076 combination reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ] zp[2]:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] zp[1]:6 [ main::y#2 main::y#4 main::y#1 ] zp[1]:4 [ main::x#2 main::x#1 ]
Uplifting [main] best 1076 combination reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ] zp[2]:3 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] zp[1]:5 [ main::y#2 main::y#4 main::y#1 ] zp[1]:6 [ main::x#2 main::x#1 ]
Uplifting [] best 1076 combination
Attempting to uplift remaining variables inzp[1]:6 [ main::y#2 main::y#4 main::y#1 ]
Uplifting [main] best 1076 combination zp[1]:6 [ main::y#2 main::y#4 main::y#1 ]
Attempting to uplift remaining variables inzp[1]:4 [ main::x#2 main::x#1 ]
Uplifting [main] best 1076 combination zp[1]:4 [ main::x#2 main::x#1 ]
Allocated (was zp[1]:6) zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Attempting to uplift remaining variables inzp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Uplifting [main] best 1076 combination zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Attempting to uplift remaining variables inzp[1]:6 [ main::x#2 main::x#1 ]
Uplifting [main] best 1076 combination zp[1]:6 [ main::x#2 main::x#1 ]
Allocated (was zp[2]:3) zp[2]:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ]
Allocated (was zp[1]:5) zp[1]:4 [ main::y#2 main::y#4 main::y#1 ]
Allocated (was zp[1]:6) zp[1]:5 [ main::x#2 main::x#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -386,9 +388,9 @@ main: {
.const y1 = $18
.const xd = x1-x0
.const yd = y1-y0
.label x = 4
.label x = 5
.label cursor = 2
.label y = 5
.label y = 4
// [1] phi from main to main::@1 [phi:main->main::@1]
__b1_from_main:
// [1] phi main::y#2 = main::y0 [phi:main->main::@1#0] -- vbuz1=vbuc1
@ -502,25 +504,25 @@ char main::e#2 // reg byte x 22.0
char main::e#3 // reg byte x 5.5
char main::e#5 // reg byte x 16.5
char main::x
char main::x#1 // x zp[1]:4 3.666666666666667
char main::x#2 // x zp[1]:4 11.0
char main::x#1 // x zp[1]:5 3.666666666666667
char main::x#2 // x zp[1]:5 11.0
__constant char main::x0 = 4
__constant char main::x1 = $27
char main::xd
__constant char main::xd#0 = main::x1-main::x0 // xd
char main::y
char main::y#1 // y zp[1]:5 7.333333333333333
char main::y#2 // y zp[1]:5 5.5
char main::y#4 // y zp[1]:5 16.5
char main::y#1 // y zp[1]:4 7.333333333333333
char main::y#2 // y zp[1]:4 5.5
char main::y#4 // y zp[1]:4 16.5
__constant char main::y0 = 4
__constant char main::y1 = $18
char main::yd
__constant char main::yd#0 = main::y1-main::y0 // yd
zp[2]:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ]
zp[1]:4 [ main::x#2 main::x#1 ]
zp[1]:5 [ main::x#2 main::x#1 ]
reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ]
zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
zp[1]:4 [ main::y#2 main::y#4 main::y#1 ]
FINAL ASSEMBLER
@ -548,9 +550,9 @@ main: {
.const y1 = $18
.const xd = x1-x0
.const yd = y1-y0
.label x = 4
.label x = 5
.label cursor = 2
.label y = 5
.label y = 4
// [1] phi from main to main::@1 [phi:main->main::@1]
// [1] phi main::y#2 = main::y0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #y0

View File

@ -12,22 +12,22 @@ char main::e#2 // reg byte x 22.0
char main::e#3 // reg byte x 5.5
char main::e#5 // reg byte x 16.5
char main::x
char main::x#1 // x zp[1]:4 3.666666666666667
char main::x#2 // x zp[1]:4 11.0
char main::x#1 // x zp[1]:5 3.666666666666667
char main::x#2 // x zp[1]:5 11.0
__constant char main::x0 = 4
__constant char main::x1 = $27
char main::xd
__constant char main::xd#0 = main::x1-main::x0 // xd
char main::y
char main::y#1 // y zp[1]:5 7.333333333333333
char main::y#2 // y zp[1]:5 5.5
char main::y#4 // y zp[1]:5 16.5
char main::y#1 // y zp[1]:4 7.333333333333333
char main::y#2 // y zp[1]:4 5.5
char main::y#4 // y zp[1]:4 16.5
__constant char main::y0 = 4
__constant char main::y1 = $18
char main::yd
__constant char main::yd#0 = main::y1-main::y0 // yd
zp[2]:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ]
zp[1]:4 [ main::x#2 main::x#1 ]
zp[1]:5 [ main::x#2 main::x#1 ]
reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ]
zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
zp[1]:4 [ main::y#2 main::y#4 main::y#1 ]

View File

@ -14,10 +14,10 @@ main: {
.const x1 = $27
.const y1 = $18
.label screen = $400
.label x = 4
.label x = 7
.label idx = 2
.label y = 5
.label __15 = 6
.label y = 4
.label __15 = 5
lda #y0
sta.z y
ldx #y1/2

View File

@ -324,23 +324,23 @@ Complete equivalence classes
[ main::e#3 main::e#5 main::e#1 main::e#2 ]
[ main::y#2 main::y#4 main::y#1 ]
[ main::$15 ]
Allocated zp[2]:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ]
Allocated zp[1]:4 [ main::x#2 main::x#1 ]
Allocated zp[1]:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Allocated zp[1]:6 [ main::y#2 main::y#4 main::y#1 ]
Allocated zp[2]:7 [ main::$15 ]
Allocated zp[1]:2 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Allocated zp[2]:3 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ]
Allocated zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Allocated zp[2]:6 [ main::$15 ]
Allocated zp[1]:8 [ main::x#2 main::x#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [2] main::$15 = main::screen + main::idx#3 [ main::idx#3 main::x#2 main::e#3 main::y#2 main::$15 ] ( [ main::idx#3 main::x#2 main::e#3 main::y#2 main::$15 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::y#2 main::y#4 main::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:8 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Statement [3] *main::$15 = main::STAR [ main::idx#3 main::x#2 main::e#3 main::y#2 ] ( [ main::idx#3 main::x#2 main::e#3 main::y#2 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::y#2 main::y#4 main::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:8 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Removing always clobbered register reg byte y as potential for zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Statement [6] main::e#1 = main::e#3 + main::y1 [ main::y#2 main::x#1 main::idx#1 main::e#1 ] ( [ main::y#2 main::x#1 main::idx#1 main::e#1 ] { } ) always clobbers reg byte a reg byte x
Removing always clobbered register reg byte x as potential for zp[1]:6 [ main::y#2 main::y#4 main::y#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:4 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:8 [ main::x#2 main::x#1 ]
Statement [9] main::idx#2 = main::idx#1 + $28 [ main::x#1 main::e#1 main::y#1 main::idx#2 ] ( [ main::x#1 main::e#1 main::y#1 main::idx#2 ] { } ) always clobbers reg byte a
Statement [10] main::e#2 = main::e#1 - main::x1 [ main::x#1 main::y#1 main::idx#2 main::e#2 ] ( [ main::x#1 main::y#1 main::idx#2 main::e#2 ] { } ) always clobbers reg byte a reg byte x
Statement [12] if(main::x#1<main::x1+1) goto main::@1 [ main::idx#5 main::x#1 main::e#5 main::y#4 ] ( [ main::idx#5 main::x#1 main::e#5 main::y#4 ] { } ) always clobbers reg byte a
@ -350,24 +350,26 @@ Statement [6] main::e#1 = main::e#3 + main::y1 [ main::y#2 main::x#1 main::idx#1
Statement [9] main::idx#2 = main::idx#1 + $28 [ main::x#1 main::e#1 main::y#1 main::idx#2 ] ( [ main::x#1 main::e#1 main::y#1 main::idx#2 ] { } ) always clobbers reg byte a
Statement [10] main::e#2 = main::e#1 - main::x1 [ main::x#1 main::y#1 main::idx#2 main::e#2 ] ( [ main::x#1 main::y#1 main::idx#2 main::e#2 ] { } ) always clobbers reg byte a reg byte x
Statement [12] if(main::x#1<main::x1+1) goto main::@1 [ main::idx#5 main::x#1 main::e#5 main::y#4 ] ( [ main::idx#5 main::x#1 main::e#5 main::y#4 ] { } ) always clobbers reg byte a
Potential registers zp[2]:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ] : zp[2]:2 ,
Potential registers zp[1]:4 [ main::x#2 main::x#1 ] : zp[1]:4 ,
Potential registers zp[1]:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] : zp[1]:5 , reg byte x ,
Potential registers zp[1]:6 [ main::y#2 main::y#4 main::y#1 ] : zp[1]:6 ,
Potential registers zp[2]:7 [ main::$15 ] : zp[2]:7 ,
Potential registers zp[2]:3 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ] : zp[2]:3 ,
Potential registers zp[1]:8 [ main::x#2 main::x#1 ] : zp[1]:8 ,
Potential registers zp[1]:2 [ main::e#3 main::e#5 main::e#1 main::e#2 ] : zp[1]:2 , reg byte x ,
Potential registers zp[1]:5 [ main::y#2 main::y#4 main::y#1 ] : zp[1]:5 ,
Potential registers zp[2]:6 [ main::$15 ] : zp[2]:6 ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 53.9: zp[1]:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] 44: zp[2]:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ] 28.55: zp[1]:6 [ main::y#2 main::y#4 main::y#1 ] 22: zp[2]:7 [ main::$15 ] 11: zp[1]:4 [ main::x#2 main::x#1 ]
Uplift Scope [main] 53.9: zp[1]:2 [ main::e#3 main::e#5 main::e#1 main::e#2 ] 44: zp[2]:3 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ] 28.55: zp[1]:5 [ main::y#2 main::y#4 main::y#1 ] 22: zp[2]:6 [ main::$15 ] 11: zp[1]:8 [ main::x#2 main::x#1 ]
Uplift Scope []
Uplifting [main] best 1281 combination reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ] zp[2]:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ] zp[1]:6 [ main::y#2 main::y#4 main::y#1 ] zp[2]:7 [ main::$15 ] zp[1]:4 [ main::x#2 main::x#1 ]
Uplifting [main] best 1281 combination reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ] zp[2]:3 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ] zp[1]:5 [ main::y#2 main::y#4 main::y#1 ] zp[2]:6 [ main::$15 ] zp[1]:8 [ main::x#2 main::x#1 ]
Uplifting [] best 1281 combination
Attempting to uplift remaining variables inzp[1]:6 [ main::y#2 main::y#4 main::y#1 ]
Uplifting [main] best 1281 combination zp[1]:6 [ main::y#2 main::y#4 main::y#1 ]
Attempting to uplift remaining variables inzp[1]:4 [ main::x#2 main::x#1 ]
Uplifting [main] best 1281 combination zp[1]:4 [ main::x#2 main::x#1 ]
Allocated (was zp[1]:6) zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Allocated (was zp[2]:7) zp[2]:6 [ main::$15 ]
Attempting to uplift remaining variables inzp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Uplifting [main] best 1281 combination zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
Attempting to uplift remaining variables inzp[1]:8 [ main::x#2 main::x#1 ]
Uplifting [main] best 1281 combination zp[1]:8 [ main::x#2 main::x#1 ]
Allocated (was zp[2]:3) zp[2]:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ]
Allocated (was zp[1]:5) zp[1]:4 [ main::y#2 main::y#4 main::y#1 ]
Allocated (was zp[2]:6) zp[2]:5 [ main::$15 ]
Allocated (was zp[1]:8) zp[1]:7 [ main::x#2 main::x#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -390,10 +392,10 @@ main: {
.const x1 = $27
.const y1 = $18
.label screen = $400
.label x = 4
.label x = 7
.label idx = 2
.label y = 5
.label __15 = 6
.label y = 4
.label __15 = 5
// [1] phi from main to main::@1 [phi:main->main::@1]
__b1_from_main:
// [1] phi main::y#2 = main::y0 [phi:main->main::@1#0] -- vbuz1=vbuc1
@ -506,7 +508,7 @@ Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
void main()
char *main::$15 // zp[2]:6 22.0
char *main::$15 // zp[2]:5 22.0
__constant char main::STAR = $51
char main::e
char main::e#1 // reg byte x 11.0
@ -520,24 +522,24 @@ unsigned int main::idx#3 // idx zp[2]:2 8.25
unsigned int main::idx#5 // idx zp[2]:2 16.5
__constant char main::screen[$28*$19] = (char *) 1024
char main::x
char main::x#1 // x zp[1]:4 3.666666666666667
char main::x#2 // x zp[1]:4 7.333333333333333
char main::x#1 // x zp[1]:7 3.666666666666667
char main::x#2 // x zp[1]:7 7.333333333333333
__constant char main::x0 = 0
__constant char main::x1 = $27
char main::xd
char main::y
char main::y#1 // y zp[1]:5 7.333333333333333
char main::y#2 // y zp[1]:5 4.714285714285714
char main::y#4 // y zp[1]:5 16.5
char main::y#1 // y zp[1]:4 7.333333333333333
char main::y#2 // y zp[1]:4 4.714285714285714
char main::y#4 // y zp[1]:4 16.5
__constant char main::y0 = 0
__constant char main::y1 = $18
char main::yd
zp[2]:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ]
zp[1]:4 [ main::x#2 main::x#1 ]
zp[1]:7 [ main::x#2 main::x#1 ]
reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ]
zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
zp[2]:6 [ main::$15 ]
zp[1]:4 [ main::y#2 main::y#4 main::y#1 ]
zp[2]:5 [ main::$15 ]
FINAL ASSEMBLER
@ -563,10 +565,10 @@ main: {
.const x1 = $27
.const y1 = $18
.label screen = $400
.label x = 4
.label x = 7
.label idx = 2
.label y = 5
.label __15 = 6
.label y = 4
.label __15 = 5
// [1] phi from main to main::@1 [phi:main->main::@1]
// [1] phi main::y#2 = main::y0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #y0

View File

@ -1,5 +1,5 @@
void main()
char *main::$15 // zp[2]:6 22.0
char *main::$15 // zp[2]:5 22.0
__constant char main::STAR = $51
char main::e
char main::e#1 // reg byte x 11.0
@ -13,21 +13,21 @@ unsigned int main::idx#3 // idx zp[2]:2 8.25
unsigned int main::idx#5 // idx zp[2]:2 16.5
__constant char main::screen[$28*$19] = (char *) 1024
char main::x
char main::x#1 // x zp[1]:4 3.666666666666667
char main::x#2 // x zp[1]:4 7.333333333333333
char main::x#1 // x zp[1]:7 3.666666666666667
char main::x#2 // x zp[1]:7 7.333333333333333
__constant char main::x0 = 0
__constant char main::x1 = $27
char main::xd
char main::y
char main::y#1 // y zp[1]:5 7.333333333333333
char main::y#2 // y zp[1]:5 4.714285714285714
char main::y#4 // y zp[1]:5 16.5
char main::y#1 // y zp[1]:4 7.333333333333333
char main::y#2 // y zp[1]:4 4.714285714285714
char main::y#4 // y zp[1]:4 16.5
__constant char main::y0 = 0
__constant char main::y1 = $18
char main::yd
zp[2]:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ]
zp[1]:4 [ main::x#2 main::x#1 ]
zp[1]:7 [ main::x#2 main::x#1 ]
reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ]
zp[1]:5 [ main::y#2 main::y#4 main::y#1 ]
zp[2]:6 [ main::$15 ]
zp[1]:4 [ main::y#2 main::y#4 main::y#1 ]
zp[2]:5 [ main::$15 ]

View File

@ -9,7 +9,7 @@
:BasicUpstart(main)
.label print_screen = $400
.label print_char_cursor = 2
.label print_line_cursor = 4
.label print_line_cursor = 6
.segment Code
main: {
// print_cls()
@ -233,7 +233,7 @@ memset: {
.const num = $3e8
.label str = print_screen
.label end = str+num
.label dst = 6
.label dst = 4
lda #<str
sta.z dst
lda #>str
@ -261,9 +261,9 @@ memset: {
jmp __b1
}
// Print a zero-terminated string
// void print_str(__zp(6) char *str)
// void print_str(__zp(4) char *str)
print_str: {
.label str = 6
.label str = 4
__b1:
// while(*str)
ldy #0
@ -358,9 +358,9 @@ print_ln: {
rts
}
// Print a unsigned int as HEX
// void print_uint(__zp(6) unsigned int w)
// void print_uint(__zp(4) unsigned int w)
print_uint: {
.label w = 6
.label w = 4
// print_uchar(BYTE1(w))
ldx.z w+1
jsr print_uchar
@ -371,9 +371,9 @@ print_uint: {
rts
}
// Print a signed int as HEX
// void print_sint(__zp(6) int w)
// void print_sint(__zp(4) int w)
print_sint: {
.label w = 6
.label w = 4
// if(w<0)
lda.z w+1
bmi __b1

File diff suppressed because one or more lines are too long

View File

@ -7,8 +7,8 @@ void * memset(void *str , char c , unsigned int num)
char memset::c
__constant char memset::c#0 = ' ' // c
char *memset::dst
char *memset::dst#1 // dst zp[2]:6 2002.0
char *memset::dst#2 // dst zp[2]:6 1334.6666666666667
char *memset::dst#1 // dst zp[2]:4 2002.0
char *memset::dst#2 // dst zp[2]:4 1334.6666666666667
char *memset::end
__constant char *memset::end#0 = (char *)memset::str#0+memset::num#0 // end
unsigned int memset::num
@ -36,9 +36,9 @@ char *print_char_cursor#95 // print_char_cursor zp[2]:2 1100799.0
void print_cls()
__constant const char print_hextab[] = "0123456789abcdef"z
char *print_line_cursor
char *print_line_cursor#0 // print_line_cursor zp[2]:4 56.833333333333336
char *print_line_cursor#21 // print_line_cursor zp[2]:4 2103.0
char *print_line_cursor#41 // print_line_cursor zp[2]:4 134.0
char *print_line_cursor#0 // print_line_cursor zp[2]:6 56.833333333333336
char *print_line_cursor#21 // print_line_cursor zp[2]:6 2103.0
char *print_line_cursor#41 // print_line_cursor zp[2]:6 134.0
void print_ln()
void print_schar(signed char b)
signed char print_schar::b
@ -47,9 +47,9 @@ char *print_screen
__constant char *print_screen#0 = (char *) 1024 // print_screen
void print_sint(int w)
int print_sint::w
int print_sint::w#0 // w zp[2]:6 202.0
int print_sint::w#10 // w zp[2]:6 50.5
int print_sint::w#7 // w zp[2]:6 202.0
int print_sint::w#0 // w zp[2]:4 202.0
int print_sint::w#10 // w zp[2]:4 50.5
int print_sint::w#7 // w zp[2]:4 202.0
void print_slong(long dw)
long print_slong::dw
long print_slong::dw#0 // dw zp[4]:8 202.0
@ -57,9 +57,9 @@ long print_slong::dw#3 // dw zp[4]:8 50.5
long print_slong::dw#5 // dw zp[4]:8 202.0
void print_str(char *str)
char *print_str::str
char *print_str::str#0 // str zp[2]:6 2002.0
char *print_str::str#5 // str zp[2]:6 1026.25
char *print_str::str#8 // str zp[2]:6 101.0
char *print_str::str#0 // str zp[2]:4 2002.0
char *print_str::str#5 // str zp[2]:4 1026.25
char *print_str::str#8 // str zp[2]:4 101.0
void print_uchar(char b)
char print_uchar::$0 // reg byte a 200002.0
char print_uchar::$2 // reg byte x 200002.0
@ -69,10 +69,10 @@ char print_uchar::b#2 // reg byte x 20002.0
char print_uchar::b#5 // reg byte x 55001.0
void print_uint(unsigned int w)
unsigned int print_uint::w
unsigned int print_uint::w#0 // w zp[2]:6 202.0
unsigned int print_uint::w#1 // w zp[2]:6 2002.0
unsigned int print_uint::w#2 // w zp[2]:6 2002.0
unsigned int print_uint::w#5 // w zp[2]:6 7368.333333333333
unsigned int print_uint::w#0 // w zp[2]:4 202.0
unsigned int print_uint::w#1 // w zp[2]:4 2002.0
unsigned int print_uint::w#2 // w zp[2]:4 2002.0
unsigned int print_uint::w#5 // w zp[2]:4 7368.333333333333
void print_ulong(unsigned long dw)
unsigned long print_ulong::dw
unsigned long print_ulong::dw#0 // dw zp[4]:8 202.0
@ -101,8 +101,8 @@ __constant unsigned int testShort::u = $578
reg byte x [ print_uchar::b#5 print_uchar::b#1 print_uchar::b#2 ]
reg byte a [ print_char::ch#17 print_char::ch#0 print_char::ch#7 print_char::ch#8 ]
zp[2]:2 [ print_char_cursor#95 print_char_cursor#152 print_char_cursor#1 print_char_cursor#159 print_char_cursor#163 print_char_cursor#164 print_char_cursor#165 print_char_cursor#25 print_char_cursor#147 print_char_cursor#148 ]
zp[2]:4 [ print_line_cursor#21 print_line_cursor#41 print_line_cursor#0 ]
zp[2]:6 [ print_uint::w#5 print_uint::w#0 print_uint::w#1 print_uint::w#2 print_sint::w#7 print_sint::w#0 print_sint::w#10 print_str::str#5 print_str::str#8 print_str::str#0 memset::dst#2 memset::dst#1 ]
zp[2]:6 [ print_line_cursor#21 print_line_cursor#41 print_line_cursor#0 ]
zp[2]:4 [ print_uint::w#5 print_uint::w#0 print_uint::w#1 print_uint::w#2 print_sint::w#7 print_sint::w#0 print_sint::w#10 print_str::str#5 print_str::str#8 print_str::str#0 memset::dst#2 memset::dst#1 ]
zp[4]:8 [ print_ulong::dw#2 print_ulong::dw#0 print_slong::dw#5 print_slong::dw#0 print_slong::dw#3 ]
reg byte a [ print_uchar::$0 ]
reg byte x [ print_uchar::$2 ]

View File

@ -312,9 +312,9 @@ gfx_init: {
}
// Initialize VIC screen 0 ( value is %yyyyxxxx where yyyy is ypos and xxxx is xpos)
gfx_init_screen0: {
.label __1 = 9
.label ch = 3
.label cy = 2
.label __1 = 8
.label ch = 6
.label cy = 9
lda #<SCREEN
sta.z ch
lda #>SCREEN
@ -362,12 +362,12 @@ gfx_init_screen0: {
gfx_init_plane_charset8: {
// 8bpp cells for Plane B (charset) - ROM charset with 256 colors
.const gfxbCpuBank = $ff&CHARSET8/$4000
.label bits = 5
.label chargen = 3
.label gfxa = 6
.label col = 8
.label cr = 9
.label ch = 2
.label bits = 2
.label chargen = 6
.label gfxa = 3
.label col = 5
.label cr = 8
.label ch = 9
// dtvSetCpuBankSegment1(gfxbCpuBank++)
lda #gfxbCpuBank
jsr dtvSetCpuBankSegment1

View File

@ -1072,28 +1072,28 @@ Complete equivalence classes
[ gfx_init_screen0::$2 ]
[ gfx_init_screen0::$3 ]
[ gfx_init_plane_charset8::$2 ]
Allocated zp[1]:2 [ main::j#2 main::j#1 ]
Allocated zp[1]:3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Allocated zp[1]:4 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
Allocated zp[2]:5 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ]
Allocated zp[1]:7 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Allocated zp[2]:8 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ]
Allocated zp[1]:10 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Allocated zp[1]:11 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Allocated zp[2]:12 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ]
Allocated zp[1]:14 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Allocated zp[1]:15 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ]
Allocated zp[1]:16 [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ]
Allocated zp[1]:17 [ dtvSetCpuBankSegment1::cpuBankIdx#2 ]
Allocated zp[1]:18 [ main::rst#1 ]
Allocated zp[1]:19 [ main::$3 ]
Allocated zp[1]:20 [ main::$4 ]
Allocated zp[1]:21 [ main::$5 ]
Allocated zp[1]:22 [ gfx_init_screen0::$0 ]
Allocated zp[1]:23 [ gfx_init_screen0::$1 ]
Allocated zp[1]:24 [ gfx_init_screen0::$2 ]
Allocated zp[1]:25 [ gfx_init_screen0::$3 ]
Allocated zp[1]:26 [ gfx_init_plane_charset8::$2 ]
Allocated zp[1]:2 [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ]
Allocated zp[1]:3 [ gfx_init_plane_charset8::$2 ]
Allocated zp[1]:4 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ]
Allocated zp[1]:5 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Allocated zp[2]:6 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ]
Allocated zp[1]:8 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Allocated zp[1]:9 [ gfx_init_screen0::$0 ]
Allocated zp[1]:10 [ gfx_init_screen0::$2 ]
Allocated zp[1]:11 [ gfx_init_screen0::$3 ]
Allocated zp[1]:12 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
Allocated zp[2]:13 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ]
Allocated zp[1]:15 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Allocated zp[2]:16 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ]
Allocated zp[1]:18 [ gfx_init_screen0::$1 ]
Allocated zp[1]:19 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Allocated zp[1]:20 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Allocated zp[1]:21 [ dtvSetCpuBankSegment1::cpuBankIdx#2 ]
Allocated zp[1]:22 [ main::$3 ]
Allocated zp[1]:23 [ main::$4 ]
Allocated zp[1]:24 [ main::$5 ]
Allocated zp[1]:25 [ main::rst#1 ]
Allocated zp[1]:26 [ main::j#2 main::j#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *PROCPORT = PROCPORT_RAM_IO [ ] ( [ ] { } ) always clobbers reg byte a
@ -1121,27 +1121,27 @@ Statement [28] *VICII_CONTROL1 = VICII_DEN|VICII_ECM|VICII_RSEL|3 [ ] ( [ ] { }
Statement [29] *BORDER_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [30] if(*RASTER!=$42) goto main::@3 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [34] main::$4 = VICII_DEN|VICII_ECM|VICII_RSEL | main::$3 [ main::rst#1 main::$4 ] ( [ main::rst#1 main::$4 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:18 [ main::rst#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:25 [ main::rst#1 ]
Statement [36] main::$5 = main::rst#1 << 4 [ main::rst#1 main::$5 ] ( [ main::rst#1 main::$5 ] { } ) always clobbers reg byte a
Statement [49] gfx_init_screen0::$1 = gfx_init_screen0::$0 << 4 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 ] ( gfx_init:3::gfx_init_screen0:41 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:4 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:19 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:12 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
Statement [50] gfx_init_screen0::$2 = gfx_init_screen0::cx#2 & $f [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 gfx_init_screen0::$2 ] ( gfx_init:3::gfx_init_screen0:41 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 gfx_init_screen0::$2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:23 [ gfx_init_screen0::$1 ]
Removing always clobbered register reg byte a as potential for zp[1]:18 [ gfx_init_screen0::$1 ]
Statement [52] *gfx_init_screen0::ch#2 = gfx_init_screen0::$3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 ] ( gfx_init:3::gfx_init_screen0:41 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 ] { } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:4 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:19 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:12 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
Statement [61] *PROCPORT = PROCPORT_RAM_CHARROM [ ] ( gfx_init:3::gfx_init_plane_charset8:43 [ ] { } ) always clobbers reg byte a
Statement [64] gfx_init_plane_charset8::bits#0 = *gfx_init_plane_charset8::chargen#2 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#0 ] ( gfx_init:3::gfx_init_plane_charset8:43 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#0 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp[1]:7 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:7 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:14 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:14 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:10 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:10 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:20 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:20 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:8 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:8 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:15 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:15 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Statement [71] *gfx_init_plane_charset8::gfxa#2 = gfx_init_plane_charset8::c#2 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::cp#2 ] ( gfx_init:3::gfx_init_plane_charset8:43 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::cp#2 ] { } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:11 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:15 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:5 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:4 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ]
Statement [81] *PROCPORT = PROCPORT_RAM_IO [ ] ( gfx_init:3::gfx_init_plane_charset8:43 [ ] { } ) always clobbers reg byte a
Statement asm { .byte$32,$dd lda$ff .byte$32,$00 } always clobbers reg byte a
Statement [1] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] ( [ ] { } ) always clobbers reg byte a
@ -1181,75 +1181,75 @@ Statement [64] gfx_init_plane_charset8::bits#0 = *gfx_init_plane_charset8::charg
Statement [71] *gfx_init_plane_charset8::gfxa#2 = gfx_init_plane_charset8::c#2 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::cp#2 ] ( gfx_init:3::gfx_init_plane_charset8:43 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::cp#2 ] { } ) always clobbers reg byte y
Statement [81] *PROCPORT = PROCPORT_RAM_IO [ ] ( gfx_init:3::gfx_init_plane_charset8:43 [ ] { } ) always clobbers reg byte a
Statement asm { .byte$32,$dd lda$ff .byte$32,$00 } always clobbers reg byte a
Potential registers zp[1]:2 [ main::j#2 main::j#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] : zp[1]:3 , reg byte x ,
Potential registers zp[1]:4 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] : zp[1]:4 , reg byte x ,
Potential registers zp[2]:5 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] : zp[2]:5 ,
Potential registers zp[1]:7 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] : zp[1]:7 , reg byte x ,
Potential registers zp[2]:8 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] : zp[2]:8 ,
Potential registers zp[1]:10 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] : zp[1]:10 , reg byte x ,
Potential registers zp[1]:11 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] : zp[1]:11 , reg byte a , reg byte x ,
Potential registers zp[2]:12 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] : zp[2]:12 ,
Potential registers zp[1]:14 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] : zp[1]:14 , reg byte x ,
Potential registers zp[1]:15 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] : zp[1]:15 , reg byte a , reg byte x ,
Potential registers zp[1]:16 [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:17 [ dtvSetCpuBankSegment1::cpuBankIdx#2 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:18 [ main::rst#1 ] : zp[1]:18 , reg byte x , reg byte y ,
Potential registers zp[1]:19 [ main::$3 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:20 [ main::$4 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:21 [ main::$5 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:22 [ gfx_init_screen0::$0 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:23 [ gfx_init_screen0::$1 ] : zp[1]:23 , reg byte x , reg byte y ,
Potential registers zp[1]:24 [ gfx_init_screen0::$2 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:25 [ gfx_init_screen0::$3 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:26 [ gfx_init_plane_charset8::$2 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:26 [ main::j#2 main::j#1 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:19 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] : zp[1]:19 , reg byte x ,
Potential registers zp[1]:12 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] : zp[1]:12 , reg byte x ,
Potential registers zp[2]:16 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] : zp[2]:16 ,
Potential registers zp[1]:20 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] : zp[1]:20 , reg byte x ,
Potential registers zp[2]:13 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] : zp[2]:13 ,
Potential registers zp[1]:15 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] : zp[1]:15 , reg byte x ,
Potential registers zp[1]:5 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] : zp[1]:5 , reg byte a , reg byte x ,
Potential registers zp[2]:6 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] : zp[2]:6 ,
Potential registers zp[1]:8 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] : zp[1]:8 , reg byte x ,
Potential registers zp[1]:4 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] : zp[1]:4 , reg byte a , reg byte x ,
Potential registers zp[1]:2 [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:21 [ dtvSetCpuBankSegment1::cpuBankIdx#2 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:25 [ main::rst#1 ] : zp[1]:25 , reg byte x , reg byte y ,
Potential registers zp[1]:22 [ main::$3 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:23 [ main::$4 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:24 [ main::$5 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:9 [ gfx_init_screen0::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:18 [ gfx_init_screen0::$1 ] : zp[1]:18 , reg byte x , reg byte y ,
Potential registers zp[1]:10 [ gfx_init_screen0::$2 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:11 [ gfx_init_screen0::$3 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ gfx_init_plane_charset8::$2 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [gfx_init_plane_charset8] 400,004: zp[1]:16 [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] 200,002: zp[1]:26 [ gfx_init_plane_charset8::$2 ] 172,223.94: zp[1]:15 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] 104,287.79: zp[1]:11 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] 84,115.22: zp[2]:12 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] 77,896.93: zp[1]:14 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] 18,816.69: zp[2]:8 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] 16,430.21: zp[1]:10 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] 1,619.26: zp[1]:7 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Uplift Scope [gfx_init_screen0] 20,002: zp[1]:22 [ gfx_init_screen0::$0 ] 20,002: zp[1]:24 [ gfx_init_screen0::$2 ] 20,002: zp[1]:25 [ gfx_init_screen0::$3 ] 19,287.64: zp[1]:4 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] 11,369.93: zp[2]:5 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] 10,001: zp[1]:23 [ gfx_init_screen0::$1 ] 2,701.8: zp[1]:3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Uplift Scope [dtvSetCpuBankSegment1] 1,001: zp[1]:17 [ dtvSetCpuBankSegment1::cpuBankIdx#2 ]
Uplift Scope [main] 202: zp[1]:19 [ main::$3 ] 202: zp[1]:20 [ main::$4 ] 202: zp[1]:21 [ main::$5 ] 57.71: zp[1]:18 [ main::rst#1 ] 38.5: zp[1]:2 [ main::j#2 main::j#1 ]
Uplift Scope [gfx_init_plane_charset8] 400,004: zp[1]:2 [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] 200,002: zp[1]:3 [ gfx_init_plane_charset8::$2 ] 172,223.94: zp[1]:4 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] 104,287.79: zp[1]:5 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] 84,115.22: zp[2]:6 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] 77,896.93: zp[1]:8 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] 18,816.69: zp[2]:13 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] 16,430.21: zp[1]:15 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] 1,619.26: zp[1]:20 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Uplift Scope [gfx_init_screen0] 20,002: zp[1]:9 [ gfx_init_screen0::$0 ] 20,002: zp[1]:10 [ gfx_init_screen0::$2 ] 20,002: zp[1]:11 [ gfx_init_screen0::$3 ] 19,287.64: zp[1]:12 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] 11,369.93: zp[2]:16 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] 10,001: zp[1]:18 [ gfx_init_screen0::$1 ] 2,701.8: zp[1]:19 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Uplift Scope [dtvSetCpuBankSegment1] 1,001: zp[1]:21 [ dtvSetCpuBankSegment1::cpuBankIdx#2 ]
Uplift Scope [main] 202: zp[1]:22 [ main::$3 ] 202: zp[1]:23 [ main::$4 ] 202: zp[1]:24 [ main::$5 ] 57.71: zp[1]:25 [ main::rst#1 ] 38.5: zp[1]:26 [ main::j#2 main::j#1 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
Uplift Scope [gfx_init]
Uplift Scope []
Uplifting [gfx_init_plane_charset8] best 98362 combination reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] reg byte a [ gfx_init_plane_charset8::$2 ] reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] zp[1]:11 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] zp[2]:12 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] zp[1]:14 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] zp[2]:8 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] zp[1]:10 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] zp[1]:7 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Uplifting [gfx_init_plane_charset8] best 98362 combination reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] reg byte a [ gfx_init_plane_charset8::$2 ] reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] zp[1]:5 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] zp[2]:6 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] zp[1]:8 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] zp[2]:13 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] zp[1]:15 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] zp[1]:20 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Limited combination testing to 100 combinations of 1152 possible.
Uplifting [gfx_init_screen0] best 95562 combination reg byte a [ gfx_init_screen0::$0 ] reg byte a [ gfx_init_screen0::$2 ] reg byte a [ gfx_init_screen0::$3 ] reg byte x [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] zp[2]:5 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] zp[1]:23 [ gfx_init_screen0::$1 ] zp[1]:3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Uplifting [gfx_init_screen0] best 95562 combination reg byte a [ gfx_init_screen0::$0 ] reg byte a [ gfx_init_screen0::$2 ] reg byte a [ gfx_init_screen0::$3 ] reg byte x [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] zp[2]:16 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] zp[1]:18 [ gfx_init_screen0::$1 ] zp[1]:19 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Limited combination testing to 100 combinations of 768 possible.
Uplifting [dtvSetCpuBankSegment1] best 95553 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#2 ]
Uplifting [main] best 92953 combination reg byte a [ main::$3 ] reg byte a [ main::$4 ] reg byte a [ main::$5 ] reg byte x [ main::rst#1 ] zp[1]:2 [ main::j#2 main::j#1 ]
Uplifting [main] best 92953 combination reg byte a [ main::$3 ] reg byte a [ main::$4 ] reg byte a [ main::$5 ] reg byte x [ main::rst#1 ] zp[1]:26 [ main::j#2 main::j#1 ]
Limited combination testing to 100 combinations of 768 possible.
Uplifting [MOS6526_CIA] best 92953 combination
Uplifting [MOS6569_VICII] best 92953 combination
Uplifting [MOS6581_SID] best 92953 combination
Uplifting [gfx_init] best 92953 combination
Uplifting [] best 92953 combination
Attempting to uplift remaining variables inzp[1]:11 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Uplifting [gfx_init_plane_charset8] best 92953 combination zp[1]:11 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Attempting to uplift remaining variables inzp[1]:14 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Uplifting [gfx_init_plane_charset8] best 92953 combination zp[1]:14 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Attempting to uplift remaining variables inzp[1]:10 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Uplifting [gfx_init_plane_charset8] best 92953 combination zp[1]:10 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Attempting to uplift remaining variables inzp[1]:23 [ gfx_init_screen0::$1 ]
Uplifting [gfx_init_screen0] best 92953 combination zp[1]:23 [ gfx_init_screen0::$1 ]
Attempting to uplift remaining variables inzp[1]:3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Uplifting [gfx_init_screen0] best 92953 combination zp[1]:3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Attempting to uplift remaining variables inzp[1]:7 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Uplifting [gfx_init_plane_charset8] best 92953 combination zp[1]:7 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::j#2 main::j#1 ]
Attempting to uplift remaining variables inzp[1]:5 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Uplifting [gfx_init_plane_charset8] best 92953 combination zp[1]:5 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Attempting to uplift remaining variables inzp[1]:8 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Uplifting [gfx_init_plane_charset8] best 92953 combination zp[1]:8 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Attempting to uplift remaining variables inzp[1]:15 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Uplifting [gfx_init_plane_charset8] best 92953 combination zp[1]:15 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Attempting to uplift remaining variables inzp[1]:18 [ gfx_init_screen0::$1 ]
Uplifting [gfx_init_screen0] best 92953 combination zp[1]:18 [ gfx_init_screen0::$1 ]
Attempting to uplift remaining variables inzp[1]:19 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Uplifting [gfx_init_screen0] best 92953 combination zp[1]:19 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Attempting to uplift remaining variables inzp[1]:20 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Uplifting [gfx_init_plane_charset8] best 92953 combination zp[1]:20 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Attempting to uplift remaining variables inzp[1]:26 [ main::j#2 main::j#1 ]
Uplifting [main] best 92833 combination reg byte x [ main::j#2 main::j#1 ]
Coalescing zero page register [ zp[1]:7 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] ] with [ zp[1]:3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] ]
Coalescing zero page register [ zp[2]:8 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] ] with [ zp[2]:5 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] ]
Coalescing zero page register [ zp[1]:23 [ gfx_init_screen0::$1 ] ] with [ zp[1]:10 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] ]
Allocated (was zp[1]:7) zp[1]:2 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Allocated (was zp[2]:8) zp[2]:3 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ]
Allocated (was zp[1]:11) zp[1]:5 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Allocated (was zp[2]:12) zp[2]:6 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ]
Allocated (was zp[1]:14) zp[1]:8 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Allocated (was zp[1]:23) zp[1]:9 [ gfx_init_screen0::$1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Coalescing zero page register [ zp[1]:20 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] ] with [ zp[1]:19 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] ]
Coalescing zero page register [ zp[2]:13 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] ] with [ zp[2]:16 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] ]
Coalescing zero page register [ zp[1]:18 [ gfx_init_screen0::$1 ] ] with [ zp[1]:15 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] ]
Allocated (was zp[1]:5) zp[1]:2 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Allocated (was zp[2]:6) zp[2]:3 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ]
Allocated (was zp[1]:8) zp[1]:5 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Allocated (was zp[2]:13) zp[2]:6 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ]
Allocated (was zp[1]:18) zp[1]:8 [ gfx_init_screen0::$1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Allocated (was zp[1]:20) zp[1]:9 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -1613,9 +1613,9 @@ gfx_init: {
// gfx_init_screen0
// Initialize VIC screen 0 ( value is %yyyyxxxx where yyyy is ypos and xxxx is xpos)
gfx_init_screen0: {
.label __1 = 9
.label ch = 3
.label cy = 2
.label __1 = 8
.label ch = 6
.label cy = 9
// [46] phi from gfx_init_screen0 to gfx_init_screen0::@1 [phi:gfx_init_screen0->gfx_init_screen0::@1]
__b1_from_gfx_init_screen0:
// [46] phi gfx_init_screen0::ch#3 = SCREEN [phi:gfx_init_screen0->gfx_init_screen0::@1#0] -- pbuz1=pbuc1
@ -1694,12 +1694,12 @@ gfx_init_screen0: {
gfx_init_plane_charset8: {
// 8bpp cells for Plane B (charset) - ROM charset with 256 colors
.const gfxbCpuBank = $ff&CHARSET8/$4000
.label bits = 5
.label chargen = 3
.label gfxa = 6
.label col = 8
.label cr = 9
.label ch = 2
.label bits = 2
.label chargen = 6
.label gfxa = 3
.label col = 5
.label cr = 8
.label ch = 9
// [60] call dtvSetCpuBankSegment1
// [84] phi from gfx_init_plane_charset8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1]
dtvSetCpuBankSegment1_from_gfx_init_plane_charset8:
@ -2012,52 +2012,52 @@ void gfx_init()
void gfx_init_plane_charset8()
char gfx_init_plane_charset8::$2 // reg byte a 200002.0
char gfx_init_plane_charset8::bits
char gfx_init_plane_charset8::bits#0 // bits zp[1]:5 10001.0
char gfx_init_plane_charset8::bits#1 // bits zp[1]:5 50000.5
char gfx_init_plane_charset8::bits#2 // bits zp[1]:5 44286.28571428572
char gfx_init_plane_charset8::bits#0 // bits zp[1]:2 10001.0
char gfx_init_plane_charset8::bits#1 // bits zp[1]:2 50000.5
char gfx_init_plane_charset8::bits#2 // bits zp[1]:2 44286.28571428572
char gfx_init_plane_charset8::c
char gfx_init_plane_charset8::c#2 // reg byte a 200002.0
char gfx_init_plane_charset8::c#3 // reg byte a 200002.0
char gfx_init_plane_charset8::ch
char gfx_init_plane_charset8::ch#1 // ch zp[1]:2 1501.5
char gfx_init_plane_charset8::ch#8 // ch zp[1]:2 117.76470588235294
char gfx_init_plane_charset8::ch#1 // ch zp[1]:9 1501.5
char gfx_init_plane_charset8::ch#8 // ch zp[1]:9 117.76470588235294
char *gfx_init_plane_charset8::chargen
char *gfx_init_plane_charset8::chargen#1 // chargen zp[2]:3 1312.6875
char *gfx_init_plane_charset8::chargen#2 // chargen zp[2]:3 15502.0
char *gfx_init_plane_charset8::chargen#3 // chargen zp[2]:3 2002.0
char *gfx_init_plane_charset8::chargen#1 // chargen zp[2]:6 1312.6875
char *gfx_init_plane_charset8::chargen#2 // chargen zp[2]:6 15502.0
char *gfx_init_plane_charset8::chargen#3 // chargen zp[2]:6 2002.0
char gfx_init_plane_charset8::col
char gfx_init_plane_charset8::col#1 // col zp[1]:8 30143.428571428572
char gfx_init_plane_charset8::col#2 // col zp[1]:8 38750.5
char gfx_init_plane_charset8::col#5 // col zp[1]:8 7001.0
char gfx_init_plane_charset8::col#6 // col zp[1]:8 2002.0
char gfx_init_plane_charset8::col#1 // col zp[1]:5 30143.428571428572
char gfx_init_plane_charset8::col#2 // col zp[1]:5 38750.5
char gfx_init_plane_charset8::col#5 // col zp[1]:5 7001.0
char gfx_init_plane_charset8::col#6 // col zp[1]:5 2002.0
char gfx_init_plane_charset8::cp
char gfx_init_plane_charset8::cp#1 // reg byte x 150001.5
char gfx_init_plane_charset8::cp#2 // reg byte x 22222.444444444445
char gfx_init_plane_charset8::cr
char gfx_init_plane_charset8::cr#1 // cr zp[1]:9 15001.5
char gfx_init_plane_charset8::cr#6 // cr zp[1]:9 1428.7142857142858
char gfx_init_plane_charset8::cr#1 // cr zp[1]:8 15001.5
char gfx_init_plane_charset8::cr#6 // cr zp[1]:8 1428.7142857142858
char *gfx_init_plane_charset8::gfxa
char *gfx_init_plane_charset8::gfxa#1 // gfxa zp[2]:6 23444.88888888889
char *gfx_init_plane_charset8::gfxa#2 // gfxa zp[2]:6 51667.33333333333
char *gfx_init_plane_charset8::gfxa#5 // gfxa zp[2]:6 7001.0
char *gfx_init_plane_charset8::gfxa#6 // gfxa zp[2]:6 2002.0
char *gfx_init_plane_charset8::gfxa#1 // gfxa zp[2]:3 23444.88888888889
char *gfx_init_plane_charset8::gfxa#2 // gfxa zp[2]:3 51667.33333333333
char *gfx_init_plane_charset8::gfxa#5 // gfxa zp[2]:3 7001.0
char *gfx_init_plane_charset8::gfxa#6 // gfxa zp[2]:3 2002.0
char gfx_init_plane_charset8::gfxbCpuBank
__constant char gfx_init_plane_charset8::gfxbCpuBank#0 = (char)CHARSET8/$4000 // gfxbCpuBank
void gfx_init_screen0()
char gfx_init_screen0::$0 // reg byte a 20002.0
char gfx_init_screen0::$1 // zp[1]:9 10001.0
char gfx_init_screen0::$1 // zp[1]:8 10001.0
char gfx_init_screen0::$2 // reg byte a 20002.0
char gfx_init_screen0::$3 // reg byte a 20002.0
char *gfx_init_screen0::ch
char *gfx_init_screen0::ch#1 // ch zp[2]:3 4200.6
char *gfx_init_screen0::ch#2 // ch zp[2]:3 5167.333333333333
char *gfx_init_screen0::ch#3 // ch zp[2]:3 2002.0
char *gfx_init_screen0::ch#1 // ch zp[2]:6 4200.6
char *gfx_init_screen0::ch#2 // ch zp[2]:6 5167.333333333333
char *gfx_init_screen0::ch#3 // ch zp[2]:6 2002.0
char gfx_init_screen0::cx
char gfx_init_screen0::cx#1 // reg byte x 15001.5
char gfx_init_screen0::cx#2 // reg byte x 4286.142857142857
char gfx_init_screen0::cy
char gfx_init_screen0::cy#1 // cy zp[1]:2 1501.5
char gfx_init_screen0::cy#4 // cy zp[1]:2 1200.3
char gfx_init_screen0::cy#1 // cy zp[1]:9 1501.5
char gfx_init_screen0::cy#4 // cy zp[1]:9 1200.3
void main()
char main::$3 // reg byte a 202.0
char main::$4 // reg byte a 202.0
@ -2070,11 +2070,11 @@ char main::rst#1 // reg byte x 57.714285714285715
reg byte x [ main::j#2 main::j#1 ]
reg byte x [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
zp[1]:2 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
zp[2]:3 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ]
zp[1]:5 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
zp[2]:6 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ]
zp[1]:8 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
zp[1]:9 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
zp[2]:6 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ]
zp[1]:2 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
zp[2]:3 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ]
zp[1]:5 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ]
reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ]
reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#2 ]
@ -2083,7 +2083,7 @@ reg byte a [ main::$3 ]
reg byte a [ main::$4 ]
reg byte a [ main::$5 ]
reg byte a [ gfx_init_screen0::$0 ]
zp[1]:9 [ gfx_init_screen0::$1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
zp[1]:8 [ gfx_init_screen0::$1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
reg byte a [ gfx_init_screen0::$2 ]
reg byte a [ gfx_init_screen0::$3 ]
reg byte a [ gfx_init_plane_charset8::$2 ]
@ -2470,9 +2470,9 @@ gfx_init: {
// gfx_init_screen0
// Initialize VIC screen 0 ( value is %yyyyxxxx where yyyy is ypos and xxxx is xpos)
gfx_init_screen0: {
.label __1 = 9
.label ch = 3
.label cy = 2
.label __1 = 8
.label ch = 6
.label cy = 9
// [46] phi from gfx_init_screen0 to gfx_init_screen0::@1 [phi:gfx_init_screen0->gfx_init_screen0::@1]
// [46] phi gfx_init_screen0::ch#3 = SCREEN [phi:gfx_init_screen0->gfx_init_screen0::@1#0] -- pbuz1=pbuc1
lda #<SCREEN
@ -2548,12 +2548,12 @@ gfx_init_screen0: {
gfx_init_plane_charset8: {
// 8bpp cells for Plane B (charset) - ROM charset with 256 colors
.const gfxbCpuBank = $ff&CHARSET8/$4000
.label bits = 5
.label chargen = 3
.label gfxa = 6
.label col = 8
.label cr = 9
.label ch = 2
.label bits = 2
.label chargen = 6
.label gfxa = 3
.label col = 5
.label cr = 8
.label ch = 9
// dtvSetCpuBankSegment1(gfxbCpuBank++)
// [60] call dtvSetCpuBankSegment1
// [84] phi from gfx_init_plane_charset8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1]

View File

@ -46,52 +46,52 @@ void gfx_init()
void gfx_init_plane_charset8()
char gfx_init_plane_charset8::$2 // reg byte a 200002.0
char gfx_init_plane_charset8::bits
char gfx_init_plane_charset8::bits#0 // bits zp[1]:5 10001.0
char gfx_init_plane_charset8::bits#1 // bits zp[1]:5 50000.5
char gfx_init_plane_charset8::bits#2 // bits zp[1]:5 44286.28571428572
char gfx_init_plane_charset8::bits#0 // bits zp[1]:2 10001.0
char gfx_init_plane_charset8::bits#1 // bits zp[1]:2 50000.5
char gfx_init_plane_charset8::bits#2 // bits zp[1]:2 44286.28571428572
char gfx_init_plane_charset8::c
char gfx_init_plane_charset8::c#2 // reg byte a 200002.0
char gfx_init_plane_charset8::c#3 // reg byte a 200002.0
char gfx_init_plane_charset8::ch
char gfx_init_plane_charset8::ch#1 // ch zp[1]:2 1501.5
char gfx_init_plane_charset8::ch#8 // ch zp[1]:2 117.76470588235294
char gfx_init_plane_charset8::ch#1 // ch zp[1]:9 1501.5
char gfx_init_plane_charset8::ch#8 // ch zp[1]:9 117.76470588235294
char *gfx_init_plane_charset8::chargen
char *gfx_init_plane_charset8::chargen#1 // chargen zp[2]:3 1312.6875
char *gfx_init_plane_charset8::chargen#2 // chargen zp[2]:3 15502.0
char *gfx_init_plane_charset8::chargen#3 // chargen zp[2]:3 2002.0
char *gfx_init_plane_charset8::chargen#1 // chargen zp[2]:6 1312.6875
char *gfx_init_plane_charset8::chargen#2 // chargen zp[2]:6 15502.0
char *gfx_init_plane_charset8::chargen#3 // chargen zp[2]:6 2002.0
char gfx_init_plane_charset8::col
char gfx_init_plane_charset8::col#1 // col zp[1]:8 30143.428571428572
char gfx_init_plane_charset8::col#2 // col zp[1]:8 38750.5
char gfx_init_plane_charset8::col#5 // col zp[1]:8 7001.0
char gfx_init_plane_charset8::col#6 // col zp[1]:8 2002.0
char gfx_init_plane_charset8::col#1 // col zp[1]:5 30143.428571428572
char gfx_init_plane_charset8::col#2 // col zp[1]:5 38750.5
char gfx_init_plane_charset8::col#5 // col zp[1]:5 7001.0
char gfx_init_plane_charset8::col#6 // col zp[1]:5 2002.0
char gfx_init_plane_charset8::cp
char gfx_init_plane_charset8::cp#1 // reg byte x 150001.5
char gfx_init_plane_charset8::cp#2 // reg byte x 22222.444444444445
char gfx_init_plane_charset8::cr
char gfx_init_plane_charset8::cr#1 // cr zp[1]:9 15001.5
char gfx_init_plane_charset8::cr#6 // cr zp[1]:9 1428.7142857142858
char gfx_init_plane_charset8::cr#1 // cr zp[1]:8 15001.5
char gfx_init_plane_charset8::cr#6 // cr zp[1]:8 1428.7142857142858
char *gfx_init_plane_charset8::gfxa
char *gfx_init_plane_charset8::gfxa#1 // gfxa zp[2]:6 23444.88888888889
char *gfx_init_plane_charset8::gfxa#2 // gfxa zp[2]:6 51667.33333333333
char *gfx_init_plane_charset8::gfxa#5 // gfxa zp[2]:6 7001.0
char *gfx_init_plane_charset8::gfxa#6 // gfxa zp[2]:6 2002.0
char *gfx_init_plane_charset8::gfxa#1 // gfxa zp[2]:3 23444.88888888889
char *gfx_init_plane_charset8::gfxa#2 // gfxa zp[2]:3 51667.33333333333
char *gfx_init_plane_charset8::gfxa#5 // gfxa zp[2]:3 7001.0
char *gfx_init_plane_charset8::gfxa#6 // gfxa zp[2]:3 2002.0
char gfx_init_plane_charset8::gfxbCpuBank
__constant char gfx_init_plane_charset8::gfxbCpuBank#0 = (char)CHARSET8/$4000 // gfxbCpuBank
void gfx_init_screen0()
char gfx_init_screen0::$0 // reg byte a 20002.0
char gfx_init_screen0::$1 // zp[1]:9 10001.0
char gfx_init_screen0::$1 // zp[1]:8 10001.0
char gfx_init_screen0::$2 // reg byte a 20002.0
char gfx_init_screen0::$3 // reg byte a 20002.0
char *gfx_init_screen0::ch
char *gfx_init_screen0::ch#1 // ch zp[2]:3 4200.6
char *gfx_init_screen0::ch#2 // ch zp[2]:3 5167.333333333333
char *gfx_init_screen0::ch#3 // ch zp[2]:3 2002.0
char *gfx_init_screen0::ch#1 // ch zp[2]:6 4200.6
char *gfx_init_screen0::ch#2 // ch zp[2]:6 5167.333333333333
char *gfx_init_screen0::ch#3 // ch zp[2]:6 2002.0
char gfx_init_screen0::cx
char gfx_init_screen0::cx#1 // reg byte x 15001.5
char gfx_init_screen0::cx#2 // reg byte x 4286.142857142857
char gfx_init_screen0::cy
char gfx_init_screen0::cy#1 // cy zp[1]:2 1501.5
char gfx_init_screen0::cy#4 // cy zp[1]:2 1200.3
char gfx_init_screen0::cy#1 // cy zp[1]:9 1501.5
char gfx_init_screen0::cy#4 // cy zp[1]:9 1200.3
void main()
char main::$3 // reg byte a 202.0
char main::$4 // reg byte a 202.0
@ -104,11 +104,11 @@ char main::rst#1 // reg byte x 57.714285714285715
reg byte x [ main::j#2 main::j#1 ]
reg byte x [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
zp[1]:2 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
zp[2]:3 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ]
zp[1]:5 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
zp[2]:6 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ]
zp[1]:8 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
zp[1]:9 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
zp[2]:6 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ]
zp[1]:2 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
zp[2]:3 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ]
zp[1]:5 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ]
reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ]
reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#2 ]
@ -117,7 +117,7 @@ reg byte a [ main::$3 ]
reg byte a [ main::$4 ]
reg byte a [ main::$5 ]
reg byte a [ gfx_init_screen0::$0 ]
zp[1]:9 [ gfx_init_screen0::$1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
zp[1]:8 [ gfx_init_screen0::$1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
reg byte a [ gfx_init_screen0::$2 ]
reg byte a [ gfx_init_screen0::$3 ]
reg byte a [ gfx_init_plane_charset8::$2 ]

View File

@ -276,10 +276,10 @@ main: {
}
// Initialize Plane with 8bpp chunky
gfx_init_chunky: {
.label __5 = 7
.label gfxb = 5
.label x = 3
.label y = 2
.label __5 = 6
.label gfxb = 2
.label x = 4
.label y = 8
// dtvSetCpuBankSegment1(gfxbCpuBank++)
lda #CHUNKY/$4000
jsr dtvSetCpuBankSegment1

View File

@ -684,18 +684,18 @@ Complete equivalence classes
[ main::$5 ]
[ gfx_init_chunky::$5 ]
[ gfx_init_chunky::c#0 ]
Allocated zp[1]:2 [ main::j#2 main::j#1 ]
Allocated zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Allocated zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
Allocated zp[1]:6 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
Allocated zp[2]:7 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
Allocated zp[1]:9 [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
Allocated zp[1]:10 [ main::rst#1 ]
Allocated zp[1]:11 [ main::$3 ]
Allocated zp[1]:12 [ main::$4 ]
Allocated zp[1]:13 [ main::$5 ]
Allocated zp[2]:14 [ gfx_init_chunky::$5 ]
Allocated zp[1]:16 [ gfx_init_chunky::c#0 ]
Allocated zp[1]:2 [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
Allocated zp[1]:3 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
Allocated zp[2]:4 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
Allocated zp[1]:6 [ gfx_init_chunky::c#0 ]
Allocated zp[2]:7 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
Allocated zp[2]:9 [ gfx_init_chunky::$5 ]
Allocated zp[1]:11 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Allocated zp[1]:12 [ main::$3 ]
Allocated zp[1]:13 [ main::$4 ]
Allocated zp[1]:14 [ main::$5 ]
Allocated zp[1]:15 [ main::rst#1 ]
Allocated zp[1]:16 [ main::j#2 main::j#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *PROCPORT = PROCPORT_RAM_IO [ ] ( [ ] { } ) always clobbers reg byte a
@ -717,15 +717,15 @@ Statement [22] *VICII_CONTROL1 = VICII_DEN|VICII_ECM|VICII_RSEL|3 [ ] ( [ ] { }
Statement [23] *BORDER_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [24] if(*RASTER!=$42) goto main::@3 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [28] main::$4 = VICII_DEN|VICII_ECM|VICII_RSEL | main::$3 [ main::rst#1 main::$4 ] ( [ main::rst#1 main::$4 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:10 [ main::rst#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:15 [ main::rst#1 ]
Statement [30] main::$5 = main::rst#1 << 4 [ main::rst#1 main::$5 ] ( [ main::rst#1 main::$5 ] { } ) always clobbers reg byte a
Statement [38] if(gfx_init_chunky::gfxb#3!=$8000) goto gfx_init_chunky::@3 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#3 gfx_init_chunky::x#2 gfx_init_chunky::gfxbCpuBank#4 ] ( gfx_init_chunky:3 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#3 gfx_init_chunky::x#2 gfx_init_chunky::gfxbCpuBank#4 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:11 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
Statement [43] gfx_init_chunky::$5 = gfx_init_chunky::x#2 + gfx_init_chunky::y#6 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 gfx_init_chunky::$5 ] ( gfx_init_chunky:3 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 gfx_init_chunky::$5 ] { } ) always clobbers reg byte a
Statement [45] *gfx_init_chunky::gfxb#4 = gfx_init_chunky::c#0 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 ] ( gfx_init_chunky:3 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 ] { } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:6 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
Removing always clobbered register reg byte y as potential for zp[1]:11 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:3 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
Statement [48] if(gfx_init_chunky::x#1!=$140) goto gfx_init_chunky::@2 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#1 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#1 ] ( gfx_init_chunky:3 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#1 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#1 ] { } ) always clobbers reg byte a
Statement asm { .byte$32,$dd lda$ff .byte$32,$00 } always clobbers reg byte a
Statement [1] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] ( [ ] { } ) always clobbers reg byte a
@ -755,44 +755,44 @@ Statement [43] gfx_init_chunky::$5 = gfx_init_chunky::x#2 + gfx_init_chunky::y#6
Statement [45] *gfx_init_chunky::gfxb#4 = gfx_init_chunky::c#0 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 ] ( gfx_init_chunky:3 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 ] { } ) always clobbers reg byte y
Statement [48] if(gfx_init_chunky::x#1!=$140) goto gfx_init_chunky::@2 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#1 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#1 ] ( gfx_init_chunky:3 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#1 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#1 ] { } ) always clobbers reg byte a
Statement asm { .byte$32,$dd lda$ff .byte$32,$00 } always clobbers reg byte a
Potential registers zp[1]:2 [ main::j#2 main::j#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] : zp[1]:3 , reg byte x ,
Potential registers zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ] : zp[2]:4 ,
Potential registers zp[1]:6 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ] : zp[1]:6 , reg byte x ,
Potential registers zp[2]:7 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ] : zp[2]:7 ,
Potential registers zp[1]:9 [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:10 [ main::rst#1 ] : zp[1]:10 , reg byte x , reg byte y ,
Potential registers zp[1]:11 [ main::$3 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:12 [ main::$4 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:13 [ main::$5 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:14 [ gfx_init_chunky::$5 ] : zp[2]:14 ,
Potential registers zp[1]:16 [ gfx_init_chunky::c#0 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:16 [ main::j#2 main::j#1 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:11 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] : zp[1]:11 , reg byte x ,
Potential registers zp[2]:7 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ] : zp[2]:7 ,
Potential registers zp[1]:3 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ] : zp[1]:3 , reg byte x ,
Potential registers zp[2]:4 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ] : zp[2]:4 ,
Potential registers zp[1]:2 [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:15 [ main::rst#1 ] : zp[1]:15 , reg byte x , reg byte y ,
Potential registers zp[1]:12 [ main::$3 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:13 [ main::$4 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:14 [ main::$5 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:9 [ gfx_init_chunky::$5 ] : zp[2]:9 ,
Potential registers zp[1]:6 [ gfx_init_chunky::c#0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [dtvSetCpuBankSegment1] 13,004: zp[1]:9 [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
Uplift Scope [gfx_init_chunky] 3,575.14: zp[1]:6 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ] 2,925.35: zp[2]:7 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ] 2,002: zp[1]:16 [ gfx_init_chunky::c#0 ] 1,801.8: zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ] 1,001: zp[2]:14 [ gfx_init_chunky::$5 ] 244.04: zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Uplift Scope [main] 202: zp[1]:11 [ main::$3 ] 202: zp[1]:12 [ main::$4 ] 202: zp[1]:13 [ main::$5 ] 57.71: zp[1]:10 [ main::rst#1 ] 38.5: zp[1]:2 [ main::j#2 main::j#1 ]
Uplift Scope [dtvSetCpuBankSegment1] 13,004: zp[1]:2 [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
Uplift Scope [gfx_init_chunky] 3,575.14: zp[1]:3 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ] 2,925.35: zp[2]:4 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ] 2,002: zp[1]:6 [ gfx_init_chunky::c#0 ] 1,801.8: zp[2]:7 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ] 1,001: zp[2]:9 [ gfx_init_chunky::$5 ] 244.04: zp[1]:11 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Uplift Scope [main] 202: zp[1]:12 [ main::$3 ] 202: zp[1]:13 [ main::$4 ] 202: zp[1]:14 [ main::$5 ] 57.71: zp[1]:15 [ main::rst#1 ] 38.5: zp[1]:16 [ main::j#2 main::j#1 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
Uplift Scope []
Uplifting [dtvSetCpuBankSegment1] best 26159 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
Uplifting [gfx_init_chunky] best 25129 combination reg byte x [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ] zp[2]:7 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ] reg byte a [ gfx_init_chunky::c#0 ] zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ] zp[2]:14 [ gfx_init_chunky::$5 ] zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Uplifting [main] best 22529 combination reg byte a [ main::$3 ] reg byte a [ main::$4 ] reg byte a [ main::$5 ] reg byte x [ main::rst#1 ] zp[1]:2 [ main::j#2 main::j#1 ]
Uplifting [gfx_init_chunky] best 25129 combination reg byte x [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ] zp[2]:4 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ] reg byte a [ gfx_init_chunky::c#0 ] zp[2]:7 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ] zp[2]:9 [ gfx_init_chunky::$5 ] zp[1]:11 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Uplifting [main] best 22529 combination reg byte a [ main::$3 ] reg byte a [ main::$4 ] reg byte a [ main::$5 ] reg byte x [ main::rst#1 ] zp[1]:16 [ main::j#2 main::j#1 ]
Limited combination testing to 100 combinations of 768 possible.
Uplifting [MOS6526_CIA] best 22529 combination
Uplifting [MOS6569_VICII] best 22529 combination
Uplifting [MOS6581_SID] best 22529 combination
Uplifting [] best 22529 combination
Attempting to uplift remaining variables inzp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Uplifting [gfx_init_chunky] best 22529 combination zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::j#2 main::j#1 ]
Attempting to uplift remaining variables inzp[1]:11 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Uplifting [gfx_init_chunky] best 22529 combination zp[1]:11 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Attempting to uplift remaining variables inzp[1]:16 [ main::j#2 main::j#1 ]
Uplifting [main] best 22409 combination reg byte x [ main::j#2 main::j#1 ]
Allocated (was zp[1]:3) zp[1]:2 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Allocated (was zp[2]:4) zp[2]:3 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
Allocated (was zp[2]:7) zp[2]:5 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
Allocated (was zp[2]:14) zp[2]:7 [ gfx_init_chunky::$5 ]
Allocated (was zp[2]:4) zp[2]:2 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
Allocated (was zp[2]:7) zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
Allocated (was zp[2]:9) zp[2]:6 [ gfx_init_chunky::$5 ]
Allocated (was zp[1]:11) zp[1]:8 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -1103,10 +1103,10 @@ main: {
// gfx_init_chunky
// Initialize Plane with 8bpp chunky
gfx_init_chunky: {
.label __5 = 7
.label gfxb = 5
.label x = 3
.label y = 2
.label __5 = 6
.label gfxb = 2
.label x = 4
.label y = 8
// [35] call dtvSetCpuBankSegment1
// [54] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1]
dtvSetCpuBankSegment1_from_gfx_init_chunky:
@ -1364,25 +1364,25 @@ char dtvSetCpuBankSegment1::cpuBankIdx
char dtvSetCpuBankSegment1::cpuBankIdx#1 // reg byte a 2002.0
char dtvSetCpuBankSegment1::cpuBankIdx#3 // reg byte a 11002.0
void gfx_init_chunky()
unsigned int gfx_init_chunky::$5 // zp[2]:7 1001.0
unsigned int gfx_init_chunky::$5 // zp[2]:6 1001.0
char gfx_init_chunky::c
char gfx_init_chunky::c#0 // reg byte a 2002.0
char *gfx_init_chunky::gfxb
char *gfx_init_chunky::gfxb#1 // gfxb zp[2]:5 420.59999999999997
char *gfx_init_chunky::gfxb#3 // gfxb zp[2]:5 1552.0
char *gfx_init_chunky::gfxb#4 // gfxb zp[2]:5 750.75
char *gfx_init_chunky::gfxb#5 // gfxb zp[2]:5 202.0
char *gfx_init_chunky::gfxb#1 // gfxb zp[2]:2 420.59999999999997
char *gfx_init_chunky::gfxb#3 // gfxb zp[2]:2 1552.0
char *gfx_init_chunky::gfxb#4 // gfxb zp[2]:2 750.75
char *gfx_init_chunky::gfxb#5 // gfxb zp[2]:2 202.0
char gfx_init_chunky::gfxbCpuBank
char gfx_init_chunky::gfxbCpuBank#2 // reg byte x 2002.0
char gfx_init_chunky::gfxbCpuBank#4 // reg byte x 1026.25
char gfx_init_chunky::gfxbCpuBank#7 // reg byte x 202.0
char gfx_init_chunky::gfxbCpuBank#8 // reg byte x 344.8888888888889
unsigned int gfx_init_chunky::x
unsigned int gfx_init_chunky::x#1 // x zp[2]:3 1501.5
unsigned int gfx_init_chunky::x#2 // x zp[2]:3 300.29999999999995
unsigned int gfx_init_chunky::x#1 // x zp[2]:4 1501.5
unsigned int gfx_init_chunky::x#2 // x zp[2]:4 300.29999999999995
char gfx_init_chunky::y
char gfx_init_chunky::y#1 // y zp[1]:2 151.5
char gfx_init_chunky::y#6 // y zp[1]:2 92.53846153846155
char gfx_init_chunky::y#1 // y zp[1]:8 151.5
char gfx_init_chunky::y#6 // y zp[1]:8 92.53846153846155
void main()
char main::$3 // reg byte a 202.0
char main::$4 // reg byte a 202.0
@ -1394,16 +1394,16 @@ char main::rst
char main::rst#1 // reg byte x 57.714285714285715
reg byte x [ main::j#2 main::j#1 ]
zp[1]:2 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
zp[2]:3 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
zp[1]:8 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
reg byte x [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
zp[2]:5 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
zp[2]:2 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
reg byte x [ main::rst#1 ]
reg byte a [ main::$3 ]
reg byte a [ main::$4 ]
reg byte a [ main::$5 ]
zp[2]:7 [ gfx_init_chunky::$5 ]
zp[2]:6 [ gfx_init_chunky::$5 ]
reg byte a [ gfx_init_chunky::c#0 ]
@ -1737,10 +1737,10 @@ main: {
// gfx_init_chunky
// Initialize Plane with 8bpp chunky
gfx_init_chunky: {
.label __5 = 7
.label gfxb = 5
.label x = 3
.label y = 2
.label __5 = 6
.label gfxb = 2
.label x = 4
.label y = 8
// dtvSetCpuBankSegment1(gfxbCpuBank++)
// [35] call dtvSetCpuBankSegment1
// [54] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1]

View File

@ -36,25 +36,25 @@ char dtvSetCpuBankSegment1::cpuBankIdx
char dtvSetCpuBankSegment1::cpuBankIdx#1 // reg byte a 2002.0
char dtvSetCpuBankSegment1::cpuBankIdx#3 // reg byte a 11002.0
void gfx_init_chunky()
unsigned int gfx_init_chunky::$5 // zp[2]:7 1001.0
unsigned int gfx_init_chunky::$5 // zp[2]:6 1001.0
char gfx_init_chunky::c
char gfx_init_chunky::c#0 // reg byte a 2002.0
char *gfx_init_chunky::gfxb
char *gfx_init_chunky::gfxb#1 // gfxb zp[2]:5 420.59999999999997
char *gfx_init_chunky::gfxb#3 // gfxb zp[2]:5 1552.0
char *gfx_init_chunky::gfxb#4 // gfxb zp[2]:5 750.75
char *gfx_init_chunky::gfxb#5 // gfxb zp[2]:5 202.0
char *gfx_init_chunky::gfxb#1 // gfxb zp[2]:2 420.59999999999997
char *gfx_init_chunky::gfxb#3 // gfxb zp[2]:2 1552.0
char *gfx_init_chunky::gfxb#4 // gfxb zp[2]:2 750.75
char *gfx_init_chunky::gfxb#5 // gfxb zp[2]:2 202.0
char gfx_init_chunky::gfxbCpuBank
char gfx_init_chunky::gfxbCpuBank#2 // reg byte x 2002.0
char gfx_init_chunky::gfxbCpuBank#4 // reg byte x 1026.25
char gfx_init_chunky::gfxbCpuBank#7 // reg byte x 202.0
char gfx_init_chunky::gfxbCpuBank#8 // reg byte x 344.8888888888889
unsigned int gfx_init_chunky::x
unsigned int gfx_init_chunky::x#1 // x zp[2]:3 1501.5
unsigned int gfx_init_chunky::x#2 // x zp[2]:3 300.29999999999995
unsigned int gfx_init_chunky::x#1 // x zp[2]:4 1501.5
unsigned int gfx_init_chunky::x#2 // x zp[2]:4 300.29999999999995
char gfx_init_chunky::y
char gfx_init_chunky::y#1 // y zp[1]:2 151.5
char gfx_init_chunky::y#6 // y zp[1]:2 92.53846153846155
char gfx_init_chunky::y#1 // y zp[1]:8 151.5
char gfx_init_chunky::y#6 // y zp[1]:8 92.53846153846155
void main()
char main::$3 // reg byte a 202.0
char main::$4 // reg byte a 202.0
@ -66,14 +66,14 @@ char main::rst
char main::rst#1 // reg byte x 57.714285714285715
reg byte x [ main::j#2 main::j#1 ]
zp[1]:2 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
zp[2]:3 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
zp[1]:8 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
reg byte x [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
zp[2]:5 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
zp[2]:2 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
reg byte x [ main::rst#1 ]
reg byte a [ main::$3 ]
reg byte a [ main::$4 ]
reg byte a [ main::$5 ]
zp[2]:7 [ gfx_init_chunky::$5 ]
zp[2]:6 [ gfx_init_chunky::$5 ]
reg byte a [ gfx_init_chunky::c#0 ]

View File

@ -324,8 +324,8 @@ Added variable main::$0 to live range equivalence class [ main::$0 ]
Complete equivalence classes
[ main::r#2 main::r#1 ]
[ main::$0 ]
Allocated zp[1]:2 [ main::r#2 main::r#1 ]
Allocated zp[1]:3 [ main::$0 ]
Allocated zp[1]:2 [ main::$0 ]
Allocated zp[1]:3 [ main::r#2 main::r#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [0] *DTV_FEATURE = DTV_FEATURE_ENABLE [ ] ( [ ] { } ) always clobbers reg byte a
Statement [1] *DTV_BLITTER_CONTROL2 = DTV_BLIT_CLEAR_IRQ [ ] ( [ ] { } ) always clobbers reg byte a
@ -360,7 +360,7 @@ Statement [29] *DTV_BLITTER_TRANSPARANCY = DTV_BLIT_TRANSPARANCY_NONE [ ] ( [ ]
Statement [30] *DTV_BLITTER_CONTROL = DTV_BLIT_FORCE_START|DTV_BLIT_SRCA_FWD|DTV_BLIT_SRCB_FWD|DTV_BLIT_DEST_FWD [ ] ( [ ] { } ) always clobbers reg byte a
Statement [31] *DTV_BLITTER_CONTROL2 = DTV_BLIT_DEST_CONT [ ] ( [ ] { } ) always clobbers reg byte a
Statement [33] main::$0 = *DTV_BLITTER_CONTROL2 & DTV_BLIT_STATUS_BUSY [ main::r#2 main::$0 ] ( [ main::r#2 main::$0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::r#2 main::r#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::r#2 main::r#1 ]
Statement [35] *DTV_BLITTER_CONTROL = DTV_BLIT_FORCE_START|DTV_BLIT_SRCA_FWD|DTV_BLIT_SRCB_FWD|DTV_BLIT_DEST_FWD [ main::r#2 ] ( [ main::r#2 ] { } ) always clobbers reg byte a
Statement [0] *DTV_FEATURE = DTV_FEATURE_ENABLE [ ] ( [ ] { } ) always clobbers reg byte a
Statement [1] *DTV_BLITTER_CONTROL2 = DTV_BLIT_CLEAR_IRQ [ ] ( [ ] { } ) always clobbers reg byte a
@ -396,11 +396,11 @@ Statement [30] *DTV_BLITTER_CONTROL = DTV_BLIT_FORCE_START|DTV_BLIT_SRCA_FWD|DTV
Statement [31] *DTV_BLITTER_CONTROL2 = DTV_BLIT_DEST_CONT [ ] ( [ ] { } ) always clobbers reg byte a
Statement [33] main::$0 = *DTV_BLITTER_CONTROL2 & DTV_BLIT_STATUS_BUSY [ main::r#2 main::$0 ] ( [ main::r#2 main::$0 ] { } ) always clobbers reg byte a
Statement [35] *DTV_BLITTER_CONTROL = DTV_BLIT_FORCE_START|DTV_BLIT_SRCA_FWD|DTV_BLIT_SRCB_FWD|DTV_BLIT_DEST_FWD [ main::r#2 ] ( [ main::r#2 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::r#2 main::r#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::r#2 main::r#1 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ main::$0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 202: zp[1]:3 [ main::$0 ] 72.5: zp[1]:2 [ main::r#2 main::r#1 ]
Uplift Scope [main] 202: zp[1]:2 [ main::$0 ] 72.5: zp[1]:3 [ main::r#2 main::r#1 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]

View File

@ -200,25 +200,25 @@ Initial phi equivalence classes
Complete equivalence classes
[ main::r#2 main::r#1 ]
[ main::c#2 main::c#1 ]
Allocated zp[1]:2 [ main::r#2 main::r#1 ]
Allocated zp[1]:3 [ main::c#2 main::c#1 ]
Allocated zp[1]:2 [ main::c#2 main::c#1 ]
Allocated zp[1]:3 [ main::r#2 main::r#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] *DTV_FEATURE = DTV_FEATURE_ENABLE [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *DTV_CONTROL = DTV_HIGHCOLOR|DTV_BORDER_OFF|DTV_BADLINE_OFF [ ] ( [ ] { } ) always clobbers reg byte a
Statement [3] if(*RASTER!=$40) goto main::@1 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [4] *BG_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [11] DTV_PALETTE[main::c#2] = main::palette[main::c#2] [ main::c#2 ] ( [ main::c#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::c#2 main::c#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::c#2 main::c#1 ]
Statement [1] *DTV_FEATURE = DTV_FEATURE_ENABLE [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *DTV_CONTROL = DTV_HIGHCOLOR|DTV_BORDER_OFF|DTV_BADLINE_OFF [ ] ( [ ] { } ) always clobbers reg byte a
Statement [3] if(*RASTER!=$40) goto main::@1 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [4] *BG_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [11] DTV_PALETTE[main::c#2] = main::palette[main::c#2] [ main::c#2 ] ( [ main::c#2 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::r#2 main::r#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::c#2 main::c#1 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::r#2 main::r#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ main::c#2 main::c#1 ] : zp[1]:2 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 353.5: zp[1]:3 [ main::c#2 main::c#1 ] 218.83: zp[1]:2 [ main::r#2 main::r#1 ]
Uplift Scope [main] 353.5: zp[1]:2 [ main::c#2 main::c#1 ] 218.83: zp[1]:3 [ main::r#2 main::r#1 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]

View File

@ -212,28 +212,28 @@ Complete equivalence classes
[ idx#13 idx#14 ]
[ print::w#3 ]
[ print::$0 ]
Allocated zp[1]:2 [ idx#13 idx#14 ]
Allocated zp[2]:3 [ print::w#3 ]
Allocated zp[1]:5 [ print::$0 ]
Allocated zp[1]:2 [ print::$0 ]
Allocated zp[1]:3 [ idx#13 idx#14 ]
Allocated zp[2]:4 [ print::w#3 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [8] print::$0 = idx#13 << 1 [ idx#13 print::w#3 print::$0 ] ( print:1 [ idx#13 print::w#3 print::$0 ] { } print:3 [ idx#13 print::w#3 print::$0 ] { { idx#13 = idx#14 } } print:5 [ idx#13 print::w#3 print::$0 ] { { idx#13 = idx#14 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ idx#13 idx#14 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ idx#13 idx#14 ]
Statement [9] SCREEN[print::$0] = print::w#3 [ idx#13 ] ( print:1 [ idx#13 ] { } print:3 [ idx#13 ] { { idx#13 = idx#14 } } print:5 [ idx#13 ] { { idx#13 = idx#14 } } ) always clobbers reg byte a
Statement [8] print::$0 = idx#13 << 1 [ idx#13 print::w#3 print::$0 ] ( print:1 [ idx#13 print::w#3 print::$0 ] { } print:3 [ idx#13 print::w#3 print::$0 ] { { idx#13 = idx#14 } } print:5 [ idx#13 print::w#3 print::$0 ] { { idx#13 = idx#14 } } ) always clobbers reg byte a
Statement [9] SCREEN[print::$0] = print::w#3 [ idx#13 ] ( print:1 [ idx#13 ] { } print:3 [ idx#13 ] { { idx#13 = idx#14 } } print:5 [ idx#13 ] { { idx#13 = idx#14 } } ) always clobbers reg byte a
Potential registers zp[1]:2 [ idx#13 idx#14 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[2]:3 [ print::w#3 ] : zp[2]:3 ,
Potential registers zp[1]:5 [ print::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ idx#13 idx#14 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[2]:4 [ print::w#3 ] : zp[2]:4 ,
Potential registers zp[1]:2 [ print::$0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [print] 22: zp[1]:5 [ print::$0 ] 5.5: zp[2]:3 [ print::w#3 ]
Uplift Scope [] 11.17: zp[1]:2 [ idx#13 idx#14 ]
Uplift Scope [print] 22: zp[1]:2 [ print::$0 ] 5.5: zp[2]:4 [ print::w#3 ]
Uplift Scope [] 11.17: zp[1]:3 [ idx#13 idx#14 ]
Uplift Scope [main]
Uplifting [print] best 105 combination reg byte a [ print::$0 ] zp[2]:3 [ print::w#3 ]
Uplifting [print] best 105 combination reg byte a [ print::$0 ] zp[2]:4 [ print::w#3 ]
Uplifting [] best 98 combination reg byte x [ idx#13 idx#14 ]
Uplifting [main] best 98 combination
Allocated (was zp[2]:3) zp[2]:2 [ print::w#3 ]
Allocated (was zp[2]:4) zp[2]:2 [ print::w#3 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -9,7 +9,7 @@
.segmentdef Data [startAfter="Code"]
.segment Basic
:BasicUpstart(main)
.label screen = 3
.label screen = 2
.segment Code
main: {
// line(1,2)
@ -29,9 +29,9 @@ main: {
// }
rts
}
// void line(char x0, __zp(2) char x1)
// void line(char x0, __zp(4) char x1)
line: {
.label x1 = 2
.label x1 = 4
__b1:
// for(byte x = x0; x<x1; x++)
cpx.z x1

View File

@ -252,28 +252,30 @@ Complete equivalence classes
[ line::x1#3 ]
[ screen#18 screen#11 screen#3 ]
[ line::x#2 line::x#0 line::x#1 ]
Allocated zp[1]:2 [ line::x1#3 ]
Allocated zp[1]:2 [ line::x#2 line::x#0 line::x#1 ]
Allocated zp[2]:3 [ screen#18 screen#11 screen#3 ]
Allocated zp[1]:5 [ line::x#2 line::x#0 line::x#1 ]
Allocated zp[1]:5 [ line::x1#3 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [9] *screen#11 = line::x#2 [ line::x1#3 screen#11 line::x#2 ] ( line:1 [ line::x1#3 screen#11 line::x#2 ] { } line:3 [ line::x1#3 screen#11 line::x#2 ] { { screen#11 = screen#18 } } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:2 [ line::x1#3 ]
Removing always clobbered register reg byte y as potential for zp[1]:5 [ line::x#2 line::x#0 line::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:5 [ line::x1#3 ]
Removing always clobbered register reg byte y as potential for zp[1]:2 [ line::x#2 line::x#0 line::x#1 ]
Statement [9] *screen#11 = line::x#2 [ line::x1#3 screen#11 line::x#2 ] ( line:1 [ line::x1#3 screen#11 line::x#2 ] { } line:3 [ line::x1#3 screen#11 line::x#2 ] { { screen#11 = screen#18 } } ) always clobbers reg byte y
Potential registers zp[1]:2 [ line::x1#3 ] : zp[1]:2 , reg byte a , reg byte x ,
Potential registers zp[1]:5 [ line::x1#3 ] : zp[1]:5 , reg byte a , reg byte x ,
Potential registers zp[2]:3 [ screen#18 screen#11 screen#3 ] : zp[2]:3 ,
Potential registers zp[1]:5 [ line::x#2 line::x#0 line::x#1 ] : zp[1]:5 , reg byte a , reg byte x ,
Potential registers zp[1]:2 [ line::x#2 line::x#0 line::x#1 ] : zp[1]:2 , reg byte a , reg byte x ,
REGISTER UPLIFT SCOPES
Uplift Scope [line] 316.75: zp[1]:5 [ line::x#2 line::x#0 line::x#1 ] 16.83: zp[1]:2 [ line::x1#3 ]
Uplift Scope [line] 316.75: zp[1]:2 [ line::x#2 line::x#0 line::x#1 ] 16.83: zp[1]:5 [ line::x1#3 ]
Uplift Scope [] 166.67: zp[2]:3 [ screen#18 screen#11 screen#3 ]
Uplift Scope [main]
Uplifting [line] best 444 combination reg byte x [ line::x#2 line::x#0 line::x#1 ] zp[1]:2 [ line::x1#3 ]
Uplifting [line] best 444 combination reg byte x [ line::x#2 line::x#0 line::x#1 ] zp[1]:5 [ line::x1#3 ]
Uplifting [] best 444 combination zp[2]:3 [ screen#18 screen#11 screen#3 ]
Uplifting [main] best 444 combination
Attempting to uplift remaining variables inzp[1]:2 [ line::x1#3 ]
Uplifting [line] best 444 combination zp[1]:2 [ line::x1#3 ]
Attempting to uplift remaining variables inzp[1]:5 [ line::x1#3 ]
Uplifting [line] best 444 combination zp[1]:5 [ line::x1#3 ]
Allocated (was zp[2]:3) zp[2]:2 [ screen#18 screen#11 screen#3 ]
Allocated (was zp[1]:5) zp[1]:4 [ line::x1#3 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -290,7 +292,7 @@ ASSEMBLER BEFORE OPTIMIZATION
.segment Basic
:BasicUpstart(main)
// Global Constants & labels
.label screen = 3
.label screen = 2
.segment Code
// main
main: {
@ -330,9 +332,9 @@ main: {
rts
}
// line
// void line(char x0, __zp(2) char x1)
// void line(char x0, __zp(4) char x1)
line: {
.label x1 = 2
.label x1 = 4
// [6] phi from line line::@2 to line::@1 [phi:line/line::@2->line::@1]
__b1_from_line:
__b1_from___b2:
@ -392,15 +394,15 @@ char line::x#1 // reg byte x 202.0
char line::x#2 // reg byte x 103.75
char line::x0
char line::x1
char line::x1#3 // x1 zp[1]:2 16.833333333333332
char line::x1#3 // x1 zp[1]:4 16.833333333333332
void main()
char *screen
char *screen#11 // screen zp[2]:3 52.66666666666666
char *screen#18 // screen zp[2]:3 13.0
char *screen#3 // screen zp[2]:3 101.0
char *screen#11 // screen zp[2]:2 52.66666666666666
char *screen#18 // screen zp[2]:2 13.0
char *screen#3 // screen zp[2]:2 101.0
zp[1]:2 [ line::x1#3 ]
zp[2]:3 [ screen#18 screen#11 screen#3 ]
zp[1]:4 [ line::x1#3 ]
zp[2]:2 [ screen#18 screen#11 screen#3 ]
reg byte x [ line::x#2 line::x#0 line::x#1 ]
@ -421,7 +423,7 @@ Score: 378
.segment Basic
:BasicUpstart(main)
// Global Constants & labels
.label screen = 3
.label screen = 2
.segment Code
// main
main: {
@ -457,9 +459,9 @@ main: {
rts
}
// line
// void line(char x0, __zp(2) char x1)
// void line(char x0, __zp(4) char x1)
line: {
.label x1 = 2
.label x1 = 4
// [6] phi from line line::@2 to line::@1 [phi:line/line::@2->line::@1]
// [6] phi screen#11 = screen#18 [phi:line/line::@2->line::@1#0] -- register_copy
// [6] phi line::x#2 = line::x#0 [phi:line/line::@2->line::@1#1] -- register_copy

View File

@ -5,13 +5,13 @@ char line::x#1 // reg byte x 202.0
char line::x#2 // reg byte x 103.75
char line::x0
char line::x1
char line::x1#3 // x1 zp[1]:2 16.833333333333332
char line::x1#3 // x1 zp[1]:4 16.833333333333332
void main()
char *screen
char *screen#11 // screen zp[2]:3 52.66666666666666
char *screen#18 // screen zp[2]:3 13.0
char *screen#3 // screen zp[2]:3 101.0
char *screen#11 // screen zp[2]:2 52.66666666666666
char *screen#18 // screen zp[2]:2 13.0
char *screen#3 // screen zp[2]:2 101.0
zp[1]:2 [ line::x1#3 ]
zp[2]:3 [ screen#18 screen#11 screen#3 ]
zp[1]:4 [ line::x1#3 ]
zp[2]:2 [ screen#18 screen#11 screen#3 ]
reg byte x [ line::x#2 line::x#0 line::x#1 ]

View File

@ -127,22 +127,23 @@ Complete equivalence classes
[ main::screen#2 main::screen#1 ]
[ main::c#0 ]
Allocated zp[2]:2 [ main::i#2 main::i#1 ]
Allocated zp[2]:4 [ main::screen#2 main::screen#1 ]
Allocated zp[1]:6 [ main::c#0 ]
Allocated zp[1]:4 [ main::c#0 ]
Allocated zp[2]:5 [ main::screen#2 main::screen#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [2] if(main::i#2<$3e8) goto main::@2 [ main::i#2 main::screen#2 ] ( [ main::i#2 main::screen#2 ] { } ) always clobbers reg byte a
Statement [4] main::c#0 = (char)main::i#2 [ main::i#2 main::screen#2 main::c#0 ] ( [ main::i#2 main::screen#2 main::c#0 ] { } ) always clobbers reg byte a
Statement [5] *main::screen#2 = main::c#0 [ main::i#2 main::screen#2 ] ( [ main::i#2 main::screen#2 ] { } ) always clobbers reg byte y
Potential registers zp[2]:2 [ main::i#2 main::i#1 ] : zp[2]:2 ,
Potential registers zp[2]:4 [ main::screen#2 main::screen#1 ] : zp[2]:4 ,
Potential registers zp[1]:6 [ main::c#0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:5 [ main::screen#2 main::screen#1 ] : zp[2]:5 ,
Potential registers zp[1]:4 [ main::c#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 28.6: zp[2]:2 [ main::i#2 main::i#1 ] 22: zp[1]:6 [ main::c#0 ] 19.25: zp[2]:4 [ main::screen#2 main::screen#1 ]
Uplift Scope [main] 28.6: zp[2]:2 [ main::i#2 main::i#1 ] 22: zp[1]:4 [ main::c#0 ] 19.25: zp[2]:5 [ main::screen#2 main::screen#1 ]
Uplift Scope []
Uplifting [main] best 826 combination zp[2]:2 [ main::i#2 main::i#1 ] reg byte a [ main::c#0 ] zp[2]:4 [ main::screen#2 main::screen#1 ]
Uplifting [main] best 826 combination zp[2]:2 [ main::i#2 main::i#1 ] reg byte a [ main::c#0 ] zp[2]:5 [ main::screen#2 main::screen#1 ]
Uplifting [] best 826 combination
Allocated (was zp[2]:5) zp[2]:4 [ main::screen#2 main::screen#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -18,13 +18,13 @@
.label DEFAULT_SCREEN = $400
// The number of bytes on the screen
// The current cursor x-position
.label conio_cursor_x = $a
.label conio_cursor_x = $14
// The current cursor y-position
.label conio_cursor_y = $b
.label conio_cursor_y = $f
// The current text cursor line start
.label conio_line_text = $c
.label conio_line_text = $12
// The current color cursor line start
.label conio_line_color = $e
.label conio_line_color = $10
.segment Code
__start: {
// __ma char conio_cursor_x = 0
@ -95,7 +95,7 @@ cputc: {
rts
}
main: {
.label signed_char_value = 2
.label signed_char_value = $17
// clrscr()
jsr clrscr
lda #-5
@ -125,12 +125,12 @@ main: {
// void gotoxy(char x, __register(X) char y)
gotoxy: {
.const x = 0
.label __5 = $14
.label __6 = $10
.label __7 = $10
.label line_offset = $10
.label __8 = $12
.label __9 = $10
.label __5 = $1a
.label __6 = $15
.label __7 = $15
.label line_offset = $15
.label __8 = $18
.label __9 = $15
// if(y>CONIO_HEIGHT)
cpx #$19+1
bcc __b2
@ -226,8 +226,8 @@ cputln: {
}
// clears the screen and moves the cursor to the upper left-hand corner of the screen.
clrscr: {
.label line_text = 3
.label line_cols = $1a
.label line_text = 4
.label line_cols = 8
lda #<COLORRAM
sta.z line_cols
lda #>COLORRAM
@ -294,9 +294,9 @@ clrscr: {
iny
jmp __b3
}
// void test_casting(__zp(3) int signed_short_value)
// void test_casting(__zp(4) int signed_short_value)
test_casting: {
.label signed_short_value = 3
.label signed_short_value = 4
// printf("%d\n", signed_short_value)
jsr printf_sint
// printf("%d\n", signed_short_value)
@ -379,10 +379,10 @@ cscroll: {
rts
}
// Print a signed integer using a specific format
// void printf_sint(void (*putc)(char), __zp(3) int value, char format_min_length, char format_justify_left, char format_sign_always, char format_zero_padding, char format_upper_case, char format_radix)
// void printf_sint(void (*putc)(char), __zp(4) int value, char format_min_length, char format_justify_left, char format_sign_always, char format_zero_padding, char format_upper_case, char format_radix)
printf_sint: {
.label putc = cputc
.label value = 3
.label value = 4
// printf_buffer.sign = 0
// Handle any sign
lda #0
@ -414,10 +414,10 @@ printf_sint: {
rts
}
/// Print a NUL-terminated string
// void printf_str(__zp($1a) void (*putc)(char), __zp(8) const char *s)
// void printf_str(__zp(8) void (*putc)(char), __zp($c) const char *s)
printf_str: {
.label s = 8
.label putc = $1a
.label s = $c
.label putc = 8
__b1:
// while(c=*s++)
ldy #0
@ -441,13 +441,13 @@ printf_str: {
}
// Copy block of memory (forwards)
// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination.
// void * memcpy(__zp($18) void *destination, __zp(5) void *source, unsigned int num)
// void * memcpy(__zp(6) void *destination, __zp(2) void *source, unsigned int num)
memcpy: {
.label src_end = $16
.label dst = $18
.label src = 5
.label source = 5
.label destination = $18
.label src_end = $a
.label dst = 6
.label src = 2
.label source = 2
.label destination = 6
// char* src_end = (char*)source+num
lda.z source
clc
@ -483,11 +483,11 @@ memcpy: {
jmp __b1
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp(5) void *str, __register(X) char c, unsigned int num)
// void * memset(__zp(2) void *str, __register(X) char c, unsigned int num)
memset: {
.label end = $18
.label dst = 5
.label str = 5
.label end = 6
.label dst = 2
.label str = 2
// char* end = (char*)str + num
lda #$28
clc
@ -523,13 +523,13 @@ memset: {
// - value : The number to be converted to RADIX
// - buffer : receives the string representing the number and zero-termination.
// - radix : The radix to convert the number to (from the enum RADIX)
// void utoa(__zp(3) unsigned int value, __zp(8) char *buffer, char radix)
// void utoa(__zp(4) unsigned int value, __zp($c) char *buffer, char radix)
utoa: {
.const max_digits = 5
.label digit_value = $1a
.label buffer = 8
.label digit = 7
.label value = 3
.label digit_value = 8
.label buffer = $c
.label digit = $e
.label value = 4
lda #<printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
sta.z buffer
lda #>printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
@ -628,12 +628,12 @@ printf_number_buffer: {
// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased.
// (For decimal the subs used are 10000, 1000, 100, 10, 1)
// returns : the value reduced by sub * digit so that it is less than sub.
// __zp(3) unsigned int utoa_append(__zp(8) char *buffer, __zp(3) unsigned int value, __zp($1a) unsigned int sub)
// __zp(4) unsigned int utoa_append(__zp($c) char *buffer, __zp(4) unsigned int value, __zp(8) unsigned int sub)
utoa_append: {
.label buffer = 8
.label value = 3
.label sub = $1a
.label return = 3
.label buffer = $c
.label value = 4
.label sub = 8
.label return = 4
ldx #0
__b1:
// while (value >= sub)

View File

@ -3422,52 +3422,52 @@ Complete equivalence classes
[ utoa_append::sub#0 ]
[ utoa_append::return#0 ]
[ printf_buffer ]
Allocated zp[1]:2 [ conio_c64_init::line#2 conio_c64_init::line#0 ]
Allocated zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ]
Allocated zp[1]:4 [ gotoxy::y#4 gotoxy::y#2 ]
Allocated zp[1]:5 [ clrscr::l#2 clrscr::l#1 ]
Allocated zp[2]:6 [ clrscr::line_text#5 clrscr::line_text#1 ]
Allocated zp[2]:8 [ clrscr::line_cols#5 clrscr::line_cols#1 ]
Allocated zp[1]:10 [ clrscr::c#2 clrscr::c#1 ]
Allocated zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ]
Allocated zp[2]:13 [ printf_str::putc#4 ]
Allocated zp[2]:15 [ printf_str::s#3 printf_str::s#4 printf_str::s#0 ]
Allocated zp[2]:17 [ memcpy::source#2 ]
Allocated zp[2]:19 [ memcpy::destination#2 ]
Allocated zp[2]:21 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ]
Allocated zp[2]:23 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ]
Allocated zp[2]:25 [ memset::str#3 ]
Allocated zp[1]:27 [ memset::c#4 ]
Allocated zp[2]:28 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[1]:30 [ utoa::digit#2 utoa::digit#1 ]
Allocated zp[2]:31 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ]
Allocated zp[1]:33 [ utoa::started#2 utoa::started#4 ]
Allocated zp[2]:34 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ]
Allocated zp[2]:36 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ]
Allocated zp[1]:38 [ utoa_append::digit#2 utoa_append::digit#1 ]
Allocated zp[1]:39 [ conio_cursor_x ]
Allocated zp[1]:40 [ conio_cursor_y ]
Allocated zp[2]:41 [ conio_line_text ]
Allocated zp[2]:43 [ conio_line_color ]
Allocated zp[1]:45 [ cputc::c#0 ]
Allocated zp[2]:46 [ test_casting::signed_short_value#0 ]
Allocated zp[2]:48 [ gotoxy::$7 ]
Allocated zp[2]:50 [ gotoxy::$8 ]
Allocated zp[2]:52 [ gotoxy::$9 ]
Allocated zp[2]:54 [ gotoxy::line_offset#0 ]
Allocated zp[2]:56 [ gotoxy::$5 ]
Allocated zp[2]:58 [ gotoxy::$6 ]
Allocated zp[1]:60 [ printf_number_buffer::buffer_sign#0 ]
Allocated zp[1]:61 [ printf_str::c#1 ]
Allocated zp[2]:62 [ memcpy::src_end#0 ]
Allocated zp[2]:64 [ memset::end#0 ]
Allocated zp[1]:66 [ utoa::$11 ]
Allocated zp[2]:67 [ utoa::buffer#3 ]
Allocated zp[1]:69 [ utoa::$10 ]
Allocated zp[2]:70 [ utoa::digit_value#0 ]
Allocated zp[2]:72 [ utoa_append::buffer#0 ]
Allocated zp[2]:74 [ utoa_append::sub#0 ]
Allocated zp[2]:76 [ utoa_append::return#0 ]
Allocated zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[2]:4 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ]
Allocated zp[2]:6 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ]
Allocated zp[2]:8 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ]
Allocated zp[1]:10 [ utoa_append::digit#2 utoa_append::digit#1 ]
Allocated zp[2]:11 [ utoa_append::sub#0 ]
Allocated zp[2]:13 [ memset::end#0 ]
Allocated zp[1]:15 [ memset::c#4 ]
Allocated zp[2]:16 [ memcpy::src_end#0 ]
Allocated zp[2]:18 [ printf_str::s#3 printf_str::s#4 printf_str::s#0 ]
Allocated zp[1]:20 [ printf_str::c#1 ]
Allocated zp[2]:21 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ]
Allocated zp[2]:23 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ]
Allocated zp[1]:25 [ utoa::digit#2 utoa::digit#1 ]
Allocated zp[1]:26 [ utoa::$10 ]
Allocated zp[2]:27 [ utoa_append::return#0 ]
Allocated zp[1]:29 [ utoa::started#2 utoa::started#4 ]
Allocated zp[2]:30 [ utoa_append::buffer#0 ]
Allocated zp[2]:32 [ utoa::digit_value#0 ]
Allocated zp[1]:34 [ conio_cursor_y ]
Allocated zp[2]:35 [ conio_line_color ]
Allocated zp[2]:37 [ conio_line_text ]
Allocated zp[1]:39 [ cputc::c#0 ]
Allocated zp[1]:40 [ conio_cursor_x ]
Allocated zp[1]:41 [ utoa::$11 ]
Allocated zp[2]:42 [ utoa::buffer#3 ]
Allocated zp[1]:44 [ printf_number_buffer::buffer_sign#0 ]
Allocated zp[2]:45 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ]
Allocated zp[1]:47 [ clrscr::c#2 clrscr::c#1 ]
Allocated zp[2]:48 [ clrscr::line_cols#5 clrscr::line_cols#1 ]
Allocated zp[2]:50 [ clrscr::line_text#5 clrscr::line_text#1 ]
Allocated zp[1]:52 [ clrscr::l#2 clrscr::l#1 ]
Allocated zp[2]:53 [ test_casting::signed_short_value#0 ]
Allocated zp[1]:55 [ main::signed_char_value#2 main::signed_char_value#1 ]
Allocated zp[2]:56 [ gotoxy::$8 ]
Allocated zp[2]:58 [ gotoxy::$9 ]
Allocated zp[2]:60 [ gotoxy::$5 ]
Allocated zp[2]:62 [ gotoxy::$6 ]
Allocated zp[2]:64 [ gotoxy::$7 ]
Allocated zp[1]:66 [ gotoxy::y#4 gotoxy::y#2 ]
Allocated zp[2]:67 [ gotoxy::line_offset#0 ]
Allocated zp[1]:69 [ conio_c64_init::line#2 conio_c64_init::line#0 ]
Allocated zp[2]:70 [ printf_str::putc#4 ]
Allocated zp[2]:72 [ memcpy::source#2 ]
Allocated zp[2]:74 [ memcpy::destination#2 ]
Allocated zp[2]:76 [ memset::str#3 ]
Allocated mem[12] [ printf_buffer ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] conio_cursor_x = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
@ -3475,16 +3475,16 @@ Statement [2] conio_cursor_y = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) a
Statement [3] conio_line_text = DEFAULT_SCREEN [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
Statement [4] conio_line_color = COLORRAM [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
Statement [16] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputc::c#0 ] ( [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputc::c#0 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputc::c#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte x
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:55 [ main::signed_char_value#2 main::signed_char_value#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:55 [ main::signed_char_value#2 main::signed_char_value#1 ]
Statement [18] conio_line_text[conio_cursor_x] = cputc::c#0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:55 [ main::signed_char_value#2 main::signed_char_value#1 ]
Statement [19] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y
Statement [21] if(conio_cursor_x!=$28) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a
Statement [30] if(main::signed_char_value#2!=0) goto main::@2 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#2 printf_buffer ] ( main:7 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#2 printf_buffer ] { } ) always clobbers reg byte a
Statement [33] test_casting::signed_short_value#0 = main::signed_char_value#1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#1 test_casting::signed_short_value#0 printf_buffer ] ( main:7 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#1 test_casting::signed_short_value#0 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } } ) always clobbers reg byte a
Statement [38] conio_cursor_x = gotoxy::x#2 [ gotoxy::y#4 ] ( gotoxy:14 [ gotoxy::y#4 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::y#4 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:4 [ gotoxy::y#4 gotoxy::y#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:66 [ gotoxy::y#4 gotoxy::y#2 ]
Statement [40] gotoxy::$7 = (unsigned int)gotoxy::y#4 [ gotoxy::$7 ] ( gotoxy:14 [ gotoxy::$7 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::$7 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a
Statement [41] gotoxy::$8 = gotoxy::$7 << 2 [ gotoxy::$7 gotoxy::$8 ] ( gotoxy:14 [ gotoxy::$7 gotoxy::$8 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::$7 gotoxy::$8 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a
Statement [42] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 [ gotoxy::$9 ] ( gotoxy:14 [ gotoxy::$9 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::$9 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a
@ -3501,10 +3501,10 @@ Statement [59] conio_cursor_y = 0 [ conio_cursor_x conio_cursor_y ] ( main:7::cl
Statement [60] conio_line_text = DEFAULT_SCREEN [ conio_cursor_x conio_cursor_y conio_line_text ] ( main:7::clrscr:28 [ printf_buffer conio_cursor_x conio_cursor_y conio_line_text ] { } ) always clobbers reg byte a
Statement [61] conio_line_color = COLORRAM [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::clrscr:28 [ printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } ) always clobbers reg byte a
Statement [65] clrscr::line_text#1 = clrscr::line_text#5 + $28 [ clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] ( main:7::clrscr:28 [ printf_buffer clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:5 [ clrscr::l#2 clrscr::l#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:52 [ clrscr::l#2 clrscr::l#1 ]
Statement [66] clrscr::line_cols#1 = clrscr::line_cols#5 + $28 [ clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] ( main:7::clrscr:28 [ printf_buffer clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] { } ) always clobbers reg byte a
Statement [68] clrscr::line_text#5[clrscr::c#2] = ' ' [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:7::clrscr:28 [ printf_buffer clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:10 [ clrscr::c#2 clrscr::c#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:47 [ clrscr::c#2 clrscr::c#1 ]
Statement [69] clrscr::line_cols#5[clrscr::c#2] = LIGHT_BLUE [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:7::clrscr:28 [ printf_buffer clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a
Statement [71] printf_sint::value#1 = test_casting::signed_short_value#0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:7::test_casting:34 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a
Statement [76] if(conio_cursor_y!=$19) goto cscroll::@return [ conio_cursor_y conio_line_text conio_line_color ] ( cputln:23::cscroll:53 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a
@ -3524,17 +3524,17 @@ Statement [111] memcpy::dst#4 = (char *)memcpy::destination#2 [ memcpy::src_end#
Statement [113] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( cputln:23::cscroll:53::memcpy:78 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53::memcpy:78 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53::memcpy:78 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53::memcpy:78 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:23::cscroll:53::memcpy:80 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53::memcpy:80 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53::memcpy:80 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53::memcpy:80 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a
Statement [115] *memcpy::dst#2 = *memcpy::src#2 [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( cputln:23::cscroll:53::memcpy:78 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53::memcpy:78 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53::memcpy:78 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53::memcpy:78 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:23::cscroll:53::memcpy:80 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53::memcpy:80 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53::memcpy:80 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53::memcpy:80 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y
Statement [119] memset::end#0 = (char *)memset::str#3 + $28 [ memset::str#3 memset::c#4 memset::end#0 ] ( cputln:23::cscroll:53::memset:82 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53::memset:82 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53::memset:82 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53::memset:82 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:23::cscroll:53::memset:84 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53::memset:84 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53::memset:84 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53::memset:84 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:27 [ memset::c#4 ]
Removing always clobbered register reg byte a as potential for zp[1]:15 [ memset::c#4 ]
Statement [120] memset::dst#4 = (char *)memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( cputln:23::cscroll:53::memset:82 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53::memset:82 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53::memset:82 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53::memset:82 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:23::cscroll:53::memset:84 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53::memset:84 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53::memset:84 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53::memset:84 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a
Statement [122] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( cputln:23::cscroll:53::memset:82 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53::memset:82 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53::memset:82 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53::memset:82 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:23::cscroll:53::memset:84 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53::memset:84 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53::memset:84 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53::memset:84 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a
Statement [124] *memset::dst#2 = memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( cputln:23::cscroll:53::memset:82 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53::memset:82 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53::memset:82 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53::memset:82 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:23::cscroll:53::memset:84 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:23::cscroll:53::memset:84 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } cputln:26::cscroll:53::memset:84 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { } main:7::test_casting:34::printf_sint:72::printf_number_buffer:97::cputc:150::cputln:26::cscroll:53::memset:84 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:27 [ memset::c#4 ]
Removing always clobbered register reg byte y as potential for zp[1]:15 [ memset::c#4 ]
Statement [130] *utoa::buffer#11 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#11 ] ( main:7::test_casting:34::printf_sint:72::utoa:95 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#11 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y
Statement [131] utoa::buffer#3 = ++ utoa::buffer#11 [ printf_buffer utoa::buffer#3 ] ( main:7::test_casting:34::printf_sint:72::utoa:95 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#3 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a
Statement [132] *utoa::buffer#3 = 0 [ printf_buffer ] ( main:7::test_casting:34::printf_sint:72::utoa:95 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y
Statement [134] utoa::$10 = utoa::digit#2 << 1 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] ( main:7::test_casting:34::printf_sint:72::utoa:95 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:30 [ utoa::digit#2 utoa::digit#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:33 [ utoa::started#2 utoa::started#4 ]
Removing always clobbered register reg byte a as potential for zp[1]:25 [ utoa::digit#2 utoa::digit#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:29 [ utoa::started#2 utoa::started#4 ]
Statement [135] utoa::digit_value#0 = RADIX_DECIMAL_VALUES[utoa::$10] [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:7::test_casting:34::printf_sint:72::utoa:95 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a
Statement [137] if(utoa::value#2>=utoa::digit_value#0) goto utoa::@5 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:7::test_casting:34::printf_sint:72::utoa:95 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a
Statement [140] utoa_append::buffer#0 = utoa::buffer#11 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:7::test_casting:34::printf_sint:72::utoa:95 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a
@ -3544,9 +3544,9 @@ Statement [144] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer uto
Statement [145] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:7::test_casting:34::printf_sint:72::utoa:95 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a
Statement sideeffect stackpullbytes(1) always clobbers reg byte a
Statement [157] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:7::test_casting:34::printf_sint:72::utoa:95::utoa_append:143 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:38 [ utoa_append::digit#2 utoa_append::digit#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:10 [ utoa_append::digit#2 utoa_append::digit#1 ]
Statement [158] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:7::test_casting:34::printf_sint:72::utoa:95::utoa_append:143 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:30 [ utoa::digit#2 utoa::digit#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:25 [ utoa::digit#2 utoa::digit#1 ]
Statement [161] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:7::test_casting:34::printf_sint:72::utoa:95::utoa_append:143 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a
Statement [1] conio_cursor_x = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
Statement [2] conio_cursor_y = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
@ -3614,69 +3614,69 @@ Statement sideeffect stackpullbytes(1) always clobbers reg byte a
Statement [157] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:7::test_casting:34::printf_sint:72::utoa:95::utoa_append:143 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a
Statement [158] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:7::test_casting:34::printf_sint:72::utoa:95::utoa_append:143 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y
Statement [161] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:7::test_casting:34::printf_sint:72::utoa:95::utoa_append:143 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a
Potential registers zp[1]:2 [ conio_c64_init::line#2 conio_c64_init::line#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ] : zp[1]:3 ,
Potential registers zp[1]:4 [ gotoxy::y#4 gotoxy::y#2 ] : zp[1]:4 , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ clrscr::l#2 clrscr::l#1 ] : zp[1]:5 , reg byte x , reg byte y ,
Potential registers zp[2]:6 [ clrscr::line_text#5 clrscr::line_text#1 ] : zp[2]:6 ,
Potential registers zp[2]:8 [ clrscr::line_cols#5 clrscr::line_cols#1 ] : zp[2]:8 ,
Potential registers zp[1]:10 [ clrscr::c#2 clrscr::c#1 ] : zp[1]:10 , reg byte x , reg byte y ,
Potential registers zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] : zp[2]:11 ,
Potential registers zp[2]:13 [ printf_str::putc#4 ] : zp[2]:13 ,
Potential registers zp[2]:15 [ printf_str::s#3 printf_str::s#4 printf_str::s#0 ] : zp[2]:15 ,
Potential registers zp[2]:17 [ memcpy::source#2 ] : zp[2]:17 ,
Potential registers zp[2]:19 [ memcpy::destination#2 ] : zp[2]:19 ,
Potential registers zp[2]:21 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] : zp[2]:21 ,
Potential registers zp[2]:23 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] : zp[2]:23 ,
Potential registers zp[2]:25 [ memset::str#3 ] : zp[2]:25 ,
Potential registers zp[1]:27 [ memset::c#4 ] : zp[1]:27 , reg byte x ,
Potential registers zp[2]:28 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:28 ,
Potential registers zp[1]:30 [ utoa::digit#2 utoa::digit#1 ] : zp[1]:30 , reg byte x ,
Potential registers zp[2]:31 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] : zp[2]:31 ,
Potential registers zp[1]:33 [ utoa::started#2 utoa::started#4 ] : zp[1]:33 , reg byte x , reg byte y ,
Potential registers zp[2]:34 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] : zp[2]:34 ,
Potential registers zp[2]:36 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] : zp[2]:36 ,
Potential registers zp[1]:38 [ utoa_append::digit#2 utoa_append::digit#1 ] : zp[1]:38 , reg byte x , reg byte y ,
Potential registers zp[1]:39 [ conio_cursor_x ] : zp[1]:39 ,
Potential registers zp[1]:40 [ conio_cursor_y ] : zp[1]:40 ,
Potential registers zp[2]:41 [ conio_line_text ] : zp[2]:41 ,
Potential registers zp[2]:43 [ conio_line_color ] : zp[2]:43 ,
Potential registers zp[1]:45 [ cputc::c#0 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:46 [ test_casting::signed_short_value#0 ] : zp[2]:46 ,
Potential registers zp[2]:48 [ gotoxy::$7 ] : zp[2]:48 ,
Potential registers zp[2]:50 [ gotoxy::$8 ] : zp[2]:50 ,
Potential registers zp[2]:52 [ gotoxy::$9 ] : zp[2]:52 ,
Potential registers zp[2]:54 [ gotoxy::line_offset#0 ] : zp[2]:54 ,
Potential registers zp[2]:56 [ gotoxy::$5 ] : zp[2]:56 ,
Potential registers zp[2]:58 [ gotoxy::$6 ] : zp[2]:58 ,
Potential registers zp[1]:60 [ printf_number_buffer::buffer_sign#0 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:61 [ printf_str::c#1 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:62 [ memcpy::src_end#0 ] : zp[2]:62 ,
Potential registers zp[2]:64 [ memset::end#0 ] : zp[2]:64 ,
Potential registers zp[1]:66 [ utoa::$11 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:67 [ utoa::buffer#3 ] : zp[2]:67 ,
Potential registers zp[1]:69 [ utoa::$10 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:70 [ utoa::digit_value#0 ] : zp[2]:70 ,
Potential registers zp[2]:72 [ utoa_append::buffer#0 ] : zp[2]:72 ,
Potential registers zp[2]:74 [ utoa_append::sub#0 ] : zp[2]:74 ,
Potential registers zp[2]:76 [ utoa_append::return#0 ] : zp[2]:76 ,
Potential registers zp[1]:69 [ conio_c64_init::line#2 conio_c64_init::line#0 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:55 [ main::signed_char_value#2 main::signed_char_value#1 ] : zp[1]:55 ,
Potential registers zp[1]:66 [ gotoxy::y#4 gotoxy::y#2 ] : zp[1]:66 , reg byte x , reg byte y ,
Potential registers zp[1]:52 [ clrscr::l#2 clrscr::l#1 ] : zp[1]:52 , reg byte x , reg byte y ,
Potential registers zp[2]:50 [ clrscr::line_text#5 clrscr::line_text#1 ] : zp[2]:50 ,
Potential registers zp[2]:48 [ clrscr::line_cols#5 clrscr::line_cols#1 ] : zp[2]:48 ,
Potential registers zp[1]:47 [ clrscr::c#2 clrscr::c#1 ] : zp[1]:47 , reg byte x , reg byte y ,
Potential registers zp[2]:45 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] : zp[2]:45 ,
Potential registers zp[2]:70 [ printf_str::putc#4 ] : zp[2]:70 ,
Potential registers zp[2]:18 [ printf_str::s#3 printf_str::s#4 printf_str::s#0 ] : zp[2]:18 ,
Potential registers zp[2]:72 [ memcpy::source#2 ] : zp[2]:72 ,
Potential registers zp[2]:74 [ memcpy::destination#2 ] : zp[2]:74 ,
Potential registers zp[2]:4 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] : zp[2]:4 ,
Potential registers zp[2]:8 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] : zp[2]:8 ,
Potential registers zp[2]:76 [ memset::str#3 ] : zp[2]:76 ,
Potential registers zp[1]:15 [ memset::c#4 ] : zp[1]:15 , reg byte x ,
Potential registers zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:2 ,
Potential registers zp[1]:25 [ utoa::digit#2 utoa::digit#1 ] : zp[1]:25 , reg byte x ,
Potential registers zp[2]:23 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] : zp[2]:23 ,
Potential registers zp[1]:29 [ utoa::started#2 utoa::started#4 ] : zp[1]:29 , reg byte x , reg byte y ,
Potential registers zp[2]:21 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] : zp[2]:21 ,
Potential registers zp[2]:6 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] : zp[2]:6 ,
Potential registers zp[1]:10 [ utoa_append::digit#2 utoa_append::digit#1 ] : zp[1]:10 , reg byte x , reg byte y ,
Potential registers zp[1]:40 [ conio_cursor_x ] : zp[1]:40 ,
Potential registers zp[1]:34 [ conio_cursor_y ] : zp[1]:34 ,
Potential registers zp[2]:37 [ conio_line_text ] : zp[2]:37 ,
Potential registers zp[2]:35 [ conio_line_color ] : zp[2]:35 ,
Potential registers zp[1]:39 [ cputc::c#0 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:53 [ test_casting::signed_short_value#0 ] : zp[2]:53 ,
Potential registers zp[2]:64 [ gotoxy::$7 ] : zp[2]:64 ,
Potential registers zp[2]:56 [ gotoxy::$8 ] : zp[2]:56 ,
Potential registers zp[2]:58 [ gotoxy::$9 ] : zp[2]:58 ,
Potential registers zp[2]:67 [ gotoxy::line_offset#0 ] : zp[2]:67 ,
Potential registers zp[2]:60 [ gotoxy::$5 ] : zp[2]:60 ,
Potential registers zp[2]:62 [ gotoxy::$6 ] : zp[2]:62 ,
Potential registers zp[1]:44 [ printf_number_buffer::buffer_sign#0 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:20 [ printf_str::c#1 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:16 [ memcpy::src_end#0 ] : zp[2]:16 ,
Potential registers zp[2]:13 [ memset::end#0 ] : zp[2]:13 ,
Potential registers zp[1]:41 [ utoa::$11 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:42 [ utoa::buffer#3 ] : zp[2]:42 ,
Potential registers zp[1]:26 [ utoa::$10 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:32 [ utoa::digit_value#0 ] : zp[2]:32 ,
Potential registers zp[2]:30 [ utoa_append::buffer#0 ] : zp[2]:30 ,
Potential registers zp[2]:11 [ utoa_append::sub#0 ] : zp[2]:11 ,
Potential registers zp[2]:27 [ utoa_append::return#0 ] : zp[2]:27 ,
Potential registers mem[12] [ printf_buffer ] : mem[12] ,
REGISTER UPLIFT SCOPES
Uplift Scope [memcpy] 301,250,000,004.25: zp[2]:21 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] 202,333,333,337.67: zp[2]:23 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] 12,625,000,000.25: zp[2]:62 [ memcpy::src_end#0 ] 0: zp[2]:17 [ memcpy::source#2 ] 0: zp[2]:19 [ memcpy::destination#2 ]
Uplift Scope [utoa_append] 250,055,000,003.5: zp[2]:36 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] 200,050,000,002.5: zp[1]:38 [ utoa_append::digit#2 utoa_append::digit#1 ] 33,335,000,000.5: zp[2]:74 [ utoa_append::sub#0 ] 20,000,002: zp[2]:76 [ utoa_append::return#0 ] 13,750,000.25: zp[2]:72 [ utoa_append::buffer#0 ]
Uplift Scope [memset] 335,666,666,672.33: zp[2]:28 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 16,833,333,333.67: zp[2]:64 [ memset::end#0 ] 14,285,714,285.86: zp[1]:27 [ memset::c#4 ] 0: zp[2]:25 [ memset::str#3 ]
Uplift Scope [printf_str] 251,500,004: zp[2]:15 [ printf_str::s#3 printf_str::s#4 printf_str::s#0 ] 100,000,001: zp[1]:61 [ printf_str::c#1 ] 0: zp[2]:13 [ printf_str::putc#4 ]
Uplift Scope [utoa] 37,871,432.5: zp[2]:34 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] 30,783,575.64: zp[2]:31 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] 22,857,145.14: zp[1]:30 [ utoa::digit#2 utoa::digit#1 ] 20,000,002: zp[1]:69 [ utoa::$10 ] 15,000,001.5: zp[1]:33 [ utoa::started#2 utoa::started#4 ] 6,000,000.6: zp[2]:70 [ utoa::digit_value#0 ] 200,002: zp[1]:66 [ utoa::$11 ] 200,002: zp[2]:67 [ utoa::buffer#3 ]
Uplift Scope [] 5,079,368.4: zp[1]:40 [ conio_cursor_y ] 3,622,954.25: zp[2]:43 [ conio_line_color ] 3,564,519.5: zp[2]:41 [ conio_line_text ] 319,153.4: zp[1]:39 [ conio_cursor_x ] 0: mem[12] [ printf_buffer ]
Uplift Scope [cputc] 1,500,001.5: zp[1]:45 [ cputc::c#0 ]
Uplift Scope [printf_number_buffer] 70,001: zp[1]:60 [ printf_number_buffer::buffer_sign#0 ]
Uplift Scope [printf_sint] 40,337.67: zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ]
Uplift Scope [clrscr] 32,503.25: zp[1]:10 [ clrscr::c#2 clrscr::c#1 ] 2,501.38: zp[2]:8 [ clrscr::line_cols#5 clrscr::line_cols#1 ] 2,382.05: zp[2]:6 [ clrscr::line_text#5 clrscr::line_text#1 ] 2,335.67: zp[1]:5 [ clrscr::l#2 clrscr::l#1 ]
Uplift Scope [gotoxy] 202: zp[2]:50 [ gotoxy::$8 ] 202: zp[2]:52 [ gotoxy::$9 ] 202: zp[2]:56 [ gotoxy::$5 ] 202: zp[2]:58 [ gotoxy::$6 ] 151.5: zp[2]:48 [ gotoxy::$7 ] 138.33: zp[1]:4 [ gotoxy::y#4 gotoxy::y#2 ] 101: zp[2]:54 [ gotoxy::line_offset#0 ]
Uplift Scope [test_casting] 1,102: zp[2]:46 [ test_casting::signed_short_value#0 ]
Uplift Scope [main] 252.5: zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ]
Uplift Scope [conio_c64_init] 33: zp[1]:2 [ conio_c64_init::line#2 conio_c64_init::line#0 ]
Uplift Scope [memcpy] 301,250,000,004.25: zp[2]:4 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] 202,333,333,337.67: zp[2]:8 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] 12,625,000,000.25: zp[2]:16 [ memcpy::src_end#0 ] 0: zp[2]:72 [ memcpy::source#2 ] 0: zp[2]:74 [ memcpy::destination#2 ]
Uplift Scope [utoa_append] 250,055,000,003.5: zp[2]:6 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] 200,050,000,002.5: zp[1]:10 [ utoa_append::digit#2 utoa_append::digit#1 ] 33,335,000,000.5: zp[2]:11 [ utoa_append::sub#0 ] 20,000,002: zp[2]:27 [ utoa_append::return#0 ] 13,750,000.25: zp[2]:30 [ utoa_append::buffer#0 ]
Uplift Scope [memset] 335,666,666,672.33: zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 16,833,333,333.67: zp[2]:13 [ memset::end#0 ] 14,285,714,285.86: zp[1]:15 [ memset::c#4 ] 0: zp[2]:76 [ memset::str#3 ]
Uplift Scope [printf_str] 251,500,004: zp[2]:18 [ printf_str::s#3 printf_str::s#4 printf_str::s#0 ] 100,000,001: zp[1]:20 [ printf_str::c#1 ] 0: zp[2]:70 [ printf_str::putc#4 ]
Uplift Scope [utoa] 37,871,432.5: zp[2]:21 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] 30,783,575.64: zp[2]:23 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] 22,857,145.14: zp[1]:25 [ utoa::digit#2 utoa::digit#1 ] 20,000,002: zp[1]:26 [ utoa::$10 ] 15,000,001.5: zp[1]:29 [ utoa::started#2 utoa::started#4 ] 6,000,000.6: zp[2]:32 [ utoa::digit_value#0 ] 200,002: zp[1]:41 [ utoa::$11 ] 200,002: zp[2]:42 [ utoa::buffer#3 ]
Uplift Scope [] 5,079,368.4: zp[1]:34 [ conio_cursor_y ] 3,622,954.25: zp[2]:35 [ conio_line_color ] 3,564,519.5: zp[2]:37 [ conio_line_text ] 319,153.4: zp[1]:40 [ conio_cursor_x ] 0: mem[12] [ printf_buffer ]
Uplift Scope [cputc] 1,500,001.5: zp[1]:39 [ cputc::c#0 ]
Uplift Scope [printf_number_buffer] 70,001: zp[1]:44 [ printf_number_buffer::buffer_sign#0 ]
Uplift Scope [printf_sint] 40,337.67: zp[2]:45 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ]
Uplift Scope [clrscr] 32,503.25: zp[1]:47 [ clrscr::c#2 clrscr::c#1 ] 2,501.38: zp[2]:48 [ clrscr::line_cols#5 clrscr::line_cols#1 ] 2,382.05: zp[2]:50 [ clrscr::line_text#5 clrscr::line_text#1 ] 2,335.67: zp[1]:52 [ clrscr::l#2 clrscr::l#1 ]
Uplift Scope [gotoxy] 202: zp[2]:56 [ gotoxy::$8 ] 202: zp[2]:58 [ gotoxy::$9 ] 202: zp[2]:60 [ gotoxy::$5 ] 202: zp[2]:62 [ gotoxy::$6 ] 151.5: zp[2]:64 [ gotoxy::$7 ] 138.33: zp[1]:66 [ gotoxy::y#4 gotoxy::y#2 ] 101: zp[2]:67 [ gotoxy::line_offset#0 ]
Uplift Scope [test_casting] 1,102: zp[2]:53 [ test_casting::signed_short_value#0 ]
Uplift Scope [main] 252.5: zp[1]:55 [ main::signed_char_value#2 main::signed_char_value#1 ]
Uplift Scope [conio_c64_init] 33: zp[1]:69 [ conio_c64_init::line#2 conio_c64_init::line#0 ]
Uplift Scope [cputln]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
@ -3688,19 +3688,19 @@ Uplift Scope [printf_buffer_number]
Uplift Scope [printf_format_string]
Uplift Scope [__start]
Uplifting [memcpy] best 101002 combination zp[2]:21 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] zp[2]:23 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] zp[2]:62 [ memcpy::src_end#0 ] zp[2]:17 [ memcpy::source#2 ] zp[2]:19 [ memcpy::destination#2 ]
Uplifting [utoa_append] best 94999 combination zp[2]:36 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp[2]:74 [ utoa_append::sub#0 ] zp[2]:76 [ utoa_append::return#0 ] zp[2]:72 [ utoa_append::buffer#0 ]
Uplifting [memset] best 94893 combination zp[2]:28 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:64 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:25 [ memset::str#3 ]
Uplifting [printf_str] best 94193 combination zp[2]:15 [ printf_str::s#3 printf_str::s#4 printf_str::s#0 ] reg byte a [ printf_str::c#1 ] zp[2]:13 [ printf_str::putc#4 ]
Uplifting [utoa] best 93087 combination zp[2]:34 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] zp[2]:31 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] zp[1]:30 [ utoa::digit#2 utoa::digit#1 ] reg byte a [ utoa::$10 ] reg byte x [ utoa::started#2 utoa::started#4 ] zp[2]:70 [ utoa::digit_value#0 ] reg byte x [ utoa::$11 ] zp[2]:67 [ utoa::buffer#3 ]
Uplifting [] best 93087 combination zp[1]:40 [ conio_cursor_y ] zp[2]:43 [ conio_line_color ] zp[2]:41 [ conio_line_text ] zp[1]:39 [ conio_cursor_x ] mem[12] [ printf_buffer ]
Uplifting [memcpy] best 101002 combination zp[2]:4 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] zp[2]:8 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] zp[2]:16 [ memcpy::src_end#0 ] zp[2]:72 [ memcpy::source#2 ] zp[2]:74 [ memcpy::destination#2 ]
Uplifting [utoa_append] best 94999 combination zp[2]:6 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp[2]:11 [ utoa_append::sub#0 ] zp[2]:27 [ utoa_append::return#0 ] zp[2]:30 [ utoa_append::buffer#0 ]
Uplifting [memset] best 94893 combination zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:13 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:76 [ memset::str#3 ]
Uplifting [printf_str] best 94193 combination zp[2]:18 [ printf_str::s#3 printf_str::s#4 printf_str::s#0 ] reg byte a [ printf_str::c#1 ] zp[2]:70 [ printf_str::putc#4 ]
Uplifting [utoa] best 93087 combination zp[2]:21 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] zp[2]:23 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] zp[1]:25 [ utoa::digit#2 utoa::digit#1 ] reg byte a [ utoa::$10 ] reg byte x [ utoa::started#2 utoa::started#4 ] zp[2]:32 [ utoa::digit_value#0 ] reg byte x [ utoa::$11 ] zp[2]:42 [ utoa::buffer#3 ]
Uplifting [] best 93087 combination zp[1]:34 [ conio_cursor_y ] zp[2]:35 [ conio_line_color ] zp[2]:37 [ conio_line_text ] zp[1]:40 [ conio_cursor_x ] mem[12] [ printf_buffer ]
Uplifting [cputc] best 93078 combination reg byte a [ cputc::c#0 ]
Uplifting [printf_number_buffer] best 93071 combination reg byte a [ printf_number_buffer::buffer_sign#0 ]
Uplifting [printf_sint] best 93071 combination zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ]
Uplifting [clrscr] best 91481 combination reg byte y [ clrscr::c#2 clrscr::c#1 ] zp[2]:8 [ clrscr::line_cols#5 clrscr::line_cols#1 ] zp[2]:6 [ clrscr::line_text#5 clrscr::line_text#1 ] reg byte x [ clrscr::l#2 clrscr::l#1 ]
Uplifting [gotoxy] best 91468 combination zp[2]:50 [ gotoxy::$8 ] zp[2]:52 [ gotoxy::$9 ] zp[2]:56 [ gotoxy::$5 ] zp[2]:58 [ gotoxy::$6 ] zp[2]:48 [ gotoxy::$7 ] reg byte x [ gotoxy::y#4 gotoxy::y#2 ] zp[2]:54 [ gotoxy::line_offset#0 ]
Uplifting [test_casting] best 91468 combination zp[2]:46 [ test_casting::signed_short_value#0 ]
Uplifting [main] best 91468 combination zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ]
Uplifting [printf_sint] best 93071 combination zp[2]:45 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ]
Uplifting [clrscr] best 91481 combination reg byte y [ clrscr::c#2 clrscr::c#1 ] zp[2]:48 [ clrscr::line_cols#5 clrscr::line_cols#1 ] zp[2]:50 [ clrscr::line_text#5 clrscr::line_text#1 ] reg byte x [ clrscr::l#2 clrscr::l#1 ]
Uplifting [gotoxy] best 91468 combination zp[2]:56 [ gotoxy::$8 ] zp[2]:58 [ gotoxy::$9 ] zp[2]:60 [ gotoxy::$5 ] zp[2]:62 [ gotoxy::$6 ] zp[2]:64 [ gotoxy::$7 ] reg byte x [ gotoxy::y#4 gotoxy::y#2 ] zp[2]:67 [ gotoxy::line_offset#0 ]
Uplifting [test_casting] best 91468 combination zp[2]:53 [ test_casting::signed_short_value#0 ]
Uplifting [main] best 91468 combination zp[1]:55 [ main::signed_char_value#2 main::signed_char_value#1 ]
Uplifting [conio_c64_init] best 91456 combination reg byte x [ conio_c64_init::line#2 conio_c64_init::line#0 ]
Uplifting [cputln] best 91456 combination
Uplifting [MOS6526_CIA] best 91456 combination
@ -3712,48 +3712,48 @@ Uplifting [printf_format_number] best 91456 combination
Uplifting [printf_buffer_number] best 91456 combination
Uplifting [printf_format_string] best 91456 combination
Uplifting [__start] best 91456 combination
Attempting to uplift remaining variables inzp[1]:30 [ utoa::digit#2 utoa::digit#1 ]
Uplifting [utoa] best 91456 combination zp[1]:30 [ utoa::digit#2 utoa::digit#1 ]
Attempting to uplift remaining variables inzp[1]:40 [ conio_cursor_y ]
Uplifting [] best 91456 combination zp[1]:40 [ conio_cursor_y ]
Attempting to uplift remaining variables inzp[1]:39 [ conio_cursor_x ]
Uplifting [] best 91456 combination zp[1]:39 [ conio_cursor_x ]
Attempting to uplift remaining variables inzp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ]
Uplifting [main] best 91456 combination zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ]
Coalescing zero page register [ zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] ] with [ zp[2]:31 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] ] with [ zp[2]:46 [ test_casting::signed_short_value#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:17 [ memcpy::source#2 ] ] with [ zp[2]:21 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:19 [ memcpy::destination#2 ] ] with [ zp[2]:23 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:25 [ memset::str#3 ] ] with [ zp[2]:28 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:34 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] ] with [ zp[2]:67 [ utoa::buffer#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:34 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 ] ] with [ zp[2]:72 [ utoa_append::buffer#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:36 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] with [ zp[2]:76 [ utoa_append::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:48 [ gotoxy::$7 ] ] with [ zp[2]:52 [ gotoxy::$9 ] ] - score: 1
Coalescing zero page register [ zp[2]:54 [ gotoxy::line_offset#0 ] ] with [ zp[2]:58 [ gotoxy::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:70 [ utoa::digit_value#0 ] ] with [ zp[2]:74 [ utoa_append::sub#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 ] ] with [ zp[2]:36 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] - score: 2
Coalescing zero page register [ zp[2]:48 [ gotoxy::$7 gotoxy::$9 ] ] with [ zp[2]:54 [ gotoxy::line_offset#0 gotoxy::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] with [ zp[2]:6 [ clrscr::line_text#5 clrscr::line_text#1 ] ]
Coalescing zero page register [ zp[2]:13 [ printf_str::putc#4 ] ] with [ zp[2]:8 [ clrscr::line_cols#5 clrscr::line_cols#1 ] ]
Coalescing zero page register [ zp[2]:25 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:17 [ memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ]
Coalescing zero page register [ zp[2]:34 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ] with [ zp[2]:15 [ printf_str::s#3 printf_str::s#4 printf_str::s#0 ] ]
Coalescing zero page register [ zp[2]:64 [ memset::end#0 ] ] with [ zp[2]:19 [ memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] ]
Coalescing zero page register [ zp[2]:70 [ utoa::digit_value#0 utoa_append::sub#0 ] ] with [ zp[2]:13 [ printf_str::putc#4 clrscr::line_cols#5 clrscr::line_cols#1 ] ]
Allocated (was zp[1]:3) zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ]
Allocated (was zp[2]:11) zp[2]:3 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 clrscr::line_text#5 clrscr::line_text#1 ]
Allocated (was zp[2]:25) zp[2]:5 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ]
Allocated (was zp[1]:30) zp[1]:7 [ utoa::digit#2 utoa::digit#1 ]
Allocated (was zp[2]:34) zp[2]:8 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 printf_str::s#3 printf_str::s#4 printf_str::s#0 ]
Allocated (was zp[1]:39) zp[1]:10 [ conio_cursor_x ]
Allocated (was zp[1]:40) zp[1]:11 [ conio_cursor_y ]
Allocated (was zp[2]:41) zp[2]:12 [ conio_line_text ]
Allocated (was zp[2]:43) zp[2]:14 [ conio_line_color ]
Allocated (was zp[2]:48) zp[2]:16 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ]
Allocated (was zp[2]:50) zp[2]:18 [ gotoxy::$8 ]
Allocated (was zp[2]:56) zp[2]:20 [ gotoxy::$5 ]
Allocated (was zp[2]:62) zp[2]:22 [ memcpy::src_end#0 ]
Allocated (was zp[2]:64) zp[2]:24 [ memset::end#0 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ]
Allocated (was zp[2]:70) zp[2]:26 [ utoa::digit_value#0 utoa_append::sub#0 printf_str::putc#4 clrscr::line_cols#5 clrscr::line_cols#1 ]
Attempting to uplift remaining variables inzp[1]:25 [ utoa::digit#2 utoa::digit#1 ]
Uplifting [utoa] best 91456 combination zp[1]:25 [ utoa::digit#2 utoa::digit#1 ]
Attempting to uplift remaining variables inzp[1]:34 [ conio_cursor_y ]
Uplifting [] best 91456 combination zp[1]:34 [ conio_cursor_y ]
Attempting to uplift remaining variables inzp[1]:40 [ conio_cursor_x ]
Uplifting [] best 91456 combination zp[1]:40 [ conio_cursor_x ]
Attempting to uplift remaining variables inzp[1]:55 [ main::signed_char_value#2 main::signed_char_value#1 ]
Uplifting [main] best 91456 combination zp[1]:55 [ main::signed_char_value#2 main::signed_char_value#1 ]
Coalescing zero page register [ zp[2]:45 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] ] with [ zp[2]:23 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:45 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] ] with [ zp[2]:53 [ test_casting::signed_short_value#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:72 [ memcpy::source#2 ] ] with [ zp[2]:4 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:74 [ memcpy::destination#2 ] ] with [ zp[2]:8 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:76 [ memset::str#3 ] ] with [ zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:21 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] ] with [ zp[2]:42 [ utoa::buffer#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:21 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 ] ] with [ zp[2]:30 [ utoa_append::buffer#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:6 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] with [ zp[2]:27 [ utoa_append::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:64 [ gotoxy::$7 ] ] with [ zp[2]:58 [ gotoxy::$9 ] ] - score: 1
Coalescing zero page register [ zp[2]:67 [ gotoxy::line_offset#0 ] ] with [ zp[2]:62 [ gotoxy::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:32 [ utoa::digit_value#0 ] ] with [ zp[2]:11 [ utoa_append::sub#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:45 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 ] ] with [ zp[2]:6 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] - score: 2
Coalescing zero page register [ zp[2]:64 [ gotoxy::$7 gotoxy::$9 ] ] with [ zp[2]:67 [ gotoxy::line_offset#0 gotoxy::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:45 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] with [ zp[2]:50 [ clrscr::line_text#5 clrscr::line_text#1 ] ]
Coalescing zero page register [ zp[2]:70 [ printf_str::putc#4 ] ] with [ zp[2]:48 [ clrscr::line_cols#5 clrscr::line_cols#1 ] ]
Coalescing zero page register [ zp[2]:76 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:72 [ memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ]
Coalescing zero page register [ zp[2]:21 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ] with [ zp[2]:18 [ printf_str::s#3 printf_str::s#4 printf_str::s#0 ] ]
Coalescing zero page register [ zp[2]:13 [ memset::end#0 ] ] with [ zp[2]:74 [ memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] ]
Coalescing zero page register [ zp[2]:32 [ utoa::digit_value#0 utoa_append::sub#0 ] ] with [ zp[2]:70 [ printf_str::putc#4 clrscr::line_cols#5 clrscr::line_cols#1 ] ]
Allocated (was zp[2]:76) zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ]
Allocated (was zp[2]:45) zp[2]:4 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 clrscr::line_text#5 clrscr::line_text#1 ]
Allocated (was zp[2]:13) zp[2]:6 [ memset::end#0 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ]
Allocated (was zp[2]:32) zp[2]:8 [ utoa::digit_value#0 utoa_append::sub#0 printf_str::putc#4 clrscr::line_cols#5 clrscr::line_cols#1 ]
Allocated (was zp[2]:16) zp[2]:10 [ memcpy::src_end#0 ]
Allocated (was zp[2]:21) zp[2]:12 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 printf_str::s#3 printf_str::s#4 printf_str::s#0 ]
Allocated (was zp[1]:25) zp[1]:14 [ utoa::digit#2 utoa::digit#1 ]
Allocated (was zp[1]:34) zp[1]:15 [ conio_cursor_y ]
Allocated (was zp[2]:35) zp[2]:16 [ conio_line_color ]
Allocated (was zp[2]:37) zp[2]:18 [ conio_line_text ]
Allocated (was zp[1]:40) zp[1]:20 [ conio_cursor_x ]
Allocated (was zp[2]:64) zp[2]:21 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ]
Allocated (was zp[1]:55) zp[1]:23 [ main::signed_char_value#2 main::signed_char_value#1 ]
Allocated (was zp[2]:56) zp[2]:24 [ gotoxy::$8 ]
Allocated (was zp[2]:60) zp[2]:26 [ gotoxy::$5 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -3779,13 +3779,13 @@ ASSEMBLER BEFORE OPTIMIZATION
.label DEFAULT_SCREEN = $400
// The number of bytes on the screen
// The current cursor x-position
.label conio_cursor_x = $a
.label conio_cursor_x = $14
// The current cursor y-position
.label conio_cursor_y = $b
.label conio_cursor_y = $f
// The current text cursor line start
.label conio_line_text = $c
.label conio_line_text = $12
// The current color cursor line start
.label conio_line_color = $e
.label conio_line_color = $10
.segment Code
// __start
__start: {
@ -3911,7 +3911,7 @@ cputc: {
}
// main
main: {
.label signed_char_value = 2
.label signed_char_value = $17
// [28] call clrscr
// [55] phi from main to clrscr [phi:main->clrscr]
clrscr_from_main:
@ -3957,12 +3957,12 @@ main: {
// void gotoxy(char x, __register(X) char y)
gotoxy: {
.const x = 0
.label __5 = $14
.label __6 = $10
.label __7 = $10
.label line_offset = $10
.label __8 = $12
.label __9 = $10
.label __5 = $1a
.label __6 = $15
.label __7 = $15
.label line_offset = $15
.label __8 = $18
.label __9 = $15
// [35] if(gotoxy::y#2<$19+1) goto gotoxy::@3 -- vbuxx_lt_vbuc1_then_la1
cpx #$19+1
bcc __b3_from_gotoxy
@ -4086,8 +4086,8 @@ cputln: {
// clrscr
// clears the screen and moves the cursor to the upper left-hand corner of the screen.
clrscr: {
.label line_text = 3
.label line_cols = $1a
.label line_text = 4
.label line_cols = 8
// [56] phi from clrscr to clrscr::@1 [phi:clrscr->clrscr::@1]
__b1_from_clrscr:
// [56] phi clrscr::line_cols#5 = COLORRAM [phi:clrscr->clrscr::@1#0] -- pbuz1=pbuc1
@ -4185,9 +4185,9 @@ clrscr: {
jmp __b3
}
// test_casting
// void test_casting(__zp(3) int signed_short_value)
// void test_casting(__zp(4) int signed_short_value)
test_casting: {
.label signed_short_value = 3
.label signed_short_value = 4
// [71] printf_sint::value#1 = test_casting::signed_short_value#0
// [72] call printf_sint
jsr printf_sint
@ -4326,10 +4326,10 @@ cscroll: {
}
// printf_sint
// Print a signed integer using a specific format
// void printf_sint(void (*putc)(char), __zp(3) int value, char format_min_length, char format_justify_left, char format_sign_always, char format_zero_padding, char format_upper_case, char format_radix)
// void printf_sint(void (*putc)(char), __zp(4) int value, char format_min_length, char format_justify_left, char format_sign_always, char format_zero_padding, char format_upper_case, char format_radix)
printf_sint: {
.label putc = cputc
.label value = 3
.label value = 4
// [89] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2
// Handle any sign
lda #0
@ -4381,10 +4381,10 @@ printf_sint: {
}
// printf_str
/// Print a NUL-terminated string
// void printf_str(__zp($1a) void (*putc)(char), __zp(8) const char *s)
// void printf_str(__zp(8) void (*putc)(char), __zp($c) const char *s)
printf_str: {
.label s = 8
.label putc = $1a
.label s = $c
.label putc = 8
// [100] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1]
__b1_from_printf_str:
__b1_from___b2:
@ -4424,13 +4424,13 @@ printf_str: {
// memcpy
// Copy block of memory (forwards)
// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination.
// void * memcpy(__zp($18) void *destination, __zp(5) void *source, unsigned int num)
// void * memcpy(__zp(6) void *destination, __zp(2) void *source, unsigned int num)
memcpy: {
.label src_end = $16
.label dst = $18
.label src = 5
.label source = 5
.label destination = $18
.label src_end = $a
.label dst = 6
.label src = 2
.label source = 2
.label destination = 6
// [109] memcpy::src_end#0 = (char *)memcpy::source#2 + (unsigned int)$19*$28-$28 -- pbuz1=pbuz2_plus_vwuc1
lda.z source
clc
@ -4482,11 +4482,11 @@ memcpy: {
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp(5) void *str, __register(X) char c, unsigned int num)
// void * memset(__zp(2) void *str, __register(X) char c, unsigned int num)
memset: {
.label end = $18
.label dst = 5
.label str = 5
.label end = 6
.label dst = 2
.label str = 2
jmp __b1
// memset::@1
__b1:
@ -4537,13 +4537,13 @@ memset: {
// - value : The number to be converted to RADIX
// - buffer : receives the string representing the number and zero-termination.
// - radix : The radix to convert the number to (from the enum RADIX)
// void utoa(__zp(3) unsigned int value, __zp(8) char *buffer, char radix)
// void utoa(__zp(4) unsigned int value, __zp($c) char *buffer, char radix)
utoa: {
.const max_digits = 5
.label digit_value = $1a
.label buffer = 8
.label digit = 7
.label value = 3
.label digit_value = 8
.label buffer = $c
.label digit = $e
.label value = 4
// [127] phi from utoa to utoa::@1 [phi:utoa->utoa::@1]
__b1_from_utoa:
// [127] phi utoa::buffer#11 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1
@ -4713,12 +4713,12 @@ printf_number_buffer: {
// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased.
// (For decimal the subs used are 10000, 1000, 100, 10, 1)
// returns : the value reduced by sub * digit so that it is less than sub.
// __zp(3) unsigned int utoa_append(__zp(8) char *buffer, __zp(3) unsigned int value, __zp($1a) unsigned int sub)
// __zp(4) unsigned int utoa_append(__zp($c) char *buffer, __zp(4) unsigned int value, __zp(8) unsigned int sub)
utoa_append: {
.label buffer = 8
.label value = 3
.label sub = $1a
.label return = 3
.label buffer = $c
.label value = 4
.label sub = 8
.label return = 4
// [156] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1]
__b1_from_utoa_append:
// [156] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1
@ -4965,20 +4965,20 @@ char clrscr::l
char clrscr::l#1 // reg byte x 2002.0
char clrscr::l#2 // reg byte x 333.6666666666667
char *clrscr::line_cols
char *clrscr::line_cols#1 // line_cols zp[2]:26 1001.0
char *clrscr::line_cols#5 // line_cols zp[2]:26 1500.375
char *clrscr::line_cols#1 // line_cols zp[2]:8 1001.0
char *clrscr::line_cols#5 // line_cols zp[2]:8 1500.375
char *clrscr::line_text
char *clrscr::line_text#1 // line_text zp[2]:3 667.3333333333334
char *clrscr::line_text#5 // line_text zp[2]:3 1714.7142857142858
char *clrscr::line_text#1 // line_text zp[2]:4 667.3333333333334
char *clrscr::line_text#5 // line_text zp[2]:4 1714.7142857142858
void conio_c64_init()
__constant char * const conio_c64_init::BASIC_CURSOR_LINE = (char *) 214
char conio_c64_init::line
char conio_c64_init::line#0 // reg byte x 11.0
char conio_c64_init::line#2 // reg byte x 22.0
__loadstore char conio_cursor_x // zp[1]:10 319153.40425531915
__loadstore char conio_cursor_y // zp[1]:11 5079368.396825396
__loadstore char *conio_line_color // zp[2]:14 3622954.2459016396
__loadstore char *conio_line_text // zp[2]:12 3564519.5
__loadstore char conio_cursor_x // zp[1]:20 319153.40425531915
__loadstore char conio_cursor_y // zp[1]:15 5079368.396825396
__loadstore char *conio_line_color // zp[2]:16 3622954.2459016396
__loadstore char *conio_line_text // zp[2]:18 3564519.5
__stackcall void cputc(char c)
__constant char cputc::OFFSET_STACK_C = 0
char cputc::c
@ -4986,13 +4986,13 @@ char cputc::c#0 // reg byte a 1500001.5
void cputln()
void cscroll()
void gotoxy(char x , char y)
char *gotoxy::$5 // zp[2]:20 202.0
char *gotoxy::$6 // zp[2]:16 202.0
unsigned int gotoxy::$7 // zp[2]:16 151.5
unsigned int gotoxy::$8 // zp[2]:18 202.0
unsigned int gotoxy::$9 // zp[2]:16 202.0
char *gotoxy::$5 // zp[2]:26 202.0
char *gotoxy::$6 // zp[2]:21 202.0
unsigned int gotoxy::$7 // zp[2]:21 151.5
unsigned int gotoxy::$8 // zp[2]:24 202.0
unsigned int gotoxy::$9 // zp[2]:21 202.0
unsigned int gotoxy::line_offset
unsigned int gotoxy::line_offset#0 // line_offset zp[2]:16 101.0
unsigned int gotoxy::line_offset#0 // line_offset zp[2]:21 101.0
char gotoxy::x
__constant char gotoxy::x#2 = 0 // x
char gotoxy::y
@ -5000,38 +5000,38 @@ char gotoxy::y#2 // reg byte x 71.0
char gotoxy::y#4 // reg byte x 67.33333333333333
void main()
signed char main::signed_char_value
signed char main::signed_char_value#1 // signed_char_value zp[1]:2 101.0
signed char main::signed_char_value#2 // signed_char_value zp[1]:2 151.5
signed char main::signed_char_value#1 // signed_char_value zp[1]:23 101.0
signed char main::signed_char_value#2 // signed_char_value zp[1]:23 151.5
void * memcpy(void *destination , void *source , unsigned int num)
void *memcpy::destination
void *memcpy::destination#2 // destination zp[2]:24
void *memcpy::destination#2 // destination zp[2]:6
char *memcpy::dst
char *memcpy::dst#1 // dst zp[2]:24 1.00000000001E11
char *memcpy::dst#2 // dst zp[2]:24 1.0033333333466667E11
char *memcpy::dst#4 // dst zp[2]:24 2.000000002E9
char *memcpy::dst#1 // dst zp[2]:6 1.00000000001E11
char *memcpy::dst#2 // dst zp[2]:6 1.0033333333466667E11
char *memcpy::dst#4 // dst zp[2]:6 2.000000002E9
unsigned int memcpy::num
void *memcpy::return
void *memcpy::source
void *memcpy::source#2 // source zp[2]:5
void *memcpy::source#2 // source zp[2]:2
char *memcpy::src
char *memcpy::src#1 // src zp[2]:5 2.00000000002E11
char *memcpy::src#2 // src zp[2]:5 1.0025000000125E11
char *memcpy::src#4 // src zp[2]:5 1.000000001E9
char *memcpy::src#1 // src zp[2]:2 2.00000000002E11
char *memcpy::src#2 // src zp[2]:2 1.0025000000125E11
char *memcpy::src#4 // src zp[2]:2 1.000000001E9
char *memcpy::src_end
char *memcpy::src_end#0 // src_end zp[2]:22 1.262500000025E10
char *memcpy::src_end#0 // src_end zp[2]:10 1.262500000025E10
void * memset(void *str , char c , unsigned int num)
char memset::c
char memset::c#4 // reg byte x 1.4285714285857143E10
char *memset::dst
char *memset::dst#1 // dst zp[2]:5 2.00000000002E11
char *memset::dst#2 // dst zp[2]:5 1.3366666666833334E11
char *memset::dst#4 // dst zp[2]:5 2.000000002E9
char *memset::dst#1 // dst zp[2]:2 2.00000000002E11
char *memset::dst#2 // dst zp[2]:2 1.3366666666833334E11
char *memset::dst#4 // dst zp[2]:2 2.000000002E9
char *memset::end
char *memset::end#0 // end zp[2]:24 1.6833333333666668E10
char *memset::end#0 // end zp[2]:6 1.6833333333666668E10
unsigned int memset::num
void *memset::return
void *memset::str
void *memset::str#3 // str zp[2]:5
void *memset::str#3 // str zp[2]:2
__loadstore struct printf_buffer_number printf_buffer = {} // mem[12]
void printf_number_buffer(void (*putc)(char) , char buffer_sign , char *buffer_digits , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix)
struct printf_buffer_number printf_number_buffer::buffer
@ -5061,36 +5061,36 @@ void (*printf_sint::putc)(char)
__constant void (*printf_sint::putc#0)(char) = &cputc // putc
unsigned int printf_sint::uvalue
int printf_sint::value
int printf_sint::value#0 // value zp[2]:3 10001.0
int printf_sint::value#1 // value zp[2]:3 10334.666666666666
int printf_sint::value#4 // value zp[2]:3 20002.0
int printf_sint::value#0 // value zp[2]:4 10001.0
int printf_sint::value#1 // value zp[2]:4 10334.666666666666
int printf_sint::value#4 // value zp[2]:4 20002.0
void printf_str(void (*putc)(char) , const char *s)
char printf_str::c
char printf_str::c#1 // reg byte a 1.00000001E8
void (*printf_str::putc)(char)
void (*printf_str::putc#4)(char) // putc zp[2]:26
void (*printf_str::putc#4)(char) // putc zp[2]:8
const char *printf_str::s
const char *printf_str::s#0 // s zp[2]:8 1.00000001E8
const char *printf_str::s#3 // s zp[2]:8 1.50500002E8
const char *printf_str::s#4 // s zp[2]:8 1000001.0
const char *printf_str::s#0 // s zp[2]:12 1.00000001E8
const char *printf_str::s#3 // s zp[2]:12 1.50500002E8
const char *printf_str::s#4 // s zp[2]:12 1000001.0
void test_casting(int signed_short_value)
__constant char test_casting::s[2] = "
"
int test_casting::signed_short_value
int test_casting::signed_short_value#0 // signed_short_value zp[2]:3 1102.0
int test_casting::signed_short_value#0 // signed_short_value zp[2]:4 1102.0
void utoa(unsigned int value , char *buffer , char radix)
char utoa::$10 // reg byte a 2.0000002E7
char utoa::$11 // reg byte x 200002.0
char *utoa::buffer
char *utoa::buffer#11 // buffer zp[2]:8 2871429.0
char *utoa::buffer#14 // buffer zp[2]:8 1.50000015E7
char *utoa::buffer#3 // buffer zp[2]:8 200002.0
char *utoa::buffer#4 // buffer zp[2]:8 2.0000002E7
char *utoa::buffer#11 // buffer zp[2]:12 2871429.0
char *utoa::buffer#14 // buffer zp[2]:12 1.50000015E7
char *utoa::buffer#3 // buffer zp[2]:12 200002.0
char *utoa::buffer#4 // buffer zp[2]:12 2.0000002E7
char utoa::digit
char utoa::digit#1 // digit zp[1]:7 2.0000002E7
char utoa::digit#2 // digit zp[1]:7 2857143.1428571427
char utoa::digit#1 // digit zp[1]:14 2.0000002E7
char utoa::digit#2 // digit zp[1]:14 2857143.1428571427
unsigned int utoa::digit_value
unsigned int utoa::digit_value#0 // digit_value zp[2]:26 6000000.6
unsigned int utoa::digit_value#0 // digit_value zp[2]:8 6000000.6
unsigned int *utoa::digit_values
char utoa::max_digits
__constant char utoa::max_digits#1 = 5 // max_digits
@ -5099,52 +5099,52 @@ char utoa::started
char utoa::started#2 // reg byte x 5000000.5
char utoa::started#4 // reg byte x 1.0000001E7
unsigned int utoa::value
unsigned int utoa::value#0 // value zp[2]:3 1.0000001E7
unsigned int utoa::value#1 // value zp[2]:3 55001.0
unsigned int utoa::value#2 // value zp[2]:3 5728572.142857142
unsigned int utoa::value#6 // value zp[2]:3 1.50000015E7
unsigned int utoa::value#0 // value zp[2]:4 1.0000001E7
unsigned int utoa::value#1 // value zp[2]:4 55001.0
unsigned int utoa::value#2 // value zp[2]:4 5728572.142857142
unsigned int utoa::value#6 // value zp[2]:4 1.50000015E7
unsigned int utoa_append(char *buffer , unsigned int value , unsigned int sub)
char *utoa_append::buffer
char *utoa_append::buffer#0 // buffer zp[2]:8 1.375000025E7
char *utoa_append::buffer#0 // buffer zp[2]:12 1.375000025E7
char utoa_append::digit
char utoa_append::digit#1 // reg byte x 1.00000000001E11
char utoa_append::digit#2 // reg byte x 1.000500000015E11
unsigned int utoa_append::return
unsigned int utoa_append::return#0 // return zp[2]:3 2.0000002E7
unsigned int utoa_append::return#0 // return zp[2]:4 2.0000002E7
unsigned int utoa_append::sub
unsigned int utoa_append::sub#0 // sub zp[2]:26 3.33350000005E10
unsigned int utoa_append::sub#0 // sub zp[2]:8 3.33350000005E10
unsigned int utoa_append::value
unsigned int utoa_append::value#0 // value zp[2]:3 3.6666667333333336E7
unsigned int utoa_append::value#1 // value zp[2]:3 2.00000000002E11
unsigned int utoa_append::value#2 // value zp[2]:3 5.001833333416667E10
unsigned int utoa_append::value#0 // value zp[2]:4 3.6666667333333336E7
unsigned int utoa_append::value#1 // value zp[2]:4 2.00000000002E11
unsigned int utoa_append::value#2 // value zp[2]:4 5.001833333416667E10
reg byte x [ conio_c64_init::line#2 conio_c64_init::line#0 ]
zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ]
zp[1]:23 [ main::signed_char_value#2 main::signed_char_value#1 ]
reg byte x [ gotoxy::y#4 gotoxy::y#2 ]
reg byte x [ clrscr::l#2 clrscr::l#1 ]
reg byte y [ clrscr::c#2 clrscr::c#1 ]
zp[2]:3 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 clrscr::line_text#5 clrscr::line_text#1 ]
zp[2]:5 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ]
zp[2]:4 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 clrscr::line_text#5 clrscr::line_text#1 ]
zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ]
reg byte x [ memset::c#4 ]
zp[1]:7 [ utoa::digit#2 utoa::digit#1 ]
zp[1]:14 [ utoa::digit#2 utoa::digit#1 ]
reg byte x [ utoa::started#2 utoa::started#4 ]
zp[2]:8 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 printf_str::s#3 printf_str::s#4 printf_str::s#0 ]
zp[2]:12 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 printf_str::s#3 printf_str::s#4 printf_str::s#0 ]
reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ]
zp[1]:10 [ conio_cursor_x ]
zp[1]:11 [ conio_cursor_y ]
zp[2]:12 [ conio_line_text ]
zp[2]:14 [ conio_line_color ]
zp[1]:20 [ conio_cursor_x ]
zp[1]:15 [ conio_cursor_y ]
zp[2]:18 [ conio_line_text ]
zp[2]:16 [ conio_line_color ]
reg byte a [ cputc::c#0 ]
zp[2]:16 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ]
zp[2]:18 [ gotoxy::$8 ]
zp[2]:20 [ gotoxy::$5 ]
zp[2]:21 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ]
zp[2]:24 [ gotoxy::$8 ]
zp[2]:26 [ gotoxy::$5 ]
reg byte a [ printf_number_buffer::buffer_sign#0 ]
reg byte a [ printf_str::c#1 ]
zp[2]:22 [ memcpy::src_end#0 ]
zp[2]:24 [ memset::end#0 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ]
zp[2]:10 [ memcpy::src_end#0 ]
zp[2]:6 [ memset::end#0 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ]
reg byte x [ utoa::$11 ]
reg byte a [ utoa::$10 ]
zp[2]:26 [ utoa::digit_value#0 utoa_append::sub#0 printf_str::putc#4 clrscr::line_cols#5 clrscr::line_cols#1 ]
zp[2]:8 [ utoa::digit_value#0 utoa_append::sub#0 printf_str::putc#4 clrscr::line_cols#5 clrscr::line_cols#1 ]
mem[12] [ printf_buffer ]
@ -5174,13 +5174,13 @@ Score: 74644
.label DEFAULT_SCREEN = $400
// The number of bytes on the screen
// The current cursor x-position
.label conio_cursor_x = $a
.label conio_cursor_x = $14
// The current cursor y-position
.label conio_cursor_y = $b
.label conio_cursor_y = $f
// The current text cursor line start
.label conio_line_text = $c
.label conio_line_text = $12
// The current color cursor line start
.label conio_line_color = $e
.label conio_line_color = $10
.segment Code
// __start
__start: {
@ -5295,7 +5295,7 @@ cputc: {
}
// main
main: {
.label signed_char_value = 2
.label signed_char_value = $17
// clrscr()
// [28] call clrscr
// [55] phi from main to clrscr [phi:main->clrscr]
@ -5340,12 +5340,12 @@ main: {
// void gotoxy(char x, __register(X) char y)
gotoxy: {
.const x = 0
.label __5 = $14
.label __6 = $10
.label __7 = $10
.label line_offset = $10
.label __8 = $12
.label __9 = $10
.label __5 = $1a
.label __6 = $15
.label __7 = $15
.label line_offset = $15
.label __8 = $18
.label __9 = $15
// if(y>CONIO_HEIGHT)
// [35] if(gotoxy::y#2<$19+1) goto gotoxy::@3 -- vbuxx_lt_vbuc1_then_la1
cpx #$19+1
@ -5471,8 +5471,8 @@ cputln: {
// clrscr
// clears the screen and moves the cursor to the upper left-hand corner of the screen.
clrscr: {
.label line_text = 3
.label line_cols = $1a
.label line_text = 4
.label line_cols = 8
// [56] phi from clrscr to clrscr::@1 [phi:clrscr->clrscr::@1]
// [56] phi clrscr::line_cols#5 = COLORRAM [phi:clrscr->clrscr::@1#0] -- pbuz1=pbuc1
lda #<COLORRAM
@ -5571,9 +5571,9 @@ clrscr: {
jmp __b3
}
// test_casting
// void test_casting(__zp(3) int signed_short_value)
// void test_casting(__zp(4) int signed_short_value)
test_casting: {
.label signed_short_value = 3
.label signed_short_value = 4
// printf("%d\n", signed_short_value)
// [71] printf_sint::value#1 = test_casting::signed_short_value#0
// [72] call printf_sint
@ -5699,10 +5699,10 @@ cscroll: {
}
// printf_sint
// Print a signed integer using a specific format
// void printf_sint(void (*putc)(char), __zp(3) int value, char format_min_length, char format_justify_left, char format_sign_always, char format_zero_padding, char format_upper_case, char format_radix)
// void printf_sint(void (*putc)(char), __zp(4) int value, char format_min_length, char format_justify_left, char format_sign_always, char format_zero_padding, char format_upper_case, char format_radix)
printf_sint: {
.label putc = cputc
.label value = 3
.label value = 4
// printf_buffer.sign = 0
// [89] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2
// Handle any sign
@ -5752,10 +5752,10 @@ printf_sint: {
}
// printf_str
/// Print a NUL-terminated string
// void printf_str(__zp($1a) void (*putc)(char), __zp(8) const char *s)
// void printf_str(__zp(8) void (*putc)(char), __zp($c) const char *s)
printf_str: {
.label s = 8
.label putc = $1a
.label s = $c
.label putc = 8
// [100] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1]
// [100] phi printf_str::s#3 = printf_str::s#4 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy
// printf_str::@1
@ -5793,13 +5793,13 @@ printf_str: {
// memcpy
// Copy block of memory (forwards)
// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination.
// void * memcpy(__zp($18) void *destination, __zp(5) void *source, unsigned int num)
// void * memcpy(__zp(6) void *destination, __zp(2) void *source, unsigned int num)
memcpy: {
.label src_end = $16
.label dst = $18
.label src = 5
.label source = 5
.label destination = $18
.label src_end = $a
.label dst = 6
.label src = 2
.label source = 2
.label destination = 6
// char* src_end = (char*)source+num
// [109] memcpy::src_end#0 = (char *)memcpy::source#2 + (unsigned int)$19*$28-$28 -- pbuz1=pbuz2_plus_vwuc1
lda.z source
@ -5850,11 +5850,11 @@ memcpy: {
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp(5) void *str, __register(X) char c, unsigned int num)
// void * memset(__zp(2) void *str, __register(X) char c, unsigned int num)
memset: {
.label end = $18
.label dst = 5
.label str = 5
.label end = 6
.label dst = 2
.label str = 2
// memset::@1
// char* end = (char*)str + num
// [119] memset::end#0 = (char *)memset::str#3 + $28 -- pbuz1=pbuz2_plus_vbuc1
@ -5903,13 +5903,13 @@ memset: {
// - value : The number to be converted to RADIX
// - buffer : receives the string representing the number and zero-termination.
// - radix : The radix to convert the number to (from the enum RADIX)
// void utoa(__zp(3) unsigned int value, __zp(8) char *buffer, char radix)
// void utoa(__zp(4) unsigned int value, __zp($c) char *buffer, char radix)
utoa: {
.const max_digits = 5
.label digit_value = $1a
.label buffer = 8
.label digit = 7
.label value = 3
.label digit_value = 8
.label buffer = $c
.label digit = $e
.label value = 4
// [127] phi from utoa to utoa::@1 [phi:utoa->utoa::@1]
// [127] phi utoa::buffer#11 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1
lda #<printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
@ -6069,12 +6069,12 @@ printf_number_buffer: {
// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased.
// (For decimal the subs used are 10000, 1000, 100, 10, 1)
// returns : the value reduced by sub * digit so that it is less than sub.
// __zp(3) unsigned int utoa_append(__zp(8) char *buffer, __zp(3) unsigned int value, __zp($1a) unsigned int sub)
// __zp(4) unsigned int utoa_append(__zp($c) char *buffer, __zp(4) unsigned int value, __zp(8) unsigned int sub)
utoa_append: {
.label buffer = 8
.label value = 3
.label sub = $1a
.label return = 3
.label buffer = $c
.label value = 4
.label sub = 8
.label return = 4
// [156] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1]
// [156] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1
ldx #0

View File

@ -19,20 +19,20 @@ char clrscr::l
char clrscr::l#1 // reg byte x 2002.0
char clrscr::l#2 // reg byte x 333.6666666666667
char *clrscr::line_cols
char *clrscr::line_cols#1 // line_cols zp[2]:26 1001.0
char *clrscr::line_cols#5 // line_cols zp[2]:26 1500.375
char *clrscr::line_cols#1 // line_cols zp[2]:8 1001.0
char *clrscr::line_cols#5 // line_cols zp[2]:8 1500.375
char *clrscr::line_text
char *clrscr::line_text#1 // line_text zp[2]:3 667.3333333333334
char *clrscr::line_text#5 // line_text zp[2]:3 1714.7142857142858
char *clrscr::line_text#1 // line_text zp[2]:4 667.3333333333334
char *clrscr::line_text#5 // line_text zp[2]:4 1714.7142857142858
void conio_c64_init()
__constant char * const conio_c64_init::BASIC_CURSOR_LINE = (char *) 214
char conio_c64_init::line
char conio_c64_init::line#0 // reg byte x 11.0
char conio_c64_init::line#2 // reg byte x 22.0
__loadstore char conio_cursor_x // zp[1]:10 319153.40425531915
__loadstore char conio_cursor_y // zp[1]:11 5079368.396825396
__loadstore char *conio_line_color // zp[2]:14 3622954.2459016396
__loadstore char *conio_line_text // zp[2]:12 3564519.5
__loadstore char conio_cursor_x // zp[1]:20 319153.40425531915
__loadstore char conio_cursor_y // zp[1]:15 5079368.396825396
__loadstore char *conio_line_color // zp[2]:16 3622954.2459016396
__loadstore char *conio_line_text // zp[2]:18 3564519.5
__stackcall void cputc(char c)
__constant char cputc::OFFSET_STACK_C = 0
char cputc::c
@ -40,13 +40,13 @@ char cputc::c#0 // reg byte a 1500001.5
void cputln()
void cscroll()
void gotoxy(char x , char y)
char *gotoxy::$5 // zp[2]:20 202.0
char *gotoxy::$6 // zp[2]:16 202.0
unsigned int gotoxy::$7 // zp[2]:16 151.5
unsigned int gotoxy::$8 // zp[2]:18 202.0
unsigned int gotoxy::$9 // zp[2]:16 202.0
char *gotoxy::$5 // zp[2]:26 202.0
char *gotoxy::$6 // zp[2]:21 202.0
unsigned int gotoxy::$7 // zp[2]:21 151.5
unsigned int gotoxy::$8 // zp[2]:24 202.0
unsigned int gotoxy::$9 // zp[2]:21 202.0
unsigned int gotoxy::line_offset
unsigned int gotoxy::line_offset#0 // line_offset zp[2]:16 101.0
unsigned int gotoxy::line_offset#0 // line_offset zp[2]:21 101.0
char gotoxy::x
__constant char gotoxy::x#2 = 0 // x
char gotoxy::y
@ -54,38 +54,38 @@ char gotoxy::y#2 // reg byte x 71.0
char gotoxy::y#4 // reg byte x 67.33333333333333
void main()
signed char main::signed_char_value
signed char main::signed_char_value#1 // signed_char_value zp[1]:2 101.0
signed char main::signed_char_value#2 // signed_char_value zp[1]:2 151.5
signed char main::signed_char_value#1 // signed_char_value zp[1]:23 101.0
signed char main::signed_char_value#2 // signed_char_value zp[1]:23 151.5
void * memcpy(void *destination , void *source , unsigned int num)
void *memcpy::destination
void *memcpy::destination#2 // destination zp[2]:24
void *memcpy::destination#2 // destination zp[2]:6
char *memcpy::dst
char *memcpy::dst#1 // dst zp[2]:24 1.00000000001E11
char *memcpy::dst#2 // dst zp[2]:24 1.0033333333466667E11
char *memcpy::dst#4 // dst zp[2]:24 2.000000002E9
char *memcpy::dst#1 // dst zp[2]:6 1.00000000001E11
char *memcpy::dst#2 // dst zp[2]:6 1.0033333333466667E11
char *memcpy::dst#4 // dst zp[2]:6 2.000000002E9
unsigned int memcpy::num
void *memcpy::return
void *memcpy::source
void *memcpy::source#2 // source zp[2]:5
void *memcpy::source#2 // source zp[2]:2
char *memcpy::src
char *memcpy::src#1 // src zp[2]:5 2.00000000002E11
char *memcpy::src#2 // src zp[2]:5 1.0025000000125E11
char *memcpy::src#4 // src zp[2]:5 1.000000001E9
char *memcpy::src#1 // src zp[2]:2 2.00000000002E11
char *memcpy::src#2 // src zp[2]:2 1.0025000000125E11
char *memcpy::src#4 // src zp[2]:2 1.000000001E9
char *memcpy::src_end
char *memcpy::src_end#0 // src_end zp[2]:22 1.262500000025E10
char *memcpy::src_end#0 // src_end zp[2]:10 1.262500000025E10
void * memset(void *str , char c , unsigned int num)
char memset::c
char memset::c#4 // reg byte x 1.4285714285857143E10
char *memset::dst
char *memset::dst#1 // dst zp[2]:5 2.00000000002E11
char *memset::dst#2 // dst zp[2]:5 1.3366666666833334E11
char *memset::dst#4 // dst zp[2]:5 2.000000002E9
char *memset::dst#1 // dst zp[2]:2 2.00000000002E11
char *memset::dst#2 // dst zp[2]:2 1.3366666666833334E11
char *memset::dst#4 // dst zp[2]:2 2.000000002E9
char *memset::end
char *memset::end#0 // end zp[2]:24 1.6833333333666668E10
char *memset::end#0 // end zp[2]:6 1.6833333333666668E10
unsigned int memset::num
void *memset::return
void *memset::str
void *memset::str#3 // str zp[2]:5
void *memset::str#3 // str zp[2]:2
__loadstore struct printf_buffer_number printf_buffer = {} // mem[12]
void printf_number_buffer(void (*putc)(char) , char buffer_sign , char *buffer_digits , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix)
struct printf_buffer_number printf_number_buffer::buffer
@ -115,36 +115,36 @@ void (*printf_sint::putc)(char)
__constant void (*printf_sint::putc#0)(char) = &cputc // putc
unsigned int printf_sint::uvalue
int printf_sint::value
int printf_sint::value#0 // value zp[2]:3 10001.0
int printf_sint::value#1 // value zp[2]:3 10334.666666666666
int printf_sint::value#4 // value zp[2]:3 20002.0
int printf_sint::value#0 // value zp[2]:4 10001.0
int printf_sint::value#1 // value zp[2]:4 10334.666666666666
int printf_sint::value#4 // value zp[2]:4 20002.0
void printf_str(void (*putc)(char) , const char *s)
char printf_str::c
char printf_str::c#1 // reg byte a 1.00000001E8
void (*printf_str::putc)(char)
void (*printf_str::putc#4)(char) // putc zp[2]:26
void (*printf_str::putc#4)(char) // putc zp[2]:8
const char *printf_str::s
const char *printf_str::s#0 // s zp[2]:8 1.00000001E8
const char *printf_str::s#3 // s zp[2]:8 1.50500002E8
const char *printf_str::s#4 // s zp[2]:8 1000001.0
const char *printf_str::s#0 // s zp[2]:12 1.00000001E8
const char *printf_str::s#3 // s zp[2]:12 1.50500002E8
const char *printf_str::s#4 // s zp[2]:12 1000001.0
void test_casting(int signed_short_value)
__constant char test_casting::s[2] = "
"
int test_casting::signed_short_value
int test_casting::signed_short_value#0 // signed_short_value zp[2]:3 1102.0
int test_casting::signed_short_value#0 // signed_short_value zp[2]:4 1102.0
void utoa(unsigned int value , char *buffer , char radix)
char utoa::$10 // reg byte a 2.0000002E7
char utoa::$11 // reg byte x 200002.0
char *utoa::buffer
char *utoa::buffer#11 // buffer zp[2]:8 2871429.0
char *utoa::buffer#14 // buffer zp[2]:8 1.50000015E7
char *utoa::buffer#3 // buffer zp[2]:8 200002.0
char *utoa::buffer#4 // buffer zp[2]:8 2.0000002E7
char *utoa::buffer#11 // buffer zp[2]:12 2871429.0
char *utoa::buffer#14 // buffer zp[2]:12 1.50000015E7
char *utoa::buffer#3 // buffer zp[2]:12 200002.0
char *utoa::buffer#4 // buffer zp[2]:12 2.0000002E7
char utoa::digit
char utoa::digit#1 // digit zp[1]:7 2.0000002E7
char utoa::digit#2 // digit zp[1]:7 2857143.1428571427
char utoa::digit#1 // digit zp[1]:14 2.0000002E7
char utoa::digit#2 // digit zp[1]:14 2857143.1428571427
unsigned int utoa::digit_value
unsigned int utoa::digit_value#0 // digit_value zp[2]:26 6000000.6
unsigned int utoa::digit_value#0 // digit_value zp[2]:8 6000000.6
unsigned int *utoa::digit_values
char utoa::max_digits
__constant char utoa::max_digits#1 = 5 // max_digits
@ -153,50 +153,50 @@ char utoa::started
char utoa::started#2 // reg byte x 5000000.5
char utoa::started#4 // reg byte x 1.0000001E7
unsigned int utoa::value
unsigned int utoa::value#0 // value zp[2]:3 1.0000001E7
unsigned int utoa::value#1 // value zp[2]:3 55001.0
unsigned int utoa::value#2 // value zp[2]:3 5728572.142857142
unsigned int utoa::value#6 // value zp[2]:3 1.50000015E7
unsigned int utoa::value#0 // value zp[2]:4 1.0000001E7
unsigned int utoa::value#1 // value zp[2]:4 55001.0
unsigned int utoa::value#2 // value zp[2]:4 5728572.142857142
unsigned int utoa::value#6 // value zp[2]:4 1.50000015E7
unsigned int utoa_append(char *buffer , unsigned int value , unsigned int sub)
char *utoa_append::buffer
char *utoa_append::buffer#0 // buffer zp[2]:8 1.375000025E7
char *utoa_append::buffer#0 // buffer zp[2]:12 1.375000025E7
char utoa_append::digit
char utoa_append::digit#1 // reg byte x 1.00000000001E11
char utoa_append::digit#2 // reg byte x 1.000500000015E11
unsigned int utoa_append::return
unsigned int utoa_append::return#0 // return zp[2]:3 2.0000002E7
unsigned int utoa_append::return#0 // return zp[2]:4 2.0000002E7
unsigned int utoa_append::sub
unsigned int utoa_append::sub#0 // sub zp[2]:26 3.33350000005E10
unsigned int utoa_append::sub#0 // sub zp[2]:8 3.33350000005E10
unsigned int utoa_append::value
unsigned int utoa_append::value#0 // value zp[2]:3 3.6666667333333336E7
unsigned int utoa_append::value#1 // value zp[2]:3 2.00000000002E11
unsigned int utoa_append::value#2 // value zp[2]:3 5.001833333416667E10
unsigned int utoa_append::value#0 // value zp[2]:4 3.6666667333333336E7
unsigned int utoa_append::value#1 // value zp[2]:4 2.00000000002E11
unsigned int utoa_append::value#2 // value zp[2]:4 5.001833333416667E10
reg byte x [ conio_c64_init::line#2 conio_c64_init::line#0 ]
zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ]
zp[1]:23 [ main::signed_char_value#2 main::signed_char_value#1 ]
reg byte x [ gotoxy::y#4 gotoxy::y#2 ]
reg byte x [ clrscr::l#2 clrscr::l#1 ]
reg byte y [ clrscr::c#2 clrscr::c#1 ]
zp[2]:3 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 clrscr::line_text#5 clrscr::line_text#1 ]
zp[2]:5 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ]
zp[2]:4 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 clrscr::line_text#5 clrscr::line_text#1 ]
zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ]
reg byte x [ memset::c#4 ]
zp[1]:7 [ utoa::digit#2 utoa::digit#1 ]
zp[1]:14 [ utoa::digit#2 utoa::digit#1 ]
reg byte x [ utoa::started#2 utoa::started#4 ]
zp[2]:8 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 printf_str::s#3 printf_str::s#4 printf_str::s#0 ]
zp[2]:12 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 printf_str::s#3 printf_str::s#4 printf_str::s#0 ]
reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ]
zp[1]:10 [ conio_cursor_x ]
zp[1]:11 [ conio_cursor_y ]
zp[2]:12 [ conio_line_text ]
zp[2]:14 [ conio_line_color ]
zp[1]:20 [ conio_cursor_x ]
zp[1]:15 [ conio_cursor_y ]
zp[2]:18 [ conio_line_text ]
zp[2]:16 [ conio_line_color ]
reg byte a [ cputc::c#0 ]
zp[2]:16 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ]
zp[2]:18 [ gotoxy::$8 ]
zp[2]:20 [ gotoxy::$5 ]
zp[2]:21 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ]
zp[2]:24 [ gotoxy::$8 ]
zp[2]:26 [ gotoxy::$5 ]
reg byte a [ printf_number_buffer::buffer_sign#0 ]
reg byte a [ printf_str::c#1 ]
zp[2]:22 [ memcpy::src_end#0 ]
zp[2]:24 [ memset::end#0 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ]
zp[2]:10 [ memcpy::src_end#0 ]
zp[2]:6 [ memset::end#0 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ]
reg byte x [ utoa::$11 ]
reg byte a [ utoa::$10 ]
zp[2]:26 [ utoa::digit_value#0 utoa_append::sub#0 printf_str::putc#4 clrscr::line_cols#5 clrscr::line_cols#1 ]
zp[2]:8 [ utoa::digit_value#0 utoa_append::sub#0 printf_str::putc#4 clrscr::line_cols#5 clrscr::line_cols#1 ]
mem[12] [ printf_buffer ]

View File

@ -323,33 +323,33 @@ Complete equivalence classes
[ main::b2#0 ]
[ main::sb#0 ]
[ w::b2#0 ]
Allocated zp[1]:2 [ main::b#2 main::b#1 ]
Allocated zp[1]:3 [ w::i#2 w::i#1 ]
Allocated zp[1]:4 [ main::b2#0 ]
Allocated zp[1]:5 [ main::sb#0 ]
Allocated zp[1]:6 [ w::b2#0 ]
Allocated zp[1]:2 [ w::i#2 w::i#1 ]
Allocated zp[1]:3 [ w::b2#0 ]
Allocated zp[1]:4 [ main::b#2 main::b#1 ]
Allocated zp[1]:5 [ main::b2#0 ]
Allocated zp[1]:6 [ main::sb#0 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [2] main::b2#0 = $c8 - main::b#2 [ main::b#2 main::b2#0 ] ( [ main::b#2 main::b2#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::b#2 main::b#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::b#2 main::b#1 ]
Statement [4] main::sb#0 = - (signed char)main::b#2 [ main::b#2 main::sb#0 ] ( [ main::b#2 main::sb#0 ] { } ) always clobbers reg byte a
Statement [14] SCREEN3#0[w::i#2] = w::b#0 [ w::i#2 w::b2#0 ] ( w:9 [ w::i#2 w::b2#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:3 [ w::i#2 w::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ w::b2#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ w::i#2 w::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ w::b2#0 ]
Statement [15] SCREEN4#0[w::i#2] = w::b2#0 [ w::i#2 ] ( w:9 [ w::i#2 ] { } ) always clobbers reg byte a
Statement [2] main::b2#0 = $c8 - main::b#2 [ main::b#2 main::b2#0 ] ( [ main::b#2 main::b2#0 ] { } ) always clobbers reg byte a
Statement [4] main::sb#0 = - (signed char)main::b#2 [ main::b#2 main::sb#0 ] ( [ main::b#2 main::sb#0 ] { } ) always clobbers reg byte a
Statement [13] w::b2#0 = (char)$578-$546 + w::i#2 [ w::i#2 w::b2#0 ] ( w:9 [ w::i#2 w::b2#0 ] { } ) always clobbers reg byte a
Statement [14] SCREEN3#0[w::i#2] = w::b#0 [ w::i#2 w::b2#0 ] ( w:9 [ w::i#2 w::b2#0 ] { } ) always clobbers reg byte a
Statement [15] SCREEN4#0[w::i#2] = w::b2#0 [ w::i#2 ] ( w:9 [ w::i#2 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::b#2 main::b#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ w::i#2 w::i#1 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::b2#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ main::sb#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ w::b2#0 ] : zp[1]:6 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::b#2 main::b#1 ] : zp[1]:4 , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ w::i#2 w::i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ main::b2#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ main::sb#0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ w::b2#0 ] : zp[1]:3 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [w] 277.75: zp[1]:3 [ w::i#2 w::i#1 ] 101: zp[1]:6 [ w::b2#0 ]
Uplift Scope [main] 27.5: zp[1]:2 [ main::b#2 main::b#1 ] 22: zp[1]:4 [ main::b2#0 ] 11: zp[1]:5 [ main::sb#0 ]
Uplift Scope [w] 277.75: zp[1]:2 [ w::i#2 w::i#1 ] 101: zp[1]:3 [ w::b2#0 ]
Uplift Scope [main] 27.5: zp[1]:4 [ main::b#2 main::b#1 ] 22: zp[1]:5 [ main::b2#0 ] 11: zp[1]:6 [ main::sb#0 ]
Uplift Scope []
Uplifting [w] best 1074 combination reg byte y [ w::i#2 w::i#1 ] reg byte x [ w::b2#0 ]

View File

@ -12,9 +12,9 @@
.segment Code
main: {
.label CHAR_A = CHARGEN+8
.label bits = 3
.label sc = 4
.label y = 2
.label bits = 2
.label sc = 3
.label y = 5
// asm
sei
// *PROCPORT = $32

View File

@ -341,43 +341,46 @@ Complete equivalence classes
[ main::x#2 main::x#1 ]
[ main::c#2 ]
[ main::$1 ]
Allocated zp[1]:2 [ main::y#2 main::y#1 ]
Allocated zp[1]:3 [ main::bits#2 main::bits#0 main::bits#1 ]
Allocated zp[2]:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
Allocated zp[1]:6 [ main::x#2 main::x#1 ]
Allocated zp[1]:2 [ main::$1 ]
Allocated zp[1]:3 [ main::x#2 main::x#1 ]
Allocated zp[1]:4 [ main::bits#2 main::bits#0 main::bits#1 ]
Allocated zp[2]:5 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
Allocated zp[1]:7 [ main::c#2 ]
Allocated zp[1]:8 [ main::$1 ]
Allocated zp[1]:8 [ main::y#2 main::y#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] *PROCPORT = $32 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [9] *main::sc#3 = main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] { } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::y#2 main::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::bits#2 main::bits#0 main::bits#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:8 [ main::y#2 main::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::bits#2 main::bits#0 main::bits#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::x#2 main::x#1 ]
Statement [14] main::sc#2 = main::sc#1 + $20 [ main::y#2 main::sc#2 ] ( [ main::y#2 main::sc#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::y#2 main::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:8 [ main::y#2 main::y#1 ]
Statement [17] *PROCPORT = $37 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [1] *PROCPORT = $32 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [9] *main::sc#3 = main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] { } ) always clobbers reg byte y
Statement [14] main::sc#2 = main::sc#1 + $20 [ main::y#2 main::sc#2 ] ( [ main::y#2 main::sc#2 ] { } ) always clobbers reg byte a
Statement [17] *PROCPORT = $37 [ ] ( [ ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::y#2 main::y#1 ] : zp[1]:2 , reg byte x ,
Potential registers zp[1]:3 [ main::bits#2 main::bits#0 main::bits#1 ] : zp[1]:3 , reg byte a , reg byte x ,
Potential registers zp[2]:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] : zp[2]:4 ,
Potential registers zp[1]:6 [ main::x#2 main::x#1 ] : zp[1]:6 , reg byte a , reg byte x ,
Potential registers zp[1]:8 [ main::y#2 main::y#1 ] : zp[1]:8 , reg byte x ,
Potential registers zp[1]:4 [ main::bits#2 main::bits#0 main::bits#1 ] : zp[1]:4 , reg byte a , reg byte x ,
Potential registers zp[2]:5 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] : zp[2]:5 ,
Potential registers zp[1]:3 [ main::x#2 main::x#1 ] : zp[1]:3 , reg byte a , reg byte x ,
Potential registers zp[1]:7 [ main::c#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ main::$1 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ main::$1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 202: zp[1]:8 [ main::$1 ] 176.75: zp[1]:6 [ main::x#2 main::x#1 ] 134.19: zp[1]:3 [ main::bits#2 main::bits#0 main::bits#1 ] 123.92: zp[2]:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] 101: zp[1]:7 [ main::c#2 ] 19.04: zp[1]:2 [ main::y#2 main::y#1 ]
Uplift Scope [main] 202: zp[1]:2 [ main::$1 ] 176.75: zp[1]:3 [ main::x#2 main::x#1 ] 134.19: zp[1]:4 [ main::bits#2 main::bits#0 main::bits#1 ] 123.92: zp[2]:5 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] 101: zp[1]:7 [ main::c#2 ] 19.04: zp[1]:8 [ main::y#2 main::y#1 ]
Uplift Scope []
Uplifting [main] best 7220 combination reg byte a [ main::$1 ] reg byte x [ main::x#2 main::x#1 ] zp[1]:3 [ main::bits#2 main::bits#0 main::bits#1 ] zp[2]:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] reg byte a [ main::c#2 ] zp[1]:2 [ main::y#2 main::y#1 ]
Uplifting [main] best 7220 combination reg byte a [ main::$1 ] reg byte x [ main::x#2 main::x#1 ] zp[1]:4 [ main::bits#2 main::bits#0 main::bits#1 ] zp[2]:5 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] reg byte a [ main::c#2 ] zp[1]:8 [ main::y#2 main::y#1 ]
Limited combination testing to 100 combinations of 288 possible.
Uplifting [] best 7220 combination
Attempting to uplift remaining variables inzp[1]:3 [ main::bits#2 main::bits#0 main::bits#1 ]
Uplifting [main] best 7220 combination zp[1]:3 [ main::bits#2 main::bits#0 main::bits#1 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::y#2 main::y#1 ]
Uplifting [main] best 7220 combination zp[1]:2 [ main::y#2 main::y#1 ]
Attempting to uplift remaining variables inzp[1]:4 [ main::bits#2 main::bits#0 main::bits#1 ]
Uplifting [main] best 7220 combination zp[1]:4 [ main::bits#2 main::bits#0 main::bits#1 ]
Attempting to uplift remaining variables inzp[1]:8 [ main::y#2 main::y#1 ]
Uplifting [main] best 7220 combination zp[1]:8 [ main::y#2 main::y#1 ]
Allocated (was zp[1]:4) zp[1]:2 [ main::bits#2 main::bits#0 main::bits#1 ]
Allocated (was zp[2]:5) zp[2]:3 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
Allocated (was zp[1]:8) zp[1]:5 [ main::y#2 main::y#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -398,9 +401,9 @@ ASSEMBLER BEFORE OPTIMIZATION
// main
main: {
.label CHAR_A = CHARGEN+8
.label bits = 3
.label sc = 4
.label y = 2
.label bits = 2
.label sc = 3
.label y = 5
// asm { sei }
sei
// [1] *PROCPORT = $32 -- _deref_pbuc1=vbuc2
@ -552,26 +555,26 @@ char main::$1 // reg byte a 202.0
char *main::CHAR_A
__constant char *main::CHAR_A#0 = CHARGEN+8 // CHAR_A
char main::bits
char main::bits#0 // bits zp[1]:3 22.0
char main::bits#1 // bits zp[1]:3 67.33333333333333
char main::bits#2 // bits zp[1]:3 44.85714285714286
char main::bits#0 // bits zp[1]:2 22.0
char main::bits#1 // bits zp[1]:2 67.33333333333333
char main::bits#2 // bits zp[1]:2 44.85714285714286
char main::c
char main::c#2 // reg byte a 101.0
char *main::sc
char *main::sc#1 // sc zp[2]:4 53.25
char *main::sc#2 // sc zp[2]:4 7.333333333333333
char *main::sc#3 // sc zp[2]:4 52.33333333333333
char *main::sc#7 // sc zp[2]:4 11.0
char *main::sc#1 // sc zp[2]:3 53.25
char *main::sc#2 // sc zp[2]:3 7.333333333333333
char *main::sc#3 // sc zp[2]:3 52.33333333333333
char *main::sc#7 // sc zp[2]:3 11.0
char main::x
char main::x#1 // reg byte x 151.5
char main::x#2 // reg byte x 25.25
char main::y
char main::y#1 // y zp[1]:2 16.5
char main::y#2 // y zp[1]:2 2.5384615384615383
char main::y#1 // y zp[1]:5 16.5
char main::y#2 // y zp[1]:5 2.5384615384615383
zp[1]:2 [ main::y#2 main::y#1 ]
zp[1]:3 [ main::bits#2 main::bits#0 main::bits#1 ]
zp[2]:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
zp[1]:5 [ main::y#2 main::y#1 ]
zp[1]:2 [ main::bits#2 main::bits#0 main::bits#1 ]
zp[2]:3 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
reg byte x [ main::x#2 main::x#1 ]
reg byte a [ main::c#2 ]
reg byte a [ main::$1 ]
@ -598,9 +601,9 @@ Score: 5627
// main
main: {
.label CHAR_A = CHARGEN+8
.label bits = 3
.label sc = 4
.label y = 2
.label bits = 2
.label sc = 3
.label y = 5
// asm
// asm { sei }
sei

View File

@ -6,26 +6,26 @@ char main::$1 // reg byte a 202.0
char *main::CHAR_A
__constant char *main::CHAR_A#0 = CHARGEN+8 // CHAR_A
char main::bits
char main::bits#0 // bits zp[1]:3 22.0
char main::bits#1 // bits zp[1]:3 67.33333333333333
char main::bits#2 // bits zp[1]:3 44.85714285714286
char main::bits#0 // bits zp[1]:2 22.0
char main::bits#1 // bits zp[1]:2 67.33333333333333
char main::bits#2 // bits zp[1]:2 44.85714285714286
char main::c
char main::c#2 // reg byte a 101.0
char *main::sc
char *main::sc#1 // sc zp[2]:4 53.25
char *main::sc#2 // sc zp[2]:4 7.333333333333333
char *main::sc#3 // sc zp[2]:4 52.33333333333333
char *main::sc#7 // sc zp[2]:4 11.0
char *main::sc#1 // sc zp[2]:3 53.25
char *main::sc#2 // sc zp[2]:3 7.333333333333333
char *main::sc#3 // sc zp[2]:3 52.33333333333333
char *main::sc#7 // sc zp[2]:3 11.0
char main::x
char main::x#1 // reg byte x 151.5
char main::x#2 // reg byte x 25.25
char main::y
char main::y#1 // y zp[1]:2 16.5
char main::y#2 // y zp[1]:2 2.5384615384615383
char main::y#1 // y zp[1]:5 16.5
char main::y#2 // y zp[1]:5 2.5384615384615383
zp[1]:2 [ main::y#2 main::y#1 ]
zp[1]:3 [ main::bits#2 main::bits#0 main::bits#1 ]
zp[2]:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
zp[1]:5 [ main::y#2 main::y#1 ]
zp[1]:2 [ main::bits#2 main::bits#0 main::bits#1 ]
zp[2]:3 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
reg byte x [ main::x#2 main::x#1 ]
reg byte a [ main::c#2 ]
reg byte a [ main::$1 ]

View File

@ -9,8 +9,8 @@
:BasicUpstart(main)
.segment Code
main: {
.label screen = 2
.label colors = 4
.label screen = 4
.label colors = 2
.label row = 6
lda #0
sta.z row

View File

@ -256,16 +256,16 @@ Complete equivalence classes
[ main::row#4 main::row#1 ]
[ main::column#2 main::column#1 ]
[ main::color#3 main::color#5 main::color#2 main::color#1 ]
Allocated zp[2]:2 [ main::screen#4 main::screen#1 ]
Allocated zp[1]:2 [ main::column#2 main::column#1 ]
Allocated zp[1]:3 [ main::color#3 main::color#5 main::color#2 main::color#1 ]
Allocated zp[2]:4 [ main::colors#4 main::colors#1 ]
Allocated zp[1]:6 [ main::row#4 main::row#1 ]
Allocated zp[1]:7 [ main::column#2 main::column#1 ]
Allocated zp[1]:8 [ main::color#3 main::color#5 main::color#2 main::color#1 ]
Allocated zp[2]:6 [ main::screen#4 main::screen#1 ]
Allocated zp[1]:8 [ main::row#4 main::row#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [3] main::screen#4[main::column#2] = $a0 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::row#4 main::row#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::column#2 main::column#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:8 [ main::color#3 main::color#5 main::color#2 main::color#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:8 [ main::row#4 main::row#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::column#2 main::column#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::color#3 main::color#5 main::color#2 main::color#1 ]
Statement [4] main::colors#4[main::column#2] = main::color#3 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] { } ) always clobbers reg byte a
Statement [5] main::color#1 = main::color#3 ^ 1 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ( [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] { } ) always clobbers reg byte a
Statement [8] main::color#2 = main::color#1 ^ 1 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ( [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] { } ) always clobbers reg byte a
@ -277,20 +277,23 @@ Statement [5] main::color#1 = main::color#3 ^ 1 [ main::screen#4 main::colors#4
Statement [8] main::color#2 = main::color#1 ^ 1 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ( [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] { } ) always clobbers reg byte a
Statement [9] main::screen#1 = main::screen#4 + $28 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ( [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] { } ) always clobbers reg byte a
Statement [10] main::colors#1 = main::colors#4 + $28 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ( [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] { } ) always clobbers reg byte a
Potential registers zp[2]:2 [ main::screen#4 main::screen#1 ] : zp[2]:2 ,
Potential registers zp[2]:6 [ main::screen#4 main::screen#1 ] : zp[2]:6 ,
Potential registers zp[2]:4 [ main::colors#4 main::colors#1 ] : zp[2]:4 ,
Potential registers zp[1]:6 [ main::row#4 main::row#1 ] : zp[1]:6 , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ main::column#2 main::column#1 ] : zp[1]:7 , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ main::color#3 main::color#5 main::color#2 main::color#1 ] : zp[1]:8 , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ main::row#4 main::row#1 ] : zp[1]:8 , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ main::column#2 main::column#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::color#3 main::color#5 main::color#2 main::color#1 ] : zp[1]:3 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 252.5: zp[1]:7 [ main::column#2 main::column#1 ] 202.07: zp[1]:8 [ main::color#3 main::color#5 main::color#2 main::color#1 ] 21: zp[2]:4 [ main::colors#4 main::colors#1 ] 20.88: zp[2]:2 [ main::screen#4 main::screen#1 ] 18.7: zp[1]:6 [ main::row#4 main::row#1 ]
Uplift Scope [main] 252.5: zp[1]:2 [ main::column#2 main::column#1 ] 202.07: zp[1]:3 [ main::color#3 main::color#5 main::color#2 main::color#1 ] 21: zp[2]:4 [ main::colors#4 main::colors#1 ] 20.88: zp[2]:6 [ main::screen#4 main::screen#1 ] 18.7: zp[1]:8 [ main::row#4 main::row#1 ]
Uplift Scope []
Uplifting [main] best 4851 combination reg byte y [ main::column#2 main::column#1 ] reg byte x [ main::color#3 main::color#5 main::color#2 main::color#1 ] zp[2]:4 [ main::colors#4 main::colors#1 ] zp[2]:2 [ main::screen#4 main::screen#1 ] zp[1]:6 [ main::row#4 main::row#1 ]
Uplifting [main] best 4851 combination reg byte y [ main::column#2 main::column#1 ] reg byte x [ main::color#3 main::color#5 main::color#2 main::color#1 ] zp[2]:4 [ main::colors#4 main::colors#1 ] zp[2]:6 [ main::screen#4 main::screen#1 ] zp[1]:8 [ main::row#4 main::row#1 ]
Uplifting [] best 4851 combination
Attempting to uplift remaining variables inzp[1]:6 [ main::row#4 main::row#1 ]
Uplifting [main] best 4851 combination zp[1]:6 [ main::row#4 main::row#1 ]
Attempting to uplift remaining variables inzp[1]:8 [ main::row#4 main::row#1 ]
Uplifting [main] best 4851 combination zp[1]:8 [ main::row#4 main::row#1 ]
Allocated (was zp[2]:4) zp[2]:2 [ main::colors#4 main::colors#1 ]
Allocated (was zp[2]:6) zp[2]:4 [ main::screen#4 main::screen#1 ]
Allocated (was zp[1]:8) zp[1]:6 [ main::row#4 main::row#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -308,8 +311,8 @@ ASSEMBLER BEFORE OPTIMIZATION
.segment Code
// main
main: {
.label screen = 2
.label colors = 4
.label screen = 4
.label colors = 2
.label row = 6
// [1] phi from main to main::@1 [phi:main->main::@1]
__b1_from_main:
@ -431,8 +434,8 @@ char main::color#2 // reg byte x 4.4
char main::color#3 // reg byte x 104.66666666666666
char main::color#5 // reg byte x 22.0
char *main::colors
char *main::colors#1 // colors zp[2]:4 7.333333333333333
char *main::colors#4 // colors zp[2]:4 13.666666666666664
char *main::colors#1 // colors zp[2]:2 7.333333333333333
char *main::colors#4 // colors zp[2]:2 13.666666666666664
char main::column
char main::column#1 // reg byte y 151.5
char main::column#2 // reg byte y 101.0
@ -440,11 +443,11 @@ char main::row
char main::row#1 // row zp[1]:6 16.5
char main::row#4 // row zp[1]:6 2.2
char *main::screen
char *main::screen#1 // screen zp[2]:2 5.5
char *main::screen#4 // screen zp[2]:2 15.375
char *main::screen#1 // screen zp[2]:4 5.5
char *main::screen#4 // screen zp[2]:4 15.375
zp[2]:2 [ main::screen#4 main::screen#1 ]
zp[2]:4 [ main::colors#4 main::colors#1 ]
zp[2]:4 [ main::screen#4 main::screen#1 ]
zp[2]:2 [ main::colors#4 main::colors#1 ]
zp[1]:6 [ main::row#4 main::row#1 ]
reg byte y [ main::column#2 main::column#1 ]
reg byte x [ main::color#3 main::color#5 main::color#2 main::color#1 ]
@ -468,8 +471,8 @@ Score: 3861
.segment Code
// main
main: {
.label screen = 2
.label colors = 4
.label screen = 4
.label colors = 2
.label row = 6
// [1] phi from main to main::@1 [phi:main->main::@1]
// [1] phi main::row#4 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1

View File

@ -5,8 +5,8 @@ char main::color#2 // reg byte x 4.4
char main::color#3 // reg byte x 104.66666666666666
char main::color#5 // reg byte x 22.0
char *main::colors
char *main::colors#1 // colors zp[2]:4 7.333333333333333
char *main::colors#4 // colors zp[2]:4 13.666666666666664
char *main::colors#1 // colors zp[2]:2 7.333333333333333
char *main::colors#4 // colors zp[2]:2 13.666666666666664
char main::column
char main::column#1 // reg byte y 151.5
char main::column#2 // reg byte y 101.0
@ -14,11 +14,11 @@ char main::row
char main::row#1 // row zp[1]:6 16.5
char main::row#4 // row zp[1]:6 2.2
char *main::screen
char *main::screen#1 // screen zp[2]:2 5.5
char *main::screen#4 // screen zp[2]:2 15.375
char *main::screen#1 // screen zp[2]:4 5.5
char *main::screen#4 // screen zp[2]:4 15.375
zp[2]:2 [ main::screen#4 main::screen#1 ]
zp[2]:4 [ main::colors#4 main::colors#1 ]
zp[2]:4 [ main::screen#4 main::screen#1 ]
zp[2]:2 [ main::colors#4 main::colors#1 ]
zp[1]:6 [ main::row#4 main::row#1 ]
reg byte y [ main::column#2 main::column#1 ]
reg byte x [ main::color#3 main::color#5 main::color#2 main::color#1 ]

View File

@ -138,9 +138,9 @@ print_ulong_at: {
rts
}
// Print a unsigned int as HEX at a specific position
// void print_uint_at(__zp(2) unsigned int w, __zp(4) char *at)
// void print_uint_at(__zp(7) unsigned int w, __zp(4) char *at)
print_uint_at: {
.label w = 2
.label w = 7
.label at = 4
// print_uchar_at(BYTE1(w), at)
lda.z w+1
@ -198,9 +198,9 @@ print_uchar_at: {
rts
}
// Print a single char
// void print_char_at(__register(X) char ch, __zp(7) char *at)
// void print_char_at(__register(X) char ch, __zp(2) char *at)
print_char_at: {
.label at = 7
.label at = 2
// *(at) = ch
txa
ldy #0

View File

@ -543,19 +543,19 @@ Complete equivalence classes
[ clock::return#0 ]
[ print_uchar_at::$0 ]
[ print_uchar_at::$2 ]
Allocated zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
Allocated zp[2]:4 [ print_uint_at::at#2 ]
Allocated zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Allocated zp[1]:2 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
Allocated zp[2]:3 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Allocated zp[1]:5 [ print_uchar_at::$0 ]
Allocated zp[1]:6 [ print_uchar_at::$2 ]
Allocated zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ]
Allocated zp[1]:9 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
Allocated zp[2]:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Allocated zp[4]:12 [ clock::return#2 ]
Allocated zp[4]:16 [ main::$1 ]
Allocated zp[4]:20 [ main::cyclecount#0 ]
Allocated zp[4]:24 [ print_ulong_at::dw#0 ]
Allocated zp[4]:28 [ clock::return#0 ]
Allocated zp[1]:32 [ print_uchar_at::$0 ]
Allocated zp[1]:33 [ print_uchar_at::$2 ]
Allocated zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Allocated zp[2]:10 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
Allocated zp[2]:12 [ print_uint_at::at#2 ]
Allocated zp[4]:14 [ print_ulong_at::dw#0 ]
Allocated zp[4]:18 [ clock::return#0 ]
Allocated zp[4]:22 [ clock::return#2 ]
Allocated zp[4]:26 [ main::$1 ]
Allocated zp[4]:30 [ main::cyclecount#0 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [5] clock::return#2 = clock::return#0 [ clock::return#2 ] ( [ clock::return#2 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a
Statement [6] main::$1 = clock::return#2 [ main::$1 ] ( [ main::$1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } } ) always clobbers reg byte a
@ -572,16 +572,16 @@ Statement [18] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_T
Statement [20] print_uint_at::w#0 = word1 print_ulong_at::dw#0 [ print_ulong_at::dw#0 print_uint_at::w#0 ] ( print_ulong_at:9 [ print_ulong_at::dw#0 print_uint_at::w#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } } ) always clobbers reg byte a
Statement [22] print_uint_at::w#1 = word0 print_ulong_at::dw#0 [ print_uint_at::w#1 ] ( print_ulong_at:9 [ print_uint_at::w#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } } ) always clobbers reg byte a
Statement [27] print_uchar_at::at#0 = print_uint_at::at#2 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#0 print_uchar_at::at#0 ] ( print_ulong_at:9::print_uint_at:21 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#0 print_uchar_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } } print_ulong_at:9::print_uint_at:23 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#0 print_uchar_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Statement [30] print_uchar_at::at#1 = print_uint_at::at#2 + 2 [ print_uchar_at::b#1 print_uchar_at::at#1 ] ( print_ulong_at:9::print_uint_at:21 [ print_ulong_at::dw#0 print_uchar_at::b#1 print_uchar_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } } print_ulong_at:9::print_uint_at:23 [ print_uchar_at::b#1 print_uchar_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } } ) always clobbers reg byte a
Statement [34] print_uchar_at::$0 = print_uchar_at::b#2 >> 4 [ print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] ( print_ulong_at:9::print_uint_at:21::print_uchar_at:28 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:28 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:9::print_uint_at:21::print_uchar_at:31 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:31 [ print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } ) always clobbers reg byte a
Statement [36] print_char_at::at#0 = print_uchar_at::at#2 [ print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] ( print_ulong_at:9::print_uint_at:21::print_uchar_at:28 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:28 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:9::print_uint_at:21::print_uchar_at:31 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:31 [ print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:9 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
Statement [38] print_uchar_at::$2 = print_uchar_at::b#2 & $f [ print_uchar_at::at#2 print_uchar_at::$2 ] ( print_ulong_at:9::print_uint_at:21::print_uchar_at:28 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:28 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:21::print_uchar_at:31 [ print_ulong_at::dw#0 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:31 [ print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a
Statement [39] print_char_at::at#1 = print_uchar_at::at#2 + 1 [ print_uchar_at::$2 print_char_at::at#1 ] ( print_ulong_at:9::print_uint_at:21::print_uchar_at:28 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:28 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:21::print_uchar_at:31 [ print_ulong_at::dw#0 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:31 [ print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:33 [ print_uchar_at::$2 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ print_uchar_at::$2 ]
Statement [44] *print_char_at::at#2 = print_char_at::ch#2 [ ] ( print_ulong_at:9::print_uint_at:21::print_uchar_at:28::print_char_at:37 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:28::print_char_at:37 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:9::print_uint_at:21::print_uchar_at:31::print_char_at:37 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:31::print_char_at:37 [ print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:9::print_uint_at:21::print_uchar_at:28::print_char_at:41 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:28::print_char_at:41 [ print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:21::print_uchar_at:31::print_char_at:41 [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:31::print_char_at:41 [ ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Statement [5] clock::return#2 = clock::return#0 [ clock::return#2 ] ( [ clock::return#2 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a
Statement [6] main::$1 = clock::return#2 [ main::$1 ] ( [ main::$1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } } ) always clobbers reg byte a
Statement [7] main::cyclecount#0 = main::$1 - CLOCKS_PER_INIT [ main::cyclecount#0 ] ( [ main::cyclecount#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } } ) always clobbers reg byte a
@ -603,27 +603,27 @@ Statement [36] print_char_at::at#0 = print_uchar_at::at#2 [ print_uchar_at::b#2
Statement [38] print_uchar_at::$2 = print_uchar_at::b#2 & $f [ print_uchar_at::at#2 print_uchar_at::$2 ] ( print_ulong_at:9::print_uint_at:21::print_uchar_at:28 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:28 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:21::print_uchar_at:31 [ print_ulong_at::dw#0 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:31 [ print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a
Statement [39] print_char_at::at#1 = print_uchar_at::at#2 + 1 [ print_uchar_at::$2 print_char_at::at#1 ] ( print_ulong_at:9::print_uint_at:21::print_uchar_at:28 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:28 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:21::print_uchar_at:31 [ print_ulong_at::dw#0 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:31 [ print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a
Statement [44] *print_char_at::at#2 = print_char_at::ch#2 [ ] ( print_ulong_at:9::print_uint_at:21::print_uchar_at:28::print_char_at:37 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:28::print_char_at:37 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:9::print_uint_at:21::print_uchar_at:31::print_char_at:37 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:31::print_char_at:37 [ print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:9::print_uint_at:21::print_uchar_at:28::print_char_at:41 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:28::print_char_at:41 [ print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:21::print_uchar_at:31::print_char_at:41 [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:9::print_uint_at:23::print_uchar_at:31::print_char_at:41 [ ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a reg byte y
Potential registers zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] : zp[2]:2 ,
Potential registers zp[2]:4 [ print_uint_at::at#2 ] : zp[2]:4 ,
Potential registers zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ] : zp[1]:6 , reg byte x ,
Potential registers zp[2]:10 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] : zp[2]:10 ,
Potential registers zp[2]:12 [ print_uint_at::at#2 ] : zp[2]:12 ,
Potential registers zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ] : zp[1]:9 , reg byte x ,
Potential registers zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] : zp[2]:7 ,
Potential registers zp[1]:9 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] : zp[1]:9 , reg byte x , reg byte y ,
Potential registers zp[2]:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] : zp[2]:10 ,
Potential registers zp[4]:12 [ clock::return#2 ] : zp[4]:12 ,
Potential registers zp[4]:16 [ main::$1 ] : zp[4]:16 ,
Potential registers zp[4]:20 [ main::cyclecount#0 ] : zp[4]:20 ,
Potential registers zp[4]:24 [ print_ulong_at::dw#0 ] : zp[4]:24 ,
Potential registers zp[4]:28 [ clock::return#0 ] : zp[4]:28 ,
Potential registers zp[1]:32 [ print_uchar_at::$0 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:33 [ print_uchar_at::$2 ] : zp[1]:33 , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[2]:3 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] : zp[2]:3 ,
Potential registers zp[4]:22 [ clock::return#2 ] : zp[4]:22 ,
Potential registers zp[4]:26 [ main::$1 ] : zp[4]:26 ,
Potential registers zp[4]:30 [ main::cyclecount#0 ] : zp[4]:30 ,
Potential registers zp[4]:14 [ print_ulong_at::dw#0 ] : zp[4]:14 ,
Potential registers zp[4]:18 [ clock::return#0 ] : zp[4]:18 ,
Potential registers zp[1]:5 [ print_uchar_at::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ print_uchar_at::$2 ] : zp[1]:6 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [print_char_at] 150,006: zp[1]:9 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] 150,006: zp[2]:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Uplift Scope [print_uchar_at] 20,002: zp[1]:32 [ print_uchar_at::$0 ] 10,001: zp[1]:33 [ print_uchar_at::$2 ] 7,671.33: zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] 6,402.8: zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Uplift Scope [print_uint_at] 955: zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] 400.4: zp[2]:4 [ print_uint_at::at#2 ]
Uplift Scope [print_ulong_at] 71: zp[4]:24 [ print_ulong_at::dw#0 ]
Uplift Scope [clock] 28: zp[4]:28 [ clock::return#0 ] 22: zp[4]:12 [ clock::return#2 ]
Uplift Scope [main] 22: zp[4]:16 [ main::$1 ] 22: zp[4]:20 [ main::cyclecount#0 ]
Uplift Scope [print_char_at] 150,006: zp[1]:2 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] 150,006: zp[2]:3 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Uplift Scope [print_uchar_at] 20,002: zp[1]:5 [ print_uchar_at::$0 ] 10,001: zp[1]:6 [ print_uchar_at::$2 ] 7,671.33: zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] 6,402.8: zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Uplift Scope [print_uint_at] 955: zp[2]:10 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] 400.4: zp[2]:12 [ print_uint_at::at#2 ]
Uplift Scope [print_ulong_at] 71: zp[4]:14 [ print_ulong_at::dw#0 ]
Uplift Scope [clock] 28: zp[4]:18 [ clock::return#0 ] 22: zp[4]:22 [ clock::return#2 ]
Uplift Scope [main] 22: zp[4]:26 [ main::$1 ] 22: zp[4]:30 [ main::cyclecount#0 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
@ -631,27 +631,30 @@ Uplift Scope [clock_start]
Uplift Scope [RADIX]
Uplift Scope []
Uplifting [print_char_at] best 1739 combination reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] zp[2]:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Uplifting [print_uchar_at] best 1731 combination reg byte a [ print_uchar_at::$0 ] reg byte y [ print_uchar_at::$2 ] zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Uplifting [print_uint_at] best 1731 combination zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] zp[2]:4 [ print_uint_at::at#2 ]
Uplifting [print_ulong_at] best 1731 combination zp[4]:24 [ print_ulong_at::dw#0 ]
Uplifting [clock] best 1731 combination zp[4]:28 [ clock::return#0 ] zp[4]:12 [ clock::return#2 ]
Uplifting [main] best 1731 combination zp[4]:16 [ main::$1 ] zp[4]:20 [ main::cyclecount#0 ]
Uplifting [print_char_at] best 1739 combination reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] zp[2]:3 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Uplifting [print_uchar_at] best 1731 combination reg byte a [ print_uchar_at::$0 ] reg byte y [ print_uchar_at::$2 ] zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Uplifting [print_uint_at] best 1731 combination zp[2]:10 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] zp[2]:12 [ print_uint_at::at#2 ]
Uplifting [print_ulong_at] best 1731 combination zp[4]:14 [ print_ulong_at::dw#0 ]
Uplifting [clock] best 1731 combination zp[4]:18 [ clock::return#0 ] zp[4]:22 [ clock::return#2 ]
Uplifting [main] best 1731 combination zp[4]:26 [ main::$1 ] zp[4]:30 [ main::cyclecount#0 ]
Uplifting [MOS6526_CIA] best 1731 combination
Uplifting [MOS6569_VICII] best 1731 combination
Uplifting [MOS6581_SID] best 1731 combination
Uplifting [clock_start] best 1731 combination
Uplifting [RADIX] best 1731 combination
Uplifting [] best 1731 combination
Attempting to uplift remaining variables inzp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Uplifting [print_uchar_at] best 1731 combination zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Coalescing zero page register [ zp[2]:4 [ print_uint_at::at#2 ] ] with [ zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] ] - score: 2
Coalescing zero page register [ zp[4]:12 [ clock::return#2 ] ] with [ zp[4]:16 [ main::$1 ] ] - score: 1
Coalescing zero page register [ zp[4]:12 [ clock::return#2 main::$1 ] ] with [ zp[4]:28 [ clock::return#0 ] ] - score: 1
Coalescing zero page register [ zp[4]:20 [ main::cyclecount#0 ] ] with [ zp[4]:24 [ print_ulong_at::dw#0 ] ] - score: 1
Coalescing zero page register [ zp[4]:12 [ clock::return#2 main::$1 clock::return#0 ] ] with [ zp[4]:20 [ main::cyclecount#0 print_ulong_at::dw#0 ] ] - score: 1
Allocated (was zp[2]:10) zp[2]:7 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Allocated (was zp[4]:12) zp[4]:9 [ clock::return#2 main::$1 clock::return#0 main::cyclecount#0 print_ulong_at::dw#0 ]
Attempting to uplift remaining variables inzp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Uplifting [print_uchar_at] best 1731 combination zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Coalescing zero page register [ zp[2]:12 [ print_uint_at::at#2 ] ] with [ zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] ] - score: 2
Coalescing zero page register [ zp[4]:22 [ clock::return#2 ] ] with [ zp[4]:26 [ main::$1 ] ] - score: 1
Coalescing zero page register [ zp[4]:22 [ clock::return#2 main::$1 ] ] with [ zp[4]:18 [ clock::return#0 ] ] - score: 1
Coalescing zero page register [ zp[4]:30 [ main::cyclecount#0 ] ] with [ zp[4]:14 [ print_ulong_at::dw#0 ] ] - score: 1
Coalescing zero page register [ zp[4]:22 [ clock::return#2 main::$1 clock::return#0 ] ] with [ zp[4]:30 [ main::cyclecount#0 print_ulong_at::dw#0 ] ] - score: 1
Allocated (was zp[2]:3) zp[2]:2 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Allocated (was zp[2]:12) zp[2]:4 [ print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ]
Allocated (was zp[1]:9) zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Allocated (was zp[2]:10) zp[2]:7 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
Allocated (was zp[4]:22) zp[4]:9 [ clock::return#2 main::$1 clock::return#0 main::cyclecount#0 print_ulong_at::dw#0 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -838,9 +841,9 @@ print_ulong_at: {
}
// print_uint_at
// Print a unsigned int as HEX at a specific position
// void print_uint_at(__zp(2) unsigned int w, __zp(4) char *at)
// void print_uint_at(__zp(7) unsigned int w, __zp(4) char *at)
print_uint_at: {
.label w = 2
.label w = 7
.label at = 4
// [26] print_uchar_at::b#0 = byte1 print_uint_at::w#2 -- vbuz1=_byte1_vwuz2
lda.z w+1
@ -936,9 +939,9 @@ print_uchar_at: {
}
// print_char_at
// Print a single char
// void print_char_at(__register(X) char ch, __zp(7) char *at)
// void print_char_at(__register(X) char ch, __zp(2) char *at)
print_char_at: {
.label at = 7
.label at = 2
// [44] *print_char_at::at#2 = print_char_at::ch#2 -- _deref_pbuz1=vbuxx
txa
ldy #0
@ -1015,9 +1018,9 @@ unsigned long main::cyclecount
unsigned long main::cyclecount#0 // cyclecount zp[4]:9 22.0
void print_char_at(char ch , char *at)
char *print_char_at::at
char *print_char_at::at#0 // at zp[2]:7 20002.0
char *print_char_at::at#1 // at zp[2]:7 10001.0
char *print_char_at::at#2 // at zp[2]:7 120003.0
char *print_char_at::at#0 // at zp[2]:2 20002.0
char *print_char_at::at#1 // at zp[2]:2 10001.0
char *print_char_at::at#2 // at zp[2]:2 120003.0
char print_char_at::ch
char print_char_at::ch#0 // reg byte x 10001.0
char print_char_at::ch#1 // reg byte x 20002.0
@ -1038,19 +1041,19 @@ void print_uint_at(unsigned int w , char *at)
char *print_uint_at::at
char *print_uint_at::at#2 // at zp[2]:4 400.4
unsigned int print_uint_at::w
unsigned int print_uint_at::w#0 // w zp[2]:2 202.0
unsigned int print_uint_at::w#1 // w zp[2]:2 202.0
unsigned int print_uint_at::w#2 // w zp[2]:2 551.0
unsigned int print_uint_at::w#0 // w zp[2]:7 202.0
unsigned int print_uint_at::w#1 // w zp[2]:7 202.0
unsigned int print_uint_at::w#2 // w zp[2]:7 551.0
void print_ulong_at(unsigned long dw , char *at)
char *print_ulong_at::at
unsigned long print_ulong_at::dw
unsigned long print_ulong_at::dw#0 // dw zp[4]:9 71.0
zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
zp[2]:7 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
zp[2]:4 [ print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ]
zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
zp[2]:7 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
zp[2]:2 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
zp[4]:9 [ clock::return#2 main::$1 clock::return#0 main::cyclecount#0 print_ulong_at::dw#0 ]
reg byte a [ print_uchar_at::$0 ]
reg byte y [ print_uchar_at::$2 ]
@ -1244,9 +1247,9 @@ print_ulong_at: {
}
// print_uint_at
// Print a unsigned int as HEX at a specific position
// void print_uint_at(__zp(2) unsigned int w, __zp(4) char *at)
// void print_uint_at(__zp(7) unsigned int w, __zp(4) char *at)
print_uint_at: {
.label w = 2
.label w = 7
.label at = 4
// print_uchar_at(BYTE1(w), at)
// [26] print_uchar_at::b#0 = byte1 print_uint_at::w#2 -- vbuz1=_byte1_vwuz2
@ -1338,9 +1341,9 @@ print_uchar_at: {
}
// print_char_at
// Print a single char
// void print_char_at(__register(X) char ch, __zp(7) char *at)
// void print_char_at(__register(X) char ch, __zp(2) char *at)
print_char_at: {
.label at = 7
.label at = 2
// *(at) = ch
// [44] *print_char_at::at#2 = print_char_at::ch#2 -- _deref_pbuz1=vbuxx
txa

View File

@ -22,9 +22,9 @@ unsigned long main::cyclecount
unsigned long main::cyclecount#0 // cyclecount zp[4]:9 22.0
void print_char_at(char ch , char *at)
char *print_char_at::at
char *print_char_at::at#0 // at zp[2]:7 20002.0
char *print_char_at::at#1 // at zp[2]:7 10001.0
char *print_char_at::at#2 // at zp[2]:7 120003.0
char *print_char_at::at#0 // at zp[2]:2 20002.0
char *print_char_at::at#1 // at zp[2]:2 10001.0
char *print_char_at::at#2 // at zp[2]:2 120003.0
char print_char_at::ch
char print_char_at::ch#0 // reg byte x 10001.0
char print_char_at::ch#1 // reg byte x 20002.0
@ -45,19 +45,19 @@ void print_uint_at(unsigned int w , char *at)
char *print_uint_at::at
char *print_uint_at::at#2 // at zp[2]:4 400.4
unsigned int print_uint_at::w
unsigned int print_uint_at::w#0 // w zp[2]:2 202.0
unsigned int print_uint_at::w#1 // w zp[2]:2 202.0
unsigned int print_uint_at::w#2 // w zp[2]:2 551.0
unsigned int print_uint_at::w#0 // w zp[2]:7 202.0
unsigned int print_uint_at::w#1 // w zp[2]:7 202.0
unsigned int print_uint_at::w#2 // w zp[2]:7 551.0
void print_ulong_at(unsigned long dw , char *at)
char *print_ulong_at::at
unsigned long print_ulong_at::dw
unsigned long print_ulong_at::dw#0 // dw zp[4]:9 71.0
zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
zp[2]:7 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
zp[2]:4 [ print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ]
zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
zp[2]:7 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
zp[2]:2 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
zp[4]:9 [ clock::return#2 main::$1 clock::return#0 main::cyclecount#0 print_ulong_at::dw#0 ]
reg byte a [ print_uchar_at::$0 ]
reg byte y [ print_uchar_at::$2 ]

View File

@ -115,9 +115,9 @@ print_ulong_at: {
rts
}
// Print a unsigned int as HEX at a specific position
// void print_uint_at(__zp(2) unsigned int w, __zp(4) char *at)
// void print_uint_at(__zp(7) unsigned int w, __zp(4) char *at)
print_uint_at: {
.label w = 2
.label w = 7
.label at = 4
// print_uchar_at(BYTE1(w), at)
lda.z w+1
@ -175,9 +175,9 @@ print_uchar_at: {
rts
}
// Print a single char
// void print_char_at(__register(X) char ch, __zp(7) char *at)
// void print_char_at(__register(X) char ch, __zp(2) char *at)
print_char_at: {
.label at = 7
.label at = 2
// *(at) = ch
txa
ldy #0

View File

@ -527,17 +527,17 @@ Complete equivalence classes
[ clock::return#0 ]
[ print_uchar_at::$0 ]
[ print_uchar_at::$2 ]
Allocated zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
Allocated zp[2]:4 [ print_uint_at::at#2 ]
Allocated zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Allocated zp[1]:2 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
Allocated zp[2]:3 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Allocated zp[1]:5 [ print_uchar_at::$0 ]
Allocated zp[1]:6 [ print_uchar_at::$2 ]
Allocated zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ]
Allocated zp[1]:9 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
Allocated zp[2]:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Allocated zp[4]:12 [ clock::return#2 ]
Allocated zp[4]:16 [ print_ulong_at::dw#0 ]
Allocated zp[4]:20 [ clock::return#0 ]
Allocated zp[1]:24 [ print_uchar_at::$0 ]
Allocated zp[1]:25 [ print_uchar_at::$2 ]
Allocated zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Allocated zp[2]:10 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
Allocated zp[2]:12 [ print_uint_at::at#2 ]
Allocated zp[4]:14 [ print_ulong_at::dw#0 ]
Allocated zp[4]:18 [ clock::return#0 ]
Allocated zp[4]:22 [ clock::return#2 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] clock::return#2 = clock::return#0 [ clock::return#2 ] ( [ clock::return#2 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a
Statement [5] print_ulong_at::dw#0 = clock::return#2 [ print_ulong_at::dw#0 ] ( [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = clock::return#2 } } ) always clobbers reg byte a
@ -552,16 +552,16 @@ Statement [15] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_T
Statement [17] print_uint_at::w#0 = word1 print_ulong_at::dw#0 [ print_ulong_at::dw#0 print_uint_at::w#0 ] ( print_ulong_at:6 [ print_ulong_at::dw#0 print_uint_at::w#0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } } ) always clobbers reg byte a
Statement [19] print_uint_at::w#1 = word0 print_ulong_at::dw#0 [ print_uint_at::w#1 ] ( print_ulong_at:6 [ print_uint_at::w#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } } ) always clobbers reg byte a
Statement [24] print_uchar_at::at#0 = print_uint_at::at#2 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#0 print_uchar_at::at#0 ] ( print_ulong_at:6::print_uint_at:18 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#0 print_uchar_at::at#0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } } print_ulong_at:6::print_uint_at:20 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#0 print_uchar_at::at#0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Statement [27] print_uchar_at::at#1 = print_uint_at::at#2 + 2 [ print_uchar_at::b#1 print_uchar_at::at#1 ] ( print_ulong_at:6::print_uint_at:18 [ print_ulong_at::dw#0 print_uchar_at::b#1 print_uchar_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } } print_ulong_at:6::print_uint_at:20 [ print_uchar_at::b#1 print_uchar_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } } ) always clobbers reg byte a
Statement [31] print_uchar_at::$0 = print_uchar_at::b#2 >> 4 [ print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] ( print_ulong_at:6::print_uint_at:18::print_uchar_at:25 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:25 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:6::print_uint_at:18::print_uchar_at:28 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:28 [ print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } ) always clobbers reg byte a
Statement [33] print_char_at::at#0 = print_uchar_at::at#2 [ print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] ( print_ulong_at:6::print_uint_at:18::print_uchar_at:25 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:25 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:6::print_uint_at:18::print_uchar_at:28 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:28 [ print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:9 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
Statement [35] print_uchar_at::$2 = print_uchar_at::b#2 & $f [ print_uchar_at::at#2 print_uchar_at::$2 ] ( print_ulong_at:6::print_uint_at:18::print_uchar_at:25 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:25 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:18::print_uchar_at:28 [ print_ulong_at::dw#0 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:28 [ print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a
Statement [36] print_char_at::at#1 = print_uchar_at::at#2 + 1 [ print_uchar_at::$2 print_char_at::at#1 ] ( print_ulong_at:6::print_uint_at:18::print_uchar_at:25 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:25 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:18::print_uchar_at:28 [ print_ulong_at::dw#0 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:28 [ print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:25 [ print_uchar_at::$2 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ print_uchar_at::$2 ]
Statement [41] *print_char_at::at#2 = print_char_at::ch#2 [ ] ( print_ulong_at:6::print_uint_at:18::print_uchar_at:25::print_char_at:34 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:25::print_char_at:34 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:6::print_uint_at:18::print_uchar_at:28::print_char_at:34 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:28::print_char_at:34 [ print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:6::print_uint_at:18::print_uchar_at:25::print_char_at:38 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:25::print_char_at:38 [ print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:18::print_uchar_at:28::print_char_at:38 [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:28::print_char_at:38 [ ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Statement [4] clock::return#2 = clock::return#0 [ clock::return#2 ] ( [ clock::return#2 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a
Statement [5] print_ulong_at::dw#0 = clock::return#2 [ print_ulong_at::dw#0 ] ( [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = clock::return#2 } } ) always clobbers reg byte a
Statement [7] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = 0 [ ] ( clock_start:1 [ ] { } ) always clobbers reg byte a
@ -581,24 +581,24 @@ Statement [33] print_char_at::at#0 = print_uchar_at::at#2 [ print_uchar_at::b#2
Statement [35] print_uchar_at::$2 = print_uchar_at::b#2 & $f [ print_uchar_at::at#2 print_uchar_at::$2 ] ( print_ulong_at:6::print_uint_at:18::print_uchar_at:25 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:25 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:18::print_uchar_at:28 [ print_ulong_at::dw#0 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:28 [ print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a
Statement [36] print_char_at::at#1 = print_uchar_at::at#2 + 1 [ print_uchar_at::$2 print_char_at::at#1 ] ( print_ulong_at:6::print_uint_at:18::print_uchar_at:25 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:25 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:18::print_uchar_at:28 [ print_ulong_at::dw#0 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:28 [ print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a
Statement [41] *print_char_at::at#2 = print_char_at::ch#2 [ ] ( print_ulong_at:6::print_uint_at:18::print_uchar_at:25::print_char_at:34 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:25::print_char_at:34 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:6::print_uint_at:18::print_uchar_at:28::print_char_at:34 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:28::print_char_at:34 [ print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:6::print_uint_at:18::print_uchar_at:25::print_char_at:38 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:25::print_char_at:38 [ print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:18::print_uchar_at:28::print_char_at:38 [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:6::print_uint_at:20::print_uchar_at:28::print_char_at:38 [ ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a reg byte y
Potential registers zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] : zp[2]:2 ,
Potential registers zp[2]:4 [ print_uint_at::at#2 ] : zp[2]:4 ,
Potential registers zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ] : zp[1]:6 , reg byte x ,
Potential registers zp[2]:10 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] : zp[2]:10 ,
Potential registers zp[2]:12 [ print_uint_at::at#2 ] : zp[2]:12 ,
Potential registers zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ] : zp[1]:9 , reg byte x ,
Potential registers zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] : zp[2]:7 ,
Potential registers zp[1]:9 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] : zp[1]:9 , reg byte x , reg byte y ,
Potential registers zp[2]:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] : zp[2]:10 ,
Potential registers zp[4]:12 [ clock::return#2 ] : zp[4]:12 ,
Potential registers zp[4]:16 [ print_ulong_at::dw#0 ] : zp[4]:16 ,
Potential registers zp[4]:20 [ clock::return#0 ] : zp[4]:20 ,
Potential registers zp[1]:24 [ print_uchar_at::$0 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:25 [ print_uchar_at::$2 ] : zp[1]:25 , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[2]:3 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] : zp[2]:3 ,
Potential registers zp[4]:22 [ clock::return#2 ] : zp[4]:22 ,
Potential registers zp[4]:14 [ print_ulong_at::dw#0 ] : zp[4]:14 ,
Potential registers zp[4]:18 [ clock::return#0 ] : zp[4]:18 ,
Potential registers zp[1]:5 [ print_uchar_at::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ print_uchar_at::$2 ] : zp[1]:6 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [print_char_at] 150,006: zp[1]:9 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] 150,006: zp[2]:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Uplift Scope [print_uchar_at] 20,002: zp[1]:24 [ print_uchar_at::$0 ] 10,001: zp[1]:25 [ print_uchar_at::$2 ] 7,671.33: zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] 6,402.8: zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Uplift Scope [print_uint_at] 955: zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] 400.4: zp[2]:4 [ print_uint_at::at#2 ]
Uplift Scope [print_ulong_at] 71: zp[4]:16 [ print_ulong_at::dw#0 ]
Uplift Scope [clock] 28: zp[4]:20 [ clock::return#0 ] 22: zp[4]:12 [ clock::return#2 ]
Uplift Scope [print_char_at] 150,006: zp[1]:2 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] 150,006: zp[2]:3 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Uplift Scope [print_uchar_at] 20,002: zp[1]:5 [ print_uchar_at::$0 ] 10,001: zp[1]:6 [ print_uchar_at::$2 ] 7,671.33: zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] 6,402.8: zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Uplift Scope [print_uint_at] 955: zp[2]:10 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] 400.4: zp[2]:12 [ print_uint_at::at#2 ]
Uplift Scope [print_ulong_at] 71: zp[4]:14 [ print_ulong_at::dw#0 ]
Uplift Scope [clock] 28: zp[4]:18 [ clock::return#0 ] 22: zp[4]:22 [ clock::return#2 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
@ -607,11 +607,11 @@ Uplift Scope [RADIX]
Uplift Scope [main]
Uplift Scope []
Uplifting [print_char_at] best 1055 combination reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] zp[2]:10 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Uplifting [print_uchar_at] best 1047 combination reg byte a [ print_uchar_at::$0 ] reg byte y [ print_uchar_at::$2 ] zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Uplifting [print_uint_at] best 1047 combination zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] zp[2]:4 [ print_uint_at::at#2 ]
Uplifting [print_ulong_at] best 1047 combination zp[4]:16 [ print_ulong_at::dw#0 ]
Uplifting [clock] best 1047 combination zp[4]:20 [ clock::return#0 ] zp[4]:12 [ clock::return#2 ]
Uplifting [print_char_at] best 1055 combination reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] zp[2]:3 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Uplifting [print_uchar_at] best 1047 combination reg byte a [ print_uchar_at::$0 ] reg byte y [ print_uchar_at::$2 ] zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Uplifting [print_uint_at] best 1047 combination zp[2]:10 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] zp[2]:12 [ print_uint_at::at#2 ]
Uplifting [print_ulong_at] best 1047 combination zp[4]:14 [ print_ulong_at::dw#0 ]
Uplifting [clock] best 1047 combination zp[4]:18 [ clock::return#0 ] zp[4]:22 [ clock::return#2 ]
Uplifting [MOS6526_CIA] best 1047 combination
Uplifting [MOS6569_VICII] best 1047 combination
Uplifting [MOS6581_SID] best 1047 combination
@ -619,13 +619,16 @@ Uplifting [clock_start] best 1047 combination
Uplifting [RADIX] best 1047 combination
Uplifting [main] best 1047 combination
Uplifting [] best 1047 combination
Attempting to uplift remaining variables inzp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Uplifting [print_uchar_at] best 1047 combination zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Coalescing zero page register [ zp[2]:4 [ print_uint_at::at#2 ] ] with [ zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] ] - score: 2
Coalescing zero page register [ zp[4]:12 [ clock::return#2 ] ] with [ zp[4]:16 [ print_ulong_at::dw#0 ] ] - score: 1
Coalescing zero page register [ zp[4]:12 [ clock::return#2 print_ulong_at::dw#0 ] ] with [ zp[4]:20 [ clock::return#0 ] ] - score: 1
Allocated (was zp[2]:10) zp[2]:7 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Allocated (was zp[4]:12) zp[4]:9 [ clock::return#2 print_ulong_at::dw#0 clock::return#0 ]
Attempting to uplift remaining variables inzp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Uplifting [print_uchar_at] best 1047 combination zp[1]:9 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Coalescing zero page register [ zp[2]:12 [ print_uint_at::at#2 ] ] with [ zp[2]:7 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] ] - score: 2
Coalescing zero page register [ zp[4]:22 [ clock::return#2 ] ] with [ zp[4]:14 [ print_ulong_at::dw#0 ] ] - score: 1
Coalescing zero page register [ zp[4]:22 [ clock::return#2 print_ulong_at::dw#0 ] ] with [ zp[4]:18 [ clock::return#0 ] ] - score: 1
Allocated (was zp[2]:3) zp[2]:2 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Allocated (was zp[2]:12) zp[2]:4 [ print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ]
Allocated (was zp[1]:9) zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
Allocated (was zp[2]:10) zp[2]:7 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
Allocated (was zp[4]:22) zp[4]:9 [ clock::return#2 print_ulong_at::dw#0 clock::return#0 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -785,9 +788,9 @@ print_ulong_at: {
}
// print_uint_at
// Print a unsigned int as HEX at a specific position
// void print_uint_at(__zp(2) unsigned int w, __zp(4) char *at)
// void print_uint_at(__zp(7) unsigned int w, __zp(4) char *at)
print_uint_at: {
.label w = 2
.label w = 7
.label at = 4
// [23] print_uchar_at::b#0 = byte1 print_uint_at::w#2 -- vbuz1=_byte1_vwuz2
lda.z w+1
@ -883,9 +886,9 @@ print_uchar_at: {
}
// print_char_at
// Print a single char
// void print_char_at(__register(X) char ch, __zp(7) char *at)
// void print_char_at(__register(X) char ch, __zp(2) char *at)
print_char_at: {
.label at = 7
.label at = 2
// [41] *print_char_at::at#2 = print_char_at::ch#2 -- _deref_pbuz1=vbuxx
txa
ldy #0
@ -956,9 +959,9 @@ void clock_start()
void main()
void print_char_at(char ch , char *at)
char *print_char_at::at
char *print_char_at::at#0 // at zp[2]:7 20002.0
char *print_char_at::at#1 // at zp[2]:7 10001.0
char *print_char_at::at#2 // at zp[2]:7 120003.0
char *print_char_at::at#0 // at zp[2]:2 20002.0
char *print_char_at::at#1 // at zp[2]:2 10001.0
char *print_char_at::at#2 // at zp[2]:2 120003.0
char print_char_at::ch
char print_char_at::ch#0 // reg byte x 10001.0
char print_char_at::ch#1 // reg byte x 20002.0
@ -979,19 +982,19 @@ void print_uint_at(unsigned int w , char *at)
char *print_uint_at::at
char *print_uint_at::at#2 // at zp[2]:4 400.4
unsigned int print_uint_at::w
unsigned int print_uint_at::w#0 // w zp[2]:2 202.0
unsigned int print_uint_at::w#1 // w zp[2]:2 202.0
unsigned int print_uint_at::w#2 // w zp[2]:2 551.0
unsigned int print_uint_at::w#0 // w zp[2]:7 202.0
unsigned int print_uint_at::w#1 // w zp[2]:7 202.0
unsigned int print_uint_at::w#2 // w zp[2]:7 551.0
void print_ulong_at(unsigned long dw , char *at)
char *print_ulong_at::at
unsigned long print_ulong_at::dw
unsigned long print_ulong_at::dw#0 // dw zp[4]:9 71.0
zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
zp[2]:7 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
zp[2]:4 [ print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ]
zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
zp[2]:7 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
zp[2]:2 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
zp[4]:9 [ clock::return#2 print_ulong_at::dw#0 clock::return#0 ]
reg byte a [ print_uchar_at::$0 ]
reg byte y [ print_uchar_at::$2 ]
@ -1158,9 +1161,9 @@ print_ulong_at: {
}
// print_uint_at
// Print a unsigned int as HEX at a specific position
// void print_uint_at(__zp(2) unsigned int w, __zp(4) char *at)
// void print_uint_at(__zp(7) unsigned int w, __zp(4) char *at)
print_uint_at: {
.label w = 2
.label w = 7
.label at = 4
// print_uchar_at(BYTE1(w), at)
// [23] print_uchar_at::b#0 = byte1 print_uint_at::w#2 -- vbuz1=_byte1_vwuz2
@ -1252,9 +1255,9 @@ print_uchar_at: {
}
// print_char_at
// Print a single char
// void print_char_at(__register(X) char ch, __zp(7) char *at)
// void print_char_at(__register(X) char ch, __zp(2) char *at)
print_char_at: {
.label at = 7
.label at = 2
// *(at) = ch
// [41] *print_char_at::at#2 = print_char_at::ch#2 -- _deref_pbuz1=vbuxx
txa

View File

@ -18,9 +18,9 @@ void clock_start()
void main()
void print_char_at(char ch , char *at)
char *print_char_at::at
char *print_char_at::at#0 // at zp[2]:7 20002.0
char *print_char_at::at#1 // at zp[2]:7 10001.0
char *print_char_at::at#2 // at zp[2]:7 120003.0
char *print_char_at::at#0 // at zp[2]:2 20002.0
char *print_char_at::at#1 // at zp[2]:2 10001.0
char *print_char_at::at#2 // at zp[2]:2 120003.0
char print_char_at::ch
char print_char_at::ch#0 // reg byte x 10001.0
char print_char_at::ch#1 // reg byte x 20002.0
@ -41,19 +41,19 @@ void print_uint_at(unsigned int w , char *at)
char *print_uint_at::at
char *print_uint_at::at#2 // at zp[2]:4 400.4
unsigned int print_uint_at::w
unsigned int print_uint_at::w#0 // w zp[2]:2 202.0
unsigned int print_uint_at::w#1 // w zp[2]:2 202.0
unsigned int print_uint_at::w#2 // w zp[2]:2 551.0
unsigned int print_uint_at::w#0 // w zp[2]:7 202.0
unsigned int print_uint_at::w#1 // w zp[2]:7 202.0
unsigned int print_uint_at::w#2 // w zp[2]:7 551.0
void print_ulong_at(unsigned long dw , char *at)
char *print_ulong_at::at
unsigned long print_ulong_at::dw
unsigned long print_ulong_at::dw#0 // dw zp[4]:9 71.0
zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
zp[2]:7 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
zp[2]:4 [ print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ]
zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
zp[2]:7 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
zp[2]:2 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
zp[4]:9 [ clock::return#2 print_ulong_at::dw#0 clock::return#0 ]
reg byte a [ print_uchar_at::$0 ]
reg byte y [ print_uchar_at::$2 ]

View File

@ -204,34 +204,35 @@ Complete equivalence classes
[ main::idx#2 main::idx#3 main::idx#1 ]
[ main::f#0 ]
[ main::g#0 ]
Allocated zp[1]:2 [ main::a#4 main::a#1 ]
Allocated zp[1]:2 [ main::f#0 ]
Allocated zp[1]:3 [ main::d#0 main::b#1 ]
Allocated zp[1]:4 [ main::idx#2 main::idx#3 main::idx#1 ]
Allocated zp[1]:5 [ main::f#0 ]
Allocated zp[1]:6 [ main::g#0 ]
Allocated zp[1]:4 [ main::g#0 ]
Allocated zp[1]:5 [ main::idx#2 main::idx#3 main::idx#1 ]
Allocated zp[1]:6 [ main::a#4 main::a#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [3] main::f#0 = main::d#0 + main::a#4 [ main::a#4 main::d#0 main::idx#2 main::f#0 ] ( [ main::a#4 main::d#0 main::idx#2 main::f#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::a#4 main::a#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::a#4 main::a#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::d#0 main::b#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::idx#2 main::idx#3 main::idx#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::idx#2 main::idx#3 main::idx#1 ]
Statement [4] main::g#0 = main::f#0 + main::f#0 [ main::a#4 main::d#0 main::idx#2 main::g#0 ] ( [ main::a#4 main::d#0 main::idx#2 main::g#0 ] { } ) always clobbers reg byte a
Statement [3] main::f#0 = main::d#0 + main::a#4 [ main::a#4 main::d#0 main::idx#2 main::f#0 ] ( [ main::a#4 main::d#0 main::idx#2 main::f#0 ] { } ) always clobbers reg byte a
Statement [4] main::g#0 = main::f#0 + main::f#0 [ main::a#4 main::d#0 main::idx#2 main::g#0 ] ( [ main::a#4 main::d#0 main::idx#2 main::g#0 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::a#4 main::a#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ main::a#4 main::a#1 ] : zp[1]:6 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::d#0 main::b#1 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::idx#2 main::idx#3 main::idx#1 ] : zp[1]:4 , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ main::f#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ main::g#0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ main::idx#2 main::idx#3 main::idx#1 ] : zp[1]:5 , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ main::f#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::g#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 303: zp[1]:5 [ main::f#0 ] 212.1: zp[1]:3 [ main::d#0 main::b#1 ] 202: zp[1]:6 [ main::g#0 ] 143.1: zp[1]:4 [ main::idx#2 main::idx#3 main::idx#1 ] 31.88: zp[1]:2 [ main::a#4 main::a#1 ]
Uplift Scope [main] 303: zp[1]:2 [ main::f#0 ] 212.1: zp[1]:3 [ main::d#0 main::b#1 ] 202: zp[1]:4 [ main::g#0 ] 143.1: zp[1]:5 [ main::idx#2 main::idx#3 main::idx#1 ] 31.88: zp[1]:6 [ main::a#4 main::a#1 ]
Uplift Scope []
Uplifting [main] best 3641 combination reg byte a [ main::f#0 ] reg byte y [ main::d#0 main::b#1 ] reg byte a [ main::g#0 ] reg byte x [ main::idx#2 main::idx#3 main::idx#1 ] zp[1]:2 [ main::a#4 main::a#1 ]
Uplifting [main] best 3641 combination reg byte a [ main::f#0 ] reg byte y [ main::d#0 main::b#1 ] reg byte a [ main::g#0 ] reg byte x [ main::idx#2 main::idx#3 main::idx#1 ] zp[1]:6 [ main::a#4 main::a#1 ]
Limited combination testing to 100 combinations of 432 possible.
Uplifting [] best 3641 combination
Attempting to uplift remaining variables inzp[1]:2 [ main::a#4 main::a#1 ]
Uplifting [main] best 3641 combination zp[1]:2 [ main::a#4 main::a#1 ]
Attempting to uplift remaining variables inzp[1]:6 [ main::a#4 main::a#1 ]
Uplifting [main] best 3641 combination zp[1]:6 [ main::a#4 main::a#1 ]
Allocated (was zp[1]:6) zp[1]:2 [ main::a#4 main::a#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -119,14 +119,14 @@ Initial phi equivalence classes
Complete equivalence classes
[ main::i#2 main::i#1 ]
[ main::j#2 main::j#1 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:3 [ main::j#2 main::j#1 ]
Allocated zp[1]:2 [ main::j#2 main::j#1 ]
Allocated zp[1]:3 [ main::i#2 main::i#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::j#2 main::j#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::i#2 main::i#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ main::j#2 main::j#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 30.25: zp[1]:3 [ main::j#2 main::j#1 ] 25.67: zp[1]:2 [ main::i#2 main::i#1 ]
Uplift Scope [main] 30.25: zp[1]:2 [ main::j#2 main::j#1 ] 25.67: zp[1]:3 [ main::i#2 main::i#1 ]
Uplift Scope []
Uplifting [main] best 291 combination reg byte a [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]

View File

@ -119,14 +119,14 @@ Initial phi equivalence classes
Complete equivalence classes
[ main::i#2 main::i#1 ]
[ main::j#2 main::j#1 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:3 [ main::j#2 main::j#1 ]
Allocated zp[1]:2 [ main::j#2 main::j#1 ]
Allocated zp[1]:3 [ main::i#2 main::i#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::j#2 main::j#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::i#2 main::i#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ main::j#2 main::j#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 30.25: zp[1]:3 [ main::j#2 main::j#1 ] 25.67: zp[1]:2 [ main::i#2 main::i#1 ]
Uplift Scope [main] 30.25: zp[1]:2 [ main::j#2 main::j#1 ] 25.67: zp[1]:3 [ main::i#2 main::i#1 ]
Uplift Scope []
Uplifting [main] best 291 combination reg byte a [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]

View File

@ -429,16 +429,16 @@ Complete equivalence classes
[ main::i1#10 main::i1#1 ]
[ main::screen#2 main::screen#1 ]
[ main::$3 ]
Allocated zp[2]:2 [ main::sc#2 main::sc#1 ]
Allocated zp[1]:4 [ main::i#2 main::i#1 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[2]:3 [ main::sc#2 main::sc#1 ]
Allocated zp[1]:5 [ main::i1#10 main::i1#1 ]
Allocated zp[2]:6 [ main::screen#2 main::screen#1 ]
Allocated zp[1]:8 [ main::$3 ]
Allocated zp[1]:6 [ main::$3 ]
Allocated zp[2]:7 [ main::screen#2 main::screen#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [2] *main::sc#2 = ' ' [ main::sc#2 ] ( [ main::sc#2 ] { } ) always clobbers reg byte a reg byte y
Statement [4] if(main::sc#1!=main::SCREEN+$3e8+1) goto main::@1 [ main::sc#1 ] ( [ main::sc#1 ] { } ) always clobbers reg byte a
Statement [6] if(main::header[main::i#2]!=0) goto main::@3 [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Statement [10] main::screen#1 = main::screen#2 + $28 [ main::i1#10 main::screen#1 ] ( [ main::i1#10 main::screen#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::i1#10 main::i1#1 ]
Statement [11] main::$3 = '0' + main::i1#10 [ main::i1#10 main::screen#1 main::$3 ] ( [ main::i1#10 main::screen#1 main::$3 ] { } ) always clobbers reg byte a
@ -462,19 +462,20 @@ Statement [18] main::screen#1[8] = '+' [ main::i1#10 main::screen#1 ] ( [ main:
Statement [20] main::screen#1[$b] = '+' [ main::i1#10 main::screen#1 ] ( [ main::i1#10 main::screen#1 ] { } ) always clobbers reg byte a reg byte y
Statement [22] main::screen#1[$e] = '+' [ main::i1#10 main::screen#1 ] ( [ main::i1#10 main::screen#1 ] { } ) always clobbers reg byte a reg byte y
Statement [24] main::SCREEN[main::i#2] = main::header[main::i#2] [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a
Potential registers zp[2]:2 [ main::sc#2 main::sc#1 ] : zp[2]:2 ,
Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , reg byte x , reg byte y ,
Potential registers zp[2]:3 [ main::sc#2 main::sc#1 ] : zp[2]:3 ,
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ main::i1#10 main::i1#1 ] : zp[1]:5 , reg byte x ,
Potential registers zp[2]:6 [ main::screen#2 main::screen#1 ] : zp[2]:6 ,
Potential registers zp[1]:8 [ main::$3 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:7 [ main::screen#2 main::screen#1 ] : zp[2]:7 ,
Potential registers zp[1]:6 [ main::$3 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 40.33: zp[1]:4 [ main::i#2 main::i#1 ] 33: zp[2]:2 [ main::sc#2 main::sc#1 ] 28.6: zp[1]:5 [ main::i1#10 main::i1#1 ] 22: zp[1]:8 [ main::$3 ] 17.29: zp[2]:6 [ main::screen#2 main::screen#1 ]
Uplift Scope [main] 40.33: zp[1]:2 [ main::i#2 main::i#1 ] 33: zp[2]:3 [ main::sc#2 main::sc#1 ] 28.6: zp[1]:5 [ main::i1#10 main::i1#1 ] 22: zp[1]:6 [ main::$3 ] 17.29: zp[2]:7 [ main::screen#2 main::screen#1 ]
Uplift Scope []
Uplifting [main] best 2441 combination reg byte x [ main::i#2 main::i#1 ] zp[2]:2 [ main::sc#2 main::sc#1 ] reg byte x [ main::i1#10 main::i1#1 ] reg byte a [ main::$3 ] zp[2]:6 [ main::screen#2 main::screen#1 ]
Uplifting [main] best 2441 combination reg byte x [ main::i#2 main::i#1 ] zp[2]:3 [ main::sc#2 main::sc#1 ] reg byte x [ main::i1#10 main::i1#1 ] reg byte a [ main::$3 ] zp[2]:7 [ main::screen#2 main::screen#1 ]
Uplifting [] best 2441 combination
Allocated (was zp[2]:6) zp[2]:4 [ main::screen#2 main::screen#1 ]
Allocated (was zp[2]:3) zp[2]:2 [ main::sc#2 main::sc#1 ]
Allocated (was zp[2]:7) zp[2]:4 [ main::screen#2 main::screen#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -34,8 +34,8 @@ syscall1: {
}
main: {
// Print message
.label sc = 4
.label msg = 2
.label sc = 6
.label msg = 4
// *VICII_MEMORY = 0x14
// Initialize screen memory
lda #$14
@ -103,11 +103,11 @@ main: {
jmp __b1
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp(6) void *str, __register(X) char c, unsigned int num)
// void * memset(__zp(2) void *str, __register(X) char c, unsigned int num)
memset: {
.label end = 8
.label dst = 6
.label str = 6
.label dst = 2
.label str = 2
// char* end = (char*)str + num
lda.z str
clc

View File

@ -449,12 +449,12 @@ Complete equivalence classes
[ memset::c#4 ]
[ memset::dst#2 memset::dst#4 memset::dst#1 ]
[ memset::end#0 ]
Allocated zp[2]:2 [ main::msg#2 main::msg#1 ]
Allocated zp[2]:4 [ main::sc#2 main::sc#1 ]
Allocated zp[2]:6 [ memset::str#3 ]
Allocated zp[1]:8 [ memset::c#4 ]
Allocated zp[2]:9 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[2]:11 [ memset::end#0 ]
Allocated zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[2]:4 [ main::msg#2 main::msg#1 ]
Allocated zp[2]:6 [ main::sc#2 main::sc#1 ]
Allocated zp[2]:8 [ memset::end#0 ]
Allocated zp[1]:10 [ memset::c#4 ]
Allocated zp[2]:11 [ memset::str#3 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [0] *(SCREEN+$4e) = '<' [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *(SCREEN+$4f) = '>' [ ] ( [ ] { } ) always clobbers reg byte a
@ -466,11 +466,11 @@ Statement [12] *BG_COLOR = BLACK [ ] ( [ ] { } ) always clobbers reg byte a
Statement [13] *BG_COLOR = WHITE [ ] ( [ ] { } ) always clobbers reg byte a
Statement [14] *main::sc#2 = *main::msg#2 [ main::msg#2 main::sc#2 ] ( [ main::msg#2 main::sc#2 ] { } ) always clobbers reg byte a reg byte y
Statement [18] memset::end#0 = (char *)memset::str#3 + (unsigned int)$28*$19 [ memset::str#3 memset::c#4 memset::end#0 ] ( memset:5 [ memset::str#3 memset::c#4 memset::end#0 ] { } memset:7 [ memset::str#3 memset::c#4 memset::end#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:8 [ memset::c#4 ]
Removing always clobbered register reg byte a as potential for zp[1]:10 [ memset::c#4 ]
Statement [19] memset::dst#4 = (char *)memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( memset:5 [ memset::c#4 memset::end#0 memset::dst#4 ] { } memset:7 [ memset::c#4 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a
Statement [21] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( memset:5 [ memset::c#4 memset::end#0 memset::dst#2 ] { } memset:7 [ memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a
Statement [23] *memset::dst#2 = memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( memset:5 [ memset::c#4 memset::end#0 memset::dst#2 ] { } memset:7 [ memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:8 [ memset::c#4 ]
Removing always clobbered register reg byte y as potential for zp[1]:10 [ memset::c#4 ]
Statement [0] *(SCREEN+$4e) = '<' [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *(SCREEN+$4f) = '>' [ ] ( [ ] { } ) always clobbers reg byte a
Statement [4] *VICII_MEMORY = $14 [ ] ( [ ] { } ) always clobbers reg byte a
@ -484,29 +484,29 @@ Statement [18] memset::end#0 = (char *)memset::str#3 + (unsigned int)$28*$19 [ m
Statement [19] memset::dst#4 = (char *)memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( memset:5 [ memset::c#4 memset::end#0 memset::dst#4 ] { } memset:7 [ memset::c#4 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a
Statement [21] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( memset:5 [ memset::c#4 memset::end#0 memset::dst#2 ] { } memset:7 [ memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a
Statement [23] *memset::dst#2 = memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( memset:5 [ memset::c#4 memset::end#0 memset::dst#2 ] { } memset:7 [ memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
Potential registers zp[2]:2 [ main::msg#2 main::msg#1 ] : zp[2]:2 ,
Potential registers zp[2]:4 [ main::sc#2 main::sc#1 ] : zp[2]:4 ,
Potential registers zp[2]:6 [ memset::str#3 ] : zp[2]:6 ,
Potential registers zp[1]:8 [ memset::c#4 ] : zp[1]:8 , reg byte x ,
Potential registers zp[2]:9 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:9 ,
Potential registers zp[2]:11 [ memset::end#0 ] : zp[2]:11 ,
Potential registers zp[2]:4 [ main::msg#2 main::msg#1 ] : zp[2]:4 ,
Potential registers zp[2]:6 [ main::sc#2 main::sc#1 ] : zp[2]:6 ,
Potential registers zp[2]:11 [ memset::str#3 ] : zp[2]:11 ,
Potential registers zp[1]:10 [ memset::c#4 ] : zp[1]:10 , reg byte x ,
Potential registers zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:2 ,
Potential registers zp[2]:8 [ memset::end#0 ] : zp[2]:8 ,
REGISTER UPLIFT SCOPES
Uplift Scope [memset] 362.33: zp[2]:9 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 18.67: zp[2]:11 [ memset::end#0 ] 14.43: zp[1]:8 [ memset::c#4 ] 0: zp[2]:6 [ memset::str#3 ]
Uplift Scope [main] 33: zp[2]:2 [ main::msg#2 main::msg#1 ] 22: zp[2]:4 [ main::sc#2 main::sc#1 ]
Uplift Scope [memset] 362.33: zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 18.67: zp[2]:8 [ memset::end#0 ] 14.43: zp[1]:10 [ memset::c#4 ] 0: zp[2]:11 [ memset::str#3 ]
Uplift Scope [main] 33: zp[2]:4 [ main::msg#2 main::msg#1 ] 22: zp[2]:6 [ main::sc#2 main::sc#1 ]
Uplift Scope [syscall1]
Uplift Scope [syscall2]
Uplift Scope [SysCall]
Uplift Scope []
Uplifting [memset] best 1851 combination zp[2]:9 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:11 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:6 [ memset::str#3 ]
Uplifting [main] best 1851 combination zp[2]:2 [ main::msg#2 main::msg#1 ] zp[2]:4 [ main::sc#2 main::sc#1 ]
Uplifting [memset] best 1851 combination zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:8 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:11 [ memset::str#3 ]
Uplifting [main] best 1851 combination zp[2]:4 [ main::msg#2 main::msg#1 ] zp[2]:6 [ main::sc#2 main::sc#1 ]
Uplifting [syscall1] best 1851 combination
Uplifting [syscall2] best 1851 combination
Uplifting [SysCall] best 1851 combination
Uplifting [] best 1851 combination
Coalescing zero page register [ zp[2]:6 [ memset::str#3 ] ] with [ zp[2]:9 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Allocated (was zp[2]:11) zp[2]:8 [ memset::end#0 ]
Coalescing zero page register [ zp[2]:11 [ memset::str#3 ] ] with [ zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Allocated (was zp[2]:11) zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -557,8 +557,8 @@ syscall1: {
// main
main: {
// Print message
.label sc = 4
.label msg = 2
.label sc = 6
.label msg = 4
// [4] *VICII_MEMORY = $14 -- _deref_pbuc1=vbuc2
// Initialize screen memory
lda #$14
@ -663,11 +663,11 @@ main: {
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp(6) void *str, __register(X) char c, unsigned int num)
// void * memset(__zp(2) void *str, __register(X) char c, unsigned int num)
memset: {
.label end = 8
.label dst = 6
.label str = 6
.label dst = 2
.label str = 2
jmp __b1
// memset::@1
__b1:
@ -774,30 +774,30 @@ __constant char * const VICII_MEMORY = (char *) 53272
__constant const char WHITE = 1
void main()
char *main::msg
char *main::msg#1 // msg zp[2]:2 22.0
char *main::msg#2 // msg zp[2]:2 11.0
char *main::msg#1 // msg zp[2]:4 22.0
char *main::msg#2 // msg zp[2]:4 11.0
char *main::sc
char *main::sc#1 // sc zp[2]:4 11.0
char *main::sc#2 // sc zp[2]:4 11.0
char *main::sc#1 // sc zp[2]:6 11.0
char *main::sc#2 // sc zp[2]:6 11.0
void * memset(void *str , char c , unsigned int num)
char memset::c
char memset::c#4 // reg byte x 14.428571428571429
char *memset::dst
char *memset::dst#1 // dst zp[2]:6 202.0
char *memset::dst#2 // dst zp[2]:6 138.33333333333331
char *memset::dst#4 // dst zp[2]:6 22.0
char *memset::dst#1 // dst zp[2]:2 202.0
char *memset::dst#2 // dst zp[2]:2 138.33333333333331
char *memset::dst#4 // dst zp[2]:2 22.0
char *memset::end
char *memset::end#0 // end zp[2]:8 18.666666666666664
unsigned int memset::num
void *memset::return
void *memset::str
void *memset::str#3 // str zp[2]:6
void *memset::str#3 // str zp[2]:2
void syscall1()
void syscall2()
zp[2]:2 [ main::msg#2 main::msg#1 ]
zp[2]:4 [ main::sc#2 main::sc#1 ]
zp[2]:6 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
zp[2]:4 [ main::msg#2 main::msg#1 ]
zp[2]:6 [ main::sc#2 main::sc#1 ]
zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
reg byte x [ memset::c#4 ]
zp[2]:8 [ memset::end#0 ]
@ -853,8 +853,8 @@ syscall1: {
// main
main: {
// Print message
.label sc = 4
.label msg = 2
.label sc = 6
.label msg = 4
// *VICII_MEMORY = 0x14
// [4] *VICII_MEMORY = $14 -- _deref_pbuc1=vbuc2
// Initialize screen memory
@ -954,11 +954,11 @@ main: {
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(__zp(6) void *str, __register(X) char c, unsigned int num)
// void * memset(__zp(2) void *str, __register(X) char c, unsigned int num)
memset: {
.label end = 8
.label dst = 6
.label str = 6
.label dst = 2
.label str = 2
// memset::@1
// char* end = (char*)str + num
// [18] memset::end#0 = (char *)memset::str#3 + (unsigned int)$28*$19 -- pbuz1=pbuz2_plus_vwuc1

View File

@ -12,29 +12,29 @@ __constant char * const VICII_MEMORY = (char *) 53272
__constant const char WHITE = 1
void main()
char *main::msg
char *main::msg#1 // msg zp[2]:2 22.0
char *main::msg#2 // msg zp[2]:2 11.0
char *main::msg#1 // msg zp[2]:4 22.0
char *main::msg#2 // msg zp[2]:4 11.0
char *main::sc
char *main::sc#1 // sc zp[2]:4 11.0
char *main::sc#2 // sc zp[2]:4 11.0
char *main::sc#1 // sc zp[2]:6 11.0
char *main::sc#2 // sc zp[2]:6 11.0
void * memset(void *str , char c , unsigned int num)
char memset::c
char memset::c#4 // reg byte x 14.428571428571429
char *memset::dst
char *memset::dst#1 // dst zp[2]:6 202.0
char *memset::dst#2 // dst zp[2]:6 138.33333333333331
char *memset::dst#4 // dst zp[2]:6 22.0
char *memset::dst#1 // dst zp[2]:2 202.0
char *memset::dst#2 // dst zp[2]:2 138.33333333333331
char *memset::dst#4 // dst zp[2]:2 22.0
char *memset::end
char *memset::end#0 // end zp[2]:8 18.666666666666664
unsigned int memset::num
void *memset::return
void *memset::str
void *memset::str#3 // str zp[2]:6
void *memset::str#3 // str zp[2]:2
void syscall1()
void syscall2()
zp[2]:2 [ main::msg#2 main::msg#1 ]
zp[2]:4 [ main::sc#2 main::sc#1 ]
zp[2]:6 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
zp[2]:4 [ main::msg#2 main::msg#1 ]
zp[2]:6 [ main::sc#2 main::sc#1 ]
zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
reg byte x [ memset::c#4 ]
zp[2]:8 [ memset::end#0 ]

View File

@ -339,19 +339,19 @@ Complete equivalence classes
[ main::idx#10 main::idx#11 main::idx#4 ]
[ main::i1#2 main::i1#1 ]
[ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:2 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ]
Allocated zp[1]:3 [ main::idx#10 main::idx#11 main::idx#4 ]
Allocated zp[2]:4 [ main::i1#2 main::i1#1 ]
Allocated zp[1]:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ]
Allocated zp[1]:4 [ main::i#2 main::i#1 ]
Allocated zp[2]:5 [ main::i1#2 main::i1#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] *SCREEN = '+' [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *(SCREEN+1) = ' ' [ ] ( [ ] { } ) always clobbers reg byte a
Statement [5] SCREEN[main::idx#10] = '+' [ main::i#2 main::idx#10 ] ( [ main::i#2 main::idx#10 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::idx#10 main::idx#11 main::idx#4 ]
Statement [10] SCREEN[main::idx#11] = ' ' [ main::idx#11 ] ( [ main::idx#11 ] { } ) always clobbers reg byte a
Statement [13] if(0==main::i1#2) goto main::@8 [ main::i1#2 main::idx#12 ] ( [ main::i1#2 main::idx#12 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ]
Statement [14] SCREEN[main::idx#12] = '+' [ main::i1#2 main::idx#12 ] ( [ main::i1#2 main::idx#12 ] { } ) always clobbers reg byte a
Statement [18] if(main::i1#1!=3) goto main::@7 [ main::i1#1 main::idx#17 ] ( [ main::i1#1 main::idx#17 ] { } ) always clobbers reg byte a
Statement [1] *SCREEN = '+' [ ] ( [ ] { } ) always clobbers reg byte a
@ -361,18 +361,18 @@ Statement [10] SCREEN[main::idx#11] = ' ' [ main::idx#11 ] ( [ main::idx#11 ] {
Statement [13] if(0==main::i1#2) goto main::@8 [ main::i1#2 main::idx#12 ] ( [ main::i1#2 main::idx#12 ] { } ) always clobbers reg byte a
Statement [14] SCREEN[main::idx#12] = '+' [ main::i1#2 main::idx#12 ] ( [ main::i1#2 main::idx#12 ] { } ) always clobbers reg byte a
Statement [18] if(main::i1#1!=3) goto main::@7 [ main::i1#1 main::idx#17 ] ( [ main::i1#1 main::idx#17 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::idx#10 main::idx#11 main::idx#4 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[2]:4 [ main::i1#2 main::i1#1 ] : zp[2]:4 ,
Potential registers zp[1]:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] : zp[1]:6 , reg byte x , reg byte y ,
Potential registers zp[2]:5 [ main::i1#2 main::i1#1 ] : zp[2]:5 ,
Potential registers zp[1]:2 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] : zp[1]:2 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 52.33: zp[1]:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] 45.92: zp[1]:3 [ main::idx#10 main::idx#11 main::idx#4 ] 23.1: zp[1]:2 [ main::i#2 main::i#1 ] 23.1: zp[2]:4 [ main::i1#2 main::i1#1 ]
Uplift Scope [main] 52.33: zp[1]:2 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] 45.92: zp[1]:3 [ main::idx#10 main::idx#11 main::idx#4 ] 23.1: zp[1]:4 [ main::i#2 main::i#1 ] 23.1: zp[2]:5 [ main::i1#2 main::i1#1 ]
Uplift Scope []
Uplifting [main] best 1130 combination reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] reg byte x [ main::i#2 main::i#1 ] zp[2]:4 [ main::i1#2 main::i1#1 ]
Uplifting [main] best 1130 combination reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] reg byte x [ main::i#2 main::i#1 ] zp[2]:5 [ main::i1#2 main::i1#1 ]
Uplifting [] best 1130 combination
Allocated (was zp[2]:4) zp[2]:2 [ main::i1#2 main::i1#1 ]
Allocated (was zp[2]:5) zp[2]:2 [ main::i1#2 main::i1#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -341,19 +341,19 @@ Complete equivalence classes
[ main::idx#10 main::idx#11 main::idx#4 ]
[ main::i1#2 main::i1#1 ]
[ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:2 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ]
Allocated zp[1]:3 [ main::idx#10 main::idx#11 main::idx#4 ]
Allocated zp[2]:4 [ main::i1#2 main::i1#1 ]
Allocated zp[1]:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ]
Allocated zp[1]:4 [ main::i#2 main::i#1 ]
Allocated zp[2]:5 [ main::i1#2 main::i1#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] *SCREEN = '0' [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *(SCREEN+1) = ' ' [ ] ( [ ] { } ) always clobbers reg byte a
Statement [5] SCREEN[main::idx#10] = '0' [ main::i#2 main::idx#10 ] ( [ main::i#2 main::idx#10 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::idx#10 main::idx#11 main::idx#4 ]
Statement [10] SCREEN[main::idx#11] = ' ' [ main::idx#11 ] ( [ main::idx#11 ] { } ) always clobbers reg byte a
Statement [13] if(0!=main::i1#2) goto main::@8 [ main::i1#2 main::idx#12 ] ( [ main::i1#2 main::idx#12 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ]
Statement [14] SCREEN[main::idx#12] = '0' [ main::i1#2 main::idx#12 ] ( [ main::i1#2 main::idx#12 ] { } ) always clobbers reg byte a
Statement [18] if(main::i1#1!=3) goto main::@7 [ main::i1#1 main::idx#17 ] ( [ main::i1#1 main::idx#17 ] { } ) always clobbers reg byte a
Statement [1] *SCREEN = '0' [ ] ( [ ] { } ) always clobbers reg byte a
@ -363,18 +363,18 @@ Statement [10] SCREEN[main::idx#11] = ' ' [ main::idx#11 ] ( [ main::idx#11 ] {
Statement [13] if(0!=main::i1#2) goto main::@8 [ main::i1#2 main::idx#12 ] ( [ main::i1#2 main::idx#12 ] { } ) always clobbers reg byte a
Statement [14] SCREEN[main::idx#12] = '0' [ main::i1#2 main::idx#12 ] ( [ main::i1#2 main::idx#12 ] { } ) always clobbers reg byte a
Statement [18] if(main::i1#1!=3) goto main::@7 [ main::i1#1 main::idx#17 ] ( [ main::i1#1 main::idx#17 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::idx#10 main::idx#11 main::idx#4 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[2]:4 [ main::i1#2 main::i1#1 ] : zp[2]:4 ,
Potential registers zp[1]:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] : zp[1]:6 , reg byte x , reg byte y ,
Potential registers zp[2]:5 [ main::i1#2 main::i1#1 ] : zp[2]:5 ,
Potential registers zp[1]:2 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] : zp[1]:2 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 52.33: zp[1]:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] 45.92: zp[1]:3 [ main::idx#10 main::idx#11 main::idx#4 ] 23.1: zp[1]:2 [ main::i#2 main::i#1 ] 23.1: zp[2]:4 [ main::i1#2 main::i1#1 ]
Uplift Scope [main] 52.33: zp[1]:2 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] 45.92: zp[1]:3 [ main::idx#10 main::idx#11 main::idx#4 ] 23.1: zp[1]:4 [ main::i#2 main::i#1 ] 23.1: zp[2]:5 [ main::i1#2 main::i1#1 ]
Uplift Scope []
Uplifting [main] best 1130 combination reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] reg byte x [ main::i#2 main::i#1 ] zp[2]:4 [ main::i1#2 main::i1#1 ]
Uplifting [main] best 1130 combination reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] reg byte x [ main::i#2 main::i#1 ] zp[2]:5 [ main::i1#2 main::i1#1 ]
Uplifting [] best 1130 combination
Allocated (was zp[2]:4) zp[2]:2 [ main::i1#2 main::i1#1 ]
Allocated (was zp[2]:5) zp[2]:2 [ main::i1#2 main::i1#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -287,44 +287,43 @@ Complete equivalence classes
[ idx#13 idx#3 idx#14 ]
[ main::j#1 ]
[ main::k#1 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:3 [ idx#10 idx#0 ]
Allocated zp[1]:4 [ main::j#2 main::j#4 ]
Allocated zp[1]:5 [ idx#11 idx#1 idx#2 ]
Allocated zp[1]:6 [ main::k#2 main::k#3 ]
Allocated zp[1]:7 [ idx#13 idx#3 idx#14 ]
Allocated zp[1]:8 [ main::j#1 ]
Allocated zp[1]:9 [ main::k#1 ]
Allocated zp[1]:2 [ main::j#2 main::j#4 ]
Allocated zp[1]:3 [ main::i#2 main::i#1 ]
Allocated zp[1]:4 [ main::k#2 main::k#3 ]
Allocated zp[1]:5 [ idx#13 idx#3 idx#14 ]
Allocated zp[1]:6 [ idx#11 idx#1 idx#2 ]
Allocated zp[1]:7 [ idx#10 idx#0 ]
Allocated zp[1]:8 [ main::k#1 ]
Allocated zp[1]:9 [ main::j#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [3] SCREEN[idx#10] = ' ' [ idx#10 ] ( [ idx#10 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:3 [ idx#10 idx#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:7 [ idx#10 idx#0 ]
Statement [8] SCREEN[idx#11] = ' ' [ idx#11 ] ( [ idx#11 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:5 [ idx#11 idx#1 idx#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ idx#11 idx#1 idx#2 ]
Statement [3] SCREEN[idx#10] = ' ' [ idx#10 ] ( [ idx#10 ] { } ) always clobbers reg byte a
Statement [8] SCREEN[idx#11] = ' ' [ idx#11 ] ( [ idx#11 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ idx#10 idx#0 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::j#2 main::j#4 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ idx#11 idx#1 idx#2 ] : zp[1]:5 , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ main::k#2 main::k#3 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ idx#13 idx#3 idx#14 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ main::j#1 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:9 [ main::k#1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::i#2 main::i#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ idx#10 idx#0 ] : zp[1]:7 , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ main::j#2 main::j#4 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ idx#11 idx#1 idx#2 ] : zp[1]:6 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::k#2 main::k#3 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ idx#13 idx#3 idx#14 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:9 [ main::j#1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ main::k#1 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 38.5: zp[1]:4 [ main::j#2 main::j#4 ] 33: zp[1]:2 [ main::i#2 main::i#1 ] 33: zp[1]:6 [ main::k#2 main::k#3 ] 11: zp[1]:9 [ main::k#1 ] 8.25: zp[1]:8 [ main::j#1 ]
Uplift Scope [] 27: zp[1]:7 [ idx#13 idx#3 idx#14 ] 22.8: zp[1]:5 [ idx#11 idx#1 idx#2 ] 20.25: zp[1]:3 [ idx#10 idx#0 ]
Uplift Scope [main] 38.5: zp[1]:2 [ main::j#2 main::j#4 ] 33: zp[1]:3 [ main::i#2 main::i#1 ] 33: zp[1]:4 [ main::k#2 main::k#3 ] 11: zp[1]:8 [ main::k#1 ] 8.25: zp[1]:9 [ main::j#1 ]
Uplift Scope [] 27: zp[1]:5 [ idx#13 idx#3 idx#14 ] 22.8: zp[1]:6 [ idx#11 idx#1 idx#2 ] 20.25: zp[1]:7 [ idx#10 idx#0 ]
Uplifting [main] best 1377 combination zp[1]:4 [ main::j#2 main::j#4 ] zp[1]:2 [ main::i#2 main::i#1 ] reg byte x [ main::k#2 main::k#3 ] reg byte a [ main::k#1 ] zp[1]:8 [ main::j#1 ]
Uplifting [main] best 1377 combination zp[1]:2 [ main::j#2 main::j#4 ] zp[1]:3 [ main::i#2 main::i#1 ] reg byte x [ main::k#2 main::k#3 ] reg byte a [ main::k#1 ] zp[1]:9 [ main::j#1 ]
Limited combination testing to 100 combinations of 1024 possible.
Uplifting [] best 1153 combination reg byte y [ idx#13 idx#3 idx#14 ] reg byte x [ idx#11 idx#1 idx#2 ] reg byte x [ idx#10 idx#0 ]
Attempting to uplift remaining variables inzp[1]:4 [ main::j#2 main::j#4 ]
Uplifting [main] best 1153 combination zp[1]:4 [ main::j#2 main::j#4 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::i#2 main::i#1 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::j#2 main::j#4 ]
Uplifting [main] best 1153 combination zp[1]:2 [ main::j#2 main::j#4 ]
Attempting to uplift remaining variables inzp[1]:3 [ main::i#2 main::i#1 ]
Uplifting [main] best 1073 combination reg byte a [ main::i#2 main::i#1 ]
Attempting to uplift remaining variables inzp[1]:8 [ main::j#1 ]
Attempting to uplift remaining variables inzp[1]:9 [ main::j#1 ]
Uplifting [main] best 1003 combination reg byte y [ main::j#1 ]
Allocated (was zp[1]:4) zp[1]:2 [ main::j#2 main::j#4 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -11,8 +11,8 @@
.label SCREEN = $400
.segment Code
main: {
.label __4 = 2
.label __5 = 3
.label __4 = 3
.label __5 = 2
ldy #0
ldx #0
__b1:

View File

@ -347,16 +347,16 @@ Complete equivalence classes
[ main::$5 ]
Allocated zp[1]:2 [ main::i#10 main::i#1 ]
Allocated zp[1]:3 [ main::idx#10 main::idx#1 ]
Allocated zp[1]:4 [ main::$4 ]
Allocated zp[1]:5 [ main::$5 ]
Allocated zp[1]:4 [ main::$5 ]
Allocated zp[1]:5 [ main::$4 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] SCREEN[main::idx#10] = '+' [ main::i#10 main::idx#10 main::$4 ] ( [ main::i#10 main::idx#10 main::$4 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#10 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::idx#10 main::idx#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::$4 ]
Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::$4 ]
Statement [5] main::$5 = main::i#10 & 2 [ main::i#10 main::idx#10 main::$4 main::$5 ] ( [ main::i#10 main::idx#10 main::$4 main::$5 ] { } ) always clobbers reg byte a
Statement [7] (SCREEN+$28*1)[main::idx#10] = '+' [ main::i#10 main::idx#10 main::$4 main::$5 ] ( [ main::i#10 main::idx#10 main::$4 main::$5 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::$5 ]
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::$5 ]
Statement [10] (SCREEN+$28*2)[main::idx#10] = '+' [ main::i#10 main::idx#10 main::$4 main::$5 ] ( [ main::i#10 main::idx#10 main::$4 main::$5 ] { } ) always clobbers reg byte a
Statement [13] (SCREEN+$28*3)[main::idx#10] = '+' [ main::i#10 main::idx#10 ] ( [ main::i#10 main::idx#10 ] { } ) always clobbers reg byte a
Statement [2] main::$4 = main::i#10 & 1 [ main::i#10 main::idx#10 main::$4 ] ( [ main::i#10 main::idx#10 main::$4 ] { } ) always clobbers reg byte a
@ -367,21 +367,21 @@ Statement [10] (SCREEN+$28*2)[main::idx#10] = '+' [ main::i#10 main::idx#10 main
Statement [13] (SCREEN+$28*3)[main::idx#10] = '+' [ main::i#10 main::idx#10 ] ( [ main::i#10 main::idx#10 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::i#10 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::idx#10 main::idx#1 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::$4 ] : zp[1]:4 , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ main::$5 ] : zp[1]:5 , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ main::$4 ] : zp[1]:5 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::$5 ] : zp[1]:4 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 19.64: zp[1]:2 [ main::i#10 main::i#1 ] 12.41: zp[1]:3 [ main::idx#10 main::idx#1 ] 6.29: zp[1]:5 [ main::$5 ] 4.89: zp[1]:4 [ main::$4 ]
Uplift Scope [main] 19.64: zp[1]:2 [ main::i#10 main::i#1 ] 12.41: zp[1]:3 [ main::idx#10 main::idx#1 ] 6.29: zp[1]:4 [ main::$5 ] 4.89: zp[1]:5 [ main::$4 ]
Uplift Scope []
Uplifting [main] best 1231 combination reg byte x [ main::i#10 main::i#1 ] reg byte y [ main::idx#10 main::idx#1 ] zp[1]:5 [ main::$5 ] zp[1]:4 [ main::$4 ]
Uplifting [main] best 1231 combination reg byte x [ main::i#10 main::i#1 ] reg byte y [ main::idx#10 main::idx#1 ] zp[1]:4 [ main::$5 ] zp[1]:5 [ main::$4 ]
Uplifting [] best 1231 combination
Attempting to uplift remaining variables inzp[1]:5 [ main::$5 ]
Uplifting [main] best 1231 combination zp[1]:5 [ main::$5 ]
Attempting to uplift remaining variables inzp[1]:4 [ main::$4 ]
Uplifting [main] best 1231 combination zp[1]:4 [ main::$4 ]
Allocated (was zp[1]:4) zp[1]:2 [ main::$4 ]
Allocated (was zp[1]:5) zp[1]:3 [ main::$5 ]
Attempting to uplift remaining variables inzp[1]:4 [ main::$5 ]
Uplifting [main] best 1231 combination zp[1]:4 [ main::$5 ]
Attempting to uplift remaining variables inzp[1]:5 [ main::$4 ]
Uplifting [main] best 1231 combination zp[1]:5 [ main::$4 ]
Allocated (was zp[1]:4) zp[1]:2 [ main::$5 ]
Allocated (was zp[1]:5) zp[1]:3 [ main::$4 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -401,8 +401,8 @@ ASSEMBLER BEFORE OPTIMIZATION
.segment Code
// main
main: {
.label __4 = 2
.label __5 = 3
.label __4 = 3
.label __5 = 2
// [1] phi from main to main::@1 [phi:main->main::@1]
__b1_from_main:
// [1] phi main::idx#10 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1
@ -529,8 +529,8 @@ Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
__constant char * const SCREEN = (char *) 1024
void main()
char main::$4 // zp[1]:2 4.888888888888889
char main::$5 // zp[1]:3 6.285714285714286
char main::$4 // zp[1]:3 4.888888888888889
char main::$5 // zp[1]:2 6.285714285714286
char main::i
char main::i#1 // reg byte x 16.5
char main::i#10 // reg byte x 3.142857142857143
@ -540,8 +540,8 @@ char main::idx#10 // reg byte y 5.076923076923077
reg byte x [ main::i#10 main::i#1 ]
reg byte y [ main::idx#10 main::idx#1 ]
zp[1]:2 [ main::$4 ]
zp[1]:3 [ main::$5 ]
zp[1]:3 [ main::$4 ]
zp[1]:2 [ main::$5 ]
FINAL ASSEMBLER
@ -564,8 +564,8 @@ Score: 841
.segment Code
// main
main: {
.label __4 = 2
.label __5 = 3
.label __4 = 3
.label __5 = 2
// [1] phi from main to main::@1 [phi:main->main::@1]
// [1] phi main::idx#10 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1
ldy #0

View File

@ -1,7 +1,7 @@
__constant char * const SCREEN = (char *) 1024
void main()
char main::$4 // zp[1]:2 4.888888888888889
char main::$5 // zp[1]:3 6.285714285714286
char main::$4 // zp[1]:3 4.888888888888889
char main::$5 // zp[1]:2 6.285714285714286
char main::i
char main::i#1 // reg byte x 16.5
char main::i#10 // reg byte x 3.142857142857143
@ -11,5 +11,5 @@ char main::idx#10 // reg byte y 5.076923076923077
reg byte x [ main::i#10 main::i#1 ]
reg byte y [ main::idx#10 main::idx#1 ]
zp[1]:2 [ main::$4 ]
zp[1]:3 [ main::$5 ]
zp[1]:3 [ main::$4 ]
zp[1]:2 [ main::$5 ]

View File

@ -185,36 +185,36 @@ Complete equivalence classes
[ main::$1 ]
[ main::$2 ]
[ main::sc#0 ]
Allocated zp[1]:2 [ main::COLS#2 main::COLS#1 ]
Allocated zp[1]:3 [ main::i#2 main::i#1 ]
Allocated zp[1]:4 [ main::$1 ]
Allocated zp[2]:5 [ main::$2 ]
Allocated zp[2]:7 [ main::sc#0 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:3 [ main::COLS#2 main::COLS#1 ]
Allocated zp[2]:4 [ main::sc#0 ]
Allocated zp[1]:6 [ main::$1 ]
Allocated zp[2]:7 [ main::$2 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] main::$1 = main::COLS#2 << 2 [ main::COLS#2 main::$1 ] ( [ main::COLS#2 main::$1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::COLS#2 main::COLS#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::COLS#2 main::COLS#1 ]
Statement [5] main::$2 = SCREEN + main::$1 [ main::COLS#2 main::$2 ] ( [ main::COLS#2 main::$2 ] { } ) always clobbers reg byte a
Statement [6] main::sc#0 = main::$2 + 2 [ main::COLS#2 main::sc#0 ] ( [ main::COLS#2 main::sc#0 ] { } ) always clobbers reg byte a
Statement [10] main::sc#0[main::i#2] = main::COLS#2 [ main::COLS#2 main::sc#0 main::i#2 ] ( [ main::COLS#2 main::sc#0 main::i#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Statement [4] main::$1 = main::COLS#2 << 2 [ main::COLS#2 main::$1 ] ( [ main::COLS#2 main::$1 ] { } ) always clobbers reg byte a
Statement [5] main::$2 = SCREEN + main::$1 [ main::COLS#2 main::$2 ] ( [ main::COLS#2 main::$2 ] { } ) always clobbers reg byte a
Statement [6] main::sc#0 = main::$2 + 2 [ main::COLS#2 main::sc#0 ] ( [ main::COLS#2 main::sc#0 ] { } ) always clobbers reg byte a
Statement [10] main::sc#0[main::i#2] = main::COLS#2 [ main::COLS#2 main::sc#0 main::i#2 ] ( [ main::COLS#2 main::sc#0 main::i#2 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::COLS#2 main::COLS#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::i#2 main::i#1 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::$1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:5 [ main::$2 ] : zp[2]:5 ,
Potential registers zp[2]:7 [ main::sc#0 ] : zp[2]:7 ,
Potential registers zp[1]:3 [ main::COLS#2 main::COLS#1 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ main::$1 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:7 [ main::$2 ] : zp[2]:7 ,
Potential registers zp[2]:4 [ main::sc#0 ] : zp[2]:4 ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 336.67: zp[1]:3 [ main::i#2 main::i#1 ] 38.11: zp[1]:2 [ main::COLS#2 main::COLS#1 ] 22.4: zp[2]:7 [ main::sc#0 ] 22: zp[1]:4 [ main::$1 ] 22: zp[2]:5 [ main::$2 ]
Uplift Scope [main] 336.67: zp[1]:2 [ main::i#2 main::i#1 ] 38.11: zp[1]:3 [ main::COLS#2 main::COLS#1 ] 22.4: zp[2]:4 [ main::sc#0 ] 22: zp[1]:6 [ main::$1 ] 22: zp[2]:7 [ main::$2 ]
Uplift Scope []
Uplifting [main] best 3111 combination reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::COLS#2 main::COLS#1 ] zp[2]:7 [ main::sc#0 ] reg byte a [ main::$1 ] zp[2]:5 [ main::$2 ]
Uplifting [main] best 3111 combination reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::COLS#2 main::COLS#1 ] zp[2]:4 [ main::sc#0 ] reg byte a [ main::$1 ] zp[2]:7 [ main::$2 ]
Uplifting [] best 3111 combination
Coalescing zero page register [ zp[2]:5 [ main::$2 ] ] with [ zp[2]:7 [ main::sc#0 ] ] - score: 1
Allocated (was zp[2]:5) zp[2]:2 [ main::$2 main::sc#0 ]
Coalescing zero page register [ zp[2]:7 [ main::$2 ] ] with [ zp[2]:4 [ main::sc#0 ] ] - score: 1
Allocated (was zp[2]:7) zp[2]:2 [ main::$2 main::sc#0 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -151,29 +151,30 @@ Added variable sub::D#0 to live range equivalence class [ sub::D#0 ]
Complete equivalence classes
[ A ]
[ sub::D#0 ]
Allocated zp[1]:2 [ A ]
Allocated zp[1]:3 [ sub::D#0 ]
Allocated zp[1]:2 [ sub::D#0 ]
Allocated zp[1]:3 [ A ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] A = 'a' [ A ] ( [ A ] { } ) always clobbers reg byte a
Statement [5] *SCREEN = A [ A ] ( main:3 [ A ] { } ) always clobbers reg byte a
Statement [6] *(SCREEN+1) = main::B [ A ] ( main:3 [ A ] { } ) always clobbers reg byte a
Statement [7] *(SCREEN+2) = *main::addrA [ A ] ( main:3 [ A ] { } ) always clobbers reg byte a
Statement [10] *(SCREEN+3) = sub::C [ A ] ( main:3::sub:8 [ A ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ A ] : zp[1]:2 ,
Potential registers zp[1]:3 [ sub::D#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ A ] : zp[1]:3 ,
Potential registers zp[1]:2 [ sub::D#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [sub] 202: zp[1]:3 [ sub::D#0 ]
Uplift Scope [] 19: zp[1]:2 [ A ]
Uplift Scope [sub] 202: zp[1]:2 [ sub::D#0 ]
Uplift Scope [] 19: zp[1]:3 [ A ]
Uplift Scope [main]
Uplift Scope [__start]
Uplifting [sub] best 112 combination reg byte x [ sub::D#0 ]
Uplifting [] best 112 combination zp[1]:2 [ A ]
Uplifting [] best 112 combination zp[1]:3 [ A ]
Uplifting [main] best 112 combination
Uplifting [__start] best 112 combination
Attempting to uplift remaining variables inzp[1]:2 [ A ]
Uplifting [] best 112 combination zp[1]:2 [ A ]
Attempting to uplift remaining variables inzp[1]:3 [ A ]
Uplifting [] best 112 combination zp[1]:3 [ A ]
Allocated (was zp[1]:3) zp[1]:2 [ A ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments

View File

@ -304,26 +304,26 @@ Complete equivalence classes
[ plot::x#1 ]
[ plot::idx#0 ]
[ plot::$0 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:3 [ line::x#2 line::x#1 ]
Allocated zp[1]:2 [ plot::$0 ]
Allocated zp[1]:3 [ plot::idx#0 ]
Allocated zp[1]:4 [ plot::x#1 ]
Allocated zp[1]:5 [ plot::idx#0 ]
Allocated zp[1]:6 [ plot::$0 ]
Allocated zp[1]:5 [ line::x#2 line::x#1 ]
Allocated zp[1]:6 [ main::i#2 main::i#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [3] SCREEN[main::i#2] = 0 [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::i#2 main::i#1 ]
Statement [2] plots[main::i#2] = main::i#2 [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a
Statement [3] SCREEN[main::i#2] = 0 [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ line::x#2 line::x#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ main::i#2 main::i#1 ] : zp[1]:6 , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ line::x#2 line::x#1 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ plot::x#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ plot::idx#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ plot::$0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ plot::idx#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:2 [ plot::$0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [plot] 200,002: zp[1]:6 [ plot::$0 ] 150,001.5: zp[1]:5 [ plot::idx#0 ] 110,002: zp[1]:4 [ plot::x#1 ]
Uplift Scope [line] 30,003: zp[1]:3 [ line::x#2 line::x#1 ]
Uplift Scope [main] 34.83: zp[1]:2 [ main::i#2 main::i#1 ]
Uplift Scope [plot] 200,002: zp[1]:2 [ plot::$0 ] 150,001.5: zp[1]:3 [ plot::idx#0 ] 110,002: zp[1]:4 [ plot::x#1 ]
Uplift Scope [line] 30,003: zp[1]:5 [ line::x#2 line::x#1 ]
Uplift Scope [main] 34.83: zp[1]:6 [ main::i#2 main::i#1 ]
Uplift Scope []
Uplifting [plot] best 4356 combination reg byte a [ plot::$0 ] reg byte y [ plot::idx#0 ] reg byte x [ plot::x#1 ]

View File

@ -13,9 +13,9 @@
:BasicUpstart(__start)
.label IRQ = $314
.label PLEX_SCREEN_PTR2 = $500
.label idx = 4
.label idx = 2
// The address of the sprite pointers on the current screen (screen+0x3f8).
.label PLEX_SCREEN_PTR1 = 2
.label PLEX_SCREEN_PTR1 = 3
.segment Code
__start: {
// volatile char idx = 0

View File

@ -145,28 +145,28 @@ Added variable idx to live range equivalence class [ idx ]
Complete equivalence classes
[ PLEX_SCREEN_PTR1#6 ]
[ idx ]
Allocated zp[2]:2 [ PLEX_SCREEN_PTR1#6 ]
Allocated zp[1]:4 [ idx ]
Allocated zp[1]:2 [ idx ]
Allocated zp[2]:3 [ PLEX_SCREEN_PTR1#6 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [6] PLEX_SCREEN_PTR1#6[idx] = ++ PLEX_SCREEN_PTR1#6[idx] [ idx ] ( [ idx ] { } ) always clobbers reg byte a reg byte y
Statement [7] PLEX_SCREEN_PTR2[idx] = ++ PLEX_SCREEN_PTR2[idx] [ idx ] ( [ idx ] { } ) always clobbers reg byte x
Statement [10] *IRQ = &irq [ ] ( main:3 [ ] { } ) always clobbers reg byte a
Potential registers zp[2]:2 [ PLEX_SCREEN_PTR1#6 ] : zp[2]:2 ,
Potential registers zp[1]:4 [ idx ] : zp[1]:4 ,
Potential registers zp[2]:3 [ PLEX_SCREEN_PTR1#6 ] : zp[2]:3 ,
Potential registers zp[1]:2 [ idx ] : zp[1]:2 ,
REGISTER UPLIFT SCOPES
Uplift Scope [] 4.67: zp[1]:4 [ idx ] 4: zp[2]:2 [ PLEX_SCREEN_PTR1#6 ]
Uplift Scope [] 4.67: zp[1]:2 [ idx ] 4: zp[2]:3 [ PLEX_SCREEN_PTR1#6 ]
Uplift Scope [main]
Uplift Scope [irq]
Uplift Scope [__start]
Uplifting [] best 140 combination zp[1]:4 [ idx ] zp[2]:2 [ PLEX_SCREEN_PTR1#6 ]
Uplifting [] best 140 combination zp[1]:2 [ idx ] zp[2]:3 [ PLEX_SCREEN_PTR1#6 ]
Uplifting [main] best 140 combination
Uplifting [irq] best 140 combination
Uplifting [__start] best 140 combination
Attempting to uplift remaining variables inzp[1]:4 [ idx ]
Uplifting [] best 140 combination zp[1]:4 [ idx ]
Attempting to uplift remaining variables inzp[1]:2 [ idx ]
Uplifting [] best 140 combination zp[1]:2 [ idx ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -187,9 +187,9 @@ ASSEMBLER BEFORE OPTIMIZATION
// Global Constants & labels
.label IRQ = $314
.label PLEX_SCREEN_PTR2 = $500
.label idx = 4
.label idx = 2
// The address of the sprite pointers on the current screen (screen+0x3f8).
.label PLEX_SCREEN_PTR1 = 2
.label PLEX_SCREEN_PTR1 = 3
.segment Code
// __start
__start: {
@ -268,15 +268,15 @@ Succesful ASM optimization Pass5UnusedLabelElimination
FINAL SYMBOL TABLE
__constant void (** const IRQ)() = (void (**)()) 788
char *PLEX_SCREEN_PTR1
char *PLEX_SCREEN_PTR1#6 // PLEX_SCREEN_PTR1 zp[2]:2 4.0
char *PLEX_SCREEN_PTR1#6 // PLEX_SCREEN_PTR1 zp[2]:3 4.0
__constant char *PLEX_SCREEN_PTR2 = (char *) 1280
void __start()
__loadstore volatile char idx // zp[1]:4 4.666666666666666
__loadstore volatile char idx // zp[1]:2 4.666666666666666
__interrupt(rom_sys_c64) void irq()
void main()
zp[2]:2 [ PLEX_SCREEN_PTR1#6 ]
zp[1]:4 [ idx ]
zp[2]:3 [ PLEX_SCREEN_PTR1#6 ]
zp[1]:2 [ idx ]
FINAL ASSEMBLER
@ -300,9 +300,9 @@ Score: 98
// Global Constants & labels
.label IRQ = $314
.label PLEX_SCREEN_PTR2 = $500
.label idx = 4
.label idx = 2
// The address of the sprite pointers on the current screen (screen+0x3f8).
.label PLEX_SCREEN_PTR1 = 2
.label PLEX_SCREEN_PTR1 = 3
.segment Code
// __start
__start: {

View File

@ -1,11 +1,11 @@
__constant void (** const IRQ)() = (void (**)()) 788
char *PLEX_SCREEN_PTR1
char *PLEX_SCREEN_PTR1#6 // PLEX_SCREEN_PTR1 zp[2]:2 4.0
char *PLEX_SCREEN_PTR1#6 // PLEX_SCREEN_PTR1 zp[2]:3 4.0
__constant char *PLEX_SCREEN_PTR2 = (char *) 1280
void __start()
__loadstore volatile char idx // zp[1]:4 4.666666666666666
__loadstore volatile char idx // zp[1]:2 4.666666666666666
__interrupt(rom_sys_c64) void irq()
void main()
zp[2]:2 [ PLEX_SCREEN_PTR1#6 ]
zp[1]:4 [ idx ]
zp[2]:3 [ PLEX_SCREEN_PTR1#6 ]
zp[1]:2 [ idx ]

View File

@ -14,8 +14,8 @@
.const RED = 2
.label BG_COLOR = $d021
.label print_screen = $400
.label print_char_cursor = 5
.label print_line_cursor = 7
.label print_char_cursor = 2
.label print_line_cursor = 6
.segment Code
main: {
// print_cls()
@ -162,7 +162,7 @@ memset: {
.const num = $3e8
.label str = print_screen
.label end = str+num
.label dst = 2
.label dst = 4
lda #<str
sta.z dst
lda #>str
@ -189,10 +189,10 @@ memset: {
!:
jmp __b1
}
// void assert_byte(__zp(2) char *msg, __register(X) char b, __zp(4) char c)
// void assert_byte(__zp(4) char *msg, __register(X) char b, __zp(8) char c)
assert_byte: {
.label msg = 2
.label c = 4
.label msg = 4
.label c = 8
// print_str(msg)
jsr print_str
// print_str(" ")
@ -227,10 +227,10 @@ assert_byte: {
jsr print_str
jmp __b2
}
// void assert_sbyte(__zp(2) char *msg, __register(X) signed char b, __zp(4) signed char c)
// void assert_sbyte(__zp(4) char *msg, __register(X) signed char b, __zp(8) signed char c)
assert_sbyte: {
.label msg = 2
.label c = 4
.label msg = 4
.label c = 8
// print_str(msg)
lda.z print_line_cursor
sta.z print_char_cursor
@ -271,9 +271,9 @@ assert_sbyte: {
jmp __b2
}
// Print a zero-terminated string
// void print_str(__zp(2) char *str)
// void print_str(__zp(4) char *str)
print_str: {
.label str = 2
.label str = 4
__b1:
// while(*str)
ldy #0

File diff suppressed because one or more lines are too long

View File

@ -9,23 +9,23 @@ void assert_byte(char *msg , char b , char c)
char assert_byte::b
char assert_byte::b#3 // reg byte x 20.2
char assert_byte::c
char assert_byte::c#3 // c zp[1]:4 20.2
char assert_byte::c#3 // c zp[1]:8 20.2
char *assert_byte::msg
char *assert_byte::msg#3 // msg zp[2]:2 101.0
char *assert_byte::msg#3 // msg zp[2]:4 101.0
void assert_sbyte(char *msg , signed char b , signed char c)
signed char assert_sbyte::b
signed char assert_sbyte::b#5 // reg byte x 16.833333333333332
signed char assert_sbyte::c
signed char assert_sbyte::c#5 // c zp[1]:4 16.833333333333332
signed char assert_sbyte::c#5 // c zp[1]:8 16.833333333333332
char *assert_sbyte::msg
char *assert_sbyte::msg#5 // msg zp[2]:2 101.0
char *assert_sbyte::msg#5 // msg zp[2]:4 101.0
void main()
void * memset(void *str , char c , unsigned int num)
char memset::c
__constant char memset::c#0 = ' ' // c
char *memset::dst
char *memset::dst#1 // dst zp[2]:2 2002.0
char *memset::dst#2 // dst zp[2]:2 1334.6666666666667
char *memset::dst#1 // dst zp[2]:4 2002.0
char *memset::dst#2 // dst zp[2]:4 1334.6666666666667
char *memset::end
__constant char *memset::end#0 = (char *)memset::str#0+memset::num#0 // end
unsigned int memset::num
@ -39,29 +39,29 @@ void print_char(char ch)
char print_char::ch
char print_char::ch#0 // reg byte a 110002.0
char *print_char_cursor
char *print_char_cursor#1 // print_char_cursor zp[2]:5 8207.814814814814
char *print_char_cursor#4 // print_char_cursor zp[2]:5 27500.5
char *print_char_cursor#77 // print_char_cursor zp[2]:5 61.5
char *print_char_cursor#87 // print_char_cursor zp[2]:5 1809.0
char *print_char_cursor#92 // print_char_cursor zp[2]:5 202.0
char *print_char_cursor#98 // print_char_cursor zp[2]:5 22.0
char *print_char_cursor#99 // print_char_cursor zp[2]:5 22.0
char *print_char_cursor#1 // print_char_cursor zp[2]:2 8207.814814814814
char *print_char_cursor#4 // print_char_cursor zp[2]:2 27500.5
char *print_char_cursor#77 // print_char_cursor zp[2]:2 61.5
char *print_char_cursor#87 // print_char_cursor zp[2]:2 1809.0
char *print_char_cursor#92 // print_char_cursor zp[2]:2 202.0
char *print_char_cursor#98 // print_char_cursor zp[2]:2 22.0
char *print_char_cursor#99 // print_char_cursor zp[2]:2 22.0
void print_cls()
char *print_line_cursor
char *print_line_cursor#0 // print_line_cursor zp[2]:7 840.2499999999999
char *print_line_cursor#25 // print_line_cursor zp[2]:7 21003.0
char *print_line_cursor#49 // print_line_cursor zp[2]:7 1203.0
char *print_line_cursor#52 // print_line_cursor zp[2]:7 11.181818181818182
char *print_line_cursor#0 // print_line_cursor zp[2]:6 840.2499999999999
char *print_line_cursor#25 // print_line_cursor zp[2]:6 21003.0
char *print_line_cursor#49 // print_line_cursor zp[2]:6 1203.0
char *print_line_cursor#52 // print_line_cursor zp[2]:6 11.181818181818182
void print_ln()
char *print_screen
__constant char *print_screen#0 = (char *) 1024 // print_screen
void print_str(char *str)
char *print_str::str
char *print_str::str#0 // str zp[2]:2 20002.0
char *print_str::str#1 // str zp[2]:2 202.0
char *print_str::str#10 // str zp[2]:2 10251.25
char *print_str::str#12 // str zp[2]:2 1203.0
char *print_str::str#5 // str zp[2]:2 101.0
char *print_str::str#0 // str zp[2]:4 20002.0
char *print_str::str#1 // str zp[2]:4 202.0
char *print_str::str#10 // str zp[2]:4 10251.25
char *print_str::str#12 // str zp[2]:4 1203.0
char *print_str::str#5 // str zp[2]:4 101.0
__constant char str[2] = " "
__constant char str1[6] = "fail!"
__constant char str2[3] = "ok"
@ -85,10 +85,10 @@ __constant char test_sbytes::msg2[9] = "0+2-4=-2"
__constant char test_sbytes::msg3[$b] = "-(0+2-4)=2"
__constant char test_sbytes::msg4[$b] = "-127-127=2"
zp[2]:2 [ assert_byte::msg#3 print_str::str#10 print_str::str#12 print_str::str#1 print_str::str#5 print_str::str#0 assert_sbyte::msg#5 memset::dst#2 memset::dst#1 ]
zp[2]:4 [ assert_byte::msg#3 print_str::str#10 print_str::str#12 print_str::str#1 print_str::str#5 print_str::str#0 assert_sbyte::msg#5 memset::dst#2 memset::dst#1 ]
reg byte x [ assert_byte::b#3 ]
reg byte x [ assert_sbyte::b#5 ]
zp[1]:4 [ assert_sbyte::c#5 assert_byte::c#3 ]
zp[2]:5 [ print_char_cursor#87 print_char_cursor#77 print_char_cursor#98 print_char_cursor#99 print_char_cursor#1 print_char_cursor#92 print_char_cursor#4 ]
zp[2]:7 [ print_line_cursor#25 print_line_cursor#49 print_line_cursor#52 print_line_cursor#0 ]
zp[1]:8 [ assert_sbyte::c#5 assert_byte::c#3 ]
zp[2]:2 [ print_char_cursor#87 print_char_cursor#77 print_char_cursor#98 print_char_cursor#99 print_char_cursor#1 print_char_cursor#92 print_char_cursor#4 ]
zp[2]:6 [ print_line_cursor#25 print_line_cursor#49 print_line_cursor#52 print_line_cursor#0 ]
reg byte a [ print_char::ch#0 ]

View File

@ -21,13 +21,13 @@
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
.label col00 = COLS+$c*$28+$13
.label __5 = $d
.label xw = $13
.label yw = $15
.label angle_w = $d
.label screen = 4
.label x = 3
.label y = 2
.label __5 = 6
.label xw = $11
.label yw = $13
.label angle_w = 6
.label screen = $15
.label x = $f
.label y = $17
// init_font_hex(CHARSET)
jsr init_font_hex
// *D018 = toD018(SCREEN, CHARSET)
@ -88,15 +88,15 @@ main: {
jmp __b4
}
// Make charset from proto chars
// void init_font_hex(__zp($b) char *charset)
// void init_font_hex(__zp($a) char *charset)
init_font_hex: {
.label __0 = $17
.label idx = 8
.label proto_lo = $d
.label charset = $b
.label c1 = 7
.label proto_hi = 9
.label c = 6
.label __0 = $d
.label idx = $c
.label proto_lo = 6
.label charset = $a
.label c1 = $e
.label proto_hi = 8
.label c = $10
lda #0
sta.z c
lda #<FONT_HEX_PROTO
@ -196,18 +196,18 @@ init_font_hex: {
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// __zp($d) unsigned int atan2_16(__zp($13) int x, __zp($15) int y)
// __zp(6) unsigned int atan2_16(__zp($11) int x, __zp($13) int y)
atan2_16: {
.label __2 = 9
.label __7 = $b
.label yi = 9
.label xi = $b
.label angle = $d
.label xd = $11
.label yd = $f
.label return = $d
.label x = $13
.label y = $15
.label __2 = 8
.label __7 = $a
.label yi = 8
.label xi = $a
.label angle = 6
.label xd = 4
.label yd = 2
.label return = 6
.label x = $11
.label y = $13
// (y>=0)?y:-y
lda.z y+1
bmi !__b1+

View File

@ -1501,60 +1501,60 @@ Complete equivalence classes
[ init_font_hex::idx#3 ]
[ atan2_16::$23 ]
[ atan2_16::$22 ]
Allocated zp[1]:2 [ main::y#4 main::y#1 ]
Allocated zp[1]:3 [ main::x#2 main::x#1 ]
Allocated zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ]
Allocated zp[2]:6 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
Allocated zp[1]:8 [ init_font_hex::c#6 init_font_hex::c#1 ]
Allocated zp[2]:9 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
Allocated zp[2]:11 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
Allocated zp[1]:13 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Allocated zp[1]:14 [ init_font_hex::i#2 init_font_hex::i#1 ]
Allocated zp[1]:15 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Allocated zp[2]:16 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
Allocated zp[2]:18 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
Allocated zp[1]:20 [ atan2_16::i#2 atan2_16::i#1 ]
Allocated zp[2]:21 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
Allocated zp[2]:23 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
Allocated zp[1]:25 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Allocated zp[2]:26 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated zp[2]:28 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated zp[2]:30 [ main::xw#0 ]
Allocated zp[2]:32 [ main::yw#0 ]
Allocated zp[2]:34 [ atan2_16::x#0 ]
Allocated zp[2]:36 [ atan2_16::y#0 ]
Allocated zp[2]:38 [ atan2_16::return#2 ]
Allocated zp[2]:40 [ main::angle_w#0 ]
Allocated zp[2]:42 [ main::$5 ]
Allocated zp[1]:44 [ main::ang_w#0 ]
Allocated zp[1]:45 [ init_font_hex::$0 ]
Allocated zp[1]:46 [ init_font_hex::$1 ]
Allocated zp[1]:47 [ init_font_hex::$2 ]
Allocated zp[1]:48 [ init_font_hex::idx#3 ]
Allocated zp[1]:49 [ atan2_16::$23 ]
Allocated zp[1]:50 [ atan2_16::$22 ]
Allocated zp[1]:2 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Allocated zp[2]:3 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated zp[2]:5 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated zp[2]:7 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
Allocated zp[2]:9 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
Allocated zp[2]:11 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
Allocated zp[1]:13 [ atan2_16::$23 ]
Allocated zp[1]:14 [ atan2_16::$22 ]
Allocated zp[1]:15 [ atan2_16::i#2 atan2_16::i#1 ]
Allocated zp[1]:16 [ init_font_hex::i#2 init_font_hex::i#1 ]
Allocated zp[1]:17 [ init_font_hex::$1 ]
Allocated zp[1]:18 [ init_font_hex::$2 ]
Allocated zp[1]:19 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Allocated zp[1]:20 [ init_font_hex::$0 ]
Allocated zp[2]:21 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
Allocated zp[1]:23 [ init_font_hex::idx#3 ]
Allocated zp[1]:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Allocated zp[2]:25 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
Allocated zp[2]:27 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
Allocated zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
Allocated zp[2]:31 [ atan2_16::return#2 ]
Allocated zp[2]:33 [ main::angle_w#0 ]
Allocated zp[2]:35 [ main::$5 ]
Allocated zp[1]:37 [ main::ang_w#0 ]
Allocated zp[1]:38 [ main::x#2 main::x#1 ]
Allocated zp[1]:39 [ init_font_hex::c#6 init_font_hex::c#1 ]
Allocated zp[2]:40 [ atan2_16::x#0 ]
Allocated zp[2]:42 [ atan2_16::y#0 ]
Allocated zp[2]:44 [ main::screen#2 main::screen#4 main::screen#1 ]
Allocated zp[2]:46 [ main::xw#0 ]
Allocated zp[2]:48 [ main::yw#0 ]
Allocated zp[1]:50 [ main::y#4 main::y#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [3] *D018 = main::toD0181_return#0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [8] atan2_16::x#0 = (int)main::xw#0 [ main::y#4 main::x#2 main::screen#2 main::yw#0 atan2_16::x#0 ] ( [ main::y#4 main::x#2 main::screen#2 main::yw#0 atan2_16::x#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::y#4 main::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:50 [ main::y#4 main::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:38 [ main::x#2 main::x#1 ]
Statement [9] atan2_16::y#0 = (int)main::yw#0 [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ( [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [11] atan2_16::return#2 = atan2_16::return#0 [ main::y#4 main::x#2 main::screen#2 atan2_16::return#2 ] ( [ main::y#4 main::x#2 main::screen#2 atan2_16::return#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [12] main::angle_w#0 = atan2_16::return#2 [ main::y#4 main::x#2 main::screen#2 main::angle_w#0 ] ( [ main::y#4 main::x#2 main::screen#2 main::angle_w#0 ] { } ) always clobbers reg byte a
Statement [13] main::$5 = main::angle_w#0 + $80 [ main::y#4 main::x#2 main::screen#2 main::$5 ] ( [ main::y#4 main::x#2 main::screen#2 main::$5 ] { } ) always clobbers reg byte a
Statement [15] *main::screen#2 = main::ang_w#0 [ main::y#4 main::x#2 main::screen#2 ] ( [ main::y#4 main::x#2 main::screen#2 ] { } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::y#4 main::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:50 [ main::y#4 main::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:38 [ main::x#2 main::x#1 ]
Statement [25] *init_font_hex::charset#2 = 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( init_font_hex:1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp[1]:8 [ init_font_hex::c#6 init_font_hex::c#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:8 [ init_font_hex::c#6 init_font_hex::c#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:13 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:13 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:39 [ init_font_hex::c#6 init_font_hex::c#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:39 [ init_font_hex::c#6 init_font_hex::c#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Statement [27] init_font_hex::$0 = init_font_hex::proto_hi#6[init_font_hex::i#2] << 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( init_font_hex:1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:14 [ init_font_hex::i#2 init_font_hex::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:15 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:16 [ init_font_hex::i#2 init_font_hex::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:19 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Statement [28] init_font_hex::$1 = init_font_hex::proto_lo#4[init_font_hex::i#2] << 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( init_font_hex:1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:45 [ init_font_hex::$0 ]
Removing always clobbered register reg byte a as potential for zp[1]:20 [ init_font_hex::$0 ]
Statement [34] init_font_hex::charset#2[init_font_hex::idx#2] = 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( init_font_hex:1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] { } ) always clobbers reg byte a
Statement [36] init_font_hex::charset#2[init_font_hex::idx#3] = 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( init_font_hex:1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] { } ) always clobbers reg byte a
Statement [37] init_font_hex::proto_lo#1 = init_font_hex::proto_lo#4 + 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( init_font_hex:1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] { } ) always clobbers reg byte a
@ -1565,14 +1565,14 @@ Statement [46] atan2_16::$2 = - atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan
Statement [48] if(atan2_16::x#0>=0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [49] atan2_16::$7 = - atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [52] if(atan2_16::yi#3!=0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:20 [ atan2_16::i#2 atan2_16::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:15 [ atan2_16::i#2 atan2_16::i#1 ]
Statement [54] atan2_16::angle#1 = atan2_16::angle#6 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [55] if(atan2_16::x#0>=0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [56] atan2_16::angle#4 = $8000 - atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::y#0 atan2_16::angle#4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [58] if(atan2_16::y#0>=0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::angle#11 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [59] atan2_16::angle#5 = - atan2_16::angle#11 [ atan2_16::angle#5 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::angle#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [63] atan2_16::xd#10 = atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:25 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:2 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Statement [64] atan2_16::yd#10 = atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [68] atan2_16::xd#2 = atan2_16::xd#3 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [69] atan2_16::yd#2 = atan2_16::yd#3 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
@ -1633,91 +1633,94 @@ Statement [83] atan2_16::xd#1 = atan2_16::xd#3 >> 2 [ atan2_16::x#0 atan2_16::y#
Statement [84] atan2_16::yd#1 = atan2_16::yd#3 >> 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [86] atan2_16::xi#13 = atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [87] atan2_16::yi#16 = atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( atan2_16:10 [ main::y#4 main::x#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::y#4 main::y#1 ] : zp[1]:2 , reg byte x ,
Potential registers zp[1]:3 [ main::x#2 main::x#1 ] : zp[1]:3 , reg byte x ,
Potential registers zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ] : zp[2]:4 ,
Potential registers zp[2]:6 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] : zp[2]:6 ,
Potential registers zp[1]:8 [ init_font_hex::c#6 init_font_hex::c#1 ] : zp[1]:8 , reg byte x ,
Potential registers zp[2]:9 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] : zp[2]:9 ,
Potential registers zp[2]:11 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] : zp[2]:11 ,
Potential registers zp[1]:13 [ init_font_hex::c1#4 init_font_hex::c1#1 ] : zp[1]:13 , reg byte x ,
Potential registers zp[1]:14 [ init_font_hex::i#2 init_font_hex::i#1 ] : zp[1]:14 , reg byte x , reg byte y ,
Potential registers zp[1]:15 [ init_font_hex::idx#5 init_font_hex::idx#2 ] : zp[1]:15 , reg byte x , reg byte y ,
Potential registers zp[2]:16 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp[2]:16 ,
Potential registers zp[2]:18 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp[2]:18 ,
Potential registers zp[1]:20 [ atan2_16::i#2 atan2_16::i#1 ] : zp[1]:20 , reg byte x , reg byte y ,
Potential registers zp[2]:21 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp[2]:21 ,
Potential registers zp[2]:23 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] : zp[2]:23 ,
Potential registers zp[1]:25 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp[1]:25 , reg byte x , reg byte y ,
Potential registers zp[2]:26 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp[2]:26 ,
Potential registers zp[2]:28 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp[2]:28 ,
Potential registers zp[2]:30 [ main::xw#0 ] : zp[2]:30 ,
Potential registers zp[2]:32 [ main::yw#0 ] : zp[2]:32 ,
Potential registers zp[2]:34 [ atan2_16::x#0 ] : zp[2]:34 ,
Potential registers zp[2]:36 [ atan2_16::y#0 ] : zp[2]:36 ,
Potential registers zp[2]:38 [ atan2_16::return#2 ] : zp[2]:38 ,
Potential registers zp[2]:40 [ main::angle_w#0 ] : zp[2]:40 ,
Potential registers zp[2]:42 [ main::$5 ] : zp[2]:42 ,
Potential registers zp[1]:44 [ main::ang_w#0 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:45 [ init_font_hex::$0 ] : zp[1]:45 , reg byte x , reg byte y ,
Potential registers zp[1]:46 [ init_font_hex::$1 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:47 [ init_font_hex::$2 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:48 [ init_font_hex::idx#3 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:49 [ atan2_16::$23 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:50 [ atan2_16::$22 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:50 [ main::y#4 main::y#1 ] : zp[1]:50 , reg byte x ,
Potential registers zp[1]:38 [ main::x#2 main::x#1 ] : zp[1]:38 , reg byte x ,
Potential registers zp[2]:44 [ main::screen#2 main::screen#4 main::screen#1 ] : zp[2]:44 ,
Potential registers zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] : zp[2]:29 ,
Potential registers zp[1]:39 [ init_font_hex::c#6 init_font_hex::c#1 ] : zp[1]:39 , reg byte x ,
Potential registers zp[2]:25 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] : zp[2]:25 ,
Potential registers zp[2]:27 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] : zp[2]:27 ,
Potential registers zp[1]:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] : zp[1]:24 , reg byte x ,
Potential registers zp[1]:16 [ init_font_hex::i#2 init_font_hex::i#1 ] : zp[1]:16 , reg byte x , reg byte y ,
Potential registers zp[1]:19 [ init_font_hex::idx#5 init_font_hex::idx#2 ] : zp[1]:19 , reg byte x , reg byte y ,
Potential registers zp[2]:9 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp[2]:9 ,
Potential registers zp[2]:11 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp[2]:11 ,
Potential registers zp[1]:15 [ atan2_16::i#2 atan2_16::i#1 ] : zp[1]:15 , reg byte x , reg byte y ,
Potential registers zp[2]:7 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp[2]:7 ,
Potential registers zp[2]:21 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] : zp[2]:21 ,
Potential registers zp[1]:2 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[2]:3 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp[2]:3 ,
Potential registers zp[2]:5 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp[2]:5 ,
Potential registers zp[2]:46 [ main::xw#0 ] : zp[2]:46 ,
Potential registers zp[2]:48 [ main::yw#0 ] : zp[2]:48 ,
Potential registers zp[2]:40 [ atan2_16::x#0 ] : zp[2]:40 ,
Potential registers zp[2]:42 [ atan2_16::y#0 ] : zp[2]:42 ,
Potential registers zp[2]:31 [ atan2_16::return#2 ] : zp[2]:31 ,
Potential registers zp[2]:33 [ main::angle_w#0 ] : zp[2]:33 ,
Potential registers zp[2]:35 [ main::$5 ] : zp[2]:35 ,
Potential registers zp[1]:37 [ main::ang_w#0 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:20 [ init_font_hex::$0 ] : zp[1]:20 , reg byte x , reg byte y ,
Potential registers zp[1]:17 [ init_font_hex::$1 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:18 [ init_font_hex::$2 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:23 [ init_font_hex::idx#3 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:13 [ atan2_16::$23 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:14 [ atan2_16::$22 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [atan2_16] 28,666,670.58: zp[1]:25 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,600,008: zp[2]:26 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,333,338.67: zp[2]:28 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,524,818.05: zp[2]:21 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,690,940.68: zp[2]:16 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,273,742.67: zp[2]:18 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,000,002: zp[1]:49 [ atan2_16::$23 ] 2,000,002: zp[1]:50 [ atan2_16::$22 ] 1,708,335.04: zp[1]:20 [ atan2_16::i#2 atan2_16::i#1 ] 8,208.5: zp[2]:23 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] 202: zp[2]:38 [ atan2_16::return#2 ] 108.03: zp[2]:34 [ atan2_16::x#0 ] 102.62: zp[2]:36 [ atan2_16::y#0 ]
Uplift Scope [init_font_hex] 21,668.83: zp[1]:14 [ init_font_hex::i#2 init_font_hex::i#1 ] 20,002: zp[1]:46 [ init_font_hex::$1 ] 20,002: zp[1]:47 [ init_font_hex::$2 ] 11,501.6: zp[1]:15 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 10,001: zp[1]:45 [ init_font_hex::$0 ] 2,002: zp[1]:48 [ init_font_hex::idx#3 ] 1,634.97: zp[1]:13 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 1,631.57: zp[2]:9 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 1,423.81: zp[2]:11 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 634.17: zp[2]:6 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 162.13: zp[1]:8 [ init_font_hex::c#6 init_font_hex::c#1 ]
Uplift Scope [main] 202: zp[2]:40 [ main::angle_w#0 ] 202: zp[2]:42 [ main::$5 ] 202: zp[1]:44 [ main::ang_w#0 ] 168.33: zp[1]:3 [ main::x#2 main::x#1 ] 93.15: zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ] 50.5: zp[2]:30 [ main::xw#0 ] 50.5: zp[2]:32 [ main::yw#0 ] 17.97: zp[1]:2 [ main::y#4 main::y#1 ]
Uplift Scope [atan2_16] 28,666,670.58: zp[1]:2 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,600,008: zp[2]:3 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,333,338.67: zp[2]:5 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,524,818.05: zp[2]:7 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,690,940.68: zp[2]:9 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,273,742.67: zp[2]:11 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,000,002: zp[1]:13 [ atan2_16::$23 ] 2,000,002: zp[1]:14 [ atan2_16::$22 ] 1,708,335.04: zp[1]:15 [ atan2_16::i#2 atan2_16::i#1 ] 8,208.5: zp[2]:21 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] 202: zp[2]:31 [ atan2_16::return#2 ] 108.03: zp[2]:40 [ atan2_16::x#0 ] 102.62: zp[2]:42 [ atan2_16::y#0 ]
Uplift Scope [init_font_hex] 21,668.83: zp[1]:16 [ init_font_hex::i#2 init_font_hex::i#1 ] 20,002: zp[1]:17 [ init_font_hex::$1 ] 20,002: zp[1]:18 [ init_font_hex::$2 ] 11,501.6: zp[1]:19 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 10,001: zp[1]:20 [ init_font_hex::$0 ] 2,002: zp[1]:23 [ init_font_hex::idx#3 ] 1,634.97: zp[1]:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 1,631.57: zp[2]:25 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 1,423.81: zp[2]:27 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 634.17: zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 162.13: zp[1]:39 [ init_font_hex::c#6 init_font_hex::c#1 ]
Uplift Scope [main] 202: zp[2]:33 [ main::angle_w#0 ] 202: zp[2]:35 [ main::$5 ] 202: zp[1]:37 [ main::ang_w#0 ] 168.33: zp[1]:38 [ main::x#2 main::x#1 ] 93.15: zp[2]:44 [ main::screen#2 main::screen#4 main::screen#1 ] 50.5: zp[2]:46 [ main::xw#0 ] 50.5: zp[2]:48 [ main::yw#0 ] 17.97: zp[1]:50 [ main::y#4 main::y#1 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
Uplift Scope []
Uplifting [atan2_16] best 1147297 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:26 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:28 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:21 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:16 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:18 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:23 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:38 [ atan2_16::return#2 ] zp[2]:34 [ atan2_16::x#0 ] zp[2]:36 [ atan2_16::y#0 ]
Uplifting [atan2_16] best 1147297 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:3 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:5 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:7 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:9 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:11 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:21 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:31 [ atan2_16::return#2 ] zp[2]:40 [ atan2_16::x#0 ] zp[2]:42 [ atan2_16::y#0 ]
Limited combination testing to 100 combinations of 144 possible.
Uplifting [init_font_hex] best 1128297 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp[1]:15 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp[1]:45 [ init_font_hex::$0 ] zp[1]:48 [ init_font_hex::idx#3 ] zp[1]:13 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp[2]:9 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp[2]:11 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp[2]:6 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp[1]:8 [ init_font_hex::c#6 init_font_hex::c#1 ]
Uplifting [init_font_hex] best 1128297 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp[1]:19 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp[1]:20 [ init_font_hex::$0 ] zp[1]:23 [ init_font_hex::idx#3 ] zp[1]:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp[2]:25 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp[2]:27 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp[1]:39 [ init_font_hex::c#6 init_font_hex::c#1 ]
Limited combination testing to 100 combinations of 6912 possible.
Uplifting [main] best 1127697 combination zp[2]:40 [ main::angle_w#0 ] zp[2]:42 [ main::$5 ] reg byte a [ main::ang_w#0 ] zp[1]:3 [ main::x#2 main::x#1 ] zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ] zp[2]:30 [ main::xw#0 ] zp[2]:32 [ main::yw#0 ] zp[1]:2 [ main::y#4 main::y#1 ]
Uplifting [main] best 1127697 combination zp[2]:33 [ main::angle_w#0 ] zp[2]:35 [ main::$5 ] reg byte a [ main::ang_w#0 ] zp[1]:38 [ main::x#2 main::x#1 ] zp[2]:44 [ main::screen#2 main::screen#4 main::screen#1 ] zp[2]:46 [ main::xw#0 ] zp[2]:48 [ main::yw#0 ] zp[1]:50 [ main::y#4 main::y#1 ]
Uplifting [MOS6526_CIA] best 1127697 combination
Uplifting [MOS6569_VICII] best 1127697 combination
Uplifting [MOS6581_SID] best 1127697 combination
Uplifting [] best 1127697 combination
Attempting to uplift remaining variables inzp[1]:15 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Uplifting [init_font_hex] best 1127697 combination zp[1]:15 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Attempting to uplift remaining variables inzp[1]:45 [ init_font_hex::$0 ]
Uplifting [init_font_hex] best 1127697 combination zp[1]:45 [ init_font_hex::$0 ]
Attempting to uplift remaining variables inzp[1]:48 [ init_font_hex::idx#3 ]
Attempting to uplift remaining variables inzp[1]:19 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Uplifting [init_font_hex] best 1127697 combination zp[1]:19 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Attempting to uplift remaining variables inzp[1]:20 [ init_font_hex::$0 ]
Uplifting [init_font_hex] best 1127697 combination zp[1]:20 [ init_font_hex::$0 ]
Attempting to uplift remaining variables inzp[1]:23 [ init_font_hex::idx#3 ]
Uplifting [init_font_hex] best 1127097 combination reg byte y [ init_font_hex::idx#3 ]
Attempting to uplift remaining variables inzp[1]:13 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Uplifting [init_font_hex] best 1127097 combination zp[1]:13 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Attempting to uplift remaining variables inzp[1]:3 [ main::x#2 main::x#1 ]
Uplifting [main] best 1127097 combination zp[1]:3 [ main::x#2 main::x#1 ]
Attempting to uplift remaining variables inzp[1]:8 [ init_font_hex::c#6 init_font_hex::c#1 ]
Uplifting [init_font_hex] best 1127097 combination zp[1]:8 [ init_font_hex::c#6 init_font_hex::c#1 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::y#4 main::y#1 ]
Uplifting [main] best 1127097 combination zp[1]:2 [ main::y#4 main::y#1 ]
Coalescing zero page register [ zp[2]:21 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp[2]:23 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] ] - score: 1
Coalescing zero page register [ zp[2]:30 [ main::xw#0 ] ] with [ zp[2]:34 [ atan2_16::x#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:32 [ main::yw#0 ] ] with [ zp[2]:36 [ atan2_16::y#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:38 [ atan2_16::return#2 ] ] with [ zp[2]:40 [ main::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:21 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] ] with [ zp[2]:38 [ atan2_16::return#2 main::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:21 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 ] ] with [ zp[2]:42 [ main::$5 ] ] - score: 1
Coalescing zero page register [ zp[2]:16 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] with [ zp[2]:6 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] ]
Coalescing zero page register [ zp[2]:18 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] with [ zp[2]:9 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] ]
Coalescing zero page register [ zp[2]:21 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 main::$5 ] ] with [ zp[2]:11 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] ]
Allocated (was zp[1]:8) zp[1]:6 [ init_font_hex::c#6 init_font_hex::c#1 ]
Allocated (was zp[1]:13) zp[1]:7 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Allocated (was zp[1]:15) zp[1]:8 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Allocated (was zp[2]:16) zp[2]:9 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
Allocated (was zp[2]:18) zp[2]:11 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
Allocated (was zp[2]:21) zp[2]:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 main::$5 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
Allocated (was zp[2]:26) zp[2]:15 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated (was zp[2]:28) zp[2]:17 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated (was zp[2]:30) zp[2]:19 [ main::xw#0 atan2_16::x#0 ]
Allocated (was zp[2]:32) zp[2]:21 [ main::yw#0 atan2_16::y#0 ]
Allocated (was zp[1]:45) zp[1]:23 [ init_font_hex::$0 ]
Attempting to uplift remaining variables inzp[1]:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Uplifting [init_font_hex] best 1127097 combination zp[1]:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Attempting to uplift remaining variables inzp[1]:38 [ main::x#2 main::x#1 ]
Uplifting [main] best 1127097 combination zp[1]:38 [ main::x#2 main::x#1 ]
Attempting to uplift remaining variables inzp[1]:39 [ init_font_hex::c#6 init_font_hex::c#1 ]
Uplifting [init_font_hex] best 1127097 combination zp[1]:39 [ init_font_hex::c#6 init_font_hex::c#1 ]
Attempting to uplift remaining variables inzp[1]:50 [ main::y#4 main::y#1 ]
Uplifting [main] best 1127097 combination zp[1]:50 [ main::y#4 main::y#1 ]
Coalescing zero page register [ zp[2]:7 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp[2]:21 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] ] - score: 1
Coalescing zero page register [ zp[2]:46 [ main::xw#0 ] ] with [ zp[2]:40 [ atan2_16::x#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:48 [ main::yw#0 ] ] with [ zp[2]:42 [ atan2_16::y#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:31 [ atan2_16::return#2 ] ] with [ zp[2]:33 [ main::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:7 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] ] with [ zp[2]:31 [ atan2_16::return#2 main::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:7 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 ] ] with [ zp[2]:35 [ main::$5 ] ] - score: 1
Coalescing zero page register [ zp[2]:9 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] with [ zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] ]
Coalescing zero page register [ zp[2]:11 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] with [ zp[2]:25 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] ]
Coalescing zero page register [ zp[2]:7 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 main::$5 ] ] with [ zp[2]:27 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] ]
Allocated (was zp[2]:3) zp[2]:2 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated (was zp[2]:5) zp[2]:4 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated (was zp[2]:7) zp[2]:6 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 main::$5 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
Allocated (was zp[2]:9) zp[2]:8 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
Allocated (was zp[2]:11) zp[2]:10 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
Allocated (was zp[1]:19) zp[1]:12 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Allocated (was zp[1]:20) zp[1]:13 [ init_font_hex::$0 ]
Allocated (was zp[1]:24) zp[1]:14 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Allocated (was zp[1]:38) zp[1]:15 [ main::x#2 main::x#1 ]
Allocated (was zp[1]:39) zp[1]:16 [ init_font_hex::c#6 init_font_hex::c#1 ]
Allocated (was zp[2]:46) zp[2]:17 [ main::xw#0 atan2_16::x#0 ]
Allocated (was zp[2]:48) zp[2]:19 [ main::yw#0 atan2_16::y#0 ]
Allocated (was zp[2]:44) zp[2]:21 [ main::screen#2 main::screen#4 main::screen#1 ]
Allocated (was zp[1]:50) zp[1]:23 [ main::y#4 main::y#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -1747,13 +1750,13 @@ ASSEMBLER BEFORE OPTIMIZATION
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
.label col00 = COLS+$c*$28+$13
.label __5 = $d
.label xw = $13
.label yw = $15
.label angle_w = $d
.label screen = 4
.label x = 3
.label y = 2
.label __5 = 6
.label xw = $11
.label yw = $13
.label angle_w = 6
.label screen = $15
.label x = $f
.label y = $17
// [1] call init_font_hex
// [22] phi from main to init_font_hex [phi:main->init_font_hex]
init_font_hex_from_main:
@ -1862,15 +1865,15 @@ main: {
}
// init_font_hex
// Make charset from proto chars
// void init_font_hex(__zp($b) char *charset)
// void init_font_hex(__zp($a) char *charset)
init_font_hex: {
.label __0 = $17
.label idx = 8
.label proto_lo = $d
.label charset = $b
.label c1 = 7
.label proto_hi = 9
.label c = 6
.label __0 = $d
.label idx = $c
.label proto_lo = 6
.label charset = $a
.label c1 = $e
.label proto_hi = 8
.label c = $10
// [23] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1]
__b1_from_init_font_hex:
// [23] phi init_font_hex::c#6 = 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1
@ -2022,18 +2025,18 @@ init_font_hex: {
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// __zp($d) unsigned int atan2_16(__zp($13) int x, __zp($15) int y)
// __zp(6) unsigned int atan2_16(__zp($11) int x, __zp($13) int y)
atan2_16: {
.label __2 = 9
.label __7 = $b
.label yi = 9
.label xi = $b
.label angle = $d
.label xd = $11
.label yd = $f
.label return = $d
.label x = $13
.label y = $15
.label __2 = 8
.label __7 = $a
.label yi = 8
.label xi = $a
.label angle = 6
.label xd = 4
.label yd = 2
.label return = 6
.label x = $11
.label y = $13
// [45] if(atan2_16::y#0>=0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1
lda.z y+1
bpl __b1
@ -2462,131 +2465,131 @@ __constant char * const D018 = (char *) 53272
__constant char FONT_HEX_PROTO[] = { 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 }
__constant char * const SCREEN = (char *) 10240
unsigned int atan2_16(int x , int y)
int atan2_16::$2 // zp[2]:9 2002.0
int atan2_16::$2 // zp[2]:8 2002.0
char atan2_16::$22 // reg byte a 2000002.0
char atan2_16::$23 // reg byte a 2000002.0
int atan2_16::$7 // zp[2]:11 2002.0
int atan2_16::$7 // zp[2]:10 2002.0
unsigned int atan2_16::angle
unsigned int atan2_16::angle#1 // angle zp[2]:13 1501.5
unsigned int atan2_16::angle#11 // angle zp[2]:13 2002.0
unsigned int atan2_16::angle#12 // angle zp[2]:13 190476.38095238095
unsigned int atan2_16::angle#13 // angle zp[2]:13 1333334.6666666667
unsigned int atan2_16::angle#2 // angle zp[2]:13 2000002.0
unsigned int atan2_16::angle#3 // angle zp[2]:13 2000002.0
unsigned int atan2_16::angle#4 // angle zp[2]:13 2002.0
unsigned int atan2_16::angle#5 // angle zp[2]:13 2002.0
unsigned int atan2_16::angle#6 // angle zp[2]:13 2001003.0
unsigned int atan2_16::angle#1 // angle zp[2]:6 1501.5
unsigned int atan2_16::angle#11 // angle zp[2]:6 2002.0
unsigned int atan2_16::angle#12 // angle zp[2]:6 190476.38095238095
unsigned int atan2_16::angle#13 // angle zp[2]:6 1333334.6666666667
unsigned int atan2_16::angle#2 // angle zp[2]:6 2000002.0
unsigned int atan2_16::angle#3 // angle zp[2]:6 2000002.0
unsigned int atan2_16::angle#4 // angle zp[2]:6 2002.0
unsigned int atan2_16::angle#5 // angle zp[2]:6 2002.0
unsigned int atan2_16::angle#6 // angle zp[2]:6 2001003.0
char atan2_16::i
char atan2_16::i#1 // reg byte x 1500001.5
char atan2_16::i#2 // reg byte x 208333.5416666667
unsigned int atan2_16::return
unsigned int atan2_16::return#0 // return zp[2]:13 701.0
unsigned int atan2_16::return#2 // return zp[2]:13 202.0
unsigned int atan2_16::return#0 // return zp[2]:6 701.0
unsigned int atan2_16::return#2 // return zp[2]:6 202.0
char atan2_16::shift
char atan2_16::shift#1 // reg byte y 2.0000002E7
char atan2_16::shift#2 // reg byte y 8000001.25
char atan2_16::shift#5 // reg byte y 666667.3333333334
int atan2_16::x
int atan2_16::x#0 // x zp[2]:19 108.02631578947367
int atan2_16::x#0 // x zp[2]:17 108.02631578947367
int atan2_16::xd
int atan2_16::xd#1 // xd zp[2]:17 6666667.333333333
int atan2_16::xd#10 // xd zp[2]:17 1000001.0
int atan2_16::xd#2 // xd zp[2]:17 1000001.0
int atan2_16::xd#3 // xd zp[2]:17 7666668.333333332
int atan2_16::xd#5 // xd zp[2]:17 1000001.0
int atan2_16::xd#1 // xd zp[2]:4 6666667.333333333
int atan2_16::xd#10 // xd zp[2]:4 1000001.0
int atan2_16::xd#2 // xd zp[2]:4 1000001.0
int atan2_16::xd#3 // xd zp[2]:4 7666668.333333332
int atan2_16::xd#5 // xd zp[2]:4 1000001.0
int atan2_16::xi
int atan2_16::xi#0 // xi zp[2]:11 3003.0
int atan2_16::xi#1 // xi zp[2]:11 500000.5
int atan2_16::xi#13 // xi zp[2]:11 2002.0
int atan2_16::xi#2 // xi zp[2]:11 500000.5
int atan2_16::xi#3 // xi zp[2]:11 266733.6666666667
int atan2_16::xi#8 // xi zp[2]:11 1000001.0
int atan2_16::xi#0 // xi zp[2]:10 3003.0
int atan2_16::xi#1 // xi zp[2]:10 500000.5
int atan2_16::xi#13 // xi zp[2]:10 2002.0
int atan2_16::xi#2 // xi zp[2]:10 500000.5
int atan2_16::xi#3 // xi zp[2]:10 266733.6666666667
int atan2_16::xi#8 // xi zp[2]:10 1000001.0
int atan2_16::y
int atan2_16::y#0 // y zp[2]:21 102.625
int atan2_16::y#0 // y zp[2]:19 102.625
int atan2_16::yd
int atan2_16::yd#1 // yd zp[2]:15 1.0000001E7
int atan2_16::yd#10 // yd zp[2]:15 2000002.0
int atan2_16::yd#2 // yd zp[2]:15 2000002.0
int atan2_16::yd#3 // yd zp[2]:15 4600001.0
int atan2_16::yd#5 // yd zp[2]:15 2000002.0
int atan2_16::yd#1 // yd zp[2]:2 1.0000001E7
int atan2_16::yd#10 // yd zp[2]:2 2000002.0
int atan2_16::yd#2 // yd zp[2]:2 2000002.0
int atan2_16::yd#3 // yd zp[2]:2 4600001.0
int atan2_16::yd#5 // yd zp[2]:2 2000002.0
int atan2_16::yi
int atan2_16::yi#0 // yi zp[2]:9 600.5999999999999
int atan2_16::yi#1 // yi zp[2]:9 666667.3333333334
int atan2_16::yi#16 // yi zp[2]:9 2002.0
int atan2_16::yi#2 // yi zp[2]:9 666667.3333333334
int atan2_16::yi#3 // yi zp[2]:9 353000.41176470584
int atan2_16::yi#8 // yi zp[2]:9 1000001.0
int atan2_16::yi#0 // yi zp[2]:8 600.5999999999999
int atan2_16::yi#1 // yi zp[2]:8 666667.3333333334
int atan2_16::yi#16 // yi zp[2]:8 2002.0
int atan2_16::yi#2 // yi zp[2]:8 666667.3333333334
int atan2_16::yi#3 // yi zp[2]:8 353000.41176470584
int atan2_16::yi#8 // yi zp[2]:8 1000001.0
void init_font_hex(char *charset)
char init_font_hex::$0 // zp[1]:23 10001.0
char init_font_hex::$0 // zp[1]:13 10001.0
char init_font_hex::$1 // reg byte a 20002.0
char init_font_hex::$2 // reg byte a 20002.0
char init_font_hex::c
char init_font_hex::c#1 // c zp[1]:6 151.5
char init_font_hex::c#6 // c zp[1]:6 10.631578947368421
char init_font_hex::c#1 // c zp[1]:16 151.5
char init_font_hex::c#6 // c zp[1]:16 10.631578947368421
char init_font_hex::c1
char init_font_hex::c1#1 // c1 zp[1]:7 1501.5
char init_font_hex::c1#4 // c1 zp[1]:7 133.46666666666667
char init_font_hex::c1#1 // c1 zp[1]:14 1501.5
char init_font_hex::c1#4 // c1 zp[1]:14 133.46666666666667
char *init_font_hex::charset
char *init_font_hex::charset#0 // charset zp[2]:11 350.5
char *init_font_hex::charset#2 // charset zp[2]:11 1079.0714285714287
char *init_font_hex::charset#5 // charset zp[2]:11 202.0
char *init_font_hex::charset#0 // charset zp[2]:10 350.5
char *init_font_hex::charset#2 // charset zp[2]:10 1079.0714285714287
char *init_font_hex::charset#5 // charset zp[2]:10 202.0
char init_font_hex::i
char init_font_hex::i#1 // reg byte x 15001.5
char init_font_hex::i#2 // reg byte x 6667.333333333333
char init_font_hex::idx
char init_font_hex::idx#2 // idx zp[1]:8 5501.0
char init_font_hex::idx#2 // idx zp[1]:12 5501.0
char init_font_hex::idx#3 // reg byte y 2002.0
char init_font_hex::idx#5 // idx zp[1]:8 6000.6
char init_font_hex::idx#5 // idx zp[1]:12 6000.6
char *init_font_hex::proto_hi
char *init_font_hex::proto_hi#1 // proto_hi zp[2]:9 67.33333333333333
char *init_font_hex::proto_hi#6 // proto_hi zp[2]:9 566.8333333333333
char *init_font_hex::proto_hi#1 // proto_hi zp[2]:8 67.33333333333333
char *init_font_hex::proto_hi#6 // proto_hi zp[2]:8 566.8333333333333
char *init_font_hex::proto_lo
char *init_font_hex::proto_lo#1 // proto_lo zp[2]:13 500.5
char *init_font_hex::proto_lo#4 // proto_lo zp[2]:13 923.3076923076923
char *init_font_hex::proto_lo#1 // proto_lo zp[2]:6 500.5
char *init_font_hex::proto_lo#4 // proto_lo zp[2]:6 923.3076923076923
void main()
unsigned int main::$5 // zp[2]:13 202.0
unsigned int main::$5 // zp[2]:6 202.0
char main::ang_w
char main::ang_w#0 // reg byte a 202.0
unsigned int main::angle_w
unsigned int main::angle_w#0 // angle_w zp[2]:13 202.0
unsigned int main::angle_w#0 // angle_w zp[2]:6 202.0
__constant char *main::col00 = COLS+(unsigned int)$c*$28+$13
char *main::screen
char *main::screen#1 // screen zp[2]:4 42.599999999999994
char *main::screen#2 // screen zp[2]:4 28.545454545454547
char *main::screen#4 // screen zp[2]:4 22.0
char *main::screen#1 // screen zp[2]:21 42.599999999999994
char *main::screen#2 // screen zp[2]:21 28.545454545454547
char *main::screen#4 // screen zp[2]:21 22.0
char *main::toD0181_gfx
char main::toD0181_return
__constant char main::toD0181_return#0 = byte1 (unsigned int)SCREEN&$3fff*4|byte1 (unsigned int)CHARSET/4&$f // toD0181_return
char *main::toD0181_screen
signed char main::x
signed char main::x#1 // x zp[1]:3 151.5
signed char main::x#2 // x zp[1]:3 16.833333333333332
signed char main::x#1 // x zp[1]:15 151.5
signed char main::x#2 // x zp[1]:15 16.833333333333332
int main::xw
unsigned int main::xw#0 // xw zp[2]:19 50.5
unsigned int main::xw#0 // xw zp[2]:17 50.5
signed char main::y
signed char main::y#1 // y zp[1]:2 16.5
signed char main::y#4 // y zp[1]:2 1.4666666666666666
signed char main::y#1 // y zp[1]:23 16.5
signed char main::y#4 // y zp[1]:23 1.4666666666666666
int main::yw
unsigned int main::yw#0 // yw zp[2]:21 50.5
unsigned int main::yw#0 // yw zp[2]:19 50.5
zp[1]:2 [ main::y#4 main::y#1 ]
zp[1]:3 [ main::x#2 main::x#1 ]
zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ]
zp[1]:6 [ init_font_hex::c#6 init_font_hex::c#1 ]
zp[1]:7 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
zp[1]:23 [ main::y#4 main::y#1 ]
zp[1]:15 [ main::x#2 main::x#1 ]
zp[2]:21 [ main::screen#2 main::screen#4 main::screen#1 ]
zp[1]:16 [ init_font_hex::c#6 init_font_hex::c#1 ]
zp[1]:14 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ]
zp[1]:8 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
zp[2]:9 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
zp[2]:11 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
zp[1]:12 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
zp[2]:8 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
zp[2]:10 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
zp[2]:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 main::$5 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
zp[2]:6 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 main::$5 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
zp[2]:15 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
zp[2]:17 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
zp[2]:19 [ main::xw#0 atan2_16::x#0 ]
zp[2]:21 [ main::yw#0 atan2_16::y#0 ]
zp[2]:2 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
zp[2]:4 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
zp[2]:17 [ main::xw#0 atan2_16::x#0 ]
zp[2]:19 [ main::yw#0 atan2_16::y#0 ]
reg byte a [ main::ang_w#0 ]
zp[1]:23 [ init_font_hex::$0 ]
zp[1]:13 [ init_font_hex::$0 ]
reg byte a [ init_font_hex::$1 ]
reg byte a [ init_font_hex::$2 ]
reg byte y [ init_font_hex::idx#3 ]
@ -2624,13 +2627,13 @@ Score: 1036177
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
.label col00 = COLS+$c*$28+$13
.label __5 = $d
.label xw = $13
.label yw = $15
.label angle_w = $d
.label screen = 4
.label x = 3
.label y = 2
.label __5 = 6
.label xw = $11
.label yw = $13
.label angle_w = 6
.label screen = $15
.label x = $f
.label y = $17
// init_font_hex(CHARSET)
// [1] call init_font_hex
// [22] phi from main to init_font_hex [phi:main->init_font_hex]
@ -2731,15 +2734,15 @@ main: {
}
// init_font_hex
// Make charset from proto chars
// void init_font_hex(__zp($b) char *charset)
// void init_font_hex(__zp($a) char *charset)
init_font_hex: {
.label __0 = $17
.label idx = 8
.label proto_lo = $d
.label charset = $b
.label c1 = 7
.label proto_hi = 9
.label c = 6
.label __0 = $d
.label idx = $c
.label proto_lo = 6
.label charset = $a
.label c1 = $e
.label proto_hi = 8
.label c = $10
// [23] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1]
// [23] phi init_font_hex::c#6 = 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1
lda #0
@ -2887,18 +2890,18 @@ init_font_hex: {
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// __zp($d) unsigned int atan2_16(__zp($13) int x, __zp($15) int y)
// __zp(6) unsigned int atan2_16(__zp($11) int x, __zp($13) int y)
atan2_16: {
.label __2 = 9
.label __7 = $b
.label yi = 9
.label xi = $b
.label angle = $d
.label xd = $11
.label yd = $f
.label return = $d
.label x = $13
.label y = $15
.label __2 = 8
.label __7 = $a
.label yi = 8
.label xi = $a
.label angle = 6
.label xd = 4
.label yd = 2
.label return = 6
.label x = $11
.label y = $13
// (y>=0)?y:-y
// [45] if(atan2_16::y#0>=0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1
lda.z y+1

View File

@ -8,131 +8,131 @@ __constant char * const D018 = (char *) 53272
__constant char FONT_HEX_PROTO[] = { 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 }
__constant char * const SCREEN = (char *) 10240
unsigned int atan2_16(int x , int y)
int atan2_16::$2 // zp[2]:9 2002.0
int atan2_16::$2 // zp[2]:8 2002.0
char atan2_16::$22 // reg byte a 2000002.0
char atan2_16::$23 // reg byte a 2000002.0
int atan2_16::$7 // zp[2]:11 2002.0
int atan2_16::$7 // zp[2]:10 2002.0
unsigned int atan2_16::angle
unsigned int atan2_16::angle#1 // angle zp[2]:13 1501.5
unsigned int atan2_16::angle#11 // angle zp[2]:13 2002.0
unsigned int atan2_16::angle#12 // angle zp[2]:13 190476.38095238095
unsigned int atan2_16::angle#13 // angle zp[2]:13 1333334.6666666667
unsigned int atan2_16::angle#2 // angle zp[2]:13 2000002.0
unsigned int atan2_16::angle#3 // angle zp[2]:13 2000002.0
unsigned int atan2_16::angle#4 // angle zp[2]:13 2002.0
unsigned int atan2_16::angle#5 // angle zp[2]:13 2002.0
unsigned int atan2_16::angle#6 // angle zp[2]:13 2001003.0
unsigned int atan2_16::angle#1 // angle zp[2]:6 1501.5
unsigned int atan2_16::angle#11 // angle zp[2]:6 2002.0
unsigned int atan2_16::angle#12 // angle zp[2]:6 190476.38095238095
unsigned int atan2_16::angle#13 // angle zp[2]:6 1333334.6666666667
unsigned int atan2_16::angle#2 // angle zp[2]:6 2000002.0
unsigned int atan2_16::angle#3 // angle zp[2]:6 2000002.0
unsigned int atan2_16::angle#4 // angle zp[2]:6 2002.0
unsigned int atan2_16::angle#5 // angle zp[2]:6 2002.0
unsigned int atan2_16::angle#6 // angle zp[2]:6 2001003.0
char atan2_16::i
char atan2_16::i#1 // reg byte x 1500001.5
char atan2_16::i#2 // reg byte x 208333.5416666667
unsigned int atan2_16::return
unsigned int atan2_16::return#0 // return zp[2]:13 701.0
unsigned int atan2_16::return#2 // return zp[2]:13 202.0
unsigned int atan2_16::return#0 // return zp[2]:6 701.0
unsigned int atan2_16::return#2 // return zp[2]:6 202.0
char atan2_16::shift
char atan2_16::shift#1 // reg byte y 2.0000002E7
char atan2_16::shift#2 // reg byte y 8000001.25
char atan2_16::shift#5 // reg byte y 666667.3333333334
int atan2_16::x
int atan2_16::x#0 // x zp[2]:19 108.02631578947367
int atan2_16::x#0 // x zp[2]:17 108.02631578947367
int atan2_16::xd
int atan2_16::xd#1 // xd zp[2]:17 6666667.333333333
int atan2_16::xd#10 // xd zp[2]:17 1000001.0
int atan2_16::xd#2 // xd zp[2]:17 1000001.0
int atan2_16::xd#3 // xd zp[2]:17 7666668.333333332
int atan2_16::xd#5 // xd zp[2]:17 1000001.0
int atan2_16::xd#1 // xd zp[2]:4 6666667.333333333
int atan2_16::xd#10 // xd zp[2]:4 1000001.0
int atan2_16::xd#2 // xd zp[2]:4 1000001.0
int atan2_16::xd#3 // xd zp[2]:4 7666668.333333332
int atan2_16::xd#5 // xd zp[2]:4 1000001.0
int atan2_16::xi
int atan2_16::xi#0 // xi zp[2]:11 3003.0
int atan2_16::xi#1 // xi zp[2]:11 500000.5
int atan2_16::xi#13 // xi zp[2]:11 2002.0
int atan2_16::xi#2 // xi zp[2]:11 500000.5
int atan2_16::xi#3 // xi zp[2]:11 266733.6666666667
int atan2_16::xi#8 // xi zp[2]:11 1000001.0
int atan2_16::xi#0 // xi zp[2]:10 3003.0
int atan2_16::xi#1 // xi zp[2]:10 500000.5
int atan2_16::xi#13 // xi zp[2]:10 2002.0
int atan2_16::xi#2 // xi zp[2]:10 500000.5
int atan2_16::xi#3 // xi zp[2]:10 266733.6666666667
int atan2_16::xi#8 // xi zp[2]:10 1000001.0
int atan2_16::y
int atan2_16::y#0 // y zp[2]:21 102.625
int atan2_16::y#0 // y zp[2]:19 102.625
int atan2_16::yd
int atan2_16::yd#1 // yd zp[2]:15 1.0000001E7
int atan2_16::yd#10 // yd zp[2]:15 2000002.0
int atan2_16::yd#2 // yd zp[2]:15 2000002.0
int atan2_16::yd#3 // yd zp[2]:15 4600001.0
int atan2_16::yd#5 // yd zp[2]:15 2000002.0
int atan2_16::yd#1 // yd zp[2]:2 1.0000001E7
int atan2_16::yd#10 // yd zp[2]:2 2000002.0
int atan2_16::yd#2 // yd zp[2]:2 2000002.0
int atan2_16::yd#3 // yd zp[2]:2 4600001.0
int atan2_16::yd#5 // yd zp[2]:2 2000002.0
int atan2_16::yi
int atan2_16::yi#0 // yi zp[2]:9 600.5999999999999
int atan2_16::yi#1 // yi zp[2]:9 666667.3333333334
int atan2_16::yi#16 // yi zp[2]:9 2002.0
int atan2_16::yi#2 // yi zp[2]:9 666667.3333333334
int atan2_16::yi#3 // yi zp[2]:9 353000.41176470584
int atan2_16::yi#8 // yi zp[2]:9 1000001.0
int atan2_16::yi#0 // yi zp[2]:8 600.5999999999999
int atan2_16::yi#1 // yi zp[2]:8 666667.3333333334
int atan2_16::yi#16 // yi zp[2]:8 2002.0
int atan2_16::yi#2 // yi zp[2]:8 666667.3333333334
int atan2_16::yi#3 // yi zp[2]:8 353000.41176470584
int atan2_16::yi#8 // yi zp[2]:8 1000001.0
void init_font_hex(char *charset)
char init_font_hex::$0 // zp[1]:23 10001.0
char init_font_hex::$0 // zp[1]:13 10001.0
char init_font_hex::$1 // reg byte a 20002.0
char init_font_hex::$2 // reg byte a 20002.0
char init_font_hex::c
char init_font_hex::c#1 // c zp[1]:6 151.5
char init_font_hex::c#6 // c zp[1]:6 10.631578947368421
char init_font_hex::c#1 // c zp[1]:16 151.5
char init_font_hex::c#6 // c zp[1]:16 10.631578947368421
char init_font_hex::c1
char init_font_hex::c1#1 // c1 zp[1]:7 1501.5
char init_font_hex::c1#4 // c1 zp[1]:7 133.46666666666667
char init_font_hex::c1#1 // c1 zp[1]:14 1501.5
char init_font_hex::c1#4 // c1 zp[1]:14 133.46666666666667
char *init_font_hex::charset
char *init_font_hex::charset#0 // charset zp[2]:11 350.5
char *init_font_hex::charset#2 // charset zp[2]:11 1079.0714285714287
char *init_font_hex::charset#5 // charset zp[2]:11 202.0
char *init_font_hex::charset#0 // charset zp[2]:10 350.5
char *init_font_hex::charset#2 // charset zp[2]:10 1079.0714285714287
char *init_font_hex::charset#5 // charset zp[2]:10 202.0
char init_font_hex::i
char init_font_hex::i#1 // reg byte x 15001.5
char init_font_hex::i#2 // reg byte x 6667.333333333333
char init_font_hex::idx
char init_font_hex::idx#2 // idx zp[1]:8 5501.0
char init_font_hex::idx#2 // idx zp[1]:12 5501.0
char init_font_hex::idx#3 // reg byte y 2002.0
char init_font_hex::idx#5 // idx zp[1]:8 6000.6
char init_font_hex::idx#5 // idx zp[1]:12 6000.6
char *init_font_hex::proto_hi
char *init_font_hex::proto_hi#1 // proto_hi zp[2]:9 67.33333333333333
char *init_font_hex::proto_hi#6 // proto_hi zp[2]:9 566.8333333333333
char *init_font_hex::proto_hi#1 // proto_hi zp[2]:8 67.33333333333333
char *init_font_hex::proto_hi#6 // proto_hi zp[2]:8 566.8333333333333
char *init_font_hex::proto_lo
char *init_font_hex::proto_lo#1 // proto_lo zp[2]:13 500.5
char *init_font_hex::proto_lo#4 // proto_lo zp[2]:13 923.3076923076923
char *init_font_hex::proto_lo#1 // proto_lo zp[2]:6 500.5
char *init_font_hex::proto_lo#4 // proto_lo zp[2]:6 923.3076923076923
void main()
unsigned int main::$5 // zp[2]:13 202.0
unsigned int main::$5 // zp[2]:6 202.0
char main::ang_w
char main::ang_w#0 // reg byte a 202.0
unsigned int main::angle_w
unsigned int main::angle_w#0 // angle_w zp[2]:13 202.0
unsigned int main::angle_w#0 // angle_w zp[2]:6 202.0
__constant char *main::col00 = COLS+(unsigned int)$c*$28+$13
char *main::screen
char *main::screen#1 // screen zp[2]:4 42.599999999999994
char *main::screen#2 // screen zp[2]:4 28.545454545454547
char *main::screen#4 // screen zp[2]:4 22.0
char *main::screen#1 // screen zp[2]:21 42.599999999999994
char *main::screen#2 // screen zp[2]:21 28.545454545454547
char *main::screen#4 // screen zp[2]:21 22.0
char *main::toD0181_gfx
char main::toD0181_return
__constant char main::toD0181_return#0 = byte1 (unsigned int)SCREEN&$3fff*4|byte1 (unsigned int)CHARSET/4&$f // toD0181_return
char *main::toD0181_screen
signed char main::x
signed char main::x#1 // x zp[1]:3 151.5
signed char main::x#2 // x zp[1]:3 16.833333333333332
signed char main::x#1 // x zp[1]:15 151.5
signed char main::x#2 // x zp[1]:15 16.833333333333332
int main::xw
unsigned int main::xw#0 // xw zp[2]:19 50.5
unsigned int main::xw#0 // xw zp[2]:17 50.5
signed char main::y
signed char main::y#1 // y zp[1]:2 16.5
signed char main::y#4 // y zp[1]:2 1.4666666666666666
signed char main::y#1 // y zp[1]:23 16.5
signed char main::y#4 // y zp[1]:23 1.4666666666666666
int main::yw
unsigned int main::yw#0 // yw zp[2]:21 50.5
unsigned int main::yw#0 // yw zp[2]:19 50.5
zp[1]:2 [ main::y#4 main::y#1 ]
zp[1]:3 [ main::x#2 main::x#1 ]
zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ]
zp[1]:6 [ init_font_hex::c#6 init_font_hex::c#1 ]
zp[1]:7 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
zp[1]:23 [ main::y#4 main::y#1 ]
zp[1]:15 [ main::x#2 main::x#1 ]
zp[2]:21 [ main::screen#2 main::screen#4 main::screen#1 ]
zp[1]:16 [ init_font_hex::c#6 init_font_hex::c#1 ]
zp[1]:14 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ]
zp[1]:8 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
zp[2]:9 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
zp[2]:11 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
zp[1]:12 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
zp[2]:8 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
zp[2]:10 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
zp[2]:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 main::$5 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
zp[2]:6 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 main::$5 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
zp[2]:15 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
zp[2]:17 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
zp[2]:19 [ main::xw#0 atan2_16::x#0 ]
zp[2]:21 [ main::yw#0 atan2_16::y#0 ]
zp[2]:2 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
zp[2]:4 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
zp[2]:17 [ main::xw#0 atan2_16::x#0 ]
zp[2]:19 [ main::yw#0 atan2_16::y#0 ]
reg byte a [ main::ang_w#0 ]
zp[1]:23 [ init_font_hex::$0 ]
zp[1]:13 [ init_font_hex::$0 ]
reg byte a [ init_font_hex::$1 ]
reg byte a [ init_font_hex::$2 ]
reg byte y [ init_font_hex::idx#3 ]

Some files were not shown because too many files have changed in this diff Show More