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:
parent
34d8afcaae
commit
b2f16e2a57
@ -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();
|
||||
|
@ -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));
|
||||
|
@ -0,0 +1,2 @@
|
||||
dex
|
||||
dex
|
@ -0,0 +1,2 @@
|
||||
dey
|
||||
dey
|
@ -0,0 +1,2 @@
|
||||
dec {z1}
|
||||
dec {z1}
|
@ -0,0 +1,7 @@
|
||||
lda {z1}
|
||||
clc
|
||||
adc #2
|
||||
sta {z1}
|
||||
bcc !+
|
||||
inc {z1}+1
|
||||
!:
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
55
src/test/java/dk/camelot64/kickc/test/ref/chessboard.asm
Normal file
55
src/test/java/dk/camelot64/kickc/test/ref/chessboard.asm
Normal 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
|
||||
}
|
37
src/test/java/dk/camelot64/kickc/test/ref/chessboard.cfg
Normal file
37
src/test/java/dk/camelot64/kickc/test/ref/chessboard.cfg
Normal 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
|
830
src/test/java/dk/camelot64/kickc/test/ref/chessboard.log
Normal file
830
src/test/java/dk/camelot64/kickc/test/ref/chessboard.log
Normal 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
|
||||
}
|
||||
|
31
src/test/java/dk/camelot64/kickc/test/ref/chessboard.sym
Normal file
31
src/test/java/dk/camelot64/kickc/test/ref/chessboard.sym
Normal 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 ]
|
@ -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
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
65
src/test/java/dk/camelot64/kickc/test/ref/helloworld.asm
Normal file
65
src/test/java/dk/camelot64/kickc/test/ref/helloworld.asm
Normal 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
|
||||
}
|
47
src/test/java/dk/camelot64/kickc/test/ref/helloworld.cfg
Normal file
47
src/test/java/dk/camelot64/kickc/test/ref/helloworld.cfg
Normal 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
|
1436
src/test/java/dk/camelot64/kickc/test/ref/helloworld.log
Normal file
1436
src/test/java/dk/camelot64/kickc/test/ref/helloworld.log
Normal file
File diff suppressed because it is too large
Load Diff
27
src/test/java/dk/camelot64/kickc/test/ref/helloworld.sym
Normal file
27
src/test/java/dk/camelot64/kickc/test/ref/helloworld.sym
Normal 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 ]
|
52
src/test/java/dk/camelot64/kickc/test/ref/helloworld2.asm
Normal file
52
src/test/java/dk/camelot64/kickc/test/ref/helloworld2.asm
Normal 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
|
||||
}
|
35
src/test/java/dk/camelot64/kickc/test/ref/helloworld2.cfg
Normal file
35
src/test/java/dk/camelot64/kickc/test/ref/helloworld2.cfg
Normal 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
|
781
src/test/java/dk/camelot64/kickc/test/ref/helloworld2.log
Normal file
781
src/test/java/dk/camelot64/kickc/test/ref/helloworld2.log
Normal 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
|
||||
}
|
||||
|
28
src/test/java/dk/camelot64/kickc/test/ref/helloworld2.sym
Normal file
28
src/test/java/dk/camelot64/kickc/test/ref/helloworld2.sym
Normal 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 ]
|
@ -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
|
||||
|
@ -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 !+
|
||||
|
@ -28,9 +28,9 @@ main: {
|
||||
bcc !+
|
||||
inc charset+1
|
||||
!:
|
||||
lda #2
|
||||
lda c
|
||||
clc
|
||||
adc c
|
||||
adc #2
|
||||
sta c
|
||||
cmp #6
|
||||
bne b1
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 ]
|
||||
|
Loading…
x
Reference in New Issue
Block a user