1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-02-20 15:29:10 +00:00

Added missing fragments and a few new synth rules for derefidx

This commit is contained in:
jespergravgaard 2018-04-24 23:15:18 +02:00
parent 34d8afcaae
commit b2f16e2a57
42 changed files with 92884 additions and 7362 deletions

View File

@ -20,7 +20,7 @@ public class CompileLog {
/**
* Should fragment synthesis be verbose.
*/
private boolean verboseFragmentLog = true;
private boolean verboseFragmentLog = false;
/**
* Should ASM optimization be verbose.
@ -35,7 +35,7 @@ public class CompileLog {
/**
* Should the log be output to System.out while being built
*/
private boolean sysOut = true;
private boolean sysOut = false;
public CompileLog() {
this.log = new StringBuilder();

View File

@ -184,6 +184,7 @@ class AsmFragmentTemplateSynthesisRule {
Map<String, String> mapZ = new LinkedHashMap<>();
mapZ.put("z2", "z1");
mapZ.put("z3", "z2");
mapZ.put("z4", "z3");
Map<String, String> mapZ2 = new LinkedHashMap<>();
mapZ2.put("z3", "z1");
Map<String, String> mapZ3 = new LinkedHashMap<>();
@ -439,6 +440,15 @@ class AsmFragmentTemplateSynthesisRule {
// Rewrite *C1 to YY (if other C1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*c1.*)_deref_pb(.)c1(.*)", rvalYy+"|"+lvalDerefC1, "ldy {c1}", "$1vb$2yy$3", null, null));
// Rewrite (Z1),y to AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)pb(.)z1_derefidx_vbuyy(.*)_then_(.*)", twoZ1+"|"+rvalAa, "lda ({z1}),y\n" , "$1vb$2aa$3_then_$4", null, mapZ));
// Rewrite (Z1),y to save and reload YY from $FF
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuyy=(.*)", twoZ1, "sty $ff\n" , "vb$1aa=$2", "ldy $ff\nsta ({z1}),y", mapZ));
// Rewrite C1,y to save and reload YY from $FF
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuyy=(.*)", twoC1, "sty $ff\n" , "vb$1aa=$2", "ldy $ff\nsta {c1},y", mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx=(.*)", twoC1, "stx $ff\n" , "vb$1aa=$2", "ldx $ff\nsta {c1},x", mapC));
// OLD STYLE REWRITES - written when only one rule could be taken
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuz1=(.*)", twoZ1+"|"+twoC1, null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x", mapZC));
@ -457,6 +467,7 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_derefidx_vbuz2(.*)", rvalYy+"|"+twoZ2, "ldy {z2}", "$1=$2_derefidx_vbuyy$3", null, mapZ3));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_derefidx_vbuz3(.*)", rvalYy, "ldy {z3}", "$1=$2_derefidx_vbuyy$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_derefidx_vbuz3(.*)", rvalXx, "ldx {z3}", "$1=$2_derefidx_vbuxx$3", null, null));
// Convert array indexing twice with A/zp1/zp2 to X/Y register with a ldx/ldy prefix ( ..._derefidx_vbunn..._derefidx_vbunn... -> ..._derefidx_vbuxx..._derefidx_vbuxx... )
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuaa(.*)_derefidx_vbuaa(.*)", threeAa+"|"+rvalXx+"|"+lvalDerefIdxAa, "tax", "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuaa(.*)_derefidx_vbuaa(.*)", threeAa+"|"+rvalYy+"|"+lvalDerefIdxAa, "tay", "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", null, null));

View File

@ -0,0 +1,2 @@
dex
dex

View File

@ -0,0 +1,2 @@
dey
dey

View File

@ -0,0 +1,2 @@
dec {z1}
dec {z1}

View File

@ -0,0 +1,7 @@
lda {z1}
clc
adc #2
sta {z1}
bcc !+
inc {z1}+1
!:

View File

@ -8,7 +8,7 @@ void main() {
void print_spaced(byte* at, byte* msg) {
byte j=0;
for(byte i=0; msg[i]!='@'; i++) {
screen[j] = msg[i];
at[j] = msg[i];
j = j + 2;
}
}

View File

@ -0,0 +1,55 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
jsr main
main: {
.label screen = 2
.label colors = 4
.label row = 6
lda #0
sta row
lda #<$d800
sta colors
lda #>$d800
sta colors+1
ldx #1
lda #<$400
sta screen
lda #>$400
sta screen+1
b1:
ldy #0
b2:
lda #$a0
sta (screen),y
txa
sta (colors),y
txa
eor #1
tax
iny
cpy #8
bne b2
txa
eor #1
tax
lda screen
clc
adc #$28
sta screen
bcc !+
inc screen+1
!:
lda colors
clc
adc #$28
sta colors
bcc !+
inc colors+1
!:
inc row
lda row
cmp #8
bne b1
rts
}

View File

@ -0,0 +1,37 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@1
@1: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
[4] phi() [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main main::@3
[5] (byte) main::row#4 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@3/(byte) main::row#1 ) [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] ( main:2 [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] )
[5] (byte*) main::colors#4 ← phi( main/((byte*))(word/dword/signed dword) 55296 main::@3/(byte*) main::colors#1 ) [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] ( main:2 [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] )
[5] (byte) main::color#5 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 1 main::@3/(byte) main::color#2 ) [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] ( main:2 [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] )
[5] (byte*) main::screen#4 ← phi( main/((byte*))(word/signed word/dword/signed dword) 1024 main::@3/(byte*) main::screen#1 ) [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] ( main:2 [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] )
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[6] (byte) main::color#3 ← phi( main::@1/(byte) main::color#5 main::@2/(byte) main::color#1 ) [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] )
[6] (byte) main::column#2 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::column#1 ) [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] )
[7] *((byte*) main::screen#4 + (byte) main::column#2) ← (byte/word/signed word/dword/signed dword) 160 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] )
[8] *((byte*) main::colors#4 + (byte) main::column#2) ← (byte) main::color#3 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] )
[9] (byte) main::color#1 ← (byte) main::color#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] )
[10] (byte) main::column#1 ← ++ (byte) main::column#2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] )
[11] if((byte) main::column#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] )
to:main::@3
main::@3: scope:[main] from main::@2
[12] (byte) main::color#2 ← (byte) main::color#1 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] )
[13] (byte*) main::screen#1 ← (byte*) main::screen#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ( main:2 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] )
[14] (byte*) main::colors#1 ← (byte*) main::colors#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ( main:2 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] )
[15] (byte) main::row#1 ← ++ (byte) main::row#4 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ( main:2 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] )
[16] if((byte) main::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ( main:2 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] )
to:main::@return
main::@return: scope:[main] from main::@3
[17] return [ ] ( main:2 [ ] )
to:@return

View File

@ -0,0 +1,830 @@
PARSING src/test/java/dk/camelot64/kickc/test/kc/chessboard.kc
// Draws a chess board in the upper left corner of the screen
void main() {
byte* screen = $0400;
byte* colors = $d800;
byte color = 1;
for( byte row: 0..7) {
for( byte column: 0..7) {
screen[column] = $a0;
colors[column] = color;
color = color^1;
}
color = color^1;
screen = screen+40;
colors = colors+40;
}
}
SYMBOLS
(label) @1
(label) @begin
(label) @end
(void()) main()
(byte/word/dword~) main::$0
(boolean~) main::$1
(byte/word/dword~) main::$2
(byte*~) main::$3
(byte*~) main::$4
(boolean~) main::$5
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@return
(byte) main::color
(byte*) main::colors
(byte) main::column
(byte) main::row
(byte*) main::screen
Promoting word/signed word/dword/signed dword to byte* in main::screen ← ((byte*)) 1024
Promoting word/dword/signed dword to byte* in main::colors ← ((byte*)) 55296
INITIAL CONTROL FLOW GRAPH
@begin: scope:[] from
to:@1
main: scope:[main] from
(byte*) main::screen ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) main::colors ← ((byte*)) (word/dword/signed dword) 55296
(byte) main::color ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::row ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@1
main::@1: scope:[main] from main main::@3
(byte) main::column ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
*((byte*) main::screen + (byte) main::column) ← (byte/word/signed word/dword/signed dword) 160
*((byte*) main::colors + (byte) main::column) ← (byte) main::color
(byte/word/dword~) main::$0 ← (byte) main::color ^ (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::color ← (byte/word/dword~) main::$0
(byte) main::column ← ++ (byte) main::column
(boolean~) main::$1 ← (byte) main::column != (byte/signed byte/word/signed word/dword/signed dword) 8
if((boolean~) main::$1) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
(byte/word/dword~) main::$2 ← (byte) main::color ^ (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::color ← (byte/word/dword~) main::$2
(byte*~) main::$3 ← (byte*) main::screen + (byte/signed byte/word/signed word/dword/signed dword) 40
(byte*) main::screen ← (byte*~) main::$3
(byte*~) main::$4 ← (byte*) main::colors + (byte/signed byte/word/signed word/dword/signed dword) 40
(byte*) main::colors ← (byte*~) main::$4
(byte) main::row ← ++ (byte) main::row
(boolean~) main::$5 ← (byte) main::row != (byte/signed byte/word/signed word/dword/signed dword) 8
if((boolean~) main::$5) goto main::@1
to:main::@4
main::@4: scope:[main] from main::@3
to:main::@return
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
call main
to:@end
@end: scope:[] from @1
Removing empty block main::@4
PROCEDURE MODIFY VARIABLE ANALYSIS
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
@begin: scope:[] from
to:@1
main: scope:[main] from @1
(byte*) main::screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) main::colors#0 ← ((byte*)) (word/dword/signed dword) 55296
(byte) main::color#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::row#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@1
main::@1: scope:[main] from main main::@3
(byte) main::row#4 ← phi( main/(byte) main::row#0 main::@3/(byte) main::row#1 )
(byte*) main::colors#4 ← phi( main/(byte*) main::colors#0 main::@3/(byte*) main::colors#1 )
(byte) main::color#5 ← phi( main/(byte) main::color#0 main::@3/(byte) main::color#2 )
(byte*) main::screen#4 ← phi( main/(byte*) main::screen#0 main::@3/(byte*) main::screen#1 )
(byte) main::column#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
(byte) main::row#3 ← phi( main::@1/(byte) main::row#4 main::@2/(byte) main::row#3 )
(byte*) main::colors#2 ← phi( main::@1/(byte*) main::colors#4 main::@2/(byte*) main::colors#2 )
(byte) main::color#3 ← phi( main::@1/(byte) main::color#5 main::@2/(byte) main::color#1 )
(byte) main::column#2 ← phi( main::@1/(byte) main::column#0 main::@2/(byte) main::column#1 )
(byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#4 main::@2/(byte*) main::screen#2 )
*((byte*) main::screen#2 + (byte) main::column#2) ← (byte/word/signed word/dword/signed dword) 160
*((byte*) main::colors#2 + (byte) main::column#2) ← (byte) main::color#3
(byte/word/dword~) main::$0 ← (byte) main::color#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::color#1 ← (byte/word/dword~) main::$0
(byte) main::column#1 ← ++ (byte) main::column#2
(boolean~) main::$1 ← (byte) main::column#1 != (byte/signed byte/word/signed word/dword/signed dword) 8
if((boolean~) main::$1) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
(byte) main::row#2 ← phi( main::@2/(byte) main::row#3 )
(byte*) main::colors#3 ← phi( main::@2/(byte*) main::colors#2 )
(byte*) main::screen#3 ← phi( main::@2/(byte*) main::screen#2 )
(byte) main::color#4 ← phi( main::@2/(byte) main::color#1 )
(byte/word/dword~) main::$2 ← (byte) main::color#4 ^ (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::color#2 ← (byte/word/dword~) main::$2
(byte*~) main::$3 ← (byte*) main::screen#3 + (byte/signed byte/word/signed word/dword/signed dword) 40
(byte*) main::screen#1 ← (byte*~) main::$3
(byte*~) main::$4 ← (byte*) main::colors#3 + (byte/signed byte/word/signed word/dword/signed dword) 40
(byte*) main::colors#1 ← (byte*~) main::$4
(byte) main::row#1 ← ++ (byte) main::row#2
(boolean~) main::$5 ← (byte) main::row#1 != (byte/signed byte/word/signed word/dword/signed dword) 8
if((boolean~) main::$5) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@3
return
to:@return
@1: scope:[] from @begin
call main param-assignment
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @1
(label) @2
(label) @begin
(label) @end
(void()) main()
(byte/word/dword~) main::$0
(boolean~) main::$1
(byte/word/dword~) main::$2
(byte*~) main::$3
(byte*~) main::$4
(boolean~) main::$5
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return
(byte) main::color
(byte) main::color#0
(byte) main::color#1
(byte) main::color#2
(byte) main::color#3
(byte) main::color#4
(byte) main::color#5
(byte*) main::colors
(byte*) main::colors#0
(byte*) main::colors#1
(byte*) main::colors#2
(byte*) main::colors#3
(byte*) main::colors#4
(byte) main::column
(byte) main::column#0
(byte) main::column#1
(byte) main::column#2
(byte) main::row
(byte) main::row#0
(byte) main::row#1
(byte) main::row#2
(byte) main::row#3
(byte) main::row#4
(byte*) main::screen
(byte*) main::screen#0
(byte*) main::screen#1
(byte*) main::screen#2
(byte*) main::screen#3
(byte*) main::screen#4
OPTIMIZING CONTROL FLOW GRAPH
Culled Empty Block (label) @2
Succesful SSA optimization Pass2CullEmptyBlocks
Alias (byte) main::color#1 = (byte/word/dword~) main::$0 (byte) main::color#4
Alias (byte*) main::screen#2 = (byte*) main::screen#3
Alias (byte*) main::colors#2 = (byte*) main::colors#3
Alias (byte) main::row#2 = (byte) main::row#3
Alias (byte) main::color#2 = (byte/word/dword~) main::$2
Alias (byte*) main::screen#1 = (byte*~) main::$3
Alias (byte*) main::colors#1 = (byte*~) main::$4
Succesful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte*) main::screen#2
Self Phi Eliminated (byte*) main::colors#2
Self Phi Eliminated (byte) main::row#2
Succesful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) main::screen#2 (byte*) main::screen#4
Redundant Phi (byte*) main::colors#2 (byte*) main::colors#4
Redundant Phi (byte) main::row#2 (byte) main::row#4
Succesful SSA optimization Pass2RedundantPhiElimination
Simple Condition (boolean~) main::$1 if((byte) main::column#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2
Simple Condition (boolean~) main::$5 if((byte) main::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) main::screen#0 = ((byte*))1024
Constant (const byte*) main::colors#0 = ((byte*))55296
Constant (const byte) main::color#0 = 1
Constant (const byte) main::row#0 = 0
Constant (const byte) main::column#0 = 0
Succesful SSA optimization Pass2ConstantIdentification
OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const byte*) main::screen#0
Inlining constant with var siblings (const byte*) main::screen#0
Inlining constant with var siblings (const byte*) main::colors#0
Inlining constant with var siblings (const byte*) main::colors#0
Inlining constant with var siblings (const byte) main::color#0
Inlining constant with var siblings (const byte) main::color#0
Inlining constant with var siblings (const byte) main::color#0
Inlining constant with var siblings (const byte) main::color#0
Inlining constant with var siblings (const byte) main::row#0
Inlining constant with var siblings (const byte) main::row#0
Inlining constant with var siblings (const byte) main::column#0
Inlining constant with var siblings (const byte) main::column#0
Constant inlined main::screen#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined main::colors#0 = ((byte*))(word/dword/signed dword) 55296
Constant inlined main::color#0 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined main::row#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::column#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return
Added new block during phi lifting main::@5(between main::@3 and main::@1)
Added new block during phi lifting main::@6(between main::@2 and main::@2)
Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return main::@5 main::@6
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
CALL GRAPH
Calls in [] to main:2
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Created 6 initial phi equivalence classes
Coalesced [6] main::color#7 ← main::color#5
Coalesced [19] main::screen#5 ← main::screen#1
Coalesced [20] main::color#6 ← main::color#2
Coalesced [21] main::colors#5 ← main::colors#1
Coalesced [22] main::row#5 ← main::row#1
Coalesced [23] main::column#3 ← main::column#1
Coalesced [24] main::color#8 ← main::color#1
Coalesced down to 5 phi equivalence classes
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@1
@1: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
[4] phi() [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main main::@3
[5] (byte) main::row#4 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@3/(byte) main::row#1 ) [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] ( main:2 [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] )
[5] (byte*) main::colors#4 ← phi( main/((byte*))(word/dword/signed dword) 55296 main::@3/(byte*) main::colors#1 ) [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] ( main:2 [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] )
[5] (byte) main::color#5 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 1 main::@3/(byte) main::color#2 ) [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] ( main:2 [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] )
[5] (byte*) main::screen#4 ← phi( main/((byte*))(word/signed word/dword/signed dword) 1024 main::@3/(byte*) main::screen#1 ) [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] ( main:2 [ main::screen#4 main::color#5 main::colors#4 main::row#4 ] )
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[6] (byte) main::color#3 ← phi( main::@1/(byte) main::color#5 main::@2/(byte) main::color#1 ) [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] )
[6] (byte) main::column#2 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::column#1 ) [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] )
[7] *((byte*) main::screen#4 + (byte) main::column#2) ← (byte/word/signed word/dword/signed dword) 160 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] )
[8] *((byte*) main::colors#4 + (byte) main::column#2) ← (byte) main::color#3 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] )
[9] (byte) main::color#1 ← (byte) main::color#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] )
[10] (byte) main::column#1 ← ++ (byte) main::column#2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] )
[11] if((byte) main::column#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] )
to:main::@3
main::@3: scope:[main] from main::@2
[12] (byte) main::color#2 ← (byte) main::color#1 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] )
[13] (byte*) main::screen#1 ← (byte*) main::screen#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ( main:2 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] )
[14] (byte*) main::colors#1 ← (byte*) main::colors#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ( main:2 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] )
[15] (byte) main::row#1 ← ++ (byte) main::row#4 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ( main:2 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] )
[16] if((byte) main::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ( main:2 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] )
to:main::@return
main::@return: scope:[main] from main::@3
[17] return [ ] ( main:2 [ ] )
to:@return
DOMINATORS
@begin dominated by @begin
@1 dominated by @1 @begin
@end dominated by @1 @begin @end
main dominated by @1 @begin main
main::@1 dominated by @1 @begin main::@1 main
main::@2 dominated by @1 @begin main::@1 main::@2 main
main::@3 dominated by @1 @begin main::@1 main::@2 main main::@3
main::@return dominated by main::@return @1 @begin main::@1 main::@2 main main::@3
NATURAL LOOPS
Found back edge: Loop head: main::@2 tails: main::@2 blocks: null
Found back edge: Loop head: main::@1 tails: main::@3 blocks: null
Populated: Loop head: main::@2 tails: main::@2 blocks: main::@2
Populated: Loop head: main::@1 tails: main::@3 blocks: main::@3 main::@2 main::@1
Loop head: main::@2 tails: main::@2 blocks: main::@2
Loop head: main::@1 tails: main::@3 blocks: main::@3 main::@2 main::@1
NATURAL LOOPS WITH DEPTH
Found 0 loops in scope []
Found 2 loops in scope [main]
Loop head: main::@2 tails: main::@2 blocks: main::@2
Loop head: main::@1 tails: main::@3 blocks: main::@3 main::@2 main::@1
Loop head: main::@2 tails: main::@2 blocks: main::@2 depth: 2
Loop head: main::@1 tails: main::@3 blocks: main::@3 main::@2 main::@1 depth: 1
VARIABLE REGISTER WEIGHTS
(void()) main()
(byte) main::color
(byte) main::color#1 71.0
(byte) main::color#2 4.4
(byte) main::color#3 104.66666666666666
(byte) main::color#5 22.0
(byte*) main::colors
(byte*) main::colors#1 7.333333333333333
(byte*) main::colors#4 13.666666666666664
(byte) main::column
(byte) main::column#1 151.5
(byte) main::column#2 101.0
(byte) main::row
(byte) main::row#1 16.5
(byte) main::row#4 2.2
(byte*) main::screen
(byte*) main::screen#1 5.5
(byte*) main::screen#4 15.375
Initial phi equivalence classes
[ main::screen#4 main::screen#1 ]
[ main::colors#4 main::colors#1 ]
[ main::row#4 main::row#1 ]
[ main::column#2 main::column#1 ]
[ main::color#3 main::color#5 main::color#2 main::color#1 ]
Complete equivalence classes
[ main::screen#4 main::screen#1 ]
[ main::colors#4 main::colors#1 ]
[ 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 ZP_WORD:2 [ main::screen#4 main::screen#1 ]
Allocated zp ZP_WORD:4 [ main::colors#4 main::colors#1 ]
Allocated zp ZP_BYTE:6 [ main::row#4 main::row#1 ]
Allocated zp ZP_BYTE:7 [ main::column#2 main::column#1 ]
Allocated zp ZP_BYTE:8 [ main::color#3 main::color#5 main::color#2 main::color#1 ]
INITIAL ASM
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
jmp b1
//SEG4 @1
b1:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @1 to main [phi:@1->main]
main_from_b1:
jsr main
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
.label color = 8
.label column = 7
.label screen = 2
.label colors = 4
.label row = 6
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG11 [5] phi (byte) main::row#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #0
sta row
//SEG12 [5] phi (byte*) main::colors#4 = ((byte*))(word/dword/signed dword) 55296 [phi:main->main::@1#1] -- pbuz1=pbuc1
lda #<$d800
sta colors
lda #>$d800
sta colors+1
//SEG13 [5] phi (byte) main::color#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:main->main::@1#2] -- vbuz1=vbuc1
lda #1
sta color
//SEG14 [5] phi (byte*) main::screen#4 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main->main::@1#3] -- pbuz1=pbuc1
lda #<$400
sta screen
lda #>$400
sta screen+1
jmp b1
//SEG15 [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
b1_from_b3:
//SEG16 [5] phi (byte) main::row#4 = (byte) main::row#1 [phi:main::@3->main::@1#0] -- register_copy
//SEG17 [5] phi (byte*) main::colors#4 = (byte*) main::colors#1 [phi:main::@3->main::@1#1] -- register_copy
//SEG18 [5] phi (byte) main::color#5 = (byte) main::color#2 [phi:main::@3->main::@1#2] -- register_copy
//SEG19 [5] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#3] -- register_copy
jmp b1
//SEG20 main::@1
b1:
//SEG21 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
//SEG22 [6] phi (byte) main::color#3 = (byte) main::color#5 [phi:main::@1->main::@2#0] -- register_copy
//SEG23 [6] phi (byte) main::column#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@1->main::@2#1] -- vbuz1=vbuc1
lda #0
sta column
jmp b2
//SEG24 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
b2_from_b2:
//SEG25 [6] phi (byte) main::color#3 = (byte) main::color#1 [phi:main::@2->main::@2#0] -- register_copy
//SEG26 [6] phi (byte) main::column#2 = (byte) main::column#1 [phi:main::@2->main::@2#1] -- register_copy
jmp b2
//SEG27 main::@2
b2:
//SEG28 [7] *((byte*) main::screen#4 + (byte) main::column#2) ← (byte/word/signed word/dword/signed dword) 160 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ) -- pbuz1_derefidx_vbuz2=vbuc1
lda #$a0
ldy column
sta (screen),y
//SEG29 [8] *((byte*) main::colors#4 + (byte) main::column#2) ← (byte) main::color#3 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ) -- pbuz1_derefidx_vbuz2=vbuz3
lda color
ldy column
sta (colors),y
//SEG30 [9] (byte) main::color#1 ← (byte) main::color#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ) -- vbuz1=vbuz1_bxor_vbuc1
lda color
eor #1
sta color
//SEG31 [10] (byte) main::column#1 ← ++ (byte) main::column#2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ) -- vbuz1=_inc_vbuz1
inc column
//SEG32 [11] if((byte) main::column#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda column
cmp #8
bne b2_from_b2
jmp b3
//SEG33 main::@3
b3:
//SEG34 [12] (byte) main::color#2 ← (byte) main::color#1 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ) -- vbuz1=vbuz1_bxor_vbuc1
lda color
eor #1
sta color
//SEG35 [13] (byte*) main::screen#1 ← (byte*) main::screen#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ( main:2 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ) -- pbuz1=pbuz1_plus_vbuc1
lda screen
clc
adc #$28
sta screen
bcc !+
inc screen+1
!:
//SEG36 [14] (byte*) main::colors#1 ← (byte*) main::colors#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ( main:2 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ) -- pbuz1=pbuz1_plus_vbuc1
lda colors
clc
adc #$28
sta colors
bcc !+
inc colors+1
!:
//SEG37 [15] (byte) main::row#1 ← ++ (byte) main::row#4 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ( main:2 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ) -- vbuz1=_inc_vbuz1
inc row
//SEG38 [16] if((byte) main::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ( main:2 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda row
cmp #8
bne b1_from_b3
jmp breturn
//SEG39 main::@return
breturn:
//SEG40 [17] return [ ] ( main:2 [ ] )
rts
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] *((byte*) main::screen#4 + (byte) main::column#2) ← (byte/word/signed word/dword/signed dword) 160 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ 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 ZP_BYTE:6 [ main::row#4 main::row#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ main::column#2 main::column#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ main::color#3 main::color#5 main::color#2 main::color#1 ]
Statement [8] *((byte*) main::colors#4 + (byte) main::column#2) ← (byte) main::color#3 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ) always clobbers reg byte a
Statement [9] (byte) main::color#1 ← (byte) main::color#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ) always clobbers reg byte a
Statement [12] (byte) main::color#2 ← (byte) main::color#1 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ) always clobbers reg byte a
Statement [13] (byte*) main::screen#1 ← (byte*) main::screen#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ( main:2 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ) always clobbers reg byte a
Statement [14] (byte*) main::colors#1 ← (byte*) main::colors#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ( main:2 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ) always clobbers reg byte a
Statement [7] *((byte*) main::screen#4 + (byte) main::column#2) ← (byte/word/signed word/dword/signed dword) 160 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ) always clobbers reg byte a
Statement [8] *((byte*) main::colors#4 + (byte) main::column#2) ← (byte) main::color#3 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ) always clobbers reg byte a
Statement [9] (byte) main::color#1 ← (byte) main::color#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ) always clobbers reg byte a
Statement [12] (byte) main::color#2 ← (byte) main::color#1 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ) always clobbers reg byte a
Statement [13] (byte*) main::screen#1 ← (byte*) main::screen#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ( main:2 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ) always clobbers reg byte a
Statement [14] (byte*) main::colors#1 ← (byte*) main::colors#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ( main:2 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ) always clobbers reg byte a
Potential registers zp ZP_WORD:2 [ main::screen#4 main::screen#1 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_WORD:4 [ main::colors#4 main::colors#1 ] : zp ZP_WORD:4 ,
Potential registers zp ZP_BYTE:6 [ main::row#4 main::row#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:7 [ main::column#2 main::column#1 ] : zp ZP_BYTE:7 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:8 [ main::color#3 main::color#5 main::color#2 main::color#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 252.5: zp ZP_BYTE:7 [ main::column#2 main::column#1 ] 202.07: zp ZP_BYTE:8 [ main::color#3 main::color#5 main::color#2 main::color#1 ] 21: zp ZP_WORD:4 [ main::colors#4 main::colors#1 ] 20.88: zp ZP_WORD:2 [ main::screen#4 main::screen#1 ] 18.7: zp ZP_BYTE:6 [ main::row#4 main::row#1 ]
Uplift Scope []
Uplifting [main] best 4863 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 ZP_WORD:4 [ main::colors#4 main::colors#1 ] zp ZP_WORD:2 [ main::screen#4 main::screen#1 ] zp ZP_BYTE:6 [ main::row#4 main::row#1 ]
Uplifting [] best 4863 combination
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::row#4 main::row#1 ]
Uplifting [main] best 4863 combination zp ZP_BYTE:6 [ main::row#4 main::row#1 ]
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
jmp b1
//SEG4 @1
b1:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @1 to main [phi:@1->main]
main_from_b1:
jsr main
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
.label screen = 2
.label colors = 4
.label row = 6
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG11 [5] phi (byte) main::row#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #0
sta row
//SEG12 [5] phi (byte*) main::colors#4 = ((byte*))(word/dword/signed dword) 55296 [phi:main->main::@1#1] -- pbuz1=pbuc1
lda #<$d800
sta colors
lda #>$d800
sta colors+1
//SEG13 [5] phi (byte) main::color#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:main->main::@1#2] -- vbuxx=vbuc1
ldx #1
//SEG14 [5] phi (byte*) main::screen#4 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main->main::@1#3] -- pbuz1=pbuc1
lda #<$400
sta screen
lda #>$400
sta screen+1
jmp b1
//SEG15 [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
b1_from_b3:
//SEG16 [5] phi (byte) main::row#4 = (byte) main::row#1 [phi:main::@3->main::@1#0] -- register_copy
//SEG17 [5] phi (byte*) main::colors#4 = (byte*) main::colors#1 [phi:main::@3->main::@1#1] -- register_copy
//SEG18 [5] phi (byte) main::color#5 = (byte) main::color#2 [phi:main::@3->main::@1#2] -- register_copy
//SEG19 [5] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#3] -- register_copy
jmp b1
//SEG20 main::@1
b1:
//SEG21 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
//SEG22 [6] phi (byte) main::color#3 = (byte) main::color#5 [phi:main::@1->main::@2#0] -- register_copy
//SEG23 [6] phi (byte) main::column#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@1->main::@2#1] -- vbuyy=vbuc1
ldy #0
jmp b2
//SEG24 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
b2_from_b2:
//SEG25 [6] phi (byte) main::color#3 = (byte) main::color#1 [phi:main::@2->main::@2#0] -- register_copy
//SEG26 [6] phi (byte) main::column#2 = (byte) main::column#1 [phi:main::@2->main::@2#1] -- register_copy
jmp b2
//SEG27 main::@2
b2:
//SEG28 [7] *((byte*) main::screen#4 + (byte) main::column#2) ← (byte/word/signed word/dword/signed dword) 160 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ) -- pbuz1_derefidx_vbuyy=vbuc1
lda #$a0
sta (screen),y
//SEG29 [8] *((byte*) main::colors#4 + (byte) main::column#2) ← (byte) main::color#3 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ) -- pbuz1_derefidx_vbuyy=vbuxx
txa
sta (colors),y
//SEG30 [9] (byte) main::color#1 ← (byte) main::color#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ) -- vbuxx=vbuxx_bxor_vbuc1
txa
eor #1
tax
//SEG31 [10] (byte) main::column#1 ← ++ (byte) main::column#2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ) -- vbuyy=_inc_vbuyy
iny
//SEG32 [11] if((byte) main::column#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ) -- vbuyy_neq_vbuc1_then_la1
cpy #8
bne b2_from_b2
jmp b3
//SEG33 main::@3
b3:
//SEG34 [12] (byte) main::color#2 ← (byte) main::color#1 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ) -- vbuxx=vbuxx_bxor_vbuc1
txa
eor #1
tax
//SEG35 [13] (byte*) main::screen#1 ← (byte*) main::screen#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ( main:2 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ) -- pbuz1=pbuz1_plus_vbuc1
lda screen
clc
adc #$28
sta screen
bcc !+
inc screen+1
!:
//SEG36 [14] (byte*) main::colors#1 ← (byte*) main::colors#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ( main:2 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ) -- pbuz1=pbuz1_plus_vbuc1
lda colors
clc
adc #$28
sta colors
bcc !+
inc colors+1
!:
//SEG37 [15] (byte) main::row#1 ← ++ (byte) main::row#4 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ( main:2 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ) -- vbuz1=_inc_vbuz1
inc row
//SEG38 [16] if((byte) main::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ( main:2 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda row
cmp #8
bne b1_from_b3
jmp breturn
//SEG39 main::@return
breturn:
//SEG40 [17] return [ ] ( main:2 [ ] )
rts
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing label b2_from_b2 with b2
Replacing label b1_from_b3 with b1
Removing instruction bbegin:
Removing instruction b1_from_bbegin:
Removing instruction main_from_b1:
Removing instruction bend_from_b1:
Removing instruction b1_from_b3:
Removing instruction b2_from_b1:
Removing instruction b2_from_b2:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b1:
Removing instruction bend:
Removing instruction b1_from_main:
Removing instruction b3:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing instruction jmp b1
Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return
(byte) main::color
(byte) main::color#1 reg byte x 71.0
(byte) main::color#2 reg byte x 4.4
(byte) main::color#3 reg byte x 104.66666666666666
(byte) main::color#5 reg byte x 22.0
(byte*) main::colors
(byte*) main::colors#1 colors zp ZP_WORD:4 7.333333333333333
(byte*) main::colors#4 colors zp ZP_WORD:4 13.666666666666664
(byte) main::column
(byte) main::column#1 reg byte y 151.5
(byte) main::column#2 reg byte y 101.0
(byte) main::row
(byte) main::row#1 row zp ZP_BYTE:6 16.5
(byte) main::row#4 row zp ZP_BYTE:6 2.2
(byte*) main::screen
(byte*) main::screen#1 screen zp ZP_WORD:2 5.5
(byte*) main::screen#4 screen zp ZP_WORD:2 15.375
zp ZP_WORD:2 [ main::screen#4 main::screen#1 ]
zp ZP_WORD:4 [ main::colors#4 main::colors#1 ]
zp ZP_BYTE: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 ]
FINAL ASSEMBLER
Score: 3867
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
//SEG2 @begin
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
//SEG4 @1
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @1 to main [phi:@1->main]
jsr main
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
//SEG8 @end
//SEG9 main
main: {
.label screen = 2
.label colors = 4
.label row = 6
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
//SEG11 [5] phi (byte) main::row#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #0
sta row
//SEG12 [5] phi (byte*) main::colors#4 = ((byte*))(word/dword/signed dword) 55296 [phi:main->main::@1#1] -- pbuz1=pbuc1
lda #<$d800
sta colors
lda #>$d800
sta colors+1
//SEG13 [5] phi (byte) main::color#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:main->main::@1#2] -- vbuxx=vbuc1
ldx #1
//SEG14 [5] phi (byte*) main::screen#4 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main->main::@1#3] -- pbuz1=pbuc1
lda #<$400
sta screen
lda #>$400
sta screen+1
//SEG15 [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
//SEG16 [5] phi (byte) main::row#4 = (byte) main::row#1 [phi:main::@3->main::@1#0] -- register_copy
//SEG17 [5] phi (byte*) main::colors#4 = (byte*) main::colors#1 [phi:main::@3->main::@1#1] -- register_copy
//SEG18 [5] phi (byte) main::color#5 = (byte) main::color#2 [phi:main::@3->main::@1#2] -- register_copy
//SEG19 [5] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#3] -- register_copy
//SEG20 main::@1
b1:
//SEG21 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
//SEG22 [6] phi (byte) main::color#3 = (byte) main::color#5 [phi:main::@1->main::@2#0] -- register_copy
//SEG23 [6] phi (byte) main::column#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@1->main::@2#1] -- vbuyy=vbuc1
ldy #0
//SEG24 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
//SEG25 [6] phi (byte) main::color#3 = (byte) main::color#1 [phi:main::@2->main::@2#0] -- register_copy
//SEG26 [6] phi (byte) main::column#2 = (byte) main::column#1 [phi:main::@2->main::@2#1] -- register_copy
//SEG27 main::@2
b2:
//SEG28 [7] *((byte*) main::screen#4 + (byte) main::column#2) ← (byte/word/signed word/dword/signed dword) 160 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ) -- pbuz1_derefidx_vbuyy=vbuc1
lda #$a0
sta (screen),y
//SEG29 [8] *((byte*) main::colors#4 + (byte) main::column#2) ← (byte) main::color#3 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#3 ] ) -- pbuz1_derefidx_vbuyy=vbuxx
txa
sta (colors),y
//SEG30 [9] (byte) main::color#1 ← (byte) main::color#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#2 main::color#1 ] ) -- vbuxx=vbuxx_bxor_vbuc1
txa
eor #1
tax
//SEG31 [10] (byte) main::column#1 ← ++ (byte) main::column#2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ) -- vbuyy=_inc_vbuyy
iny
//SEG32 [11] if((byte) main::column#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::column#1 main::color#1 ] ) -- vbuyy_neq_vbuc1_then_la1
cpy #8
bne b2
//SEG33 main::@3
//SEG34 [12] (byte) main::color#2 ← (byte) main::color#1 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ( main:2 [ main::screen#4 main::colors#4 main::row#4 main::color#2 ] ) -- vbuxx=vbuxx_bxor_vbuc1
txa
eor #1
tax
//SEG35 [13] (byte*) main::screen#1 ← (byte*) main::screen#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ( main:2 [ main::colors#4 main::row#4 main::screen#1 main::color#2 ] ) -- pbuz1=pbuz1_plus_vbuc1
lda screen
clc
adc #$28
sta screen
bcc !+
inc screen+1
!:
//SEG36 [14] (byte*) main::colors#1 ← (byte*) main::colors#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ( main:2 [ main::row#4 main::screen#1 main::color#2 main::colors#1 ] ) -- pbuz1=pbuz1_plus_vbuc1
lda colors
clc
adc #$28
sta colors
bcc !+
inc colors+1
!:
//SEG37 [15] (byte) main::row#1 ← ++ (byte) main::row#4 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ( main:2 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ) -- vbuz1=_inc_vbuz1
inc row
//SEG38 [16] if((byte) main::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ( main:2 [ main::screen#1 main::color#2 main::colors#1 main::row#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda row
cmp #8
bne b1
//SEG39 main::@return
//SEG40 [17] return [ ] ( main:2 [ ] )
rts
}

View File

@ -0,0 +1,31 @@
(label) @1
(label) @begin
(label) @end
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return
(byte) main::color
(byte) main::color#1 reg byte x 71.0
(byte) main::color#2 reg byte x 4.4
(byte) main::color#3 reg byte x 104.66666666666666
(byte) main::color#5 reg byte x 22.0
(byte*) main::colors
(byte*) main::colors#1 colors zp ZP_WORD:4 7.333333333333333
(byte*) main::colors#4 colors zp ZP_WORD:4 13.666666666666664
(byte) main::column
(byte) main::column#1 reg byte y 151.5
(byte) main::column#2 reg byte y 101.0
(byte) main::row
(byte) main::row#1 row zp ZP_BYTE:6 16.5
(byte) main::row#4 row zp ZP_BYTE:6 2.2
(byte*) main::screen
(byte*) main::screen#1 screen zp ZP_WORD:2 5.5
(byte*) main::screen#4 screen zp ZP_WORD:2 15.375
zp ZP_WORD:2 [ main::screen#4 main::screen#1 ]
zp ZP_WORD:4 [ main::colors#4 main::colors#1 ]
zp ZP_BYTE: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

@ -250,10 +250,10 @@ main: {
ldy i
tya
sta SCREEN,y
//SEG16 [7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG16 [7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=vbuz1_plus_2
lda i
clc
adc i
adc #2
sta i
//SEG17 [8] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_lt_vbuc1_then_la1
lda i
@ -267,7 +267,6 @@ main: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
@ -316,7 +315,7 @@ main: {
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuaa=vbuaa
tax
sta SCREEN,x
//SEG16 [7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa=vbuaa_plus_vbuc1
//SEG16 [7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa=vbuaa_plus_2
clc
adc #2
//SEG17 [8] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa_lt_vbuc1_then_la1
@ -395,7 +394,7 @@ main: {
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuaa=vbuaa
tax
sta SCREEN,x
//SEG16 [7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa=vbuaa_plus_vbuc1
//SEG16 [7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa=vbuaa_plus_2
clc
adc #2
//SEG17 [8] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa_lt_vbuc1_then_la1

View File

@ -583,7 +583,14 @@ pbuz1_derefidx_vbuaa=_deref_pbuz1 < pbuz1_derefidx_vbuxx=_deref_pbuz1 < pbuz1_de
stx $ff
ldy $ff
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=_deref_pbuz2
pbuz1_derefidx_vbuaa=_deref_pbuz2 < pbuz1_derefidx_vbuyy=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:21.5
tay
sty $ff
ldy #0
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuaa=_deref_pbuc1 < pbuz1_derefidx_vbuyy=_deref_pbuc1 < pbuz1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:12.0
tay
lda {c1}
@ -594,13 +601,56 @@ CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz1_derefidx_vbuyy
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz1_derefidx_vbuz1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz1_derefidx_vbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz1_derefidx_vbuc1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuaa
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuxx
pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:19.5
tay
sty $ff
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuxx < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
tay
sty $ff
txa
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz3
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuc1
pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:24.5
tay
lda {z1}
sty $ff
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz2 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
tay
sty $ff
ldy {z2}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz3 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz3 < vbuaa=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
tay
sty $ff
ldy {z3}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuc1 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:21.5
tay
sty $ff
ldy #{c1}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:12.5
tay
lda {c1},y
@ -620,11 +670,28 @@ pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_
tay
lda {c1},x
sta ({z1}),y
pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:23.5
tay
lda {z1}
sty $ff
tay
lda {c1},y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz2 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=vbuaa - clobber:A X Y cycles:15.5
ldx {z2}
tay
lda {c1},x
sta ({z1}),y
pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz2 < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuz2 < vbuaa=pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:21.5
tay
sty $ff
ldy {z2}
lda {c1},y
ldy $ff
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuc1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuc2
pbuz1_derefidx_vbuaa=vbuc1 < pbuz1_derefidx_vbuyy=vbuc1 < pbuz1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:10.0
@ -660,7 +727,15 @@ pbuz1_derefidx_vbuxx=_deref_pbuz1 < pbuz1_derefidx_vbuxx=vbuaa - clobber:A Y cy
stx $ff
ldy $ff
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=_deref_pbuz2
pbuz1_derefidx_vbuxx=_deref_pbuz2 < pbuz1_derefidx_vbuaa=_deref_pbuz2 < pbuz1_derefidx_vbuyy=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:23.5
txa
tay
sty $ff
ldy #0
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuxx=_deref_pbuc1 < pbuz1_derefidx_vbuaa=_deref_pbuc1 < pbuz1_derefidx_vbuyy=_deref_pbuc1 < pbuz1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:14.0
txa
tay
@ -673,12 +748,52 @@ CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuz1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuc1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuaa
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuxx
pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuxx < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:21.5
txa
tay
sty $ff
lda ({z2}),y
ldy $ff
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuyy
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuz1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuz3
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuc1
pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:26.5
txa
tay
lda {z1}
sty $ff
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuz2 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz2 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:24.5
txa
tay
sty $ff
ldy {z2}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuz3 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz3 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz3 < vbuaa=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:24.5
txa
tay
sty $ff
ldy {z3}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuc1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuc1 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
txa
tay
sty $ff
ldy #{c1}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuaa < pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuxx=vbuaa - clobber:A Y cycles:18.5
tay
lda {c1},y
@ -748,7 +863,13 @@ pbuz1_derefidx_vbuyy=_deref_pbuz1 < pbuz1_derefidx_vbuaa=_deref_pbuz1 < pbuz1_de
stx $ff
ldy $ff
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=_deref_pbuz2
pbuz1_derefidx_vbuyy=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:19.5
sty $ff
ldy #0
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuyy=_deref_pbuc1 < pbuz1_derefidx_vbuyy=vbuaa - clobber:A cycles:10.0
lda {c1}
sta ({z1}),y
@ -758,17 +879,67 @@ CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuz1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuc1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuxx
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz3
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuc1
pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:19.5
sty $ff
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:21.5
sty $ff
txa
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:17.5
sty $ff
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
lda {z1}
sty $ff
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:20.5
sty $ff
ldy {z2}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz3 < vbuaa=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:20.5
sty $ff
ldy {z3}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:19.5
sty $ff
ldy #{c1}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=vbuaa - clobber:A X cycles:12.5
tax
lda {c1},x
sta ({z1}),y
pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:18.5
sty $ff
tay
lda {c1},y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=vbuaa - clobber:A cycles:10.5
lda {c1},x
sta ({z1}),y
@ -779,10 +950,25 @@ pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuyy=pbuc1_derefidx_
ldx {z1}
lda {c1},x
sta ({z1}),y
pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:21.5
lda {z1}
sty $ff
tay
lda {c1},y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuz2 < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=vbuaa - clobber:A X cycles:13.5
ldx {z2}
lda {c1},x
sta ({z1}),y
pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuz2 < vbuaa=pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:19.5
sty $ff
ldy {z2}
lda {c1},y
ldy $ff
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuc1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuc2
pbuz1_derefidx_vbuyy=vbuc1 < pbuz1_derefidx_vbuyy=vbuaa - clobber:A cycles:8.0
@ -812,7 +998,14 @@ pbuz1_derefidx_vbuz1=_deref_pbuz1 < pbuz1_derefidx_vbuz1=vbuaa < pbuz1_derefidx_
lda ({z1}),y
ldy {z1}
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz1=_deref_pbuz2
pbuz1_derefidx_vbuz1=_deref_pbuz2 < pbuz1_derefidx_vbuyy=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:22.5
ldy {z1}
sty $ff
ldy #0
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz1=_deref_pbuc1 < pbuz1_derefidx_vbuz1=vbuaa < pbuz1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:13.0
lda {c1}
ldy {z1}
@ -823,13 +1016,65 @@ CANNOT SYNTHESIZE pbuz1_derefidx_vbuz1=pbuz1_derefidx_vbuyy
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz1=pbuz1_derefidx_vbuz1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz1=pbuz1_derefidx_vbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz1=pbuz1_derefidx_vbuc1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuaa
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuxx
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuyy
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuz1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuz3
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuc1
pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
ldy {z1}
sty $ff
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuxx < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:24.5
ldy {z1}
sty $ff
txa
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuyy < pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:24.5
tya
ldy {z1}
sty $ff
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:25.5
lda {z1}
ldy {z1}
sty $ff
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuz2 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
ldy {z1}
sty $ff
ldy {z2}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuz3 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz3 < vbuaa=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
ldy {z1}
sty $ff
ldy {z3}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuc1 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
ldy {z1}
sty $ff
ldy #{c1}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz1=pbuc1_derefidx_vbuaa < pbuz1_derefidx_vbuz1=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuz1=vbuaa < pbuz1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:15.5
tay
lda {c1},y
@ -887,7 +1132,14 @@ pbuz1_derefidx_vbuz2=_deref_pbuz1 < pbuz1_derefidx_vbuz2=vbuaa - clobber:A Y cy
lda ({z1}),y
ldy {z2}
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=_deref_pbuz2
pbuz1_derefidx_vbuz2=_deref_pbuz2 < pbuz1_derefidx_vbuyy=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:22.5
ldy {z2}
sty $ff
ldy #0
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz2=_deref_pbuz3 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:16.5
ldy #0
lda ({z3}),y
@ -904,13 +1156,65 @@ CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz3
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuc1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuaa
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuxx
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuyy
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuz1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuz3
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuc1
pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
ldy {z2}
sty $ff
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuxx < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:24.5
ldy {z2}
sty $ff
txa
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuyy < pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:24.5
tya
ldy {z2}
sty $ff
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:25.5
lda {z1}
ldy {z2}
sty $ff
tay
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuz2 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
ldy {z2}
sty $ff
ldy {z2}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuz3 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz3 < vbuaa=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
ldy {z2}
sty $ff
ldy {z3}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuc1 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
ldy {z2}
sty $ff
ldy #{c1}
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuaa < pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:16.5
tay
lda ({z3}),y
@ -941,7 +1245,14 @@ pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz3 < vbuaa=pbuz1_derefidx_vbuz1 < vbuaa=p
lda ({z3}),y
ldy {z2}
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4
pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz3 < vbuaa=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
ldy {z2}
sty $ff
ldy {z4}
lda ({z3}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:16.5
ldy #{c1}
lda ({z3}),y
@ -1091,6 +1402,14 @@ pbuc1_derefidx_vbuaa=_deref_pbuz1 < pbuc1_derefidx_vbuxx=_deref_pbuz1 < pbuc1_de
ldy #0
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuaa=_deref_pbuz1 < pbuc1_derefidx_vbuyy=_deref_pbuz1 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:20.5
tay
sty $ff
ldy #0
lda ({z1}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuaa=_deref_pbuc1 < pbuc1_derefidx_vbuxx=_deref_pbuc1 < pbuc1_derefidx_vbuxx=vbuaa - clobber:A X cycles:11.0
tax
lda {c1}
@ -1111,7 +1430,15 @@ pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuaa < pbuc1_derefidx_vbuyy=pbuz1_derefidx_
tay
lda ({z1}),y
sta {c1},y
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuxx
pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuxx < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
tay
sty $ff
txa
tay
lda ({z1}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuyy < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X cycles:12.5
tax
lda ({z1}),y
@ -1121,17 +1448,41 @@ pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz1 < pbuc1_derefidx_vbuaa=pbuz1_derefidx_
tax
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:21.5
tay
sty $ff
ldy {z1}
lda ({z1}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz2 < pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuyy < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X Y cycles:15.5
ldy {z2}
tax
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:21.5
tay
sty $ff
ldy {z2}
lda ({z1}),y
ldy $ff
sta {c1},y
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuc1
pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuc2 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuc2 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X Y cycles:14.5
tax
ldy #{c2}
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuc2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuc2 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:20.5
tay
sty $ff
ldy #{c2}
lda ({z1}),y
ldy $ff
sta {c1},y
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuaa
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuxx
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuyy
@ -1154,11 +1505,27 @@ pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuyy < pbuc1_derefidx_vbuxx=pbuc2_derefidx_
tax
lda {c2},y
sta {c1},x
pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1 < pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuxx - clobber:A X cycles:20.5
tax
stx $ff
ldx {z1}
lda {c2},x
ldx $ff
sta {c1},x
pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1 < pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuxx < pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx < vbuaa=pbuc1_derefidx_vbuxx - clobber:A X Y cycles:14.5
ldx {z1}
tay
lda {c2},x
sta {c1},y
pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:20.5
tay
sty $ff
ldy {z1}
lda {c2},y
ldy $ff
sta {c1},y
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuc2
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuc3
@ -1223,6 +1590,13 @@ CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuyy
CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuz1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuc2
pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuxx - clobber:A X cycles:17.5
stx $ff
tax
lda {c2},x
ldx $ff
sta {c1},x
pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuaa < pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:11.5
tay
lda {c2},y
@ -1233,6 +1607,13 @@ pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx < vbuaa=pbuc1_derefidx_vbuxx - clobber
pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy - clobber:A cycles:9.5
lda {c2},y
sta {c1},x
pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuxx - clobber:A X cycles:18.5
stx $ff
ldx {z1}
lda {c2},x
ldx $ff
sta {c1},x
pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuz1 < pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:12.5
ldy {z1}
lda {c2},y
@ -1261,14 +1642,34 @@ pbuc1_derefidx_vbuyy=_deref_pbuz1 < pbuc1_derefidx_vbuaa=_deref_pbuz1 < pbuc1_de
ldy #0
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuyy=_deref_pbuz1 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:18.5
sty $ff
ldy #0
lda ({z1}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuyy=_deref_pbuc1 < pbuc1_derefidx_vbuyy=vbuaa - clobber:A cycles:9.0
lda {c1}
sta {c1},y
pbuc1_derefidx_vbuyy=_deref_pbuc2 < vbuaa=_deref_pbuc1 - clobber:A cycles:9.0
lda {c2}
sta {c1},y
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuaa
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuxx
pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:18.5
sty $ff
tay
lda ({z1}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:20.5
sty $ff
txa
tay
lda ({z1}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A cycles:10.5
lda ({z1}),y
sta {c1},y
@ -1278,12 +1679,26 @@ pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz1 < pbuc1_derefidx_vbuaa=pbuz1_derefidx_
tax
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:19.5
sty $ff
ldy {z1}
lda ({z1}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2 < pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz2 < pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuyy < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X Y cycles:17.5
tya
ldy {z2}
tax
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:19.5
sty $ff
ldy {z2}
lda ({z1}),y
ldy $ff
sta {c1},y
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuc1
pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuc2 < pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuc2 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuc2 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X Y cycles:16.5
tya
@ -1291,6 +1706,13 @@ pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuc2 < pbuc1_derefidx_vbuaa=pbuz1_derefidx_
ldy #{c2}
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuc2 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:18.5
sty $ff
ldy #{c2}
lda ({z1}),y
ldy $ff
sta {c1},y
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuaa
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuxx
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuyy
@ -1301,6 +1723,13 @@ pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuaa < vbuaa=p
tax
lda {c2},x
sta {c1},y
pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:17.5
sty $ff
tay
lda {c2},y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx < vbuaa=pbuc1_derefidx_vbuxx - clobber:A cycles:9.5
lda {c2},x
sta {c1},y
@ -1311,6 +1740,13 @@ pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc2_derefidx_
ldx {z1}
lda {c2},x
sta {c1},y
pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:18.5
sty $ff
ldy {z1}
lda {c2},y
ldy $ff
sta {c1},y
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuc2
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuc3
@ -1366,6 +1802,14 @@ pbuc1_derefidx_vbuz1=_deref_pbuz2 < pbuc1_derefidx_vbuxx=_deref_pbuz1 < pbuc1_de
ldy #0
lda ({z2}),y
sta {c1},x
pbuc1_derefidx_vbuz1=_deref_pbuz2 < pbuc1_derefidx_vbuyy=_deref_pbuz1 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:21.5
ldy {z1}
sty $ff
ldy #0
lda ({z2}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuz1=_deref_pbuc1 < pbuc1_derefidx_vbuz1=vbuaa < pbuc1_derefidx_vbuxx=vbuaa - clobber:A X cycles:12.0
lda {c1}
ldx {z1}
@ -1387,47 +1831,123 @@ pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuaa < pbuc1_derefidx_vbuxx=pbuz1_derefidx_
tay
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuaa < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:21.5
ldy {z1}
sty $ff
tay
lda ({z1}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuxx < pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuaa < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuaa < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X Y cycles:17.5
txa
ldx {z1}
tay
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuxx < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
ldy {z1}
sty $ff
txa
tay
lda ({z1}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X cycles:13.5
lda ({z1}),y
ldx {z1}
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuyy < pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuaa < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
tya
ldy {z1}
sty $ff
tay
lda ({z1}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuz1 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuz1 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X Y cycles:16.5
ldx {z1}
ldy {z1}
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
ldy {z1}
sty $ff
ldy {z1}
lda ({z1}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuz2 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuz2 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X Y cycles:16.5
ldx {z1}
ldy {z2}
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
ldy {z1}
sty $ff
ldy {z2}
lda ({z1}),y
ldy $ff
sta {c1},y
CANNOT SYNTHESIZE pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuc1
pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuc2 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuc2 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X Y cycles:15.5
ldx {z1}
ldy #{c2}
lda ({z1}),y
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz1_derefidx_vbuc2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuc2 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:21.5
ldy {z1}
sty $ff
ldy #{c2}
lda ({z1}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuaa < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuaa < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X Y cycles:15.5
ldx {z1}
tay
lda ({z2}),y
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuaa < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:21.5
ldy {z1}
sty $ff
tay
lda ({z2}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuxx < pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuaa < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuaa < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X Y cycles:17.5
txa
ldx {z1}
tay
lda ({z2}),y
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuxx < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
ldy {z1}
sty $ff
txa
tay
lda ({z2}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X cycles:13.5
lda ({z2}),y
ldx {z1}
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuyy < pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuaa < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
tya
ldy {z1}
sty $ff
tay
lda ({z2}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:13.5
ldy {z1}
lda ({z2}),y
@ -1437,11 +1957,27 @@ pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz2 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_
ldy {z2}
lda ({z2}),y
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
ldy {z1}
sty $ff
ldy {z2}
lda ({z2}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz3 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuz2 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X Y cycles:16.5
ldx {z1}
ldy {z3}
lda ({z2}),y
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz3 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuz2 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
ldy {z1}
sty $ff
ldy {z3}
lda ({z2}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A X Y cycles:15.5
ldy #{c1}
lda ({z2}),y
@ -1452,6 +1988,14 @@ pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuc2 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_
ldy #{c2}
lda ({z2}),y
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuc2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuc2 < vbuaa=pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:21.5
ldy {z1}
sty $ff
ldy #{c2}
lda ({z2}),y
ldy $ff
sta {c1},y
pbuc1_derefidx_vbuz1=pbuc1_derefidx_vbuaa < pbuc1_derefidx_vbuz1=pbuc1_derefidx_vbuxx < vbuaa=pbuc1_derefidx_vbuxx - clobber:A X cycles:14.5
tax
lda {c1},x

View File

@ -1524,7 +1524,7 @@ main: {
bne !+
inc charset4+1
!:
//SEG75 [50] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::chargen#1 main::charset4#1 ] ( main:2 [ main::chargen#1 main::charset4#1 ] ) -- pbuz1=pbuz1_plus_vbuc1
//SEG75 [50] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::chargen#1 main::charset4#1 ] ( main:2 [ main::chargen#1 main::charset4#1 ] ) -- pbuz1=pbuz1_plus_2
lda chargen
clc
adc #2
@ -1970,7 +1970,7 @@ main: {
bne !+
inc charset4+1
!:
//SEG75 [50] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::chargen#1 main::charset4#1 ] ( main:2 [ main::chargen#1 main::charset4#1 ] ) -- pbuz1=pbuz1_plus_vbuc1
//SEG75 [50] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::chargen#1 main::charset4#1 ] ( main:2 [ main::chargen#1 main::charset4#1 ] ) -- pbuz1=pbuz1_plus_2
lda chargen
clc
adc #2
@ -2398,7 +2398,7 @@ main: {
bne !+
inc charset4+1
!:
//SEG75 [50] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::chargen#1 main::charset4#1 ] ( main:2 [ main::chargen#1 main::charset4#1 ] ) -- pbuz1=pbuz1_plus_vbuc1
//SEG75 [50] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::chargen#1 main::charset4#1 ] ( main:2 [ main::chargen#1 main::charset4#1 ] ) -- pbuz1=pbuz1_plus_2
lda chargen
clc
adc #2

View File

@ -0,0 +1,65 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.label print_char_cursor = 4
.label print_line_cursor = 2
jsr main
main: {
jsr print_str
jsr print_ln
rts
str: .text "hello world!@"
}
print_ln: {
lda #<$400
sta print_line_cursor
lda #>$400
sta print_line_cursor+1
b1:
lda print_line_cursor
clc
adc #$28
sta print_line_cursor
bcc !+
inc print_line_cursor+1
!:
lda print_line_cursor+1
cmp print_char_cursor+1
bcc b1
bne !+
lda print_line_cursor
cmp print_char_cursor
bcc b1
!:
rts
}
print_str: {
.label str = 2
lda #<$400
sta print_char_cursor
lda #>$400
sta print_char_cursor+1
lda #<main.str
sta str
lda #>main.str
sta str+1
b1:
ldy #0
lda (str),y
cmp #'@'
bne b2
rts
b2:
ldy #0
lda (str),y
sta (print_char_cursor),y
inc print_char_cursor
bne !+
inc print_char_cursor+1
!:
inc str
bne !+
inc str+1
!:
jmp b1
}

View File

@ -0,0 +1,47 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@15
@15: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @15
[3] phi() [ ] ( )
main: scope:[main] from @15
[4] phi() [ ] ( main:2 [ ] )
[5] call print_str param-assignment [ print_char_cursor#10 ] ( main:2 [ print_char_cursor#10 ] )
to:main::@1
main::@1: scope:[main] from main
[6] phi() [ print_char_cursor#10 ] ( main:2 [ print_char_cursor#10 ] )
[7] call print_ln param-assignment [ ] ( main:2 [ ] )
to:main::@return
main::@return: scope:[main] from main::@1
[8] return [ ] ( main:2 [ ] )
to:@return
print_ln: scope:[print_ln] from main::@1
[9] phi() [ print_char_cursor#10 ] ( main:2::print_ln:7 [ print_char_cursor#10 ] )
to:print_ln::@1
print_ln::@1: scope:[print_ln] from print_ln print_ln::@1
[10] (byte*) print_line_cursor#6 ← phi( print_ln/((byte*))(word/signed word/dword/signed dword) 1024 print_ln::@1/(byte*) print_line_cursor#1 ) [ print_line_cursor#6 print_char_cursor#10 ] ( main:2::print_ln:7 [ print_line_cursor#6 print_char_cursor#10 ] )
[11] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#10 ] ( main:2::print_ln:7 [ print_line_cursor#1 print_char_cursor#10 ] )
[12] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#10 ] ( main:2::print_ln:7 [ print_line_cursor#1 print_char_cursor#10 ] )
to:print_ln::@return
print_ln::@return: scope:[print_ln] from print_ln::@1
[13] return [ ] ( main:2::print_ln:7 [ ] )
to:@return
print_str: scope:[print_str] from main
[14] phi() [ ] ( main:2::print_str:5 [ ] )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[15] (byte*) print_char_cursor#10 ← phi( print_str/((byte*))(word/signed word/dword/signed dword) 1024 print_str::@2/(byte*) print_char_cursor#1 ) [ print_char_cursor#10 print_str::str#2 ] ( main:2::print_str:5 [ print_char_cursor#10 print_str::str#2 ] )
[15] (byte*) print_str::str#2 ← phi( print_str/(const string) main::str print_str::@2/(byte*) print_str::str#0 ) [ print_char_cursor#10 print_str::str#2 ] ( main:2::print_str:5 [ print_char_cursor#10 print_str::str#2 ] )
[16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#10 print_str::str#2 ] ( main:2::print_str:5 [ print_char_cursor#10 print_str::str#2 ] )
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[17] return [ print_char_cursor#10 ] ( main:2::print_str:5 [ print_char_cursor#10 ] )
to:@return
print_str::@2: scope:[print_str] from print_str::@1
[18] *((byte*) print_char_cursor#10) ← *((byte*) print_str::str#2) [ print_char_cursor#10 print_str::str#2 ] ( main:2::print_str:5 [ print_char_cursor#10 print_str::str#2 ] )
[19] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#10 [ print_str::str#2 print_char_cursor#1 ] ( main:2::print_str:5 [ print_str::str#2 print_char_cursor#1 ] )
[20] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#2 [ print_str::str#0 print_char_cursor#1 ] ( main:2::print_str:5 [ print_str::str#0 print_char_cursor#1 ] )
to:print_str::@1

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,27 @@
(label) @15
(label) @begin
(label) @end
(void()) main()
(label) main::@1
(label) main::@return
(const string) main::str str = (string) "hello world!@"
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:4 11.0
(byte*) print_char_cursor#10 print_char_cursor zp ZP_WORD:4 4.4
(byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:2 16.5
(byte*) print_line_cursor#6 print_line_cursor zp ZP_WORD:2 22.0
(void()) print_ln()
(label) print_ln::@1
(label) print_ln::@return
(byte*) print_screen
(void()) print_str((byte*) print_str::str)
(label) print_str::@1
(label) print_str::@2
(label) print_str::@return
(byte*) print_str::str
(byte*) print_str::str#0 str zp ZP_WORD:2 22.0
(byte*) print_str::str#2 str zp ZP_WORD:2 11.0
zp ZP_WORD:2 [ print_line_cursor#6 print_line_cursor#1 print_str::str#2 print_str::str#0 ]
zp ZP_WORD:4 [ print_char_cursor#10 print_char_cursor#1 ]

View File

@ -0,0 +1,52 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.label screen = $400
jsr main
main: {
lda #<screen
sta print_spaced.at
lda #>screen
sta print_spaced.at+1
lda #<hello
sta print_spaced.msg
lda #>hello
sta print_spaced.msg+1
jsr print_spaced
lda #<screen+$28
sta print_spaced.at
lda #>screen+$28
sta print_spaced.at+1
lda #<hello
sta print_spaced.msg
lda #>hello
sta print_spaced.msg+1
jsr print_spaced
rts
hello: .text "hello world!@"
}
print_spaced: {
.label j = 6
.label msg = 2
.label at = 4
lda #0
sta j
tax
b1:
txa
tay
lda (msg),y
ldy j
sta (at),y
tya
clc
adc #2
sta j
inx
txa
tay
lda (msg),y
cmp #'@'
bne b1
rts
}

View File

@ -0,0 +1,35 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@2
@2: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @2
[3] phi() [ ] ( )
main: scope:[main] from @2
[4] phi() [ ] ( main:2 [ ] )
[5] call print_spaced param-assignment [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main
[6] phi() [ ] ( main:2 [ ] )
[7] call print_spaced param-assignment [ ] ( main:2 [ ] )
to:main::@return
main::@return: scope:[main] from main::@1
[8] return [ ] ( main:2 [ ] )
to:@return
print_spaced: scope:[print_spaced] from main main::@1
[9] (byte*) print_spaced::at#3 ← phi( main/(const byte*) screen#0 main::@1/(const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 ) [ print_spaced::msg#3 print_spaced::at#3 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 ] )
[9] (byte*) print_spaced::msg#3 ← phi( main/(const string) main::hello#0 main::@1/(const string) main::hello#0 ) [ print_spaced::msg#3 print_spaced::at#3 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 ] )
to:print_spaced::@1
print_spaced::@1: scope:[print_spaced] from print_spaced print_spaced::@1
[10] (byte) print_spaced::j#2 ← phi( print_spaced/(byte/signed byte/word/signed word/dword/signed dword) 0 print_spaced::@1/(byte) print_spaced::j#1 ) [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] )
[10] (byte) print_spaced::i#2 ← phi( print_spaced/(byte/signed byte/word/signed word/dword/signed dword) 0 print_spaced::@1/(byte) print_spaced::i#1 ) [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] )
[11] *((byte*) print_spaced::at#3 + (byte) print_spaced::j#2) ← *((byte*) print_spaced::msg#3 + (byte) print_spaced::i#2) [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] )
[12] (byte) print_spaced::j#1 ← (byte) print_spaced::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] )
[13] (byte) print_spaced::i#1 ← ++ (byte) print_spaced::i#2 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] )
[14] if(*((byte*) print_spaced::msg#3 + (byte) print_spaced::i#1)!=(byte) '@') goto print_spaced::@1 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] )
to:print_spaced::@return
print_spaced::@return: scope:[print_spaced] from print_spaced::@1
[15] return [ ] ( main:2::print_spaced:5 [ ] main:2::print_spaced:7 [ ] )
to:@return

View File

@ -0,0 +1,781 @@
PARSING src/test/java/dk/camelot64/kickc/test/kc/helloworld2.kc
byte* screen = $400;
void main() {
byte* hello = "hello world!@";
print_spaced(screen, hello);
print_spaced(screen+40, hello);
}
void print_spaced(byte* at, byte* msg) {
byte j=0;
for(byte i=0; msg[i]!='@'; i++) {
at[j] = msg[i];
j = j + 2;
}
}
Adding pre/post-modifier (byte) print_spaced::i ← ++ (byte) print_spaced::i
SYMBOLS
(label) @1
(label) @2
(label) @begin
(label) @end
(void()) main()
(void~) main::$0
(byte*~) main::$1
(void~) main::$2
(label) main::@return
(byte*) main::hello
(void()) print_spaced((byte*) print_spaced::at , (byte*) print_spaced::msg)
(byte/signed word/word/dword/signed dword~) print_spaced::$0
(boolean~) print_spaced::$1
(label) print_spaced::@1
(label) print_spaced::@2
(label) print_spaced::@return
(byte*) print_spaced::at
(byte) print_spaced::i
(byte) print_spaced::j
(byte*) print_spaced::msg
(byte*) screen
Promoting word/signed word/dword/signed dword to byte* in screen ← ((byte*)) 1024
INITIAL CONTROL FLOW GRAPH
@begin: scope:[] from
(byte*) screen ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@1
main: scope:[main] from
(byte*) main::hello ← (string) "hello world!@"
(void~) main::$0 ← call print_spaced (byte*) screen (byte*) main::hello
(byte*~) main::$1 ← (byte*) screen + (byte/signed byte/word/signed word/dword/signed dword) 40
(void~) main::$2 ← call print_spaced (byte*~) main::$1 (byte*) main::hello
to:main::@return
main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
to:@2
print_spaced: scope:[print_spaced] from
(byte) print_spaced::j ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) print_spaced::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:print_spaced::@1
print_spaced::@1: scope:[print_spaced] from print_spaced print_spaced::@1
*((byte*) print_spaced::at + (byte) print_spaced::j) ← *((byte*) print_spaced::msg + (byte) print_spaced::i)
(byte/signed word/word/dword/signed dword~) print_spaced::$0 ← (byte) print_spaced::j + (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) print_spaced::j ← (byte/signed word/word/dword/signed dword~) print_spaced::$0
(byte) print_spaced::i ← ++ (byte) print_spaced::i
(boolean~) print_spaced::$1 ← *((byte*) print_spaced::msg + (byte) print_spaced::i) != (byte) '@'
if((boolean~) print_spaced::$1) goto print_spaced::@1
to:print_spaced::@2
print_spaced::@2: scope:[print_spaced] from print_spaced::@1
to:print_spaced::@return
print_spaced::@return: scope:[print_spaced] from print_spaced::@2
return
to:@return
@2: scope:[] from @1
call main
to:@end
@end: scope:[] from @2
Eliminating unused variable - keeping the call (void~) main::$0
Eliminating unused variable - keeping the call (void~) main::$2
Creating constant string variable for inline (const string) main::$3 "hello world!@"
Removing empty block @1
Removing empty block print_spaced::@2
PROCEDURE MODIFY VARIABLE ANALYSIS
Completing Phi functions...
Completing Phi functions...
CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
@begin: scope:[] from
(byte*) screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@2
main: scope:[main] from @2
(byte*) screen#1 ← phi( @2/(byte*) screen#3 )
(byte*) main::hello#0 ← (const string) main::$3
(byte*) print_spaced::at#0 ← (byte*) screen#1
(byte*) print_spaced::msg#0 ← (byte*) main::hello#0
call print_spaced param-assignment
to:main::@1
main::@1: scope:[main] from main
(byte*) main::hello#1 ← phi( main/(byte*) main::hello#0 )
(byte*) screen#2 ← phi( main/(byte*) screen#1 )
(byte*~) main::$1 ← (byte*) screen#2 + (byte/signed byte/word/signed word/dword/signed dword) 40
(byte*) print_spaced::at#1 ← (byte*~) main::$1
(byte*) print_spaced::msg#1 ← (byte*) main::hello#1
call print_spaced param-assignment
to:main::@2
main::@2: scope:[main] from main::@1
to:main::@return
main::@return: scope:[main] from main::@2
return
to:@return
print_spaced: scope:[print_spaced] from main main::@1
(byte*) print_spaced::at#3 ← phi( main/(byte*) print_spaced::at#0 main::@1/(byte*) print_spaced::at#1 )
(byte*) print_spaced::msg#3 ← phi( main/(byte*) print_spaced::msg#0 main::@1/(byte*) print_spaced::msg#1 )
(byte) print_spaced::j#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) print_spaced::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:print_spaced::@1
print_spaced::@1: scope:[print_spaced] from print_spaced print_spaced::@1
(byte) print_spaced::j#2 ← phi( print_spaced/(byte) print_spaced::j#0 print_spaced::@1/(byte) print_spaced::j#1 )
(byte*) print_spaced::at#2 ← phi( print_spaced/(byte*) print_spaced::at#3 print_spaced::@1/(byte*) print_spaced::at#2 )
(byte) print_spaced::i#2 ← phi( print_spaced/(byte) print_spaced::i#0 print_spaced::@1/(byte) print_spaced::i#1 )
(byte*) print_spaced::msg#2 ← phi( print_spaced/(byte*) print_spaced::msg#3 print_spaced::@1/(byte*) print_spaced::msg#2 )
*((byte*) print_spaced::at#2 + (byte) print_spaced::j#2) ← *((byte*) print_spaced::msg#2 + (byte) print_spaced::i#2)
(byte/signed word/word/dword/signed dword~) print_spaced::$0 ← (byte) print_spaced::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) print_spaced::j#1 ← (byte/signed word/word/dword/signed dword~) print_spaced::$0
(byte) print_spaced::i#1 ← ++ (byte) print_spaced::i#2
(boolean~) print_spaced::$1 ← *((byte*) print_spaced::msg#2 + (byte) print_spaced::i#1) != (byte) '@'
if((boolean~) print_spaced::$1) goto print_spaced::@1
to:print_spaced::@return
print_spaced::@return: scope:[print_spaced] from print_spaced::@1
return
to:@return
@2: scope:[] from @begin
(byte*) screen#3 ← phi( @begin/(byte*) screen#0 )
call main param-assignment
to:@3
@3: scope:[] from @2
to:@end
@end: scope:[] from @3
SYMBOL TABLE SSA
(label) @2
(label) @3
(label) @begin
(label) @end
(void()) main()
(byte*~) main::$1
(const string) main::$3 = (string) "hello world!@"
(label) main::@1
(label) main::@2
(label) main::@return
(byte*) main::hello
(byte*) main::hello#0
(byte*) main::hello#1
(void()) print_spaced((byte*) print_spaced::at , (byte*) print_spaced::msg)
(byte/signed word/word/dword/signed dword~) print_spaced::$0
(boolean~) print_spaced::$1
(label) print_spaced::@1
(label) print_spaced::@return
(byte*) print_spaced::at
(byte*) print_spaced::at#0
(byte*) print_spaced::at#1
(byte*) print_spaced::at#2
(byte*) print_spaced::at#3
(byte) print_spaced::i
(byte) print_spaced::i#0
(byte) print_spaced::i#1
(byte) print_spaced::i#2
(byte) print_spaced::j
(byte) print_spaced::j#0
(byte) print_spaced::j#1
(byte) print_spaced::j#2
(byte*) print_spaced::msg
(byte*) print_spaced::msg#0
(byte*) print_spaced::msg#1
(byte*) print_spaced::msg#2
(byte*) print_spaced::msg#3
(byte*) screen
(byte*) screen#0
(byte*) screen#1
(byte*) screen#2
(byte*) screen#3
OPTIMIZING CONTROL FLOW GRAPH
Culled Empty Block (label) main::@2
Culled Empty Block (label) @3
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: screen#1 screen#3
Not aliassing across scopes: print_spaced::at#0 screen#1
Not aliassing across scopes: print_spaced::msg#0 main::hello#0
Not aliassing across scopes: print_spaced::msg#1 main::hello#1
Not aliassing across scopes: print_spaced::msg#3 print_spaced::msg#0
Not aliassing across scopes: print_spaced::at#3 print_spaced::at#0
Alias (byte*) screen#1 = (byte*) screen#2
Alias (byte*) main::hello#0 = (byte*) main::hello#1
Alias (byte*) print_spaced::at#1 = (byte*~) main::$1
Alias (byte) print_spaced::j#1 = (byte/signed word/word/dword/signed dword~) print_spaced::$0
Alias (byte*) screen#0 = (byte*) screen#3
Succesful SSA optimization Pass2AliasElimination
Not aliassing across scopes: screen#1 screen#0
Not aliassing across scopes: print_spaced::at#0 screen#1
Not aliassing across scopes: print_spaced::msg#0 main::hello#0
Not aliassing across scopes: print_spaced::msg#1 main::hello#0
Not aliassing across scopes: print_spaced::msg#3 print_spaced::msg#0
Not aliassing across scopes: print_spaced::at#3 print_spaced::at#0
Self Phi Eliminated (byte*) print_spaced::msg#2
Self Phi Eliminated (byte*) print_spaced::at#2
Succesful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) screen#1 (byte*) screen#0
Redundant Phi (byte*) print_spaced::msg#2 (byte*) print_spaced::msg#3
Redundant Phi (byte*) print_spaced::at#2 (byte*) print_spaced::at#3
Succesful SSA optimization Pass2RedundantPhiElimination
Simple Condition (boolean~) print_spaced::$1 if(*((byte*) print_spaced::msg#3 + (byte) print_spaced::i#1)!=(byte) '@') goto print_spaced::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) screen#0 = ((byte*))1024
Constant (const string) main::hello#0 = main::$3
Constant (const byte) print_spaced::j#0 = 0
Constant (const byte) print_spaced::i#0 = 0
Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_spaced::at#0 = screen#0
Constant (const string) print_spaced::msg#0 = main::hello#0
Constant (const byte*) print_spaced::at#1 = screen#0+40
Constant (const string) print_spaced::msg#1 = main::hello#0
Succesful SSA optimization Pass2ConstantIdentification
OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const byte) print_spaced::j#0
Inlining constant with var siblings (const byte) print_spaced::j#0
Inlining constant with var siblings (const byte) print_spaced::i#0
Inlining constant with var siblings (const byte) print_spaced::i#0
Inlining constant with var siblings (const byte*) print_spaced::at#0
Inlining constant with different constant siblings (const byte*) print_spaced::at#0
Inlining constant with var siblings (const string) print_spaced::msg#0
Inlining constant with var siblings (const byte*) print_spaced::at#1
Inlining constant with var siblings (const string) print_spaced::msg#1
Constant inlined print_spaced::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_spaced::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_spaced::at#0 = (const byte*) screen#0
Constant inlined print_spaced::at#1 = (const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40
Constant inlined main::$3 = (const string) main::hello#0
Constant inlined print_spaced::msg#1 = (const string) main::hello#0
Constant inlined print_spaced::msg#0 = (const string) main::hello#0
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @2 @end main main::@1 main::@return print_spaced print_spaced::@1 print_spaced::@return
Added new block during phi lifting print_spaced::@3(between print_spaced::@1 and print_spaced::@1)
Block Sequence Planned @begin @2 @end main main::@1 main::@return print_spaced print_spaced::@1 print_spaced::@return print_spaced::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
CALL GRAPH
Calls in [] to main:2
Calls in [main] to print_spaced:5 print_spaced:7
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Created 4 initial phi equivalence classes
Coalesced [16] print_spaced::i#3 ← print_spaced::i#1
Coalesced [17] print_spaced::j#3 ← print_spaced::j#1
Coalesced down to 4 phi equivalence classes
Culled Empty Block (label) print_spaced::@3
Block Sequence Planned @begin @2 @end main main::@1 main::@return print_spaced print_spaced::@1 print_spaced::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@2
@2: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @2
[3] phi() [ ] ( )
main: scope:[main] from @2
[4] phi() [ ] ( main:2 [ ] )
[5] call print_spaced param-assignment [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main
[6] phi() [ ] ( main:2 [ ] )
[7] call print_spaced param-assignment [ ] ( main:2 [ ] )
to:main::@return
main::@return: scope:[main] from main::@1
[8] return [ ] ( main:2 [ ] )
to:@return
print_spaced: scope:[print_spaced] from main main::@1
[9] (byte*) print_spaced::at#3 ← phi( main/(const byte*) screen#0 main::@1/(const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 ) [ print_spaced::msg#3 print_spaced::at#3 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 ] )
[9] (byte*) print_spaced::msg#3 ← phi( main/(const string) main::hello#0 main::@1/(const string) main::hello#0 ) [ print_spaced::msg#3 print_spaced::at#3 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 ] )
to:print_spaced::@1
print_spaced::@1: scope:[print_spaced] from print_spaced print_spaced::@1
[10] (byte) print_spaced::j#2 ← phi( print_spaced/(byte/signed byte/word/signed word/dword/signed dword) 0 print_spaced::@1/(byte) print_spaced::j#1 ) [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] )
[10] (byte) print_spaced::i#2 ← phi( print_spaced/(byte/signed byte/word/signed word/dword/signed dword) 0 print_spaced::@1/(byte) print_spaced::i#1 ) [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] )
[11] *((byte*) print_spaced::at#3 + (byte) print_spaced::j#2) ← *((byte*) print_spaced::msg#3 + (byte) print_spaced::i#2) [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] )
[12] (byte) print_spaced::j#1 ← (byte) print_spaced::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] )
[13] (byte) print_spaced::i#1 ← ++ (byte) print_spaced::i#2 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] )
[14] if(*((byte*) print_spaced::msg#3 + (byte) print_spaced::i#1)!=(byte) '@') goto print_spaced::@1 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] )
to:print_spaced::@return
print_spaced::@return: scope:[print_spaced] from print_spaced::@1
[15] return [ ] ( main:2::print_spaced:5 [ ] main:2::print_spaced:7 [ ] )
to:@return
DOMINATORS
@begin dominated by @begin
@2 dominated by @2 @begin
@end dominated by @2 @begin @end
main dominated by @2 @begin main
main::@1 dominated by @2 @begin main::@1 main
main::@return dominated by main::@return @2 @begin main::@1 main
print_spaced dominated by @2 @begin print_spaced main
print_spaced::@1 dominated by @2 @begin print_spaced print_spaced::@1 main
print_spaced::@return dominated by @2 @begin print_spaced print_spaced::@1 print_spaced::@return main
NATURAL LOOPS
Found back edge: Loop head: print_spaced::@1 tails: print_spaced::@1 blocks: null
Populated: Loop head: print_spaced::@1 tails: print_spaced::@1 blocks: print_spaced::@1
Loop head: print_spaced::@1 tails: print_spaced::@1 blocks: print_spaced::@1
NATURAL LOOPS WITH DEPTH
Found 0 loops in scope []
Found 0 loops in scope [main]
Found 1 loops in scope [print_spaced]
Loop head: print_spaced::@1 tails: print_spaced::@1 blocks: print_spaced::@1
Loop head: print_spaced::@1 tails: print_spaced::@1 blocks: print_spaced::@1 depth: 1
VARIABLE REGISTER WEIGHTS
(void()) main()
(byte*) main::hello
(void()) print_spaced((byte*) print_spaced::at , (byte*) print_spaced::msg)
(byte*) print_spaced::at
(byte*) print_spaced::at#3 1.8333333333333333
(byte) print_spaced::i
(byte) print_spaced::i#1 16.5
(byte) print_spaced::i#2 11.0
(byte) print_spaced::j
(byte) print_spaced::j#1 7.333333333333333
(byte) print_spaced::j#2 16.5
(byte*) print_spaced::msg
(byte*) print_spaced::msg#3 3.6666666666666665
(byte*) screen
Initial phi equivalence classes
[ print_spaced::msg#3 ]
[ print_spaced::at#3 ]
[ print_spaced::i#2 print_spaced::i#1 ]
[ print_spaced::j#2 print_spaced::j#1 ]
Complete equivalence classes
[ print_spaced::msg#3 ]
[ print_spaced::at#3 ]
[ print_spaced::i#2 print_spaced::i#1 ]
[ print_spaced::j#2 print_spaced::j#1 ]
Allocated zp ZP_WORD:2 [ print_spaced::msg#3 ]
Allocated zp ZP_WORD:4 [ print_spaced::at#3 ]
Allocated zp ZP_BYTE:6 [ print_spaced::i#2 print_spaced::i#1 ]
Allocated zp ZP_BYTE:7 [ print_spaced::j#2 print_spaced::j#1 ]
INITIAL ASM
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.label screen = $400
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
b2_from_bbegin:
jmp b2
//SEG4 @2
b2:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @2 to main [phi:@2->main]
main_from_b2:
jsr main
//SEG7 [3] phi from @2 to @end [phi:@2->@end]
bend_from_b2:
jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
//SEG10 [5] call print_spaced param-assignment [ ] ( main:2 [ ] )
//SEG11 [9] phi from main to print_spaced [phi:main->print_spaced]
print_spaced_from_main:
//SEG12 [9] phi (byte*) print_spaced::at#3 = (const byte*) screen#0 [phi:main->print_spaced#0] -- pbuz1=pbuc1
lda #<screen
sta print_spaced.at
lda #>screen
sta print_spaced.at+1
//SEG13 [9] phi (byte*) print_spaced::msg#3 = (const string) main::hello#0 [phi:main->print_spaced#1] -- pbuz1=pbuc1
lda #<hello
sta print_spaced.msg
lda #>hello
sta print_spaced.msg+1
jsr print_spaced
//SEG14 [6] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
jmp b1
//SEG15 main::@1
b1:
//SEG16 [7] call print_spaced param-assignment [ ] ( main:2 [ ] )
//SEG17 [9] phi from main::@1 to print_spaced [phi:main::@1->print_spaced]
print_spaced_from_b1:
//SEG18 [9] phi (byte*) print_spaced::at#3 = (const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 [phi:main::@1->print_spaced#0] -- pbuz1=pbuc1
lda #<screen+$28
sta print_spaced.at
lda #>screen+$28
sta print_spaced.at+1
//SEG19 [9] phi (byte*) print_spaced::msg#3 = (const string) main::hello#0 [phi:main::@1->print_spaced#1] -- pbuz1=pbuc1
lda #<hello
sta print_spaced.msg
lda #>hello
sta print_spaced.msg+1
jsr print_spaced
jmp breturn
//SEG20 main::@return
breturn:
//SEG21 [8] return [ ] ( main:2 [ ] )
rts
hello: .text "hello world!@"
}
//SEG22 print_spaced
print_spaced: {
.label j = 7
.label i = 6
.label msg = 2
.label at = 4
//SEG23 [10] phi from print_spaced to print_spaced::@1 [phi:print_spaced->print_spaced::@1]
b1_from_print_spaced:
//SEG24 [10] phi (byte) print_spaced::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:print_spaced->print_spaced::@1#0] -- vbuz1=vbuc1
lda #0
sta j
//SEG25 [10] phi (byte) print_spaced::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:print_spaced->print_spaced::@1#1] -- vbuz1=vbuc1
lda #0
sta i
jmp b1
//SEG26 [10] phi from print_spaced::@1 to print_spaced::@1 [phi:print_spaced::@1->print_spaced::@1]
b1_from_b1:
//SEG27 [10] phi (byte) print_spaced::j#2 = (byte) print_spaced::j#1 [phi:print_spaced::@1->print_spaced::@1#0] -- register_copy
//SEG28 [10] phi (byte) print_spaced::i#2 = (byte) print_spaced::i#1 [phi:print_spaced::@1->print_spaced::@1#1] -- register_copy
jmp b1
//SEG29 print_spaced::@1
b1:
//SEG30 [11] *((byte*) print_spaced::at#3 + (byte) print_spaced::j#2) ← *((byte*) print_spaced::msg#3 + (byte) print_spaced::i#2) [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4
ldy j
sty $ff
ldy i
lda (msg),y
ldy $ff
sta (at),y
//SEG31 [12] (byte) print_spaced::j#1 ← (byte) print_spaced::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] ) -- vbuz1=vbuz1_plus_2
lda j
clc
adc #2
sta j
//SEG32 [13] (byte) print_spaced::i#1 ← ++ (byte) print_spaced::i#2 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ) -- vbuz1=_inc_vbuz1
inc i
//SEG33 [14] if(*((byte*) print_spaced::msg#3 + (byte) print_spaced::i#1)!=(byte) '@') goto print_spaced::@1 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ) -- pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1
ldy i
lda (msg),y
cmp #'@'
bne b1_from_b1
jmp breturn
//SEG34 print_spaced::@return
breturn:
//SEG35 [15] return [ ] ( main:2::print_spaced:5 [ ] main:2::print_spaced:7 [ ] )
rts
}
REGISTER UPLIFT POTENTIAL REGISTERS
Potential register analysis [11] *(print_spaced::at#3 + print_spaced::j#2) ← *(print_spaced::msg#3 + print_spaced::i#2) missing fragment pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuaa allocation: zp ZP_WORD:2 [ print_spaced::msg#3 ] zp ZP_WORD:4 [ print_spaced::at#3 ] reg byte x [ print_spaced::j#2 print_spaced::j#1 ] reg byte a [ print_spaced::i#2 print_spaced::i#1 ]
Potential register analysis [11] *(print_spaced::at#3 + print_spaced::j#2) ← *(print_spaced::msg#3 + print_spaced::i#2) missing fragment pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy allocation: zp ZP_WORD:2 [ print_spaced::msg#3 ] zp ZP_WORD:4 [ print_spaced::at#3 ] reg byte a [ print_spaced::j#2 print_spaced::j#1 ] reg byte y [ print_spaced::i#2 print_spaced::i#1 ]
Potential register analysis [11] *(print_spaced::at#3 + print_spaced::j#2) ← *(print_spaced::msg#3 + print_spaced::i#2) missing fragment pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuyy allocation: zp ZP_WORD:2 [ print_spaced::msg#3 ] zp ZP_WORD:4 [ print_spaced::at#3 ] reg byte x [ print_spaced::j#2 print_spaced::j#1 ] reg byte y [ print_spaced::i#2 print_spaced::i#1 ]
MISSING FRAGMENTS
pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuaa
pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy
pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuyy
Statement [11] *((byte*) print_spaced::at#3 + (byte) print_spaced::j#2) ← *((byte*) print_spaced::msg#3 + (byte) print_spaced::i#2) [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ print_spaced::i#2 print_spaced::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ print_spaced::i#2 print_spaced::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ print_spaced::j#2 print_spaced::j#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ print_spaced::j#2 print_spaced::j#1 ]
Statement [14] if(*((byte*) print_spaced::msg#3 + (byte) print_spaced::i#1)!=(byte) '@') goto print_spaced::@1 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ) always clobbers reg byte a reg byte y
Statement [11] *((byte*) print_spaced::at#3 + (byte) print_spaced::j#2) ← *((byte*) print_spaced::msg#3 + (byte) print_spaced::i#2) [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ) always clobbers reg byte a reg byte y
Statement [14] if(*((byte*) print_spaced::msg#3 + (byte) print_spaced::i#1)!=(byte) '@') goto print_spaced::@1 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ) always clobbers reg byte a reg byte y
Potential registers zp ZP_WORD:2 [ print_spaced::msg#3 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_WORD:4 [ print_spaced::at#3 ] : zp ZP_WORD:4 ,
Potential registers zp ZP_BYTE:6 [ print_spaced::i#2 print_spaced::i#1 ] : zp ZP_BYTE:6 , reg byte x ,
Potential registers zp ZP_BYTE:7 [ print_spaced::j#2 print_spaced::j#1 ] : zp ZP_BYTE:7 , reg byte x ,
REGISTER UPLIFT SCOPES
Uplift Scope [print_spaced] 27.5: zp ZP_BYTE:6 [ print_spaced::i#2 print_spaced::i#1 ] 23.83: zp ZP_BYTE:7 [ print_spaced::j#2 print_spaced::j#1 ] 3.67: zp ZP_WORD:2 [ print_spaced::msg#3 ] 1.83: zp ZP_WORD:4 [ print_spaced::at#3 ]
Uplift Scope [main]
Uplift Scope []
Uplifting [print_spaced] best 687 combination reg byte x [ print_spaced::i#2 print_spaced::i#1 ] zp ZP_BYTE:7 [ print_spaced::j#2 print_spaced::j#1 ] zp ZP_WORD:2 [ print_spaced::msg#3 ] zp ZP_WORD:4 [ print_spaced::at#3 ]
Uplifting [main] best 687 combination
Uplifting [] best 687 combination
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ print_spaced::j#2 print_spaced::j#1 ]
Uplifting [print_spaced] best 687 combination zp ZP_BYTE:7 [ print_spaced::j#2 print_spaced::j#1 ]
Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:6 [ print_spaced::j#2 print_spaced::j#1 ]
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.label screen = $400
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
b2_from_bbegin:
jmp b2
//SEG4 @2
b2:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @2 to main [phi:@2->main]
main_from_b2:
jsr main
//SEG7 [3] phi from @2 to @end [phi:@2->@end]
bend_from_b2:
jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
//SEG10 [5] call print_spaced param-assignment [ ] ( main:2 [ ] )
//SEG11 [9] phi from main to print_spaced [phi:main->print_spaced]
print_spaced_from_main:
//SEG12 [9] phi (byte*) print_spaced::at#3 = (const byte*) screen#0 [phi:main->print_spaced#0] -- pbuz1=pbuc1
lda #<screen
sta print_spaced.at
lda #>screen
sta print_spaced.at+1
//SEG13 [9] phi (byte*) print_spaced::msg#3 = (const string) main::hello#0 [phi:main->print_spaced#1] -- pbuz1=pbuc1
lda #<hello
sta print_spaced.msg
lda #>hello
sta print_spaced.msg+1
jsr print_spaced
//SEG14 [6] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
jmp b1
//SEG15 main::@1
b1:
//SEG16 [7] call print_spaced param-assignment [ ] ( main:2 [ ] )
//SEG17 [9] phi from main::@1 to print_spaced [phi:main::@1->print_spaced]
print_spaced_from_b1:
//SEG18 [9] phi (byte*) print_spaced::at#3 = (const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 [phi:main::@1->print_spaced#0] -- pbuz1=pbuc1
lda #<screen+$28
sta print_spaced.at
lda #>screen+$28
sta print_spaced.at+1
//SEG19 [9] phi (byte*) print_spaced::msg#3 = (const string) main::hello#0 [phi:main::@1->print_spaced#1] -- pbuz1=pbuc1
lda #<hello
sta print_spaced.msg
lda #>hello
sta print_spaced.msg+1
jsr print_spaced
jmp breturn
//SEG20 main::@return
breturn:
//SEG21 [8] return [ ] ( main:2 [ ] )
rts
hello: .text "hello world!@"
}
//SEG22 print_spaced
print_spaced: {
.label j = 6
.label msg = 2
.label at = 4
//SEG23 [10] phi from print_spaced to print_spaced::@1 [phi:print_spaced->print_spaced::@1]
b1_from_print_spaced:
//SEG24 [10] phi (byte) print_spaced::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:print_spaced->print_spaced::@1#0] -- vbuz1=vbuc1
lda #0
sta j
//SEG25 [10] phi (byte) print_spaced::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:print_spaced->print_spaced::@1#1] -- vbuxx=vbuc1
ldx #0
jmp b1
//SEG26 [10] phi from print_spaced::@1 to print_spaced::@1 [phi:print_spaced::@1->print_spaced::@1]
b1_from_b1:
//SEG27 [10] phi (byte) print_spaced::j#2 = (byte) print_spaced::j#1 [phi:print_spaced::@1->print_spaced::@1#0] -- register_copy
//SEG28 [10] phi (byte) print_spaced::i#2 = (byte) print_spaced::i#1 [phi:print_spaced::@1->print_spaced::@1#1] -- register_copy
jmp b1
//SEG29 print_spaced::@1
b1:
//SEG30 [11] *((byte*) print_spaced::at#3 + (byte) print_spaced::j#2) ← *((byte*) print_spaced::msg#3 + (byte) print_spaced::i#2) [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuxx
txa
tay
lda (msg),y
ldy j
sta (at),y
//SEG31 [12] (byte) print_spaced::j#1 ← (byte) print_spaced::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] ) -- vbuz1=vbuz1_plus_2
lda j
clc
adc #2
sta j
//SEG32 [13] (byte) print_spaced::i#1 ← ++ (byte) print_spaced::i#2 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ) -- vbuxx=_inc_vbuxx
inx
//SEG33 [14] if(*((byte*) print_spaced::msg#3 + (byte) print_spaced::i#1)!=(byte) '@') goto print_spaced::@1 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ) -- pbuz1_derefidx_vbuxx_neq_vbuc1_then_la1
txa
tay
lda (msg),y
cmp #'@'
bne b1_from_b1
jmp breturn
//SEG34 print_spaced::@return
breturn:
//SEG35 [15] return [ ] ( main:2::print_spaced:5 [ ] main:2::print_spaced:7 [ ] )
rts
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b2
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction ldx #0 with TAX
Replacing instruction lda j with TYA
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b2_from_bbegin:
Removing instruction main_from_b2:
Removing instruction bend_from_b2:
Removing instruction b1_from_main:
Removing instruction print_spaced_from_b1:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b2:
Removing instruction bend:
Removing instruction print_spaced_from_main:
Removing instruction b1:
Removing instruction breturn:
Removing instruction b1_from_print_spaced:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @2
(label) @begin
(label) @end
(void()) main()
(label) main::@1
(label) main::@return
(byte*) main::hello
(const string) main::hello#0 hello = (string) "hello world!@"
(void()) print_spaced((byte*) print_spaced::at , (byte*) print_spaced::msg)
(label) print_spaced::@1
(label) print_spaced::@return
(byte*) print_spaced::at
(byte*) print_spaced::at#3 at zp ZP_WORD:4 1.8333333333333333
(byte) print_spaced::i
(byte) print_spaced::i#1 reg byte x 16.5
(byte) print_spaced::i#2 reg byte x 11.0
(byte) print_spaced::j
(byte) print_spaced::j#1 j zp ZP_BYTE:6 7.333333333333333
(byte) print_spaced::j#2 j zp ZP_BYTE:6 16.5
(byte*) print_spaced::msg
(byte*) print_spaced::msg#3 msg zp ZP_WORD:2 3.6666666666666665
(byte*) screen
(const byte*) screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
zp ZP_WORD:2 [ print_spaced::msg#3 ]
zp ZP_WORD:4 [ print_spaced::at#3 ]
reg byte x [ print_spaced::i#2 print_spaced::i#1 ]
zp ZP_BYTE:6 [ print_spaced::j#2 print_spaced::j#1 ]
FINAL ASSEMBLER
Score: 575
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.label screen = $400
//SEG2 @begin
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
//SEG4 @2
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @2 to main [phi:@2->main]
jsr main
//SEG7 [3] phi from @2 to @end [phi:@2->@end]
//SEG8 @end
//SEG9 main
main: {
//SEG10 [5] call print_spaced param-assignment [ ] ( main:2 [ ] )
//SEG11 [9] phi from main to print_spaced [phi:main->print_spaced]
//SEG12 [9] phi (byte*) print_spaced::at#3 = (const byte*) screen#0 [phi:main->print_spaced#0] -- pbuz1=pbuc1
lda #<screen
sta print_spaced.at
lda #>screen
sta print_spaced.at+1
//SEG13 [9] phi (byte*) print_spaced::msg#3 = (const string) main::hello#0 [phi:main->print_spaced#1] -- pbuz1=pbuc1
lda #<hello
sta print_spaced.msg
lda #>hello
sta print_spaced.msg+1
jsr print_spaced
//SEG14 [6] phi from main to main::@1 [phi:main->main::@1]
//SEG15 main::@1
//SEG16 [7] call print_spaced param-assignment [ ] ( main:2 [ ] )
//SEG17 [9] phi from main::@1 to print_spaced [phi:main::@1->print_spaced]
//SEG18 [9] phi (byte*) print_spaced::at#3 = (const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 [phi:main::@1->print_spaced#0] -- pbuz1=pbuc1
lda #<screen+$28
sta print_spaced.at
lda #>screen+$28
sta print_spaced.at+1
//SEG19 [9] phi (byte*) print_spaced::msg#3 = (const string) main::hello#0 [phi:main::@1->print_spaced#1] -- pbuz1=pbuc1
lda #<hello
sta print_spaced.msg
lda #>hello
sta print_spaced.msg+1
jsr print_spaced
//SEG20 main::@return
//SEG21 [8] return [ ] ( main:2 [ ] )
rts
hello: .text "hello world!@"
}
//SEG22 print_spaced
print_spaced: {
.label j = 6
.label msg = 2
.label at = 4
//SEG23 [10] phi from print_spaced to print_spaced::@1 [phi:print_spaced->print_spaced::@1]
//SEG24 [10] phi (byte) print_spaced::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:print_spaced->print_spaced::@1#0] -- vbuz1=vbuc1
lda #0
sta j
//SEG25 [10] phi (byte) print_spaced::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:print_spaced->print_spaced::@1#1] -- vbuxx=vbuc1
tax
//SEG26 [10] phi from print_spaced::@1 to print_spaced::@1 [phi:print_spaced::@1->print_spaced::@1]
//SEG27 [10] phi (byte) print_spaced::j#2 = (byte) print_spaced::j#1 [phi:print_spaced::@1->print_spaced::@1#0] -- register_copy
//SEG28 [10] phi (byte) print_spaced::i#2 = (byte) print_spaced::i#1 [phi:print_spaced::@1->print_spaced::@1#1] -- register_copy
//SEG29 print_spaced::@1
b1:
//SEG30 [11] *((byte*) print_spaced::at#3 + (byte) print_spaced::j#2) ← *((byte*) print_spaced::msg#3 + (byte) print_spaced::i#2) [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#2 ] ) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuxx
txa
tay
lda (msg),y
ldy j
sta (at),y
//SEG31 [12] (byte) print_spaced::j#1 ← (byte) print_spaced::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#2 print_spaced::j#1 ] ) -- vbuz1=vbuz1_plus_2
tya
clc
adc #2
sta j
//SEG32 [13] (byte) print_spaced::i#1 ← ++ (byte) print_spaced::i#2 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ) -- vbuxx=_inc_vbuxx
inx
//SEG33 [14] if(*((byte*) print_spaced::msg#3 + (byte) print_spaced::i#1)!=(byte) '@') goto print_spaced::@1 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ( main:2::print_spaced:5 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] main:2::print_spaced:7 [ print_spaced::msg#3 print_spaced::at#3 print_spaced::i#1 print_spaced::j#1 ] ) -- pbuz1_derefidx_vbuxx_neq_vbuc1_then_la1
txa
tay
lda (msg),y
cmp #'@'
bne b1
//SEG34 print_spaced::@return
//SEG35 [15] return [ ] ( main:2::print_spaced:5 [ ] main:2::print_spaced:7 [ ] )
rts
}

View File

@ -0,0 +1,28 @@
(label) @2
(label) @begin
(label) @end
(void()) main()
(label) main::@1
(label) main::@return
(byte*) main::hello
(const string) main::hello#0 hello = (string) "hello world!@"
(void()) print_spaced((byte*) print_spaced::at , (byte*) print_spaced::msg)
(label) print_spaced::@1
(label) print_spaced::@return
(byte*) print_spaced::at
(byte*) print_spaced::at#3 at zp ZP_WORD:4 1.8333333333333333
(byte) print_spaced::i
(byte) print_spaced::i#1 reg byte x 16.5
(byte) print_spaced::i#2 reg byte x 11.0
(byte) print_spaced::j
(byte) print_spaced::j#1 j zp ZP_BYTE:6 7.333333333333333
(byte) print_spaced::j#2 j zp ZP_BYTE:6 16.5
(byte*) print_spaced::msg
(byte*) print_spaced::msg#3 msg zp ZP_WORD:2 3.6666666666666665
(byte*) screen
(const byte*) screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
zp ZP_WORD:2 [ print_spaced::msg#3 ]
zp ZP_WORD:4 [ print_spaced::at#3 ]
reg byte x [ print_spaced::i#2 print_spaced::i#1 ]
zp ZP_BYTE:6 [ print_spaced::j#2 print_spaced::j#1 ]

View File

@ -139,9 +139,9 @@ main: {
sta print_word.w+1
jsr print_word
jsr print_ln
lda #2
lda i
clc
adc i
adc #2
sta i
cmp #$14*2
bcc b1
@ -379,13 +379,13 @@ lin16u_gen: {
lda val+3
adc step+3
sta val+3
clc
lda lintab
adc #<2
clc
adc #2
sta lintab
lda lintab+1
adc #>2
sta lintab+1
bcc !+
inc lintab+1
!:
inc i
bne !+
inc i+1

View File

@ -4301,10 +4301,10 @@ main: {
jmp b21
//SEG123 main::@21
b21:
//SEG124 [44] (byte) main::i#1 ← (byte) main::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 print_line_cursor#1 ] ( main:2 [ main::i#1 print_line_cursor#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG124 [44] (byte) main::i#1 ← (byte) main::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 print_line_cursor#1 ] ( main:2 [ main::i#1 print_line_cursor#1 ] ) -- vbuz1=vbuz1_plus_2
lda i
clc
adc i
adc #2
sta i
//SEG125 [45] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 20*(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@1 [ main::i#1 print_line_cursor#1 ] ( main:2 [ main::i#1 print_line_cursor#1 ] ) -- vbuz1_lt_vbuc1_then_la1
lda i
@ -4789,14 +4789,14 @@ lin16u_gen: {
lda val+3
adc step+3
sta val+3
//SEG268 [115] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:7 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:9 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ) -- pwuz1=pwuz1_plus_vbuc1
clc
//SEG268 [115] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:7 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:9 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ) -- pwuz1=pwuz1_plus_2
lda lintab
adc #<2
clc
adc #2
sta lintab
lda lintab+1
adc #>2
sta lintab+1
bcc !+
inc lintab+1
!:
//SEG269 [116] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#3 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#3 lin16u_gen::i#1 ] main:2::lin16u_gen:7 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#3 lin16u_gen::i#1 ] main:2::lin16u_gen:9 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#3 lin16u_gen::i#1 ] ) -- vwuz1=_inc_vwuz1
inc i
bne !+
@ -4946,7 +4946,6 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ pr
Statement [32] (word) print_word::w#3 ← *((const word[20]) main::lintab1#0 + (byte) main::i#10) [ main::i#10 print_line_cursor#1 print_word::w#3 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 print_word::w#3 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [36] (word) print_word::w#4 ← *((const word[20]) main::lintab2#0 + (byte) main::i#10) [ main::i#10 print_line_cursor#1 print_word::w#4 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 print_word::w#4 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [40] (word) print_word::w#5 ← *((const word[20]) main::lintab3#0 + (byte) main::i#10) [ main::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [44] (byte) main::i#1 ← (byte) main::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 print_line_cursor#1 ] ( main:2 [ main::i#1 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [46] (byte*~) print_char_cursor#100 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#100 ] ( main:2 [ print_line_cursor#1 print_char_cursor#100 ] ) always clobbers reg byte a
Statement [63] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#11 ] ( main:2::print_ln:25 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:43 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:59 [ print_line_cursor#1 print_char_cursor#11 ] ) always clobbers reg byte a
Statement [64] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#11) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#11 ] ( main:2::print_ln:25 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:43 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:59 [ print_line_cursor#1 print_char_cursor#11 ] ) always clobbers reg byte a
@ -4988,7 +4987,6 @@ Statement [28] (byte*~) print_char_cursor#91 ← (byte*) print_line_cursor#1 [ m
Statement [32] (word) print_word::w#3 ← *((const word[20]) main::lintab1#0 + (byte) main::i#10) [ main::i#10 print_line_cursor#1 print_word::w#3 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 print_word::w#3 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [36] (word) print_word::w#4 ← *((const word[20]) main::lintab2#0 + (byte) main::i#10) [ main::i#10 print_line_cursor#1 print_word::w#4 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 print_word::w#4 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [40] (word) print_word::w#5 ← *((const word[20]) main::lintab3#0 + (byte) main::i#10) [ main::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#2 ] ( main:2 [ main::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [44] (byte) main::i#1 ← (byte) main::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 print_line_cursor#1 ] ( main:2 [ main::i#1 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [46] (byte*~) print_char_cursor#100 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#100 ] ( main:2 [ print_line_cursor#1 print_char_cursor#100 ] ) always clobbers reg byte a
Statement [63] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#11 ] ( main:2::print_ln:25 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:43 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:59 [ print_line_cursor#1 print_char_cursor#11 ] ) always clobbers reg byte a
Statement [64] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#11) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#11 ] ( main:2::print_ln:25 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:43 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_ln:59 [ print_line_cursor#1 print_char_cursor#11 ] ) always clobbers reg byte a
@ -5067,18 +5065,18 @@ Uplift Scope [main] 20.17: zp ZP_BYTE:2 [ main::i#10 main::i#1 ]
Uplift Scope [print_char] 14: zp ZP_BYTE:8 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
Uplift Scope [print_ln]
Uplifting [] best 16090 combination zp ZP_WORD:3 [ print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] zp ZP_WORD:9 [ print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#91 print_char_cursor#2 print_char_cursor#11 print_char_cursor#100 print_char_cursor#1 ] zp ZP_WORD:58 [ rem16u#1 ]
Uplifting [print_str] best 16090 combination zp ZP_WORD:11 [ print_str::str#10 print_str::str#12 print_str::str#0 ]
Uplifting [divr16u] best 15900 combination zp ZP_WORD:31 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:33 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] zp ZP_WORD:29 [ divr16u::divisor#6 divr16u::divisor#0 divr16u::divisor#1 ] zp ZP_WORD:42 [ divr16u::return#2 ] zp ZP_WORD:46 [ divr16u::return#3 ]
Uplifting [lin16u_gen] best 15900 combination zp ZP_WORD:54 [ lin16u_gen::$5 ] zp ZP_DWORD:21 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] zp ZP_WORD:27 [ lin16u_gen::i#2 lin16u_gen::i#1 ] zp ZP_WORD:25 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#5 ] zp ZP_WORD:48 [ lin16u_gen::stepf#0 ] zp ZP_WORD:15 [ lin16u_gen::max#3 ] zp ZP_WORD:40 [ lin16u_gen::ampl#0 ] zp ZP_DWORD:50 [ lin16u_gen::step#0 ] zp ZP_WORD:19 [ lin16u_gen::length#3 ] zp ZP_WORD:44 [ lin16u_gen::stepi#0 ] zp ZP_WORD:17 [ lin16u_gen::min#3 ]
Uplifting [print_word] best 15900 combination zp ZP_WORD:5 [ print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ]
Uplifting [print_cls] best 15900 combination zp ZP_WORD:13 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_byte] best 15858 combination reg byte x [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [main] best 15858 combination zp ZP_BYTE:2 [ main::i#10 main::i#1 ]
Uplifting [print_char] best 15849 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
Uplifting [print_ln] best 15849 combination
Uplifting [] best 16085 combination zp ZP_WORD:3 [ print_line_cursor#11 print_line_cursor#21 print_line_cursor#1 ] zp ZP_WORD:9 [ print_char_cursor#86 print_char_cursor#50 print_char_cursor#81 print_char_cursor#91 print_char_cursor#2 print_char_cursor#11 print_char_cursor#100 print_char_cursor#1 ] zp ZP_WORD:58 [ rem16u#1 ]
Uplifting [print_str] best 16085 combination zp ZP_WORD:11 [ print_str::str#10 print_str::str#12 print_str::str#0 ]
Uplifting [divr16u] best 15895 combination zp ZP_WORD:31 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:33 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] zp ZP_WORD:29 [ divr16u::divisor#6 divr16u::divisor#0 divr16u::divisor#1 ] zp ZP_WORD:42 [ divr16u::return#2 ] zp ZP_WORD:46 [ divr16u::return#3 ]
Uplifting [lin16u_gen] best 15895 combination zp ZP_WORD:54 [ lin16u_gen::$5 ] zp ZP_DWORD:21 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] zp ZP_WORD:27 [ lin16u_gen::i#2 lin16u_gen::i#1 ] zp ZP_WORD:25 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#5 ] zp ZP_WORD:48 [ lin16u_gen::stepf#0 ] zp ZP_WORD:15 [ lin16u_gen::max#3 ] zp ZP_WORD:40 [ lin16u_gen::ampl#0 ] zp ZP_DWORD:50 [ lin16u_gen::step#0 ] zp ZP_WORD:19 [ lin16u_gen::length#3 ] zp ZP_WORD:44 [ lin16u_gen::stepi#0 ] zp ZP_WORD:17 [ lin16u_gen::min#3 ]
Uplifting [print_word] best 15895 combination zp ZP_WORD:5 [ print_word::w#10 print_word::w#3 print_word::w#4 print_word::w#5 ]
Uplifting [print_cls] best 15895 combination zp ZP_WORD:13 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_byte] best 15853 combination reg byte x [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [main] best 15853 combination zp ZP_BYTE:2 [ main::i#10 main::i#1 ]
Uplifting [print_char] best 15844 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
Uplifting [print_ln] best 15844 combination
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::i#10 main::i#1 ]
Uplifting [main] best 15849 combination zp ZP_BYTE:2 [ main::i#10 main::i#1 ]
Uplifting [main] best 15844 combination zp ZP_BYTE:2 [ main::i#10 main::i#1 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:31 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:58 [ rem16u#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:15 [ lin16u_gen::max#3 ] ] with [ zp ZP_WORD:40 [ lin16u_gen::ampl#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:42 [ divr16u::return#2 ] ] - score: 1
@ -5450,10 +5448,10 @@ main: {
jmp b21
//SEG123 main::@21
b21:
//SEG124 [44] (byte) main::i#1 ← (byte) main::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 print_line_cursor#1 ] ( main:2 [ main::i#1 print_line_cursor#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG124 [44] (byte) main::i#1 ← (byte) main::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 print_line_cursor#1 ] ( main:2 [ main::i#1 print_line_cursor#1 ] ) -- vbuz1=vbuz1_plus_2
lda i
clc
adc i
adc #2
sta i
//SEG125 [45] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 20*(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@1 [ main::i#1 print_line_cursor#1 ] ( main:2 [ main::i#1 print_line_cursor#1 ] ) -- vbuz1_lt_vbuc1_then_la1
lda i
@ -5914,14 +5912,14 @@ lin16u_gen: {
lda val+3
adc step+3
sta val+3
//SEG268 [115] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:7 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:9 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ) -- pwuz1=pwuz1_plus_vbuc1
clc
//SEG268 [115] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:7 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:9 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ) -- pwuz1=pwuz1_plus_2
lda lintab
adc #<2
clc
adc #2
sta lintab
lda lintab+1
adc #>2
sta lintab+1
bcc !+
inc lintab+1
!:
//SEG269 [116] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#3 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#3 lin16u_gen::i#1 ] main:2::lin16u_gen:7 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#3 lin16u_gen::i#1 ] main:2::lin16u_gen:9 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#3 lin16u_gen::i#1 ] ) -- vwuz1=_inc_vwuz1
inc i
bne !+
@ -6451,7 +6449,7 @@ reg byte a [ divr16u::$2 ]
FINAL ASSEMBLER
Score: 13604
Score: 13599
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -6718,10 +6716,10 @@ main: {
//SEG122 [61] phi (byte*) print_line_cursor#21 = (byte*) print_line_cursor#1 [phi:main::@20->print_ln#0] -- register_copy
jsr print_ln
//SEG123 main::@21
//SEG124 [44] (byte) main::i#1 ← (byte) main::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 print_line_cursor#1 ] ( main:2 [ main::i#1 print_line_cursor#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG124 [44] (byte) main::i#1 ← (byte) main::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 print_line_cursor#1 ] ( main:2 [ main::i#1 print_line_cursor#1 ] ) -- vbuz1=vbuz1_plus_2
lda i
clc
adc i
adc #2
sta i
//SEG125 [45] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 20*(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@1 [ main::i#1 print_line_cursor#1 ] ( main:2 [ main::i#1 print_line_cursor#1 ] ) -- vbuz1_lt_vbuc1_then_la1
cmp #$14*2
@ -7107,14 +7105,14 @@ lin16u_gen: {
lda val+3
adc step+3
sta val+3
//SEG268 [115] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:7 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:9 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ) -- pwuz1=pwuz1_plus_vbuc1
clc
//SEG268 [115] (word*) lin16u_gen::lintab#3 ← (word*) lin16u_gen::lintab#4 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:7 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] main:2::lin16u_gen:9 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ) -- pwuz1=pwuz1_plus_2
lda lintab
adc #<2
clc
adc #2
sta lintab
lda lintab+1
adc #>2
sta lintab+1
bcc !+
inc lintab+1
!:
//SEG269 [116] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#3 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#3 lin16u_gen::i#1 ] main:2::lin16u_gen:7 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#3 lin16u_gen::i#1 ] main:2::lin16u_gen:9 [ lin16u_gen::length#3 lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#3 lin16u_gen::i#1 ] ) -- vwuz1=_inc_vwuz1
inc i
bne !+

View File

@ -28,9 +28,9 @@ main: {
bcc !+
inc charset+1
!:
lda #2
lda c
clc
adc c
adc #2
sta c
cmp #6
bne b1

View File

@ -844,10 +844,10 @@ main: {
bcc !+
inc charset+1
!:
//SEG23 [10] (byte) main::c#1 ← (byte) main::c#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::charset#1 main::c#1 ] ( main:2 [ main::charset#1 main::c#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG23 [10] (byte) main::c#1 ← (byte) main::c#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::charset#1 main::c#1 ] ( main:2 [ main::charset#1 main::c#1 ] ) -- vbuz1=vbuz1_plus_2
lda c
clc
adc c
adc #2
sta c
//SEG24 [11] if((byte) main::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@1 [ main::charset#1 main::c#1 ] ( main:2 [ main::charset#1 main::c#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda c
@ -967,7 +967,6 @@ Statement [6] (byte*) gen_char3::dst#0 ← (byte*) main::charset#2 [ main::chars
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::c#2 main::c#1 ]
Statement [7] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte) main::c#2) [ main::charset#2 main::c#2 gen_char3::dst#0 gen_char3::spec#0 ] ( main:2 [ main::charset#2 main::c#2 gen_char3::dst#0 gen_char3::spec#0 ] ) always clobbers reg byte a
Statement [9] (byte*) main::charset#1 ← (byte*) main::charset#2 + (byte/signed byte/word/signed word/dword/signed dword) 8 [ main::c#2 main::charset#1 ] ( main:2 [ main::c#2 main::charset#1 ] ) always clobbers reg byte a
Statement [10] (byte) main::c#1 ← (byte) main::c#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::charset#1 main::c#1 ] ( main:2 [ main::charset#1 main::c#1 ] ) always clobbers reg byte a
Statement [12] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0/(byte/signed byte/word/signed word/dword/signed dword) 64|((word))(const byte*) CHARSET#0/(word/signed word/dword/signed dword) 1024 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [17] (byte~) gen_char3::$0 ← > (word) gen_char3::spec#2 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$0 ] ( main:2::gen_char3:8 [ main::charset#2 main::c#2 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ gen_char3::r#6 gen_char3::r#1 ]
@ -979,7 +978,6 @@ Statement [26] *((byte*) gen_char3::dst#0 + (byte) gen_char3::r#6) ← (byte) ge
Statement [6] (byte*) gen_char3::dst#0 ← (byte*) main::charset#2 [ main::charset#2 main::c#2 gen_char3::dst#0 ] ( main:2 [ main::charset#2 main::c#2 gen_char3::dst#0 ] ) always clobbers reg byte a
Statement [7] (word) gen_char3::spec#0 ← *((const word[]) charset_spec_row#0 + (byte) main::c#2) [ main::charset#2 main::c#2 gen_char3::dst#0 gen_char3::spec#0 ] ( main:2 [ main::charset#2 main::c#2 gen_char3::dst#0 gen_char3::spec#0 ] ) always clobbers reg byte a
Statement [9] (byte*) main::charset#1 ← (byte*) main::charset#2 + (byte/signed byte/word/signed word/dword/signed dword) 8 [ main::c#2 main::charset#1 ] ( main:2 [ main::c#2 main::charset#1 ] ) always clobbers reg byte a
Statement [10] (byte) main::c#1 ← (byte) main::c#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::charset#1 main::c#1 ] ( main:2 [ main::charset#1 main::c#1 ] ) always clobbers reg byte a
Statement [12] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0/(byte/signed byte/word/signed word/dword/signed dword) 64|((word))(const byte*) CHARSET#0/(word/signed word/dword/signed dword) 1024 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [17] (byte~) gen_char3::$0 ← > (word) gen_char3::spec#2 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$0 ] ( main:2::gen_char3:8 [ main::charset#2 main::c#2 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$0 ] ) always clobbers reg byte a
Statement [18] (byte~) gen_char3::$1 ← (byte~) gen_char3::$0 & (byte/word/signed word/dword/signed dword) 128 [ gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$1 ] ( main:2::gen_char3:8 [ main::charset#2 main::c#2 gen_char3::dst#0 gen_char3::r#6 gen_char3::spec#2 gen_char3::b#4 gen_char3::c#2 gen_char3::$1 ] ) always clobbers reg byte a
@ -1080,10 +1078,10 @@ main: {
bcc !+
inc charset+1
!:
//SEG23 [10] (byte) main::c#1 ← (byte) main::c#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::charset#1 main::c#1 ] ( main:2 [ main::charset#1 main::c#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG23 [10] (byte) main::c#1 ← (byte) main::c#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::charset#1 main::c#1 ] ( main:2 [ main::charset#1 main::c#1 ] ) -- vbuz1=vbuz1_plus_2
lda c
clc
adc c
adc #2
sta c
//SEG24 [11] if((byte) main::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@1 [ main::charset#1 main::c#1 ] ( main:2 [ main::charset#1 main::c#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda c
@ -1356,10 +1354,10 @@ main: {
bcc !+
inc charset+1
!:
//SEG23 [10] (byte) main::c#1 ← (byte) main::c#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::charset#1 main::c#1 ] ( main:2 [ main::charset#1 main::c#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG23 [10] (byte) main::c#1 ← (byte) main::c#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::charset#1 main::c#1 ] ( main:2 [ main::charset#1 main::c#1 ] ) -- vbuz1=vbuz1_plus_2
lda c
clc
adc c
adc #2
sta c
//SEG24 [11] if((byte) main::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@1 [ main::charset#1 main::c#1 ] ( main:2 [ main::charset#1 main::c#1 ] ) -- vbuz1_neq_vbuc1_then_la1
cmp #6

View File

@ -449,10 +449,10 @@ main: {
}
//SEG27 ln
ln: {
//SEG28 [13] (byte) line#13 ← (byte) line#12 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ line#13 ] ( main:2::ln:5 [ line#13 ] main:2::ln:7 [ line#13 ] main:2::ln:9 [ line#13 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG28 [13] (byte) line#13 ← (byte) line#12 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ line#13 ] ( main:2::ln:5 [ line#13 ] main:2::ln:7 [ line#13 ] main:2::ln:9 [ line#13 ] ) -- vbuz1=vbuz1_plus_2
lda line
clc
adc line
adc #2
sta line
jmp breturn
//SEG29 ln::@return
@ -462,7 +462,6 @@ ln: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [13] (byte) line#13 ← (byte) line#12 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ line#13 ] ( main:2::ln:5 [ line#13 ] main:2::ln:7 [ line#13 ] main:2::ln:9 [ line#13 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ line#12 line#13 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
@ -538,7 +537,7 @@ main: {
}
//SEG27 ln
ln: {
//SEG28 [13] (byte) line#13 ← (byte) line#12 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ line#13 ] ( main:2::ln:5 [ line#13 ] main:2::ln:7 [ line#13 ] main:2::ln:9 [ line#13 ] ) -- vbuaa=vbuaa_plus_vbuc1
//SEG28 [13] (byte) line#13 ← (byte) line#12 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ line#13 ] ( main:2::ln:5 [ line#13 ] main:2::ln:7 [ line#13 ] main:2::ln:9 [ line#13 ] ) -- vbuaa=vbuaa_plus_2
clc
adc #2
jmp breturn
@ -642,7 +641,7 @@ main: {
}
//SEG27 ln
ln: {
//SEG28 [13] (byte) line#13 ← (byte) line#12 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ line#13 ] ( main:2::ln:5 [ line#13 ] main:2::ln:7 [ line#13 ] main:2::ln:9 [ line#13 ] ) -- vbuaa=vbuaa_plus_vbuc1
//SEG28 [13] (byte) line#13 ← (byte) line#12 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ line#13 ] ( main:2::ln:5 [ line#13 ] main:2::ln:7 [ line#13 ] main:2::ln:9 [ line#13 ] ) -- vbuaa=vbuaa_plus_2
clc
adc #2
//SEG29 ln::@return

View File

@ -91,10 +91,8 @@ anim: {
sbc #sinlen_y
tax
b3:
lda j2
sec
sbc #2
sta j2
dec j2
dec j2
inc j
lda j
cmp #7

View File

@ -6395,11 +6395,9 @@ anim: {
jmp b3
//SEG61 anim::@3
b3:
//SEG62 [29] (byte) anim::j2#1 ← (byte) anim::j2#2 - (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ) -- vbuz1=vbuz1_minus_vbuc1
lda j2
sec
sbc #2
sta j2
//SEG62 [29] (byte) anim::j2#1 ← (byte) anim::j2#2 - (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ) -- vbuz1=vbuz1_minus_2
dec j2
dec j2
//SEG63 [30] (byte) anim::j#1 ← ++ (byte) anim::j#2 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 anim::j#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 anim::j#1 ] ) -- vbuz1=_inc_vbuz1
inc j
//SEG64 [31] if((byte) anim::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto anim::@1 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 anim::j#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 anim::j#1 ] ) -- vbuz1_neq_vbuc1_then_la1
@ -7619,7 +7617,6 @@ Statement [21] (byte) anim::xidx#1 ← (byte) anim::xidx#3 + (byte/signed byte/w
Statement [23] (byte) anim::xidx#2 ← (byte) anim::xidx#1 - (const byte) sinlen_x#0 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#2 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#2 ] ) always clobbers reg byte a
Statement [25] (byte) anim::yidx#1 ← (byte) anim::yidx#3 + (byte/signed byte/word/signed word/dword/signed dword) 8 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::yidx#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::yidx#1 ] ) always clobbers reg byte a
Statement [27] (byte) anim::yidx#2 ← (byte) anim::yidx#1 - (const byte) sinlen_y#0 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::yidx#2 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::yidx#2 ] ) always clobbers reg byte a
Statement [29] (byte) anim::j2#1 ← (byte) anim::j2#2 - (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ) always clobbers reg byte a
Statement [46] *((const byte*) COLS#0 + (byte) init::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ init::i#2 init::i#1 ]
Statement [47] *((const byte*) COLS#0+(byte/signed byte/word/signed word/dword/signed dword) 40 + (byte) init::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 11 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a
@ -7709,7 +7706,6 @@ Statement [21] (byte) anim::xidx#1 ← (byte) anim::xidx#3 + (byte/signed byte/w
Statement [23] (byte) anim::xidx#2 ← (byte) anim::xidx#1 - (const byte) sinlen_x#0 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#2 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#2 ] ) always clobbers reg byte a
Statement [25] (byte) anim::yidx#1 ← (byte) anim::yidx#3 + (byte/signed byte/word/signed word/dword/signed dword) 8 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::yidx#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::yidx#1 ] ) always clobbers reg byte a
Statement [27] (byte) anim::yidx#2 ← (byte) anim::yidx#1 - (const byte) sinlen_y#0 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::yidx#2 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::yidx#2 ] ) always clobbers reg byte a
Statement [29] (byte) anim::j2#1 ← (byte) anim::j2#2 - (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ) always clobbers reg byte a
Statement [46] *((const byte*) COLS#0 + (byte) init::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a
Statement [47] *((const byte*) COLS#0+(byte/signed byte/word/signed word/dword/signed dword) 40 + (byte) init::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 11 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a
Statement [67] *((byte*) clear_screen::sc#2) ← (byte) ' ' [ clear_screen::sc#2 ] ( main:2::init:5::clear_screen:44 [ clear_screen::sc#2 ] main:2::init:5::clear_screen:63 [ clear_screen::sc#2 ] ) always clobbers reg byte a reg byte y
@ -8131,11 +8127,9 @@ anim: {
jmp b3
//SEG61 anim::@3
b3:
//SEG62 [29] (byte) anim::j2#1 ← (byte) anim::j2#2 - (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ) -- vbuz1=vbuz1_minus_vbuc1
lda j2
sec
sbc #2
sta j2
//SEG62 [29] (byte) anim::j2#1 ← (byte) anim::j2#2 - (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ) -- vbuz1=vbuz1_minus_2
dec j2
dec j2
//SEG63 [30] (byte) anim::j#1 ← ++ (byte) anim::j#2 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 anim::j#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 anim::j#1 ] ) -- vbuz1=_inc_vbuz1
inc j
//SEG64 [31] if((byte) anim::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto anim::@1 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 anim::j#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 anim::j#1 ] ) -- vbuz1_neq_vbuc1_then_la1
@ -10069,11 +10063,9 @@ anim: {
//SEG60 [28] phi (byte) anim::yidx#6 = (byte) anim::yidx#1 [phi:anim::@2/anim::@7->anim::@3#0] -- register_copy
//SEG61 anim::@3
b3:
//SEG62 [29] (byte) anim::j2#1 ← (byte) anim::j2#2 - (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ) -- vbuz1=vbuz1_minus_vbuc1
lda j2
sec
sbc #2
sta j2
//SEG62 [29] (byte) anim::j2#1 ← (byte) anim::j2#2 - (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j#2 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 ] ) -- vbuz1=vbuz1_minus_2
dec j2
dec j2
//SEG63 [30] (byte) anim::j#1 ← ++ (byte) anim::j#2 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 anim::j#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 anim::j#1 ] ) -- vbuz1=_inc_vbuz1
inc j
//SEG64 [31] if((byte) anim::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto anim::@1 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 anim::j#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#5 anim::x_msb#1 anim::j2#1 anim::yidx#6 anim::j#1 ] ) -- vbuz1_neq_vbuc1_then_la1

View File

@ -42,13 +42,14 @@ main: {
lda #>str
sta print_str.str+1
jsr print_str
clc
lda st1
adc #<2
clc
adc #2
sta st1
bcc !+
inc st1+1
!:
lda st1+1
adc #>2
sta st1+1
cmp #>sintab1+wavelength*2
bcc b1
bne !+
@ -193,13 +194,13 @@ sin16s_gen: {
iny
lda _1+1
sta (sintab),y
clc
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
lda x
clc
adc step

View File

@ -5337,14 +5337,14 @@ main: {
jmp b8
//SEG42 main::@8
b8:
//SEG43 [18] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG43 [18] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_2
lda st1
adc #<2
clc
adc #2
sta st1
lda st1+1
adc #>2
sta st1+1
bcc !+
inc st1+1
!:
//SEG44 [19] if((signed word*) main::st1#1<(const signed word[120]) main::sintab1#0+(const word) main::wavelength#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@1 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) -- pwsz1_lt_pwsc1_then_la1
lda st1+1
cmp #>sintab1+wavelength*2
@ -5673,14 +5673,14 @@ sin16s_gen: {
iny
lda _1+1
sta (sintab),y
//SEG143 [68] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG143 [68] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_2
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
//SEG144 [69] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) -- vduz1=vduz1_plus_vduz2
lda x
clc
@ -6677,22 +6677,22 @@ Uplift Scope [div32u16u] 4: zp ZP_DWORD:57 [ div32u16u::return#2 ] 4: zp ZP_WORD
Uplift Scope [print_sword] 9.58: zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
Uplift Scope [print_word]
Uplifting [mul16u] best 25117 combination zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_WORD:101 [ mul16u::b#0 ] zp ZP_DWORD:103 [ mul16u::return#2 ]
Uplifting [print_str] best 25117 combination zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ]
Uplifting [divr16u] best 24927 combination zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:118 [ divr16u::return#2 ] zp ZP_WORD:122 [ divr16u::return#3 ] zp ZP_WORD:44 [ divr16u::divisor#6 ]
Uplifting [] best 24927 combination zp ZP_WORD:10 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ] zp ZP_WORD:132 [ rem16u#1 ]
Uplifting [sin16s] best 24927 combination zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:65 [ sin16s::return#0 ] zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:69 [ sin16s::$6 ] zp ZP_WORD:77 [ sin16s::x2#0 ] zp ZP_WORD:85 [ sin16s::x3_6#0 ] zp ZP_WORD:91 [ sin16s::x4#0 ] zp ZP_WORD:95 [ sin16s::x5#0 ] zp ZP_WORD:97 [ sin16s::x5_128#0 ] zp ZP_WORD:81 [ sin16s::x3#0 ] zp ZP_WORD:99 [ sin16s::usinx#1 ] zp ZP_WORD:73 [ sin16s::x1#0 ] zp ZP_WORD:87 [ sin16s::usinx#0 ] zp ZP_BYTE:22 [ sin16s::isUpper#2 ]
Uplifting [mulu16_sel] best 24911 combination zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:75 [ mulu16_sel::return#0 ] zp ZP_WORD:79 [ mulu16_sel::return#1 ] zp ZP_WORD:83 [ mulu16_sel::return#2 ] zp ZP_WORD:89 [ mulu16_sel::return#10 ] zp ZP_WORD:93 [ mulu16_sel::return#11 ] zp ZP_DWORD:107 [ mulu16_sel::$0 ] zp ZP_DWORD:111 [ mulu16_sel::$1 ] zp ZP_WORD:115 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ]
Uplifting [sin16s_gen] best 24911 combination zp ZP_WORD:67 [ sin16s_gen::$1 ] zp ZP_WORD:20 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:14 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:18 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:61 [ sin16s_gen::step#0 ]
Uplifting [print_cls] best 24911 combination zp ZP_WORD:12 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [main] best 24911 combination zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:53 [ main::sw#0 ]
Uplifting [print_byte] best 24899 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [print_char] best 24887 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ]
Uplifting [div32u16u] best 24887 combination zp ZP_DWORD:57 [ div32u16u::return#2 ] zp ZP_WORD:124 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:126 [ div32u16u::return#0 ] zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ]
Uplifting [print_sword] best 24887 combination zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
Uplifting [print_word] best 24887 combination
Uplifting [mul16u] best 25107 combination zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_WORD:101 [ mul16u::b#0 ] zp ZP_DWORD:103 [ mul16u::return#2 ]
Uplifting [print_str] best 25107 combination zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ]
Uplifting [divr16u] best 24917 combination zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:118 [ divr16u::return#2 ] zp ZP_WORD:122 [ divr16u::return#3 ] zp ZP_WORD:44 [ divr16u::divisor#6 ]
Uplifting [] best 24917 combination zp ZP_WORD:10 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ] zp ZP_WORD:132 [ rem16u#1 ]
Uplifting [sin16s] best 24917 combination zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:65 [ sin16s::return#0 ] zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:69 [ sin16s::$6 ] zp ZP_WORD:77 [ sin16s::x2#0 ] zp ZP_WORD:85 [ sin16s::x3_6#0 ] zp ZP_WORD:91 [ sin16s::x4#0 ] zp ZP_WORD:95 [ sin16s::x5#0 ] zp ZP_WORD:97 [ sin16s::x5_128#0 ] zp ZP_WORD:81 [ sin16s::x3#0 ] zp ZP_WORD:99 [ sin16s::usinx#1 ] zp ZP_WORD:73 [ sin16s::x1#0 ] zp ZP_WORD:87 [ sin16s::usinx#0 ] zp ZP_BYTE:22 [ sin16s::isUpper#2 ]
Uplifting [mulu16_sel] best 24901 combination zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:75 [ mulu16_sel::return#0 ] zp ZP_WORD:79 [ mulu16_sel::return#1 ] zp ZP_WORD:83 [ mulu16_sel::return#2 ] zp ZP_WORD:89 [ mulu16_sel::return#10 ] zp ZP_WORD:93 [ mulu16_sel::return#11 ] zp ZP_DWORD:107 [ mulu16_sel::$0 ] zp ZP_DWORD:111 [ mulu16_sel::$1 ] zp ZP_WORD:115 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ]
Uplifting [sin16s_gen] best 24901 combination zp ZP_WORD:67 [ sin16s_gen::$1 ] zp ZP_WORD:20 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:14 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:18 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:61 [ sin16s_gen::step#0 ]
Uplifting [print_cls] best 24901 combination zp ZP_WORD:12 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [main] best 24901 combination zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:53 [ main::sw#0 ]
Uplifting [print_byte] best 24889 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [print_char] best 24877 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ]
Uplifting [div32u16u] best 24877 combination zp ZP_DWORD:57 [ div32u16u::return#2 ] zp ZP_WORD:124 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:126 [ div32u16u::return#0 ] zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ]
Uplifting [print_sword] best 24877 combination zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
Uplifting [print_word] best 24877 combination
Attempting to uplift remaining variables inzp ZP_BYTE:22 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 24887 combination zp ZP_BYTE:22 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 24877 combination zp ZP_BYTE:22 [ sin16s::isUpper#2 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:99 [ sin16s::usinx#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:81 [ sin16s::x3#0 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:132 [ rem16u#1 ] ] - score: 2
@ -6862,14 +6862,14 @@ main: {
jmp b8
//SEG42 main::@8
b8:
//SEG43 [18] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG43 [18] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_2
lda st1
adc #<2
clc
adc #2
sta st1
lda st1+1
adc #>2
sta st1+1
bcc !+
inc st1+1
!:
//SEG44 [19] if((signed word*) main::st1#1<(const signed word[120]) main::sintab1#0+(const word) main::wavelength#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@1 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) -- pwsz1_lt_pwsc1_then_la1
lda st1+1
cmp #>sintab1+wavelength*2
@ -7168,14 +7168,14 @@ sin16s_gen: {
iny
lda _1+1
sta (sintab),y
//SEG143 [68] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG143 [68] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_2
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
//SEG144 [69] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) -- vduz1=vduz1_plus_vduz2
lda x
clc
@ -7881,7 +7881,6 @@ Removing instruction jmp b6
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda sw+1
Removing instruction lda st1+1
Removing instruction ldy #0
Removing instruction lda #>0
Removing instruction lda #0
@ -8296,7 +8295,7 @@ reg byte a [ divr16u::$2 ]
FINAL ASSEMBLER
Score: 20907
Score: 20927
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -8386,15 +8385,16 @@ main: {
sta print_str.str+1
jsr print_str
//SEG42 main::@8
//SEG43 [18] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG43 [18] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_2
lda st1
adc #<2
clc
adc #2
sta st1
lda st1+1
adc #>2
sta st1+1
bcc !+
inc st1+1
!:
//SEG44 [19] if((signed word*) main::st1#1<(const signed word[120]) main::sintab1#0+(const word) main::wavelength#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@1 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) -- pwsz1_lt_pwsc1_then_la1
lda st1+1
cmp #>sintab1+wavelength*2
bcc b1
bne !+
@ -8641,14 +8641,14 @@ sin16s_gen: {
iny
lda _1+1
sta (sintab),y
//SEG143 [68] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG143 [68] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_2
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
//SEG144 [69] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) -- vduz1=vduz1_plus_vduz2
lda x
clc

View File

@ -54,20 +54,20 @@ main: {
lda #>str
sta print_str.str+1
jsr print_str
clc
lda st1
adc #<2
sta st1
lda st1+1
adc #>2
sta st1+1
clc
adc #2
sta st1
bcc !+
inc st1+1
!:
lda st2
adc #<2
clc
adc #2
sta st2
lda st2+1
adc #>2
sta st2+1
bcc !+
inc st2+1
!:
inx
cpx #$78
bne b1
@ -218,13 +218,13 @@ sin16s_genb: {
iny
lda _2+1
sta (sintab),y
clc
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
lda x
clc
adc step
@ -603,13 +603,13 @@ sin16s_gen: {
iny
lda _1+1
sta (sintab),y
clc
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
lda x
clc
adc step

View File

@ -6633,22 +6633,22 @@ main: {
jmp b9
//SEG50 main::@9
b9:
//SEG51 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG51 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_2
lda st1
adc #<2
sta st1
lda st1+1
adc #>2
sta st1+1
//SEG52 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
adc #2
sta st1
bcc !+
inc st1+1
!:
//SEG52 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_2
lda st2
adc #<2
clc
adc #2
sta st2
lda st2+1
adc #>2
sta st2+1
bcc !+
inc st2+1
!:
//SEG53 [22] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::st1#1 main::st2#1 print_char_cursor#2 main::i#1 ] ( main:2 [ main::st1#1 main::st2#1 print_char_cursor#2 main::i#1 ] ) -- vbuz1=_inc_vbuz1
inc i
//SEG54 [23] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 120) goto main::@1 [ main::st1#1 main::st2#1 print_char_cursor#2 main::i#1 ] ( main:2 [ main::st1#1 main::st2#1 print_char_cursor#2 main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
@ -6985,14 +6985,14 @@ sin16s_genb: {
iny
lda _2+1
sta (sintab),y
//SEG155 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG155 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ) -- pwsz1=pwsz1_plus_2
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
//SEG156 [73] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) -- vduz1=vduz1_plus_vduz2
lda x
clc
@ -7829,14 +7829,14 @@ sin16s_gen: {
iny
lda _1+1
sta (sintab),y
//SEG361 [177] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG361 [177] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_2
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
//SEG362 [178] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) -- vduz1=vduz1_plus_vduz2
lda x
clc
@ -8580,28 +8580,28 @@ Uplift Scope [print_char] 14: zp ZP_BYTE:12 [ print_char::ch#3 print_char::ch#1
Uplift Scope [print_sword] 9.58: zp ZP_WORD:9 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
Uplift Scope [print_word]
Uplifting [mul16u] best 28238 combination zp ZP_DWORD:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:41 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_WORD:119 [ mul16u::b#0 ] zp ZP_DWORD:121 [ mul16u::return#2 ]
Uplifting [print_str] best 28238 combination zp ZP_WORD:7 [ print_str::str#3 print_str::str#5 print_str::str#0 ]
Uplifting [divr16u] best 28048 combination zp ZP_WORD:53 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:57 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:55 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] zp ZP_WORD:51 [ divr16u::divisor#6 divr16u::divisor#0 divr16u::divisor#1 ] zp ZP_WORD:136 [ divr16u::return#2 ] zp ZP_WORD:140 [ divr16u::return#3 ]
Uplifting [] best 28048 combination zp ZP_WORD:13 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ] zp ZP_WORD:150 [ rem16u#1 ]
Uplifting [mulu16_sel] best 28017 combination zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] zp ZP_WORD:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] zp ZP_WORD:93 [ mulu16_sel::return#18 ] zp ZP_WORD:97 [ mulu16_sel::return#19 ] zp ZP_WORD:101 [ mulu16_sel::return#20 ] zp ZP_WORD:107 [ mulu16_sel::return#10 ] zp ZP_WORD:111 [ mulu16_sel::return#11 ] zp ZP_DWORD:125 [ mulu16_sel::$0 ] zp ZP_DWORD:129 [ mulu16_sel::$1 ] zp ZP_WORD:170 [ mulu16_sel::return#0 ] zp ZP_WORD:174 [ mulu16_sel::return#1 ] zp ZP_WORD:178 [ mulu16_sel::return#14 ] zp ZP_WORD:184 [ mulu16_sel::return#15 ] zp ZP_WORD:188 [ mulu16_sel::return#16 ] zp ZP_WORD:133 [ mulu16_sel::return#17 ] reg byte x [ mulu16_sel::select#10 ]
Uplifting [sin16s] best 28017 combination zp ZP_DWORD:69 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:160 [ sin16s::return#0 ] zp ZP_WORD:73 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:164 [ sin16s::$6 ] zp ZP_WORD:172 [ sin16s::x2#0 ] zp ZP_WORD:180 [ sin16s::x3_6#0 ] zp ZP_WORD:186 [ sin16s::x4#0 ] zp ZP_WORD:190 [ sin16s::x5#0 ] zp ZP_WORD:192 [ sin16s::x5_128#0 ] zp ZP_WORD:176 [ sin16s::x3#0 ] zp ZP_WORD:194 [ sin16s::usinx#1 ] zp ZP_WORD:168 [ sin16s::x1#0 ] zp ZP_WORD:182 [ sin16s::usinx#0 ] zp ZP_BYTE:68 [ sin16s::isUpper#2 ]
Uplifting [sin16sb] best 28017 combination zp ZP_WORD:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] zp ZP_WORD:87 [ sin16sb::return#0 ] zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] zp ZP_WORD:95 [ sin16sb::x2#0 ] zp ZP_WORD:103 [ sin16sb::x3_6#0 ] zp ZP_WORD:109 [ sin16sb::x4#0 ] zp ZP_WORD:113 [ sin16sb::x5#0 ] zp ZP_WORD:115 [ sin16sb::x5_128#0 ] zp ZP_WORD:99 [ sin16sb::x3#0 ] zp ZP_WORD:117 [ sin16sb::usinx#1 ] zp ZP_WORD:91 [ sin16sb::x1#0 ] zp ZP_WORD:105 [ sin16sb::usinx#0 ] zp ZP_BYTE:25 [ sin16sb::isUpper#2 ]
Uplifting [sin16s_gen] best 28017 combination zp ZP_WORD:162 [ sin16s_gen::$1 ] zp ZP_WORD:66 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:60 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:64 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:156 [ sin16s_gen::step#0 ]
Uplifting [sin16s_genb] best 28017 combination zp ZP_WORD:89 [ sin16s_genb::$2 ] zp ZP_WORD:23 [ sin16s_genb::i#2 sin16s_genb::i#1 ] zp ZP_DWORD:17 [ sin16s_genb::x#2 sin16s_genb::x#1 ] zp ZP_WORD:21 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] zp ZP_DWORD:83 [ sin16s_genb::step#0 ]
Uplifting [main] best 27927 combination reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:4 [ main::st2#2 main::st2#1 ] zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:75 [ main::sw#0 ]
Uplifting [print_cls] best 27927 combination zp ZP_WORD:15 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_byte] best 27919 combination zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [div32u16u] best 27919 combination zp ZP_DWORD:79 [ div32u16u::return#3 ] zp ZP_WORD:142 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:152 [ div32u16u::return#2 ] zp ZP_DWORD:144 [ div32u16u::return#0 ] zp ZP_DWORD:45 [ div32u16u::dividend#2 ] zp ZP_WORD:49 [ div32u16u::divisor#2 ] zp ZP_WORD:138 [ div32u16u::quotient_hi#0 ]
Uplifting [print_char] best 27907 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ]
Uplifting [print_sword] best 27907 combination zp ZP_WORD:9 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
Uplifting [print_word] best 27907 combination
Uplifting [mul16u] best 28218 combination zp ZP_DWORD:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:41 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_WORD:119 [ mul16u::b#0 ] zp ZP_DWORD:121 [ mul16u::return#2 ]
Uplifting [print_str] best 28218 combination zp ZP_WORD:7 [ print_str::str#3 print_str::str#5 print_str::str#0 ]
Uplifting [divr16u] best 28028 combination zp ZP_WORD:53 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:57 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:55 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] zp ZP_WORD:51 [ divr16u::divisor#6 divr16u::divisor#0 divr16u::divisor#1 ] zp ZP_WORD:136 [ divr16u::return#2 ] zp ZP_WORD:140 [ divr16u::return#3 ]
Uplifting [] best 28028 combination zp ZP_WORD:13 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ] zp ZP_WORD:150 [ rem16u#1 ]
Uplifting [mulu16_sel] best 27997 combination zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] zp ZP_WORD:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] zp ZP_WORD:93 [ mulu16_sel::return#18 ] zp ZP_WORD:97 [ mulu16_sel::return#19 ] zp ZP_WORD:101 [ mulu16_sel::return#20 ] zp ZP_WORD:107 [ mulu16_sel::return#10 ] zp ZP_WORD:111 [ mulu16_sel::return#11 ] zp ZP_DWORD:125 [ mulu16_sel::$0 ] zp ZP_DWORD:129 [ mulu16_sel::$1 ] zp ZP_WORD:170 [ mulu16_sel::return#0 ] zp ZP_WORD:174 [ mulu16_sel::return#1 ] zp ZP_WORD:178 [ mulu16_sel::return#14 ] zp ZP_WORD:184 [ mulu16_sel::return#15 ] zp ZP_WORD:188 [ mulu16_sel::return#16 ] zp ZP_WORD:133 [ mulu16_sel::return#17 ] reg byte x [ mulu16_sel::select#10 ]
Uplifting [sin16s] best 27997 combination zp ZP_DWORD:69 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:160 [ sin16s::return#0 ] zp ZP_WORD:73 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:164 [ sin16s::$6 ] zp ZP_WORD:172 [ sin16s::x2#0 ] zp ZP_WORD:180 [ sin16s::x3_6#0 ] zp ZP_WORD:186 [ sin16s::x4#0 ] zp ZP_WORD:190 [ sin16s::x5#0 ] zp ZP_WORD:192 [ sin16s::x5_128#0 ] zp ZP_WORD:176 [ sin16s::x3#0 ] zp ZP_WORD:194 [ sin16s::usinx#1 ] zp ZP_WORD:168 [ sin16s::x1#0 ] zp ZP_WORD:182 [ sin16s::usinx#0 ] zp ZP_BYTE:68 [ sin16s::isUpper#2 ]
Uplifting [sin16sb] best 27997 combination zp ZP_WORD:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] zp ZP_WORD:87 [ sin16sb::return#0 ] zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] zp ZP_WORD:95 [ sin16sb::x2#0 ] zp ZP_WORD:103 [ sin16sb::x3_6#0 ] zp ZP_WORD:109 [ sin16sb::x4#0 ] zp ZP_WORD:113 [ sin16sb::x5#0 ] zp ZP_WORD:115 [ sin16sb::x5_128#0 ] zp ZP_WORD:99 [ sin16sb::x3#0 ] zp ZP_WORD:117 [ sin16sb::usinx#1 ] zp ZP_WORD:91 [ sin16sb::x1#0 ] zp ZP_WORD:105 [ sin16sb::usinx#0 ] zp ZP_BYTE:25 [ sin16sb::isUpper#2 ]
Uplifting [sin16s_gen] best 27997 combination zp ZP_WORD:162 [ sin16s_gen::$1 ] zp ZP_WORD:66 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:60 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:64 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:156 [ sin16s_gen::step#0 ]
Uplifting [sin16s_genb] best 27997 combination zp ZP_WORD:89 [ sin16s_genb::$2 ] zp ZP_WORD:23 [ sin16s_genb::i#2 sin16s_genb::i#1 ] zp ZP_DWORD:17 [ sin16s_genb::x#2 sin16s_genb::x#1 ] zp ZP_WORD:21 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] zp ZP_DWORD:83 [ sin16s_genb::step#0 ]
Uplifting [main] best 27907 combination reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:4 [ main::st2#2 main::st2#1 ] zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:75 [ main::sw#0 ]
Uplifting [print_cls] best 27907 combination zp ZP_WORD:15 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_byte] best 27899 combination zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [div32u16u] best 27899 combination zp ZP_DWORD:79 [ div32u16u::return#3 ] zp ZP_WORD:142 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:152 [ div32u16u::return#2 ] zp ZP_DWORD:144 [ div32u16u::return#0 ] zp ZP_DWORD:45 [ div32u16u::dividend#2 ] zp ZP_WORD:49 [ div32u16u::divisor#2 ] zp ZP_WORD:138 [ div32u16u::quotient_hi#0 ]
Uplifting [print_char] best 27887 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ]
Uplifting [print_sword] best 27887 combination zp ZP_WORD:9 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
Uplifting [print_word] best 27887 combination
Attempting to uplift remaining variables inzp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Uplifting [print_byte] best 27907 combination zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Uplifting [print_byte] best 27887 combination zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ sin16sb::isUpper#2 ]
Uplifting [sin16sb] best 27907 combination zp ZP_BYTE:25 [ sin16sb::isUpper#2 ]
Uplifting [sin16sb] best 27887 combination zp ZP_BYTE:25 [ sin16sb::isUpper#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:68 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 27907 combination zp ZP_BYTE:68 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 27887 combination zp ZP_BYTE:68 [ sin16s::isUpper#2 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] ] with [ zp ZP_WORD:117 [ sin16sb::usinx#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] ] with [ zp ZP_WORD:99 [ sin16sb::x3#0 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 ] ] with [ zp ZP_WORD:176 [ sin16s::x3#0 ] ] - score: 2
@ -8824,22 +8824,22 @@ main: {
jmp b9
//SEG50 main::@9
b9:
//SEG51 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG51 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_2
lda st1
adc #<2
sta st1
lda st1+1
adc #>2
sta st1+1
//SEG52 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
adc #2
sta st1
bcc !+
inc st1+1
!:
//SEG52 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_2
lda st2
adc #<2
clc
adc #2
sta st2
lda st2+1
adc #>2
sta st2+1
bcc !+
inc st2+1
!:
//SEG53 [22] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::st1#1 main::st2#1 print_char_cursor#2 main::i#1 ] ( main:2 [ main::st1#1 main::st2#1 print_char_cursor#2 main::i#1 ] ) -- vbuxx=_inc_vbuxx
inx
//SEG54 [23] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 120) goto main::@1 [ main::st1#1 main::st2#1 print_char_cursor#2 main::i#1 ] ( main:2 [ main::st1#1 main::st2#1 print_char_cursor#2 main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
@ -9146,14 +9146,14 @@ sin16s_genb: {
iny
lda _2+1
sta (sintab),y
//SEG155 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG155 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ) -- pwsz1=pwsz1_plus_2
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
//SEG156 [73] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) -- vduz1=vduz1_plus_vduz2
lda x
clc
@ -9853,14 +9853,14 @@ sin16s_gen: {
iny
lda _1+1
sta (sintab),y
//SEG361 [177] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG361 [177] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_2
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
//SEG362 [178] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) -- vduz1=vduz1_plus_vduz2
lda x
clc
@ -10819,7 +10819,7 @@ reg byte a [ divr16u::$2 ]
FINAL ASSEMBLER
Score: 23251
Score: 23231
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -10929,22 +10929,22 @@ main: {
sta print_str.str+1
jsr print_str
//SEG50 main::@9
//SEG51 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG51 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_2
lda st1
adc #<2
sta st1
lda st1+1
adc #>2
sta st1+1
//SEG52 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
adc #2
sta st1
bcc !+
inc st1+1
!:
//SEG52 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ) -- pwsz1=pwsz1_plus_2
lda st2
adc #<2
clc
adc #2
sta st2
lda st2+1
adc #>2
sta st2+1
bcc !+
inc st2+1
!:
//SEG53 [22] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::st1#1 main::st2#1 print_char_cursor#2 main::i#1 ] ( main:2 [ main::st1#1 main::st2#1 print_char_cursor#2 main::i#1 ] ) -- vbuxx=_inc_vbuxx
inx
//SEG54 [23] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 120) goto main::@1 [ main::st1#1 main::st2#1 print_char_cursor#2 main::i#1 ] ( main:2 [ main::st1#1 main::st2#1 print_char_cursor#2 main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
@ -11201,14 +11201,14 @@ sin16s_genb: {
iny
lda _2+1
sta (sintab),y
//SEG155 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG155 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ) -- pwsz1=pwsz1_plus_2
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
//SEG156 [73] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) -- vduz1=vduz1_plus_vduz2
lda x
clc
@ -11818,14 +11818,14 @@ sin16s_gen: {
iny
lda _1+1
sta (sintab),y
//SEG361 [177] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG361 [177] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_2
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
//SEG362 [178] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) -- vduz1=vduz1_plus_vduz2
lda x
clc

View File

@ -195,13 +195,13 @@ sin16s_gen: {
iny
lda _1+1
sta (sintab),y
clc
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
lda x
clc
adc step

View File

@ -7100,14 +7100,14 @@ sin16s_gen: {
iny
lda _1+1
sta (sintab),y
//SEG139 [70] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG139 [70] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_2
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
//SEG140 [71] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) -- vduz1=vduz1_plus_vduz2
lda x
clc
@ -8763,62 +8763,62 @@ Uplift Scope [print_sbyte] 9.25: zp ZP_BYTE:5 [ print_sbyte::b#3 print_sbyte::b#
Uplift Scope [print_byte] 4: zp ZP_BYTE:80 [ print_byte::$0 ] 4: zp ZP_BYTE:81 [ print_byte::$2 ]
Uplift Scope [div16u] 4: zp ZP_WORD:159 [ div16u::return#2 ] 1.33: zp ZP_WORD:191 [ div16u::return#0 ]
Uplifting [mul8u] best 35381 combination zp ZP_WORD:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:67 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] reg byte a [ mul8u::b#0 ] zp ZP_WORD:181 [ mul8u::return#2 ]
Uplifting [mul16u] best 34981 combination zp ZP_DWORD:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:37 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_WORD:126 [ mul16u::b#0 ] zp ZP_DWORD:128 [ mul16u::return#2 ]
Uplifting [print_str] best 34981 combination zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 ]
Uplifting [divr16u] best 34791 combination zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] zp ZP_WORD:143 [ divr16u::return#3 ] zp ZP_WORD:147 [ divr16u::return#4 ] zp ZP_WORD:189 [ divr16u::return#2 ] zp ZP_WORD:41 [ divr16u::divisor#7 ]
Uplifting [] best 34791 combination zp ZP_WORD:7 [ print_char_cursor#27 print_char_cursor#37 print_char_cursor#44 print_char_cursor#41 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] zp ZP_WORD:157 [ rem16u#1 ]
Uplifting [main] best 34621 combination zp ZP_WORD:70 [ main::$3 ] zp ZP_WORD:72 [ main::$4 ] zp ZP_WORD:74 [ main::$5 ] zp ZP_WORD:76 [ main::sw#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$6 ] zp ZP_BYTE:79 [ main::sd#0 ] zp ZP_BYTE:69 [ main::sb#0 ]
Uplifting [sin8s] best 34516 combination zp ZP_WORD:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp ZP_WORD:165 [ sin8s::$6 ] zp ZP_BYTE:169 [ sin8s::x2#0 ] zp ZP_BYTE:173 [ sin8s::x3_6#0 ] zp ZP_BYTE:176 [ sin8s::x4#0 ] zp ZP_BYTE:178 [ sin8s::x5#0 ] zp ZP_BYTE:179 [ sin8s::x5_128#0 ] zp ZP_BYTE:171 [ sin8s::x3#0 ] zp ZP_BYTE:167 [ sin8s::x1#0 ] zp ZP_BYTE:174 [ sin8s::usinx#0 ] zp ZP_BYTE:56 [ sin8s::isUpper#10 ]
Uplifting [mul8u] best 35376 combination zp ZP_WORD:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:67 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] reg byte a [ mul8u::b#0 ] zp ZP_WORD:181 [ mul8u::return#2 ]
Uplifting [mul16u] best 34976 combination zp ZP_DWORD:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:37 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_WORD:126 [ mul16u::b#0 ] zp ZP_DWORD:128 [ mul16u::return#2 ]
Uplifting [print_str] best 34976 combination zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 ]
Uplifting [divr16u] best 34786 combination zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] zp ZP_WORD:143 [ divr16u::return#3 ] zp ZP_WORD:147 [ divr16u::return#4 ] zp ZP_WORD:189 [ divr16u::return#2 ] zp ZP_WORD:41 [ divr16u::divisor#7 ]
Uplifting [] best 34786 combination zp ZP_WORD:7 [ print_char_cursor#27 print_char_cursor#37 print_char_cursor#44 print_char_cursor#41 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] zp ZP_WORD:157 [ rem16u#1 ]
Uplifting [main] best 34616 combination zp ZP_WORD:70 [ main::$3 ] zp ZP_WORD:72 [ main::$4 ] zp ZP_WORD:74 [ main::$5 ] zp ZP_WORD:76 [ main::sw#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$6 ] zp ZP_BYTE:79 [ main::sd#0 ] zp ZP_BYTE:69 [ main::sb#0 ]
Uplifting [sin8s] best 34511 combination zp ZP_WORD:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp ZP_WORD:165 [ sin8s::$6 ] zp ZP_BYTE:169 [ sin8s::x2#0 ] zp ZP_BYTE:173 [ sin8s::x3_6#0 ] zp ZP_BYTE:176 [ sin8s::x4#0 ] zp ZP_BYTE:178 [ sin8s::x5#0 ] zp ZP_BYTE:179 [ sin8s::x5_128#0 ] zp ZP_BYTE:171 [ sin8s::x3#0 ] zp ZP_BYTE:167 [ sin8s::x1#0 ] zp ZP_BYTE:174 [ sin8s::usinx#0 ] zp ZP_BYTE:56 [ sin8s::isUpper#10 ]
Limited combination testing to 100 combinations of 5308416 possible.
Uplifting [sin16s] best 34516 combination zp ZP_DWORD:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:90 [ sin16s::return#0 ] zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:94 [ sin16s::$6 ] zp ZP_WORD:102 [ sin16s::x2#0 ] zp ZP_WORD:110 [ sin16s::x3_6#0 ] zp ZP_WORD:116 [ sin16s::x4#0 ] zp ZP_WORD:120 [ sin16s::x5#0 ] zp ZP_WORD:122 [ sin16s::x5_128#0 ] zp ZP_WORD:106 [ sin16s::x3#0 ] zp ZP_WORD:124 [ sin16s::usinx#1 ] zp ZP_WORD:98 [ sin16s::x1#0 ] zp ZP_WORD:112 [ sin16s::usinx#0 ] zp ZP_BYTE:19 [ sin16s::isUpper#2 ]
Uplifting [mulu16_sel] best 34500 combination zp ZP_WORD:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:100 [ mulu16_sel::return#0 ] zp ZP_WORD:104 [ mulu16_sel::return#1 ] zp ZP_WORD:108 [ mulu16_sel::return#2 ] zp ZP_WORD:114 [ mulu16_sel::return#10 ] zp ZP_WORD:118 [ mulu16_sel::return#11 ] zp ZP_DWORD:132 [ mulu16_sel::$0 ] zp ZP_DWORD:136 [ mulu16_sel::$1 ] zp ZP_WORD:140 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ]
Uplifting [mulu8_sel] best 34454 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp ZP_BYTE:172 [ mulu8_sel::return#2 ] zp ZP_BYTE:175 [ mulu8_sel::return#10 ] zp ZP_BYTE:177 [ mulu8_sel::return#11 ] zp ZP_WORD:183 [ mulu8_sel::$0 ] zp ZP_WORD:185 [ mulu8_sel::$1 ] zp ZP_BYTE:187 [ mulu8_sel::return#12 ] zp ZP_BYTE:63 [ mulu8_sel::select#5 ]
Uplifting [sin16s] best 34511 combination zp ZP_DWORD:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:90 [ sin16s::return#0 ] zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:94 [ sin16s::$6 ] zp ZP_WORD:102 [ sin16s::x2#0 ] zp ZP_WORD:110 [ sin16s::x3_6#0 ] zp ZP_WORD:116 [ sin16s::x4#0 ] zp ZP_WORD:120 [ sin16s::x5#0 ] zp ZP_WORD:122 [ sin16s::x5_128#0 ] zp ZP_WORD:106 [ sin16s::x3#0 ] zp ZP_WORD:124 [ sin16s::usinx#1 ] zp ZP_WORD:98 [ sin16s::x1#0 ] zp ZP_WORD:112 [ sin16s::usinx#0 ] zp ZP_BYTE:19 [ sin16s::isUpper#2 ]
Uplifting [mulu16_sel] best 34495 combination zp ZP_WORD:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:100 [ mulu16_sel::return#0 ] zp ZP_WORD:104 [ mulu16_sel::return#1 ] zp ZP_WORD:108 [ mulu16_sel::return#2 ] zp ZP_WORD:114 [ mulu16_sel::return#10 ] zp ZP_WORD:118 [ mulu16_sel::return#11 ] zp ZP_DWORD:132 [ mulu16_sel::$0 ] zp ZP_DWORD:136 [ mulu16_sel::$1 ] zp ZP_WORD:140 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ]
Uplifting [mulu8_sel] best 34449 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp ZP_BYTE:172 [ mulu8_sel::return#2 ] zp ZP_BYTE:175 [ mulu8_sel::return#10 ] zp ZP_BYTE:177 [ mulu8_sel::return#11 ] zp ZP_WORD:183 [ mulu8_sel::$0 ] zp ZP_WORD:185 [ mulu8_sel::$1 ] zp ZP_BYTE:187 [ mulu8_sel::return#12 ] zp ZP_BYTE:63 [ mulu8_sel::select#5 ]
Limited combination testing to 100 combinations of 196608 possible.
Uplifting [sin16s_gen] best 34454 combination zp ZP_WORD:92 [ sin16s_gen::$1 ] zp ZP_WORD:17 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:11 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:15 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:86 [ sin16s_gen::step#0 ]
Uplifting [sin8s_gen] best 34394 combination reg byte a [ sin8s_gen::$1 ] zp ZP_WORD:54 [ sin8s_gen::i#2 sin8s_gen::i#1 ] zp ZP_WORD:50 [ sin8s_gen::x#2 sin8s_gen::x#1 ] zp ZP_WORD:52 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] zp ZP_WORD:161 [ sin8s_gen::step#0 ]
Uplifting [print_cls] best 34394 combination zp ZP_WORD:9 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_char] best 34382 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ]
Uplifting [div32u16u] best 34382 combination zp ZP_DWORD:82 [ div32u16u::return#2 ] zp ZP_WORD:149 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:151 [ div32u16u::return#0 ] zp ZP_WORD:145 [ div32u16u::quotient_hi#0 ]
Uplifting [print_sbyte] best 34382 combination zp ZP_BYTE:5 [ print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#0 ]
Uplifting [print_byte] best 34374 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [div16u] best 34374 combination zp ZP_WORD:159 [ div16u::return#2 ] zp ZP_WORD:191 [ div16u::return#0 ]
Uplifting [sin16s_gen] best 34449 combination zp ZP_WORD:92 [ sin16s_gen::$1 ] zp ZP_WORD:17 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:11 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:15 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:86 [ sin16s_gen::step#0 ]
Uplifting [sin8s_gen] best 34389 combination reg byte a [ sin8s_gen::$1 ] zp ZP_WORD:54 [ sin8s_gen::i#2 sin8s_gen::i#1 ] zp ZP_WORD:50 [ sin8s_gen::x#2 sin8s_gen::x#1 ] zp ZP_WORD:52 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] zp ZP_WORD:161 [ sin8s_gen::step#0 ]
Uplifting [print_cls] best 34389 combination zp ZP_WORD:9 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_char] best 34377 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ]
Uplifting [div32u16u] best 34377 combination zp ZP_DWORD:82 [ div32u16u::return#2 ] zp ZP_WORD:149 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:151 [ div32u16u::return#0 ] zp ZP_WORD:145 [ div32u16u::quotient_hi#0 ]
Uplifting [print_sbyte] best 34377 combination zp ZP_BYTE:5 [ print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#0 ]
Uplifting [print_byte] best 34369 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [div16u] best 34369 combination zp ZP_WORD:159 [ div16u::return#2 ] zp ZP_WORD:191 [ div16u::return#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#0 ]
Uplifting [print_sbyte] best 34374 combination zp ZP_BYTE:5 [ print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#0 ]
Uplifting [print_sbyte] best 34369 combination zp ZP_BYTE:5 [ print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:79 [ main::sd#0 ]
Uplifting [main] best 34374 combination zp ZP_BYTE:79 [ main::sd#0 ]
Uplifting [main] best 34369 combination zp ZP_BYTE:79 [ main::sd#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:169 [ sin8s::x2#0 ]
Uplifting [sin8s] best 34370 combination reg byte a [ sin8s::x2#0 ]
Uplifting [sin8s] best 34365 combination reg byte a [ sin8s::x2#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:172 [ mulu8_sel::return#2 ]
Uplifting [mulu8_sel] best 34364 combination reg byte a [ mulu8_sel::return#2 ]
Uplifting [mulu8_sel] best 34359 combination reg byte a [ mulu8_sel::return#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:173 [ sin8s::x3_6#0 ]
Uplifting [sin8s] best 34360 combination reg byte a [ sin8s::x3_6#0 ]
Uplifting [sin8s] best 34355 combination reg byte a [ sin8s::x3_6#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:175 [ mulu8_sel::return#10 ]
Uplifting [mulu8_sel] best 34354 combination reg byte a [ mulu8_sel::return#10 ]
Uplifting [mulu8_sel] best 34349 combination reg byte a [ mulu8_sel::return#10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:176 [ sin8s::x4#0 ]
Uplifting [sin8s] best 34350 combination reg byte a [ sin8s::x4#0 ]
Uplifting [sin8s] best 34345 combination reg byte a [ sin8s::x4#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:177 [ mulu8_sel::return#11 ]
Uplifting [mulu8_sel] best 34344 combination reg byte a [ mulu8_sel::return#11 ]
Uplifting [mulu8_sel] best 34339 combination reg byte a [ mulu8_sel::return#11 ]
Attempting to uplift remaining variables inzp ZP_BYTE:178 [ sin8s::x5#0 ]
Uplifting [sin8s] best 34338 combination reg byte a [ sin8s::x5#0 ]
Uplifting [sin8s] best 34333 combination reg byte a [ sin8s::x5#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:179 [ sin8s::x5_128#0 ]
Uplifting [sin8s] best 34332 combination reg byte a [ sin8s::x5_128#0 ]
Uplifting [sin8s] best 34327 combination reg byte a [ sin8s::x5_128#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:69 [ main::sb#0 ]
Uplifting [main] best 34332 combination zp ZP_BYTE:69 [ main::sb#0 ]
Uplifting [main] best 34327 combination zp ZP_BYTE:69 [ main::sb#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:187 [ mulu8_sel::return#12 ]
Uplifting [mulu8_sel] best 34314 combination reg byte a [ mulu8_sel::return#12 ]
Uplifting [mulu8_sel] best 34309 combination reg byte a [ mulu8_sel::return#12 ]
Attempting to uplift remaining variables inzp ZP_BYTE:171 [ sin8s::x3#0 ]
Uplifting [sin8s] best 34314 combination zp ZP_BYTE:171 [ sin8s::x3#0 ]
Uplifting [sin8s] best 34309 combination zp ZP_BYTE:171 [ sin8s::x3#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:167 [ sin8s::x1#0 ]
Uplifting [sin8s] best 34314 combination zp ZP_BYTE:167 [ sin8s::x1#0 ]
Uplifting [sin8s] best 34309 combination zp ZP_BYTE:167 [ sin8s::x1#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:63 [ mulu8_sel::select#5 ]
Uplifting [mulu8_sel] best 34314 combination zp ZP_BYTE:63 [ mulu8_sel::select#5 ]
Uplifting [mulu8_sel] best 34309 combination zp ZP_BYTE:63 [ mulu8_sel::select#5 ]
Attempting to uplift remaining variables inzp ZP_BYTE:174 [ sin8s::usinx#0 ]
Uplifting [sin8s] best 34314 combination zp ZP_BYTE:174 [ sin8s::usinx#0 ]
Uplifting [sin8s] best 34309 combination zp ZP_BYTE:174 [ sin8s::usinx#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:19 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 34314 combination zp ZP_BYTE:19 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 34309 combination zp ZP_BYTE:19 [ sin16s::isUpper#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:56 [ sin8s::isUpper#10 ]
Uplifting [sin8s] best 34314 combination zp ZP_BYTE:56 [ sin8s::isUpper#10 ]
Uplifting [sin8s] best 34309 combination zp ZP_BYTE:56 [ sin8s::isUpper#10 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:124 [ sin16s::usinx#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:106 [ sin16s::x3#0 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:157 [ rem16u#1 ] ] - score: 2
@ -9316,14 +9316,14 @@ sin16s_gen: {
iny
lda _1+1
sta (sintab),y
//SEG139 [70] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG139 [70] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_2
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
//SEG140 [71] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) -- vduz1=vduz1_plus_vduz2
lda x
clc
@ -11157,7 +11157,7 @@ reg byte a [ mul8u::$1 ]
FINAL ASSEMBLER
Score: 28398
Score: 28393
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -11500,14 +11500,14 @@ sin16s_gen: {
iny
lda _1+1
sta (sintab),y
//SEG139 [70] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_vbuc1
clc
//SEG139 [70] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) -- pwsz1=pwsz1_plus_2
lda sintab
adc #<2
clc
adc #2
sta sintab
lda sintab+1
adc #>2
sta sintab+1
bcc !+
inc sintab+1
!:
//SEG140 [71] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:7 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) -- vduz1=vduz1_plus_vduz2
lda x
clc

View File

@ -76,9 +76,9 @@ test_16s: {
sta print_sword.w+1
jsr print_sword
jsr print_ln
lda #2
lda i
clc
adc i
adc #2
sta i
cmp #$c
beq !b1+
@ -537,9 +537,9 @@ test_16u: {
sta print_word.w+1
jsr print_word
jsr print_ln
lda #2
lda i
clc
adc i
adc #2
sta i
cmp #$c
bne b1

View File

@ -7143,10 +7143,10 @@ test_16s: {
jmp b11
//SEG88 test_16s::@11
b11:
//SEG89 [41] (byte) test_16s::i#1 ← (byte) test_16s::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ test_16s::i#1 print_line_cursor#1 ] ( main:2::test_16s:13 [ test_16s::i#1 print_line_cursor#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG89 [41] (byte) test_16s::i#1 ← (byte) test_16s::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ test_16s::i#1 print_line_cursor#1 ] ( main:2::test_16s:13 [ test_16s::i#1 print_line_cursor#1 ] ) -- vbuz1=vbuz1_plus_2
lda i
clc
adc i
adc #2
sta i
//SEG90 [42] if((byte) test_16s::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 12) goto test_16s::@1 [ test_16s::i#1 print_line_cursor#1 ] ( main:2::test_16s:13 [ test_16s::i#1 print_line_cursor#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda i
@ -8384,10 +8384,10 @@ test_16u: {
jmp b11
//SEG499 test_16u::@11
b11:
//SEG500 [242] (byte) test_16u::i#1 ← (byte) test_16u::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_line_cursor#1 test_16u::i#1 ] ( main:2::test_16u:9 [ print_line_cursor#1 test_16u::i#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG500 [242] (byte) test_16u::i#1 ← (byte) test_16u::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_line_cursor#1 test_16u::i#1 ] ( main:2::test_16u:9 [ print_line_cursor#1 test_16u::i#1 ] ) -- vbuz1=vbuz1_plus_2
lda i
clc
adc i
adc #2
sta i
//SEG501 [243] if((byte) test_16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 12) goto test_16u::@1 [ print_line_cursor#1 test_16u::i#1 ] ( main:2::test_16u:9 [ print_line_cursor#1 test_16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda i
@ -8641,7 +8641,6 @@ Statement [25] (byte*~) print_char_cursor#156 ← (byte*) print_line_cursor#1 [
Statement [29] (signed word) print_sword::w#2 ← (signed word) test_16s::divisor#0 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 print_sword::w#2 rem16s#3 print_char_cursor#126 ] ( main:2::test_16s:13 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 print_sword::w#2 rem16s#3 print_char_cursor#126 ] ) always clobbers reg byte a
Statement [33] (signed word) print_sword::w#3 ← (signed word) test_16s::res#0 [ test_16s::i#10 print_line_cursor#1 print_sword::w#3 rem16s#3 print_char_cursor#126 ] ( main:2::test_16s:13 [ test_16s::i#10 print_line_cursor#1 print_sword::w#3 rem16s#3 print_char_cursor#126 ] ) always clobbers reg byte a
Statement [37] (signed word) print_sword::w#4 ← (signed word) rem16s#3 [ test_16s::i#10 print_line_cursor#1 print_sword::w#4 print_char_cursor#126 ] ( main:2::test_16s:13 [ test_16s::i#10 print_line_cursor#1 print_sword::w#4 print_char_cursor#126 ] ) always clobbers reg byte a
Statement [41] (byte) test_16s::i#1 ← (byte) test_16s::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ test_16s::i#1 print_line_cursor#1 ] ( main:2::test_16s:13 [ test_16s::i#1 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [46] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#20 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#17 ] ( main:2::test_16s:13::print_ln:40 [ test_16s::i#10 print_line_cursor#1 print_char_cursor#17 ] main:2::test_8s:11::print_ln:156 [ test_8s::i#10 print_line_cursor#1 print_char_cursor#17 ] main:2::test_16u:9::print_ln:241 [ test_16u::i#10 print_line_cursor#1 print_char_cursor#17 ] main:2::test_8u:7::print_ln:269 [ test_8u::i#10 print_line_cursor#1 print_char_cursor#17 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ test_8s::i#10 test_8s::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:48 [ test_16u::i#10 test_16u::i#1 ]
@ -8738,7 +8737,6 @@ Statement [226] (byte*~) print_char_cursor#163 ← (byte*) print_line_cursor#1 [
Statement [230] (word) print_word::w#2 ← (word) test_16u::divisor#0 [ print_line_cursor#1 print_char_cursor#126 print_word::w#2 rem16u#1 test_16u::i#10 test_16u::res#0 ] ( main:2::test_16u:9 [ print_line_cursor#1 print_char_cursor#126 print_word::w#2 rem16u#1 test_16u::i#10 test_16u::res#0 ] ) always clobbers reg byte a
Statement [234] (word) print_word::w#3 ← (word) test_16u::res#0 [ print_line_cursor#1 print_char_cursor#126 print_word::w#3 rem16u#1 test_16u::i#10 ] ( main:2::test_16u:9 [ print_line_cursor#1 print_char_cursor#126 print_word::w#3 rem16u#1 test_16u::i#10 ] ) always clobbers reg byte a
Statement [238] (word) print_word::w#4 ← (word) rem16u#1 [ print_line_cursor#1 print_char_cursor#126 print_word::w#4 test_16u::i#10 ] ( main:2::test_16u:9 [ print_line_cursor#1 print_char_cursor#126 print_word::w#4 test_16u::i#10 ] ) always clobbers reg byte a
Statement [242] (byte) test_16u::i#1 ← (byte) test_16u::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_line_cursor#1 test_16u::i#1 ] ( main:2::test_16u:9 [ print_line_cursor#1 test_16u::i#1 ] ) always clobbers reg byte a
Statement [248] (byte) test_8u::divisor#0 ← *((const byte[]) test_8u::divisors#0 + (byte) test_8u::i#10) [ print_line_cursor#41 print_char_cursor#135 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ( main:2::test_8u:7 [ print_line_cursor#41 print_char_cursor#135 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ) always clobbers reg byte a
Statement [273] (byte*~) print_char_cursor#186 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 test_8u::i#1 print_char_cursor#186 ] ( main:2::test_8u:7 [ print_line_cursor#1 test_8u::i#1 print_char_cursor#186 ] ) always clobbers reg byte a
Statement [276] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y
@ -8754,7 +8752,6 @@ Statement [25] (byte*~) print_char_cursor#156 ← (byte*) print_line_cursor#1 [
Statement [29] (signed word) print_sword::w#2 ← (signed word) test_16s::divisor#0 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 print_sword::w#2 rem16s#3 print_char_cursor#126 ] ( main:2::test_16s:13 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 print_sword::w#2 rem16s#3 print_char_cursor#126 ] ) always clobbers reg byte a
Statement [33] (signed word) print_sword::w#3 ← (signed word) test_16s::res#0 [ test_16s::i#10 print_line_cursor#1 print_sword::w#3 rem16s#3 print_char_cursor#126 ] ( main:2::test_16s:13 [ test_16s::i#10 print_line_cursor#1 print_sword::w#3 rem16s#3 print_char_cursor#126 ] ) always clobbers reg byte a
Statement [37] (signed word) print_sword::w#4 ← (signed word) rem16s#3 [ test_16s::i#10 print_line_cursor#1 print_sword::w#4 print_char_cursor#126 ] ( main:2::test_16s:13 [ test_16s::i#10 print_line_cursor#1 print_sword::w#4 print_char_cursor#126 ] ) always clobbers reg byte a
Statement [41] (byte) test_16s::i#1 ← (byte) test_16s::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ test_16s::i#1 print_line_cursor#1 ] ( main:2::test_16s:13 [ test_16s::i#1 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [46] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#20 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#17 ] ( main:2::test_16s:13::print_ln:40 [ test_16s::i#10 print_line_cursor#1 print_char_cursor#17 ] main:2::test_8s:11::print_ln:156 [ test_8s::i#10 print_line_cursor#1 print_char_cursor#17 ] main:2::test_16u:9::print_ln:241 [ test_16u::i#10 print_line_cursor#1 print_char_cursor#17 ] main:2::test_8u:7::print_ln:269 [ test_8u::i#10 print_line_cursor#1 print_char_cursor#17 ] ) always clobbers reg byte a
Statement [47] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#17) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#17 ] ( main:2::test_16s:13::print_ln:40 [ test_16s::i#10 print_line_cursor#1 print_char_cursor#17 ] main:2::test_8s:11::print_ln:156 [ test_8s::i#10 print_line_cursor#1 print_char_cursor#17 ] main:2::test_16u:9::print_ln:241 [ test_16u::i#10 print_line_cursor#1 print_char_cursor#17 ] main:2::test_8u:7::print_ln:269 [ test_8u::i#10 print_line_cursor#1 print_char_cursor#17 ] ) always clobbers reg byte a
Statement [50] if((signed word) print_sword::w#5>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 [ print_sword::w#5 print_char_cursor#129 ] ( main:2::test_16s:13::print_sword:26 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#3 print_sword::w#5 print_char_cursor#129 ] main:2::test_16s:13::print_sword:30 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#3 print_sword::w#5 print_char_cursor#129 ] main:2::test_16s:13::print_sword:34 [ test_16s::i#10 print_line_cursor#1 rem16s#3 print_sword::w#5 print_char_cursor#129 ] main:2::test_16s:13::print_sword:38 [ test_16s::i#10 print_line_cursor#1 print_sword::w#5 print_char_cursor#129 ] ) always clobbers reg byte a
@ -8815,7 +8812,6 @@ Statement [226] (byte*~) print_char_cursor#163 ← (byte*) print_line_cursor#1 [
Statement [230] (word) print_word::w#2 ← (word) test_16u::divisor#0 [ print_line_cursor#1 print_char_cursor#126 print_word::w#2 rem16u#1 test_16u::i#10 test_16u::res#0 ] ( main:2::test_16u:9 [ print_line_cursor#1 print_char_cursor#126 print_word::w#2 rem16u#1 test_16u::i#10 test_16u::res#0 ] ) always clobbers reg byte a
Statement [234] (word) print_word::w#3 ← (word) test_16u::res#0 [ print_line_cursor#1 print_char_cursor#126 print_word::w#3 rem16u#1 test_16u::i#10 ] ( main:2::test_16u:9 [ print_line_cursor#1 print_char_cursor#126 print_word::w#3 rem16u#1 test_16u::i#10 ] ) always clobbers reg byte a
Statement [238] (word) print_word::w#4 ← (word) rem16u#1 [ print_line_cursor#1 print_char_cursor#126 print_word::w#4 test_16u::i#10 ] ( main:2::test_16u:9 [ print_line_cursor#1 print_char_cursor#126 print_word::w#4 test_16u::i#10 ] ) always clobbers reg byte a
Statement [242] (byte) test_16u::i#1 ← (byte) test_16u::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_line_cursor#1 test_16u::i#1 ] ( main:2::test_16u:9 [ print_line_cursor#1 test_16u::i#1 ] ) always clobbers reg byte a
Statement [248] (byte) test_8u::divisor#0 ← *((const byte[]) test_8u::divisors#0 + (byte) test_8u::i#10) [ print_line_cursor#41 print_char_cursor#135 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ( main:2::test_8u:7 [ print_line_cursor#41 print_char_cursor#135 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ) always clobbers reg byte a
Statement [273] (byte*~) print_char_cursor#186 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 test_8u::i#1 print_char_cursor#186 ] ( main:2::test_8u:7 [ print_line_cursor#1 test_8u::i#1 print_char_cursor#186 ] ) always clobbers reg byte a
Statement [276] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y
@ -9270,10 +9266,10 @@ test_16s: {
jmp b11
//SEG88 test_16s::@11
b11:
//SEG89 [41] (byte) test_16s::i#1 ← (byte) test_16s::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ test_16s::i#1 print_line_cursor#1 ] ( main:2::test_16s:13 [ test_16s::i#1 print_line_cursor#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG89 [41] (byte) test_16s::i#1 ← (byte) test_16s::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ test_16s::i#1 print_line_cursor#1 ] ( main:2::test_16s:13 [ test_16s::i#1 print_line_cursor#1 ] ) -- vbuz1=vbuz1_plus_2
lda i
clc
adc i
adc #2
sta i
//SEG90 [42] if((byte) test_16s::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 12) goto test_16s::@1 [ test_16s::i#1 print_line_cursor#1 ] ( main:2::test_16s:13 [ test_16s::i#1 print_line_cursor#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda i
@ -10382,10 +10378,10 @@ test_16u: {
jmp b11
//SEG499 test_16u::@11
b11:
//SEG500 [242] (byte) test_16u::i#1 ← (byte) test_16u::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_line_cursor#1 test_16u::i#1 ] ( main:2::test_16u:9 [ print_line_cursor#1 test_16u::i#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG500 [242] (byte) test_16u::i#1 ← (byte) test_16u::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_line_cursor#1 test_16u::i#1 ] ( main:2::test_16u:9 [ print_line_cursor#1 test_16u::i#1 ] ) -- vbuz1=vbuz1_plus_2
lda i
clc
adc i
adc #2
sta i
//SEG501 [243] if((byte) test_16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 12) goto test_16u::@1 [ print_line_cursor#1 test_16u::i#1 ] ( main:2::test_16u:9 [ print_line_cursor#1 test_16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda i
@ -11593,10 +11589,10 @@ test_16s: {
//SEG87 [44] phi (byte*) print_line_cursor#39 = (byte*) print_line_cursor#1 [phi:test_16s::@10->print_ln#0] -- register_copy
jsr print_ln
//SEG88 test_16s::@11
//SEG89 [41] (byte) test_16s::i#1 ← (byte) test_16s::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ test_16s::i#1 print_line_cursor#1 ] ( main:2::test_16s:13 [ test_16s::i#1 print_line_cursor#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG89 [41] (byte) test_16s::i#1 ← (byte) test_16s::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ test_16s::i#1 print_line_cursor#1 ] ( main:2::test_16s:13 [ test_16s::i#1 print_line_cursor#1 ] ) -- vbuz1=vbuz1_plus_2
lda i
clc
adc i
adc #2
sta i
//SEG90 [42] if((byte) test_16s::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 12) goto test_16s::@1 [ test_16s::i#1 print_line_cursor#1 ] ( main:2::test_16s:13 [ test_16s::i#1 print_line_cursor#1 ] ) -- vbuz1_neq_vbuc1_then_la1
cmp #$c
@ -12495,10 +12491,10 @@ test_16u: {
//SEG498 [44] phi (byte*) print_line_cursor#39 = (byte*) print_line_cursor#1 [phi:test_16u::@10->print_ln#0] -- register_copy
jsr print_ln
//SEG499 test_16u::@11
//SEG500 [242] (byte) test_16u::i#1 ← (byte) test_16u::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_line_cursor#1 test_16u::i#1 ] ( main:2::test_16u:9 [ print_line_cursor#1 test_16u::i#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda #2
//SEG500 [242] (byte) test_16u::i#1 ← (byte) test_16u::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print_line_cursor#1 test_16u::i#1 ] ( main:2::test_16u:9 [ print_line_cursor#1 test_16u::i#1 ] ) -- vbuz1=vbuz1_plus_2
lda i
clc
adc i
adc #2
sta i
//SEG501 [243] if((byte) test_16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 12) goto test_16u::@1 [ print_line_cursor#1 test_16u::i#1 ] ( main:2::test_16u:9 [ print_line_cursor#1 test_16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
cmp #$c

View File

@ -9,21 +9,19 @@ main: {
lda #0
sta i
b1:
ldx i
inx
ldy i
iny
lda #2
clc
adc i
tax
iny
lda i
jsr sum
ldy i
sta SCREEN,y
ldx i
inx
iny
iny
lda #2
clc
adc i
tax
lda i
jsr sum2
ldy i
@ -35,19 +33,19 @@ main: {
rts
}
sum2: {
sty $ff
stx $ff
clc
adc $ff
stx $ff
sty $ff
clc
adc $ff
rts
}
sum: {
sty $ff
stx $ff
clc
adc $ff
stx $ff
sty $ff
clc
adc $ff
rts

View File

@ -623,10 +623,10 @@ main: {
ldy i
iny
sty sum.b
//SEG16 [7] (byte) sum::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum::b#0 sum::c#0 ] ( main:2 [ main::i#2 sum::b#0 sum::c#0 ] ) -- vbuz1=vbuz2_plus_vbuc1
lda #2
//SEG16 [7] (byte) sum::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum::b#0 sum::c#0 ] ( main:2 [ main::i#2 sum::b#0 sum::c#0 ] ) -- vbuz1=vbuz2_plus_2
lda i
clc
adc i
adc #2
sta sum.c
//SEG17 [8] (byte) sum::a#0 ← (byte) main::i#2 [ main::i#2 sum::b#0 sum::c#0 sum::a#0 ] ( main:2 [ main::i#2 sum::b#0 sum::c#0 sum::a#0 ] ) -- vbuz1=vbuz2
lda i
@ -650,10 +650,10 @@ main: {
ldy i
iny
sty sum2.b
//SEG24 [14] (byte) sum2::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum2::b#0 sum2::c#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 ] ) -- vbuz1=vbuz2_plus_vbuc1
lda #2
//SEG24 [14] (byte) sum2::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum2::b#0 sum2::c#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 ] ) -- vbuz1=vbuz2_plus_2
lda i
clc
adc i
adc #2
sta sum2.c
//SEG25 [15] (byte) sum2::a#0 ← (byte) main::i#2 [ main::i#2 sum2::b#0 sum2::c#0 sum2::a#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 sum2::a#0 ] ) -- vbuz1=vbuz2
lda i
@ -735,31 +735,14 @@ sum: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] (byte) sum::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum::b#0 sum::c#0 ] ( main:2 [ main::i#2 sum::b#0 sum::c#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ sum::b#0 ]
Statement [14] (byte) sum2::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum2::b#0 sum2::c#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ sum2::b#0 ]
Statement [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ sum2::c#0 ]
Statement [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) always clobbers reg byte a
Statement [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ sum::c#0 ]
Statement [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) always clobbers reg byte a
Statement [7] (byte) sum::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum::b#0 sum::c#0 ] ( main:2 [ main::i#2 sum::b#0 sum::c#0 ] ) always clobbers reg byte a
Statement [14] (byte) sum2::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum2::b#0 sum2::c#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 ] ) always clobbers reg byte a
Statement [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) always clobbers reg byte a
Statement [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) always clobbers reg byte a
Statement [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) always clobbers reg byte a
Statement [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:3 [ sum::b#0 ] : zp ZP_BYTE:3 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:4 [ sum::c#0 ] : zp ZP_BYTE:4 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:3 [ sum::b#0 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:4 [ sum::c#0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:5 [ sum::a#0 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:6 [ sum::return#0 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:7 [ main::$2 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:8 [ sum2::b#0 ] : zp ZP_BYTE:8 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:9 [ sum2::c#0 ] : zp ZP_BYTE:9 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:8 [ sum2::b#0 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:9 [ sum2::c#0 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:10 [ sum2::a#0 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:11 [ sum2::return#0 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:12 [ main::$5 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y ,
@ -775,21 +758,25 @@ Uplift Scope [sum2] 22: zp ZP_BYTE:11 [ sum2::return#0 ] 13: zp ZP_BYTE:10 [ sum
Uplift Scope []
Uplifting [main] best 1345 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] reg byte a [ main::$2 ] reg byte a [ main::$5 ]
Uplifting [sum] best 1214 combination reg byte a [ sum::return#0 ] reg byte a [ sum::a#0 ] reg byte y [ sum::b#0 ] reg byte x [ sum::c#0 ] zp ZP_BYTE:16 [ sum::return#1 ] zp ZP_BYTE:15 [ sum::$0 ]
Limited combination testing to 100 combinations of 2304 possible.
Uplifting [sum2] best 1083 combination reg byte a [ sum2::return#0 ] reg byte a [ sum2::a#0 ] reg byte y [ sum2::b#0 ] reg byte x [ sum2::c#0 ] zp ZP_BYTE:14 [ sum2::return#1 ] zp ZP_BYTE:13 [ sum2::$0 ]
Limited combination testing to 100 combinations of 2304 possible.
Uplifting [] best 1083 combination
Uplifting [sum] best 1225 combination reg byte a [ sum::return#0 ] reg byte a [ sum::a#0 ] reg byte x [ sum::b#0 ] zp ZP_BYTE:4 [ sum::c#0 ] zp ZP_BYTE:16 [ sum::return#1 ] zp ZP_BYTE:15 [ sum::$0 ]
Limited combination testing to 100 combinations of 4096 possible.
Uplifting [sum2] best 1105 combination reg byte a [ sum2::return#0 ] reg byte a [ sum2::a#0 ] reg byte x [ sum2::b#0 ] zp ZP_BYTE:9 [ sum2::c#0 ] zp ZP_BYTE:14 [ sum2::return#1 ] zp ZP_BYTE:13 [ sum2::$0 ]
Limited combination testing to 100 combinations of 4096 possible.
Uplifting [] best 1105 combination
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Uplifting [main] best 1083 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Uplifting [main] best 1105 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ sum::c#0 ]
Uplifting [sum] best 1074 combination reg byte y [ sum::c#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:9 [ sum2::c#0 ]
Uplifting [sum2] best 1043 combination reg byte y [ sum2::c#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:14 [ sum2::return#1 ]
Uplifting [sum2] best 1050 combination reg byte a [ sum2::return#1 ]
Uplifting [sum2] best 1010 combination reg byte a [ sum2::return#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:16 [ sum::return#1 ]
Uplifting [sum] best 1017 combination reg byte a [ sum::return#1 ]
Uplifting [sum] best 977 combination reg byte a [ sum::return#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ sum2::$0 ]
Uplifting [sum2] best 1015 combination reg byte a [ sum2::$0 ]
Uplifting [sum2] best 975 combination reg byte a [ sum2::$0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ sum::$0 ]
Uplifting [sum] best 1013 combination reg byte a [ sum::$0 ]
Uplifting [sum] best 973 combination reg byte a [ sum::$0 ]
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart
@ -830,14 +817,13 @@ main: {
jmp b1
//SEG14 main::@1
b1:
//SEG15 [6] (byte) sum::b#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 sum::b#0 ] ( main:2 [ main::i#2 sum::b#0 ] ) -- vbuyy=vbuz1_plus_1
//SEG15 [6] (byte) sum::b#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 sum::b#0 ] ( main:2 [ main::i#2 sum::b#0 ] ) -- vbuxx=vbuz1_plus_1
ldx i
inx
//SEG16 [7] (byte) sum::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum::b#0 sum::c#0 ] ( main:2 [ main::i#2 sum::b#0 sum::c#0 ] ) -- vbuyy=vbuz1_plus_2
ldy i
iny
//SEG16 [7] (byte) sum::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum::b#0 sum::c#0 ] ( main:2 [ main::i#2 sum::b#0 sum::c#0 ] ) -- vbuxx=vbuz1_plus_vbuc1
lda #2
clc
adc i
tax
iny
//SEG17 [8] (byte) sum::a#0 ← (byte) main::i#2 [ main::i#2 sum::b#0 sum::c#0 sum::a#0 ] ( main:2 [ main::i#2 sum::b#0 sum::c#0 sum::a#0 ] ) -- vbuaa=vbuz1
lda i
//SEG18 [9] call sum param-assignment [ main::i#2 sum::return#1 ] ( main:2 [ main::i#2 sum::return#1 ] )
@ -852,14 +838,13 @@ main: {
//SEG22 [12] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuaa
ldy i
sta SCREEN,y
//SEG23 [13] (byte) sum2::b#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 sum2::b#0 ] ( main:2 [ main::i#2 sum2::b#0 ] ) -- vbuyy=vbuz1_plus_1
//SEG23 [13] (byte) sum2::b#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 sum2::b#0 ] ( main:2 [ main::i#2 sum2::b#0 ] ) -- vbuxx=vbuz1_plus_1
ldx i
inx
//SEG24 [14] (byte) sum2::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum2::b#0 sum2::c#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 ] ) -- vbuyy=vbuz1_plus_2
ldy i
iny
//SEG24 [14] (byte) sum2::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum2::b#0 sum2::c#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 ] ) -- vbuxx=vbuz1_plus_vbuc1
lda #2
clc
adc i
tax
iny
//SEG25 [15] (byte) sum2::a#0 ← (byte) main::i#2 [ main::i#2 sum2::b#0 sum2::c#0 sum2::a#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 sum2::a#0 ] ) -- vbuaa=vbuz1
lda i
//SEG26 [16] call sum2 param-assignment [ main::i#2 sum2::return#1 ] ( main:2 [ main::i#2 sum2::return#1 ] )
@ -888,12 +873,12 @@ main: {
}
//SEG35 sum2
sum2: {
//SEG36 [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) -- vbuaa=vbuaa_plus_vbuyy
sty $ff
//SEG36 [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) -- vbuaa=vbuaa_plus_vbuxx
stx $ff
clc
adc $ff
//SEG37 [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) -- vbuaa=vbuaa_plus_vbuxx
stx $ff
//SEG37 [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) -- vbuaa=vbuaa_plus_vbuyy
sty $ff
clc
adc $ff
jmp breturn
@ -904,12 +889,12 @@ sum2: {
}
//SEG40 sum
sum: {
//SEG41 [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) -- vbuaa=vbuaa_plus_vbuyy
sty $ff
//SEG41 [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) -- vbuaa=vbuaa_plus_vbuxx
stx $ff
clc
adc $ff
//SEG42 [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) -- vbuaa=vbuaa_plus_vbuxx
stx $ff
//SEG42 [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) -- vbuaa=vbuaa_plus_vbuyy
sty $ff
clc
adc $ff
jmp breturn
@ -974,9 +959,9 @@ FINAL SYMBOL TABLE
(byte) sum::a
(byte) sum::a#0 reg byte a 13.0
(byte) sum::b
(byte) sum::b#0 reg byte y 4.333333333333333
(byte) sum::b#0 reg byte x 4.333333333333333
(byte) sum::c
(byte) sum::c#0 reg byte x 4.333333333333333
(byte) sum::c#0 reg byte y 4.333333333333333
(byte) sum::return
(byte) sum::return#0 reg byte a 22.0
(byte) sum::return#1 reg byte a 4.333333333333333
@ -986,21 +971,21 @@ FINAL SYMBOL TABLE
(byte) sum2::a
(byte) sum2::a#0 reg byte a 13.0
(byte) sum2::b
(byte) sum2::b#0 reg byte y 4.333333333333333
(byte) sum2::b#0 reg byte x 4.333333333333333
(byte) sum2::c
(byte) sum2::c#0 reg byte x 4.333333333333333
(byte) sum2::c#0 reg byte y 4.333333333333333
(byte) sum2::return
(byte) sum2::return#0 reg byte a 22.0
(byte) sum2::return#1 reg byte a 4.333333333333333
zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
reg byte y [ sum::b#0 ]
reg byte x [ sum::c#0 ]
reg byte x [ sum::b#0 ]
reg byte y [ sum::c#0 ]
reg byte a [ sum::a#0 ]
reg byte a [ sum::return#0 ]
reg byte a [ main::$2 ]
reg byte y [ sum2::b#0 ]
reg byte x [ sum2::c#0 ]
reg byte x [ sum2::b#0 ]
reg byte y [ sum2::c#0 ]
reg byte a [ sum2::a#0 ]
reg byte a [ sum2::return#0 ]
reg byte a [ main::$5 ]
@ -1011,7 +996,7 @@ reg byte a [ sum::return#1 ]
FINAL ASSEMBLER
Score: 821
Score: 781
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -1039,14 +1024,13 @@ main: {
//SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@1#0] -- register_copy
//SEG14 main::@1
b1:
//SEG15 [6] (byte) sum::b#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 sum::b#0 ] ( main:2 [ main::i#2 sum::b#0 ] ) -- vbuyy=vbuz1_plus_1
//SEG15 [6] (byte) sum::b#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 sum::b#0 ] ( main:2 [ main::i#2 sum::b#0 ] ) -- vbuxx=vbuz1_plus_1
ldx i
inx
//SEG16 [7] (byte) sum::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum::b#0 sum::c#0 ] ( main:2 [ main::i#2 sum::b#0 sum::c#0 ] ) -- vbuyy=vbuz1_plus_2
ldy i
iny
//SEG16 [7] (byte) sum::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum::b#0 sum::c#0 ] ( main:2 [ main::i#2 sum::b#0 sum::c#0 ] ) -- vbuxx=vbuz1_plus_vbuc1
lda #2
clc
adc i
tax
iny
//SEG17 [8] (byte) sum::a#0 ← (byte) main::i#2 [ main::i#2 sum::b#0 sum::c#0 sum::a#0 ] ( main:2 [ main::i#2 sum::b#0 sum::c#0 sum::a#0 ] ) -- vbuaa=vbuz1
lda i
//SEG18 [9] call sum param-assignment [ main::i#2 sum::return#1 ] ( main:2 [ main::i#2 sum::return#1 ] )
@ -1059,13 +1043,12 @@ main: {
//SEG22 [12] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuaa
ldy i
sta SCREEN,y
//SEG23 [13] (byte) sum2::b#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 sum2::b#0 ] ( main:2 [ main::i#2 sum2::b#0 ] ) -- vbuyy=vbuz1_plus_1
//SEG23 [13] (byte) sum2::b#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 sum2::b#0 ] ( main:2 [ main::i#2 sum2::b#0 ] ) -- vbuxx=vbuz1_plus_1
ldx i
inx
//SEG24 [14] (byte) sum2::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum2::b#0 sum2::c#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 ] ) -- vbuyy=vbuz1_plus_2
iny
iny
//SEG24 [14] (byte) sum2::c#0 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 sum2::b#0 sum2::c#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 ] ) -- vbuxx=vbuz1_plus_vbuc1
lda #2
clc
adc i
tax
//SEG25 [15] (byte) sum2::a#0 ← (byte) main::i#2 [ main::i#2 sum2::b#0 sum2::c#0 sum2::a#0 ] ( main:2 [ main::i#2 sum2::b#0 sum2::c#0 sum2::a#0 ] ) -- vbuaa=vbuz1
lda i
//SEG26 [16] call sum2 param-assignment [ main::i#2 sum2::return#1 ] ( main:2 [ main::i#2 sum2::return#1 ] )
@ -1090,12 +1073,12 @@ main: {
}
//SEG35 sum2
sum2: {
//SEG36 [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) -- vbuaa=vbuaa_plus_vbuyy
sty $ff
//SEG36 [23] (byte~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) -- vbuaa=vbuaa_plus_vbuxx
stx $ff
clc
adc $ff
//SEG37 [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) -- vbuaa=vbuaa_plus_vbuxx
stx $ff
//SEG37 [24] (byte) sum2::return#1 ← (byte~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) -- vbuaa=vbuaa_plus_vbuyy
sty $ff
clc
adc $ff
//SEG38 sum2::@return
@ -1104,12 +1087,12 @@ sum2: {
}
//SEG40 sum
sum: {
//SEG41 [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) -- vbuaa=vbuaa_plus_vbuyy
sty $ff
//SEG41 [26] (byte~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) -- vbuaa=vbuaa_plus_vbuxx
stx $ff
clc
adc $ff
//SEG42 [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) -- vbuaa=vbuaa_plus_vbuxx
stx $ff
//SEG42 [27] (byte) sum::return#1 ← (byte~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) -- vbuaa=vbuaa_plus_vbuyy
sty $ff
clc
adc $ff
//SEG43 sum::@return

View File

@ -21,9 +21,9 @@
(byte) sum::a
(byte) sum::a#0 reg byte a 13.0
(byte) sum::b
(byte) sum::b#0 reg byte y 4.333333333333333
(byte) sum::b#0 reg byte x 4.333333333333333
(byte) sum::c
(byte) sum::c#0 reg byte x 4.333333333333333
(byte) sum::c#0 reg byte y 4.333333333333333
(byte) sum::return
(byte) sum::return#0 reg byte a 22.0
(byte) sum::return#1 reg byte a 4.333333333333333
@ -33,21 +33,21 @@
(byte) sum2::a
(byte) sum2::a#0 reg byte a 13.0
(byte) sum2::b
(byte) sum2::b#0 reg byte y 4.333333333333333
(byte) sum2::b#0 reg byte x 4.333333333333333
(byte) sum2::c
(byte) sum2::c#0 reg byte x 4.333333333333333
(byte) sum2::c#0 reg byte y 4.333333333333333
(byte) sum2::return
(byte) sum2::return#0 reg byte a 22.0
(byte) sum2::return#1 reg byte a 4.333333333333333
zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
reg byte y [ sum::b#0 ]
reg byte x [ sum::c#0 ]
reg byte x [ sum::b#0 ]
reg byte y [ sum::c#0 ]
reg byte a [ sum::a#0 ]
reg byte a [ sum::return#0 ]
reg byte a [ main::$2 ]
reg byte y [ sum2::b#0 ]
reg byte x [ sum2::c#0 ]
reg byte x [ sum2::b#0 ]
reg byte y [ sum2::c#0 ]
reg byte a [ sum2::a#0 ]
reg byte a [ sum2::return#0 ]
reg byte a [ main::$5 ]