1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-08-02 09:29:35 +00:00

Fixed signed word comparisons. Added tests of word comparisons. Improved fragment synthesis of p..z1_deref_vbuaa=... / p..z1_deref_vbuxx=...

This commit is contained in:
jespergravgaard 2019-03-09 16:24:44 +01:00
parent cb8018b92a
commit a65404d7b6
19 changed files with 35888 additions and 23844 deletions

View File

@ -5,4 +5,6 @@ sbc {z2}+1
bvc !+ bvc !+
eor #$80 eor #$80
!: !:
beq !e+
bpl {la1} bpl {la1}
!e:

View File

@ -388,9 +388,9 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)z3(.*)", lvalZ3+"|"+twoZ3+"|"+rvalXx, "ldx {z3}", "$1xx$2", null, mapZ4)); synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)z3(.*)", lvalZ3+"|"+twoZ3+"|"+rvalXx, "ldx {z3}", "$1xx$2", null, mapZ4));
// Correct wrong ordered Z2/Z1 // Correct wrong ordered Z2/Z1
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)z2(.*)z1(.*)", null, null, "$1z1$2z2$3", null, mapZ2Swap, false)); synths.add(new AsmFragmentTemplateSynthesisRule("(.*)z2(.*)z1(.*)", twoZ1+"|"+twoZ2, null, "$1z1$2z2$3", null, mapZ2Swap, false));
// Correct wrong ordered Z3/Z2 // Correct wrong ordered Z3/Z2
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)z3(.*)z2(.*)", null, null, "$1z2$2z3$3", null, mapZ3Swap, false)); synths.add(new AsmFragmentTemplateSynthesisRule("(.*)z3(.*)z2(.*)", twoZ2+"|"+twoZ3, null, "$1z2$2z3$3", null, mapZ3Swap, false));
// Rewrite comparisons < to > // Rewrite comparisons < to >
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_gt_(.*)_then_(.*)", null, null, "$2_lt_$1_then_$3", null, null)); synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_gt_(.*)_then_(.*)", null, null, "$2_lt_$1_then_$3", null, null));
@ -462,6 +462,12 @@ class AsmFragmentTemplateSynthesisRule {
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_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)); synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx=(.*)", twoC1, "stx $ff\n" , "vb$1aa=$2", "ldx $ff\nsta {c1},x", mapC));
// Rewrite (Z1),a to save A to $FF and reload it into YY
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuaa=(.*)", twoZ1, "sta $ff\n" , "vb$1aa=$2", "ldy $ff\nsta ({z1}),y", mapZ));
// Rewrite (Z1),x to save A to $FF and reload it into YY
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuxx=(.*)", twoZ1, "stx $ff\n" , "vb$1aa=$2", "ldy $ff\nsta ({z1}),y", mapZ));
// OLD STYLE REWRITES - written when only one rule could be taken // 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)); synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuz1=(.*)", twoZ1+"|"+twoC1, null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x", mapZC));

View File

@ -44,12 +44,16 @@ public class TestPrograms {
AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false); AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false);
} }
@Test
public void testComparisonsSWord() throws IOException, URISyntaxException {
compileAndCompare("test-comparisons-sword");
}
@Test @Test
public void testComparisonsWord() throws IOException, URISyntaxException { public void testComparisonsWord() throws IOException, URISyntaxException {
compileAndCompare("test-comparisons-word"); compileAndCompare("test-comparisons-word");
} }
@Test @Test
public void testDuplicateLoopProblem() throws IOException, URISyntaxException { public void testDuplicateLoopProblem() throws IOException, URISyntaxException {
compileAndCompare("duplicate-loop-problem"); compileAndCompare("duplicate-loop-problem");

View File

@ -0,0 +1,77 @@
// Test signed word comparisons
import "c64"
import "print"
signed word[] swords = { -$6fed, $0012, $7fed };
void main() {
print_cls();
byte s = 0;
for( byte i: 0..2) {
signed word w1 = swords[i<<1];
for( byte j: 0..2) {
signed word w2 = swords[j<<1];
for( byte op: 0..5 ) {
compare(w1,w2,op);
if(++s==3) {
s=0;
print_ln();
}
}
}
}
// loop forever
while(true) {}
}
const byte LT = 0;
const byte LE = 1;
const byte GT = 2;
const byte GE = 3;
const byte EQ = 4;
const byte NE = 5;
// empty circle
const byte FF = $57;
// filled circle
const byte TT = $51;
// Compare two words using an operator
void compare(signed word w1, signed word w2, byte op) {
byte r = FF;
byte* ops;
if(op==LT) {
// LESS THAN
if(w1<w2) r = TT;
ops = "< @";
} else if(op==LE) {
// LESS THAN EQUAL
if(w1<=w2) r = TT;
ops = "<=@";
} else if(op==GT) {
// GREATER THAN
if(w1>w2) r = TT;
ops = "> @";
} else if(op==GE) {
// GREATER THAN EQUAL
if(w1>=w2) r = TT;
ops = ">=@";
} else if(op==EQ) {
// EQUAL
if(w1==w2) r = TT;
ops = "==@";
} else if(op==NE) {
// NOT EQUAL
if(w1!=w2) r = TT;
ops = "!=@";
}
if(w1>=0) print_char(' ');
print_sword(w1);
print_str(ops);
if(w2>=0) print_char(' ');
print_sword(w2);
print_char(r);
}

View File

@ -6,15 +6,16 @@ word[] words = { $0012, $3f34, $cfed };
void main() { void main() {
print_cls(); print_cls();
byte ln = 0; byte s = 0;
for( byte i: 0..2) { for( byte i: 0..2) {
word w1 = words[i<<1]; word w1 = words[i<<1];
for( byte j: 0..2) { for( byte j: 0..2) {
word w2 = words[j<<1]; word w2 = words[j<<1];
for( byte op: 0..5 ) { for( byte op: 0..5 ) {
if(ln<50) { compare(w1,w2,op);
compare(w1,w2,op); if(++s==3) {
if((++ln & 1) == 0) print_ln(); s=0;
print_ln();
} }
} }
} }
@ -23,42 +24,51 @@ void main() {
while(true) {} while(true) {}
} }
const byte LT = 0;
const byte LE = 1;
const byte GT = 2;
const byte GE = 3;
const byte EQ = 4;
const byte NE = 5;
// empty circle
const byte FF = $57;
// filled circle
const byte TT = $51;
// Compare two words using an operator // Compare two words using an operator
void compare(word w1, word w2, byte op) { void compare(word w1, word w2, byte op) {
byte r = '-'; byte r = FF;
byte* ops; byte* ops;
if(op==0) { if(op==0) {
// LESS THAN // LESS THAN
if(w1<w2) r = '+'; if(w1<w2) r = TT;
ops = "< @"; ops = "< @";
} else if(op==1) { } else if(op==1) {
// LESS THAN EQUAL // LESS THAN EQUAL
if(w1<=w2) r = '+'; if(w1<=w2) r = TT;
ops = "<=@"; ops = "<=@";
} else if(op==2) { } else if(op==2) {
// GREATER THAN // GREATER THAN
if(w1>w2) r = '+'; if(w1>w2) r = TT;
ops = "> @"; ops = "> @";
} else if(op==3) { } else if(op==3) {
// GREATER THAN EQUAL // GREATER THAN EQUAL
if(w1>=w2) r = '+'; if(w1>=w2) r = TT;
ops = ">=@"; ops = ">=@";
} else if(op==4) { } else if(op==4) {
// EQUAL // EQUAL
if(w1==w2) r = '+'; if(w1==w2) r = TT;
ops = "==@"; ops = "==@";
} else if(op==5) { } else if(op==5) {
// NOT EQUAL // NOT EQUAL
if(w1!=w2) r = '+'; if(w1!=w2) r = TT;
ops = "!=@"; ops = "!=@";
} }
print_word(w1); print_word(w1);
print_str(" @");
print_str(ops); print_str(ops);
print_str(" @");
print_word(w2); print_word(w2);
print_str(" @");
print_char(r); print_char(r);
print_str(" @"); print_char(' ');
} }

File diff suppressed because it is too large Load Diff

View File

@ -562,10 +562,10 @@ pbuz1_derefidx_vbuaa=vbuxx < pbuz1_derefidx_vbuyy=vbuxx < pbuz1_derefidx_vbuyy=v
tay tay
txa txa
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuaa=vbuyy < pbuz1_derefidx_vbuxx=vbuyy < pbuz1_derefidx_vbuxx=vbuaa - clobber:A X Y cycles:16.0 pbuz1_derefidx_vbuaa=vbuyy < vbuaa=vbuyy - clobber:A Y cycles:14.0
tax sta $ff
tya tya
stx $ff
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuaa=vbuz1 < pbuz1_derefidx_vbuyy=vbuz1 < pbuz1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:11.0 pbuz1_derefidx_vbuaa=vbuz1 < pbuz1_derefidx_vbuyy=vbuz1 < pbuz1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:11.0
@ -576,16 +576,16 @@ pbuz1_derefidx_vbuaa=vbuz2 < pbuz1_derefidx_vbuyy=vbuz2 < pbuz1_derefidx_vbuyy=v
tay tay
lda {z2} lda {z2}
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuaa=_deref_pbuz1 < pbuz1_derefidx_vbuxx=_deref_pbuz1 < pbuz1_derefidx_vbuxx=vbuaa - clobber:A X Y cycles:21.5 pbuz1_derefidx_vbuaa=_deref_pbuz1 < pbuz1_derefidx_vbuxx=_deref_pbuz1 < pbuz1_derefidx_vbuxx=vbuaa < vbuaa=vbuaa - clobber:A X Y cycles:21.5
tax tax
ldy #0 ldy #0
lda ({z1}),y lda ({z1}),y
stx $ff stx $ff
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuaa=_deref_pbuz2 < pbuz1_derefidx_vbuyy=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:21.5 pbuz1_derefidx_vbuaa=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:19.5
tay sta $ff
sty $ff
ldy #0 ldy #0
lda ({z2}),y lda ({z2}),y
@ -601,53 +601,52 @@ CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz1_derefidx_vbuyy
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz1_derefidx_vbuz1 CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz1_derefidx_vbuz1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz1_derefidx_vbuz2 CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz1_derefidx_vbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz1_derefidx_vbuc1 CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz1_derefidx_vbuc1
pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:19.5 pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:19.5
tay sta $ff
sty $ff
tay
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:21.5
tay sta $ff
sty $ff
txa txa
tay tay
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:17.5
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 sta $ff
tay
lda {z1}
sty $ff
tay
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:20.5
tay ldy {z1}
sty $ff sta $ff
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz2 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:20.5
ldy {z2} ldy {z2}
sta $ff
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz3 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:20.5
tay
sty $ff
ldy {z3} ldy {z3}
sta $ff
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuc1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:19.5
tay
sty $ff
ldy #{c1} ldy #{c1}
sta $ff
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
@ -659,10 +658,10 @@ pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=pbuc1_derefidx_
tay tay
lda {c1},x lda {c1},x
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuxx=vbuaa - clobber:A X Y cycles:18.5 pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:16.5
tax sta $ff
lda {c1},y lda {c1},y
stx $ff
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=vbuaa - clobber:A X Y cycles:15.5 pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=vbuaa - clobber:A X Y cycles:15.5
@ -670,12 +669,10 @@ pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_
tay tay
lda {c1},x lda {c1},x
sta ({z1}),y 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 pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:19.5
tay ldy {z1}
lda {z1} sta $ff
sty $ff
tay
lda {c1},y lda {c1},y
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
@ -684,11 +681,10 @@ pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz2 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_
tay tay
lda {c1},x lda {c1},x
sta ({z1}),y 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 pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz2 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:19.5
tay
sty $ff
ldy {z2} ldy {z2}
sta $ff
lda {c1},y lda {c1},y
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
@ -698,17 +694,19 @@ pbuz1_derefidx_vbuaa=vbuc1 < pbuz1_derefidx_vbuyy=vbuc1 < pbuz1_derefidx_vbuyy=v
tay tay
lda #{c1} lda #{c1}
sta ({z1}),y sta ({z1}),y
*pbuz1_derefidx_vbuxx=vbuaa - clobber:Y cycles:12.0 pbuz1_derefidx_vbuxx=vbuaa < vbuaa=vbuaa - clobber:Y cycles:12.0
stx $ff stx $ff
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
*pbuz1_derefidx_vbuxx=vbuxx - clobber:A Y cycles:10.0 *pbuz1_derefidx_vbuxx=vbuxx - clobber:A Y cycles:10.0
txa txa
tay tay
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuxx=vbuyy < pbuz1_derefidx_vbuxx=vbuaa - clobber:A Y cycles:14.0 pbuz1_derefidx_vbuxx=vbuyy < vbuaa=vbuyy - clobber:A Y cycles:14.0
tya
stx $ff stx $ff
tya
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuxx=vbuz1 < pbuz1_derefidx_vbuaa=vbuz1 < pbuz1_derefidx_vbuyy=vbuz1 < pbuz1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:13.0 pbuz1_derefidx_vbuxx=vbuz1 < pbuz1_derefidx_vbuaa=vbuz1 < pbuz1_derefidx_vbuyy=vbuz1 < pbuz1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:13.0
@ -721,16 +719,15 @@ pbuz1_derefidx_vbuxx=vbuz1 < pbuz1_derefidx_vbuaa=vbuz1 < pbuz1_derefidx_vbuyy=v
tay tay
lda {z2} lda {z2}
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuxx=_deref_pbuz1 < pbuz1_derefidx_vbuxx=vbuaa - clobber:A Y cycles:19.5 pbuz1_derefidx_vbuxx=_deref_pbuz1 < pbuz1_derefidx_vbuxx=vbuaa < vbuaa=vbuaa - clobber:A Y cycles:19.5
ldy #0 ldy #0
lda ({z1}),y lda ({z1}),y
stx $ff stx $ff
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuxx=_deref_pbuz2 < pbuz1_derefidx_vbuaa=_deref_pbuz2 < pbuz1_derefidx_vbuyy=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:23.5 pbuz1_derefidx_vbuxx=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:19.5
txa stx $ff
tay
sty $ff
ldy #0 ldy #0
lda ({z2}),y lda ({z2}),y
@ -747,57 +744,60 @@ CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuyy
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuz1 CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuz1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuz2 CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuc1 CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuc1
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuaa pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:19.5
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 stx $ff
txa
tay
sty $ff
lda ({z2}),y
ldy $ff
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuyy
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 tay
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:21.5
stx $ff
txa txa
tay tay
sty $ff lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:17.5
stx $ff
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:20.5
ldy {z1}
stx $ff
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuz2 < pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:20.5
ldy {z2} ldy {z2}
stx $ff
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuz3 < pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:20.5
txa
tay
sty $ff
ldy {z3} ldy {z3}
lda ({z2}),y stx $ff
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 lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuc1 < pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:19.5
ldy #{c1}
stx $ff
lda ({z2}),y
ldy $ff
sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuaa < vbuaa=pbuc1_derefidx_vbuyy - clobber:A Y cycles:18.5
stx $ff
tay tay
lda {c1},y lda {c1},y
stx $ff
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:14.5 pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:14.5
@ -805,9 +805,10 @@ pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuaa=pbuc1_derefidx_
tay tay
lda {c1},y lda {c1},y
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuxx=vbuaa - clobber:A Y cycles:16.5 pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuxx=vbuaa < vbuaa=vbuaa - clobber:A Y cycles:16.5
lda {c1},y lda {c1},y
stx $ff stx $ff
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=vbuaa - clobber:A X Y cycles:17.5 pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx < pbuz1_derefidx_vbuyy=vbuaa - clobber:A X Y cycles:17.5
@ -816,10 +817,11 @@ pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_
tay tay
lda {c1},x lda {c1},x
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuxx=vbuaa - clobber:A Y cycles:19.5 pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz1 < pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuxx=vbuaa < vbuaa=vbuaa - clobber:A Y cycles:19.5
ldy {z1} ldy {z1}
lda {c1},y lda {c1},y
stx $ff stx $ff
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz2 < 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:17.5 pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz2 < 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:17.5
@ -828,10 +830,11 @@ pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz2 < pbuz1_derefidx_vbuaa=pbuc1_derefidx_
tay tay
lda {c1},x lda {c1},x
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz2 < pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuxx=vbuaa - clobber:A Y cycles:19.5 pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz2 < pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuyy < pbuz1_derefidx_vbuxx=vbuaa < vbuaa=vbuaa - clobber:A Y cycles:19.5
ldy {z2} ldy {z2}
lda {c1},y lda {c1},y
stx $ff stx $ff
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuc1 CANNOT SYNTHESIZE pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuc1
@ -855,12 +858,13 @@ pbuz1_derefidx_vbuyy=vbuz1 < pbuz1_derefidx_vbuyy=vbuaa - clobber:A cycles:9.0
pbuz1_derefidx_vbuyy=vbuz2 < pbuz1_derefidx_vbuyy=vbuaa - clobber:A cycles:9.0 pbuz1_derefidx_vbuyy=vbuz2 < pbuz1_derefidx_vbuyy=vbuaa - clobber:A cycles:9.0
lda {z2} lda {z2}
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuyy=_deref_pbuz1 < pbuz1_derefidx_vbuaa=_deref_pbuz1 < pbuz1_derefidx_vbuxx=_deref_pbuz1 < pbuz1_derefidx_vbuxx=vbuaa - clobber:A X Y cycles:23.5 pbuz1_derefidx_vbuyy=_deref_pbuz1 < pbuz1_derefidx_vbuaa=_deref_pbuz1 < pbuz1_derefidx_vbuxx=_deref_pbuz1 < pbuz1_derefidx_vbuxx=vbuaa < vbuaa=vbuaa - clobber:A X Y cycles:23.5
tya tya
tax tax
ldy #0 ldy #0
lda ({z1}),y lda ({z1}),y
stx $ff stx $ff
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuyy=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:19.5 pbuz1_derefidx_vbuyy=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:19.5
@ -998,9 +1002,9 @@ pbuz1_derefidx_vbuz1=_deref_pbuz1 < pbuz1_derefidx_vbuz1=vbuaa < pbuz1_derefidx_
lda ({z1}),y lda ({z1}),y
ldy {z1} ldy {z1}
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuz1=_deref_pbuz2 < pbuz1_derefidx_vbuyy=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:22.5 pbuz1_derefidx_vbuz1=_deref_pbuz2 < pbuz1_derefidx_vbuaa=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:22.5
ldy {z1} lda {z1}
sty $ff sta $ff
ldy #0 ldy #0
lda ({z2}),y lda ({z2}),y
@ -1024,54 +1028,51 @@ pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuz2_derefidx_
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuxx < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:24.5
ldy {z1} lda {z1}
sty $ff sta $ff
txa txa
tay tay
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuyy < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:20.5
tya lda {z1}
ldy {z1} sta $ff
sty $ff
tay
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
lda {z1} lda {z1}
ldy {z1} ldy {z1}
sty $ff sta $ff
tay
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuz2 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz2 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
ldy {z1} lda {z1}
sty $ff
ldy {z2} ldy {z2}
sta $ff
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuz3 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz3 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
ldy {z1} lda {z1}
sty $ff
ldy {z3} ldy {z3}
sta $ff
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuz1=pbuz2_derefidx_vbuc1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuc1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
ldy {z1} lda {z1}
sty $ff
ldy #{c1} ldy #{c1}
sta $ff
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
@ -1132,9 +1133,9 @@ pbuz1_derefidx_vbuz2=_deref_pbuz1 < pbuz1_derefidx_vbuz2=vbuaa - clobber:A Y cy
lda ({z1}),y lda ({z1}),y
ldy {z2} ldy {z2}
sta ({z1}),y sta ({z1}),y
pbuz1_derefidx_vbuz2=_deref_pbuz2 < pbuz1_derefidx_vbuyy=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:22.5 pbuz1_derefidx_vbuz2=_deref_pbuz2 < pbuz1_derefidx_vbuaa=_deref_pbuz2 < vbuaa=_deref_pbuz1 - clobber:A Y cycles:22.5
ldy {z2} lda {z2}
sty $ff sta $ff
ldy #0 ldy #0
lda ({z2}),y lda ({z2}),y
@ -1164,54 +1165,51 @@ pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuaa < pbuz1_derefidx_vbuyy=pbuz2_derefidx_
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuxx < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuxx < vbuaa=pbuz1_derefidx_vbuaa < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:24.5
ldy {z2} lda {z2}
sty $ff sta $ff
txa txa
tay tay
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuyy < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:20.5
tya lda {z2}
ldy {z2} sta $ff
sty $ff
tay
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
lda {z1} lda {z2}
ldy {z2} ldy {z1}
sty $ff sta $ff
tay
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuz2 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz2 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
lda {z2}
ldy {z2} ldy {z2}
sty $ff sta $ff
ldy {z2}
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuz3 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz3 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
ldy {z2} lda {z2}
sty $ff
ldy {z3} ldy {z3}
sta $ff
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y 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 pbuz1_derefidx_vbuz2=pbuz2_derefidx_vbuc1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuc1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:22.5
ldy {z2} lda {z2}
sty $ff
ldy #{c1} ldy #{c1}
sta $ff
lda ({z2}),y lda ({z2}),y
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y
@ -1245,11 +1243,11 @@ pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz3 < vbuaa=pbuz1_derefidx_vbuz1 < vbuaa=p
lda ({z3}),y lda ({z3}),y
ldy {z2} ldy {z2}
sta ({z1}),y sta ({z1}),y
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 pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz3 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.5
ldy {z2} lda {z2}
sty $ff
ldy {z4} ldy {z4}
sta $ff
lda ({z3}),y lda ({z3}),y
ldy $ff ldy $ff
sta ({z1}),y sta ({z1}),y

File diff suppressed because it is too large Load Diff

View File

@ -176,12 +176,12 @@ point_init: {
b10: b10:
lda abs16s2_return+1 lda abs16s2_return+1
cmp abs16s1_return+1 cmp abs16s1_return+1
bcc b1
bne !+ bne !+
lda abs16s2_return lda abs16s2_return
cmp abs16s1_return cmp abs16s1_return
!:
bcc b1 bcc b1
beq b1 !:
b2: b2:
ldy point_idx ldy point_idx
lda x_start,y lda x_start,y

View File

@ -3440,12 +3440,12 @@ point_init: {
//SEG85 [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 -- vwuz1_gt_vwuz2_then_la1 //SEG85 [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 -- vwuz1_gt_vwuz2_then_la1
lda abs16s2_return+1 lda abs16s2_return+1
cmp abs16s1_return+1 cmp abs16s1_return+1
bcc b1
bne !+ bne !+
lda abs16s2_return lda abs16s2_return
cmp abs16s1_return cmp abs16s1_return
!:
bcc b1 bcc b1
beq b1 !:
//SEG86 [47] phi from point_init::@10 point_init::@11 to point_init::@2 [phi:point_init::@10/point_init::@11->point_init::@2] //SEG86 [47] phi from point_init::@10 point_init::@11 to point_init::@2 [phi:point_init::@10/point_init::@11->point_init::@2]
b2_from_b10: b2_from_b10:
b2_from_b11: b2_from_b11:
@ -4862,12 +4862,12 @@ point_init: {
//SEG85 [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 -- vwuz1_gt_vwuz2_then_la1 //SEG85 [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 -- vwuz1_gt_vwuz2_then_la1
lda abs16s2_return+1 lda abs16s2_return+1
cmp abs16s1_return+1 cmp abs16s1_return+1
bcc b1
bne !+ bne !+
lda abs16s2_return lda abs16s2_return
cmp abs16s1_return cmp abs16s1_return
!:
bcc b1 bcc b1
beq b1 !:
//SEG86 [47] phi from point_init::@10 point_init::@11 to point_init::@2 [phi:point_init::@10/point_init::@11->point_init::@2] //SEG86 [47] phi from point_init::@10 point_init::@11 to point_init::@2 [phi:point_init::@10/point_init::@11->point_init::@2]
b2_from_b10: b2_from_b10:
b2_from_b11: b2_from_b11:
@ -6405,12 +6405,12 @@ point_init: {
//SEG85 [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 -- vwuz1_gt_vwuz2_then_la1 //SEG85 [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 -- vwuz1_gt_vwuz2_then_la1
lda abs16s2_return+1 lda abs16s2_return+1
cmp abs16s1_return+1 cmp abs16s1_return+1
bcc b1
bne !+ bne !+
lda abs16s2_return lda abs16s2_return
cmp abs16s1_return cmp abs16s1_return
!:
bcc b1 bcc b1
beq b1 !:
//SEG86 [47] phi from point_init::@10 point_init::@11 to point_init::@2 [phi:point_init::@10/point_init::@11->point_init::@2] //SEG86 [47] phi from point_init::@10 point_init::@11 to point_init::@2 [phi:point_init::@10/point_init::@11->point_init::@2]
//SEG87 [47] phi (signed word) rem16s#13 = (signed word) rem16s#15 [phi:point_init::@10/point_init::@11->point_init::@2#0] -- register_copy //SEG87 [47] phi (signed word) rem16s#13 = (signed word) rem16s#15 [phi:point_init::@10/point_init::@11->point_init::@2#0] -- register_copy
//SEG88 [47] phi (word) rem16u#18 = (word) rem16u#21 [phi:point_init::@10/point_init::@11->point_init::@2#1] -- register_copy //SEG88 [47] phi (word) rem16u#18 = (word) rem16u#21 [phi:point_init::@10/point_init::@11->point_init::@2#1] -- register_copy

View File

@ -0,0 +1,403 @@
// Test signed word comparisons
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.const LT = 0
.const LE = 1
.const GT = 2
.const GE = 3
.const EQ = 4
.const NE = 5
// empty circle
.const FF = $57
// filled circle
.const TT = $51
.label print_char_cursor = $c
.label print_line_cursor = 5
main: {
.label w1 = $f
.label w2 = $11
.label s = 4
.label j = 3
.label i = 2
jsr print_cls
lda #<$400
sta print_line_cursor
lda #>$400
sta print_line_cursor+1
lda #0
sta s
lda #<$400
sta print_char_cursor
lda #>$400
sta print_char_cursor+1
lda #0
sta i
b1:
lda i
asl
tay
lda swords,y
sta w1
lda swords+1,y
sta w1+1
lda #0
sta j
b2:
lda j
asl
tay
lda swords,y
sta w2
lda swords+1,y
sta w2+1
ldx #0
b3:
lda w1
sta compare.w1
lda w1+1
sta compare.w1+1
jsr compare
inc s
lda s
cmp #3
bne b4
jsr print_ln
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
sta print_char_cursor+1
lda #0
sta s
b4:
inx
cpx #6
bne b3
inc j
lda j
cmp #3
bne b2
inc i
lda i
cmp #3
bne b1
b6:
jmp b6
}
// Print a newline
print_ln: {
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
}
// Compare two words using an operator
// compare(signed word zeropage($a) w1, signed word zeropage($11) w2, byte register(X) op)
compare: {
.label w1 = $a
.label w2 = $11
.label ops = 7
.label r = 9
cpx #LT
bne !b1+
jmp b1
!b1:
cpx #LE
bne !b2+
jmp b2
!b2:
cpx #GT
bne !b3+
jmp b3
!b3:
cpx #GE
bne !b4+
jmp b4
!b4:
cpx #EQ
beq b5
cpx #NE
bne b8
lda w1
cmp w2
bne !+
lda w1+1
cmp w2+1
beq b6
!:
lda #TT
sta r
jmp b7
b6:
lda #FF
sta r
b7:
lda #<ops_1
sta ops
lda #>ops_1
sta ops+1
jmp b16
b8:
lda #FF
sta r
lda #<0
sta ops
sta ops+1
b16:
lda w1+1
bmi b18
lda #' '
jsr print_char
b18:
jsr print_sword
jsr print_str
lda w2+1
bmi b19
lda #' '
jsr print_char
b19:
lda w2
sta print_sword.w
lda w2+1
sta print_sword.w+1
jsr print_sword
lda r
jsr print_char
rts
b5:
lda w1+1
cmp w2+1
bne b10
lda w1
cmp w2
bne b10
lda #TT
sta r
jmp b9
b10:
lda #FF
sta r
b9:
lda #<ops_2
sta ops
lda #>ops_2
sta ops+1
jmp b16
b4:
lda w2
cmp w1
lda w2+1
sbc w1+1
bvc !+
eor #$80
!:
beq !e+
bpl b12
!e:
lda #TT
sta r
jmp b11
b12:
lda #FF
sta r
b11:
lda #<ops_3
sta ops
lda #>ops_3
sta ops+1
jmp b16
b3:
lda w2
cmp w1
lda w2+1
sbc w1+1
bvc !+
eor #$80
!:
bpl b14
lda #TT
sta r
jmp b13
b14:
lda #FF
sta r
b13:
lda #<ops_4
sta ops
lda #>ops_4
sta ops+1
jmp b16
b2:
lda w1
cmp w2
lda w1+1
sbc w2+1
bvc !+
eor #$80
!:
beq !e+
bpl b20
!e:
lda #TT
sta r
jmp b15
b20:
lda #FF
sta r
b15:
lda #<ops_5
sta ops
lda #>ops_5
sta ops+1
jmp b16
b1:
lda w1
cmp w2
lda w1+1
sbc w2+1
bvc !+
eor #$80
!:
bpl b21
lda #TT
sta r
jmp b17
b21:
lda #FF
sta r
b17:
lda #<ops_6
sta ops
lda #>ops_6
sta ops+1
jmp b16
ops_1: .text "!=@"
ops_2: .text "==@"
ops_3: .text ">=@"
ops_4: .text "> @"
ops_5: .text "<=@"
ops_6: .text "< @"
}
// Print a single char
// print_char(byte register(A) ch)
print_char: {
ldy #0
sta (print_char_cursor),y
inc print_char_cursor
bne !+
inc print_char_cursor+1
!:
rts
}
// Print a signed word as HEX
// print_sword(signed word zeropage($a) w)
print_sword: {
.label w = $a
lda w+1
bpl b1
lda #'-'
jsr print_char
sec
lda w
eor #$ff
adc #0
sta w
lda w+1
eor #$ff
adc #0
sta w+1
b1:
jsr print_word
rts
}
// Print a word as HEX
print_word: {
lda print_sword.w+1
sta print_byte.b
jsr print_byte
lda print_sword.w
sta print_byte.b
jsr print_byte
rts
}
// Print a byte as HEX
// print_byte(byte zeropage($e) b)
print_byte: {
.label b = $e
lda b
lsr
lsr
lsr
lsr
tay
lda print_hextab,y
jsr print_char
lda #$f
and b
tay
lda print_hextab,y
jsr print_char
rts
}
// Print a zero-terminated string
// print_str(byte* zeropage(7) str)
print_str: {
.label str = 7
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
}
// Clear the screen. Also resets current line/char cursor.
print_cls: {
.label sc = 5
lda #<$400
sta sc
lda #>$400
sta sc+1
b1:
lda #' '
ldy #0
sta (sc),y
inc sc
bne !+
inc sc+1
!:
lda sc+1
cmp #>$400+$3e8
bne b1
lda sc
cmp #<$400+$3e8
bne b1
rts
}
print_hextab: .text "0123456789abcdef"
swords: .word -$6fed, $12, $7fed

View File

@ -0,0 +1,269 @@
@begin: scope:[] from
[0] phi()
to:@25
@25: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @25
[3] phi()
main: scope:[main] from @25
[4] phi()
[5] call print_cls
to:main::@1
main::@1: scope:[main] from main main::@10
[6] (byte*) print_line_cursor#32 ← phi( main::@10/(byte*) print_line_cursor#23 main/((byte*))(word/signed word/dword/signed dword) $400 )
[6] (byte) main::s#7 ← phi( main::@10/(byte) main::s#10 main/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[6] (byte*) print_char_cursor#81 ← phi( main::@10/(byte*) print_char_cursor#76 main/((byte*))(word/signed word/dword/signed dword) $400 )
[6] (byte) main::i#2 ← phi( main::@10/(byte) main::i#1 main/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[7] (byte~) main::$1 ← (byte) main::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[8] (signed word) main::w1#0 ← *((const signed word[]) swords#0 + (byte~) main::$1)
to:main::@2
main::@2: scope:[main] from main::@1 main::@9
[9] (byte*) print_line_cursor#30 ← phi( main::@1/(byte*) print_line_cursor#32 main::@9/(byte*) print_line_cursor#23 )
[9] (byte) main::s#5 ← phi( main::@1/(byte) main::s#7 main::@9/(byte) main::s#10 )
[9] (byte*) print_char_cursor#75 ← phi( main::@1/(byte*) print_char_cursor#81 main::@9/(byte*) print_char_cursor#76 )
[9] (byte) main::j#2 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@9/(byte) main::j#1 )
[10] (byte~) main::$2 ← (byte) main::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[11] (signed word) main::w2#0 ← *((const signed word[]) swords#0 + (byte~) main::$2)
to:main::@3
main::@3: scope:[main] from main::@2 main::@4
[12] (byte*) print_line_cursor#19 ← phi( main::@2/(byte*) print_line_cursor#30 main::@4/(byte*) print_line_cursor#23 )
[12] (byte) main::s#3 ← phi( main::@2/(byte) main::s#5 main::@4/(byte) main::s#10 )
[12] (byte*) print_char_cursor#67 ← phi( main::@2/(byte*) print_char_cursor#75 main::@4/(byte*) print_char_cursor#76 )
[12] (byte) main::op#2 ← phi( main::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@4/(byte) main::op#1 )
[13] (signed word) compare::w1#0 ← (signed word) main::w1#0
[14] (signed word) compare::w2#0 ← (signed word) main::w2#0
[15] (byte) compare::op#0 ← (byte) main::op#2
[16] call compare
to:main::@16
main::@16: scope:[main] from main::@3
[17] (byte) main::s#1 ← ++ (byte) main::s#3
[18] if((byte) main::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@4
to:main::@8
main::@8: scope:[main] from main::@16
[19] phi()
[20] call print_ln
[21] (byte*~) print_char_cursor#116 ← (byte*) print_line_cursor#1
to:main::@4
main::@4: scope:[main] from main::@16 main::@8
[22] (byte*) print_line_cursor#23 ← phi( main::@16/(byte*) print_line_cursor#19 main::@8/(byte*) print_line_cursor#1 )
[22] (byte) main::s#10 ← phi( main::@16/(byte) main::s#1 main::@8/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[22] (byte*) print_char_cursor#76 ← phi( main::@16/(byte*) print_char_cursor#14 main::@8/(byte*~) print_char_cursor#116 )
[23] (byte) main::op#1 ← ++ (byte) main::op#2
[24] if((byte) main::op#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@3
to:main::@9
main::@9: scope:[main] from main::@4
[25] (byte) main::j#1 ← ++ (byte) main::j#2
[26] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@2
to:main::@10
main::@10: scope:[main] from main::@9
[27] (byte) main::i#1 ← ++ (byte) main::i#2
[28] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@1
to:main::@6
main::@6: scope:[main] from main::@10 main::@6
[29] phi()
to:main::@6
print_ln: scope:[print_ln] from main::@8
[30] phi()
to:print_ln::@1
print_ln::@1: scope:[print_ln] from print_ln print_ln::@1
[31] (byte*) print_line_cursor#9 ← phi( print_ln/(byte*) print_line_cursor#19 print_ln::@1/(byte*) print_line_cursor#1 )
[32] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte/signed byte/word/signed word/dword/signed dword) $28
[33] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#14) goto print_ln::@1
to:print_ln::@return
print_ln::@return: scope:[print_ln] from print_ln::@1
[34] return
to:@return
compare: scope:[compare] from main::@3
[35] if((byte) compare::op#0==(const byte) LT#0) goto compare::@1
to:compare::@20
compare::@20: scope:[compare] from compare
[36] if((byte) compare::op#0==(const byte) LE#0) goto compare::@2
to:compare::@21
compare::@21: scope:[compare] from compare::@20
[37] if((byte) compare::op#0==(const byte) GT#0) goto compare::@3
to:compare::@22
compare::@22: scope:[compare] from compare::@21
[38] if((byte) compare::op#0==(const byte) GE#0) goto compare::@4
to:compare::@23
compare::@23: scope:[compare] from compare::@22
[39] if((byte) compare::op#0==(const byte) EQ#0) goto compare::@5
to:compare::@24
compare::@24: scope:[compare] from compare::@23
[40] if((byte) compare::op#0!=(const byte) NE#0) goto compare::@16
to:compare::@25
compare::@25: scope:[compare] from compare::@24
[41] if((signed word) compare::w1#0==(signed word) compare::w2#0) goto compare::@7
to:compare::@26
compare::@26: scope:[compare] from compare::@25
[42] phi()
to:compare::@7
compare::@7: scope:[compare] from compare::@25 compare::@26
[43] (byte) compare::r#21 ← phi( compare::@25/(const byte) FF#0 compare::@26/(const byte) TT#0 )
to:compare::@16
compare::@16: scope:[compare] from compare::@11 compare::@13 compare::@15 compare::@17 compare::@24 compare::@7 compare::@9
[44] (byte) compare::r#10 ← phi( compare::@11/(byte) compare::r#16 compare::@13/(byte) compare::r#17 compare::@15/(byte) compare::r#18 compare::@17/(byte) compare::r#19 compare::@24/(const byte) FF#0 compare::@7/(byte) compare::r#21 compare::@9/(byte) compare::r#22 )
[44] (byte*) compare::ops#10 ← phi( compare::@11/(const byte*) compare::ops#3 compare::@13/(const byte*) compare::ops#4 compare::@15/(const byte*) compare::ops#5 compare::@17/(const byte*) compare::ops#6 compare::@24/(byte*) 0 compare::@7/(const byte*) compare::ops#1 compare::@9/(const byte*) compare::ops#2 )
[45] if((signed word) compare::w1#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto compare::@18
to:compare::@37
compare::@37: scope:[compare] from compare::@16
[46] phi()
[47] call print_char
to:compare::@18
compare::@18: scope:[compare] from compare::@16 compare::@37
[48] (byte*) print_char_cursor#70 ← phi( compare::@16/(byte*) print_char_cursor#67 compare::@37/(byte*) print_char_cursor#14 )
[49] (signed word) print_sword::w#1 ← (signed word) compare::w1#0
[50] call print_sword
to:compare::@39
compare::@39: scope:[compare] from compare::@18
[51] (byte*) print_str::str#1 ← (byte*) compare::ops#10
[52] call print_str
to:compare::@40
compare::@40: scope:[compare] from compare::@39
[53] if((signed word) compare::w2#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto compare::@19
to:compare::@38
compare::@38: scope:[compare] from compare::@40
[54] phi()
[55] call print_char
to:compare::@19
compare::@19: scope:[compare] from compare::@38 compare::@40
[56] (byte*) print_char_cursor#71 ← phi( compare::@40/(byte*) print_char_cursor#2 compare::@38/(byte*) print_char_cursor#14 )
[57] (signed word) print_sword::w#2 ← (signed word) compare::w2#0
[58] call print_sword
to:compare::@42
compare::@42: scope:[compare] from compare::@19
[59] (byte) print_char::ch#4 ← (byte) compare::r#10
[60] call print_char
to:compare::@return
compare::@return: scope:[compare] from compare::@42
[61] return
to:@return
compare::@5: scope:[compare] from compare::@23
[62] if((signed word) compare::w1#0!=(signed word) compare::w2#0) goto compare::@9
to:compare::@28
compare::@28: scope:[compare] from compare::@5
[63] phi()
to:compare::@9
compare::@9: scope:[compare] from compare::@28 compare::@5
[64] (byte) compare::r#22 ← phi( compare::@28/(const byte) TT#0 compare::@5/(const byte) FF#0 )
to:compare::@16
compare::@4: scope:[compare] from compare::@22
[65] if((signed word) compare::w1#0<(signed word) compare::w2#0) goto compare::@11
to:compare::@30
compare::@30: scope:[compare] from compare::@4
[66] phi()
to:compare::@11
compare::@11: scope:[compare] from compare::@30 compare::@4
[67] (byte) compare::r#16 ← phi( compare::@30/(const byte) TT#0 compare::@4/(const byte) FF#0 )
to:compare::@16
compare::@3: scope:[compare] from compare::@21
[68] if((signed word) compare::w1#0<=(signed word) compare::w2#0) goto compare::@13
to:compare::@32
compare::@32: scope:[compare] from compare::@3
[69] phi()
to:compare::@13
compare::@13: scope:[compare] from compare::@3 compare::@32
[70] (byte) compare::r#17 ← phi( compare::@3/(const byte) FF#0 compare::@32/(const byte) TT#0 )
to:compare::@16
compare::@2: scope:[compare] from compare::@20
[71] if((signed word) compare::w1#0>(signed word) compare::w2#0) goto compare::@15
to:compare::@34
compare::@34: scope:[compare] from compare::@2
[72] phi()
to:compare::@15
compare::@15: scope:[compare] from compare::@2 compare::@34
[73] (byte) compare::r#18 ← phi( compare::@2/(const byte) FF#0 compare::@34/(const byte) TT#0 )
to:compare::@16
compare::@1: scope:[compare] from compare
[74] if((signed word) compare::w1#0>=(signed word) compare::w2#0) goto compare::@17
to:compare::@36
compare::@36: scope:[compare] from compare::@1
[75] phi()
to:compare::@17
compare::@17: scope:[compare] from compare::@1 compare::@36
[76] (byte) compare::r#19 ← phi( compare::@1/(const byte) FF#0 compare::@36/(const byte) TT#0 )
to:compare::@16
print_char: scope:[print_char] from compare::@37 compare::@38 compare::@42 print_byte print_byte::@1 print_sword::@2
[77] (byte*) print_char_cursor#43 ← phi( compare::@37/(byte*) print_char_cursor#67 compare::@38/(byte*) print_char_cursor#2 compare::@42/(byte*) print_char_cursor#14 print_byte/(byte*) print_char_cursor#63 print_byte::@1/(byte*) print_char_cursor#14 print_sword::@2/(byte*) print_char_cursor#61 )
[77] (byte) print_char::ch#6 ← phi( compare::@37/(byte) ' ' compare::@38/(byte) ' ' compare::@42/(byte) print_char::ch#4 print_byte/(byte) print_char::ch#1 print_byte::@1/(byte) print_char::ch#2 print_sword::@2/(byte) '-' )
[78] *((byte*) print_char_cursor#43) ← (byte) print_char::ch#6
[79] (byte*) print_char_cursor#14 ← ++ (byte*) print_char_cursor#43
to:print_char::@return
print_char::@return: scope:[print_char] from print_char
[80] return
to:@return
print_sword: scope:[print_sword] from compare::@18 compare::@19
[81] (byte*) print_char_cursor#61 ← phi( compare::@18/(byte*) print_char_cursor#70 compare::@19/(byte*) print_char_cursor#71 )
[81] (signed word) print_sword::w#3 ← phi( compare::@18/(signed word) print_sword::w#1 compare::@19/(signed word) print_sword::w#2 )
[82] if((signed word) print_sword::w#3>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1
to:print_sword::@2
print_sword::@2: scope:[print_sword] from print_sword
[83] phi()
[84] call print_char
to:print_sword::@4
print_sword::@4: scope:[print_sword] from print_sword::@2
[85] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#3
to:print_sword::@1
print_sword::@1: scope:[print_sword] from print_sword print_sword::@4
[86] (byte*) print_char_cursor#60 ← phi( print_sword/(byte*) print_char_cursor#61 print_sword::@4/(byte*) print_char_cursor#14 )
[86] (signed word) print_sword::w#4 ← phi( print_sword/(signed word) print_sword::w#3 print_sword::@4/(signed word) print_sword::w#0 )
[87] call print_word
to:print_sword::@return
print_sword::@return: scope:[print_sword] from print_sword::@1
[88] return
to:@return
print_word: scope:[print_word] from print_sword::@1
[89] (byte) print_byte::b#0 ← > (word)(signed word) print_sword::w#4
[90] call print_byte
to:print_word::@1
print_word::@1: scope:[print_word] from print_word
[91] (byte) print_byte::b#1 ← < (word)(signed word) print_sword::w#4
[92] call print_byte
to:print_word::@return
print_word::@return: scope:[print_word] from print_word::@1
[93] return
to:@return
print_byte: scope:[print_byte] from print_word print_word::@1
[94] (byte*) print_char_cursor#63 ← phi( print_word/(byte*) print_char_cursor#60 print_word::@1/(byte*) print_char_cursor#14 )
[94] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
[95] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[96] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0)
[97] call print_char
to:print_byte::@1
print_byte::@1: scope:[print_byte] from print_byte
[98] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
[99] (byte) print_char::ch#2 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2)
[100] call print_char
to:print_byte::@return
print_byte::@return: scope:[print_byte] from print_byte::@1
[101] return
to:@return
print_str: scope:[print_str] from compare::@39
[102] phi()
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[103] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#14 print_str::@2/(byte*) print_char_cursor#1 )
[103] (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#1 print_str::@2/(byte*) print_str::str#0 )
[104] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[105] return
to:@return
print_str::@2: scope:[print_str] from print_str::@1
[106] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2)
[107] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2
[108] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#2
to:print_str::@1
print_cls: scope:[print_cls] from main
[109] phi()
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[110] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) $400 print_cls::@1/(byte*) print_cls::sc#1 )
[111] *((byte*) print_cls::sc#2) ← (byte) ' '
[112] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[113] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
[114] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,278 @@
(label) @25
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) EQ
(const byte) EQ#0 EQ = (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) FF
(const byte) FF#0 FF = (byte/signed byte/word/signed word/dword/signed dword) $57
(byte) GE
(const byte) GE#0 GE = (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) GREEN
(byte) GREY
(byte) GT
(const byte) GT#0 GT = (byte/signed byte/word/signed word/dword/signed dword) 2
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte) LE
(const byte) LE#0 LE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) LT
(const byte) LT#0 LT = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) NE
(const byte) NE#0 NE = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) TT
(const byte) TT#0 TT = (byte/signed byte/word/signed word/dword/signed dword) $51
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) compare((signed word) compare::w1 , (signed word) compare::w2 , (byte) compare::op)
(label) compare::@1
(label) compare::@11
(label) compare::@13
(label) compare::@15
(label) compare::@16
(label) compare::@17
(label) compare::@18
(label) compare::@19
(label) compare::@2
(label) compare::@20
(label) compare::@21
(label) compare::@22
(label) compare::@23
(label) compare::@24
(label) compare::@25
(label) compare::@26
(label) compare::@28
(label) compare::@3
(label) compare::@30
(label) compare::@32
(label) compare::@34
(label) compare::@36
(label) compare::@37
(label) compare::@38
(label) compare::@39
(label) compare::@4
(label) compare::@40
(label) compare::@42
(label) compare::@5
(label) compare::@7
(label) compare::@9
(label) compare::@return
(byte) compare::op
(byte) compare::op#0 reg byte x 168.8333333333334
(byte*) compare::ops
(const byte*) compare::ops#1 ops#1 = (string) "!=@"
(byte*) compare::ops#10 ops zp ZP_WORD:7 0.2857142857142857
(const byte*) compare::ops#2 ops#2 = (string) "==@"
(const byte*) compare::ops#3 ops#3 = (string) ">=@"
(const byte*) compare::ops#4 ops#4 = (string) "> @"
(const byte*) compare::ops#5 ops#5 = (string) "<=@"
(const byte*) compare::ops#6 ops#6 = (string) "< @"
(byte) compare::r
(byte) compare::r#10 r zp ZP_BYTE:9 0.9333333333333332
(byte) compare::r#16 r zp ZP_BYTE:9 2.0
(byte) compare::r#17 r zp ZP_BYTE:9 2.0
(byte) compare::r#18 r zp ZP_BYTE:9 2.0
(byte) compare::r#19 r zp ZP_BYTE:9 2.0
(byte) compare::r#21 r zp ZP_BYTE:9 2.0
(byte) compare::r#22 r zp ZP_BYTE:9 2.0
(signed word) compare::w1
(signed word) compare::w1#0 w1 zp ZP_WORD:10 31.78125
(signed word) compare::w2
(signed word) compare::w2#0 w2 zp ZP_WORD:17 26.076923076923077
(void()) main()
(byte~) main::$1 reg byte a 22.0
(byte~) main::$2 reg byte a 202.0
(label) main::@1
(label) main::@10
(label) main::@16
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@6
(label) main::@8
(label) main::@9
(byte) main::i
(byte) main::i#1 i zp ZP_BYTE:2 16.5
(byte) main::i#2 i zp ZP_BYTE:2 1.5714285714285716
(byte) main::j
(byte) main::j#1 j zp ZP_BYTE:3 151.5
(byte) main::j#2 j zp ZP_BYTE:3 18.9375
(byte) main::op
(byte) main::op#1 reg byte x 1501.5
(byte) main::op#2 reg byte x 273.0
(byte) main::s
(byte) main::s#1 s zp ZP_BYTE:4 1501.5
(byte) main::s#10 s zp ZP_BYTE:4 302.0
(byte) main::s#3 s zp ZP_BYTE:4 420.59999999999997
(byte) main::s#5 s zp ZP_BYTE:4 71.0
(byte) main::s#7 s zp ZP_BYTE:4 7.333333333333333
(signed word) main::w1
(signed word) main::w1#0 w1 zp ZP_WORD:15 53.26315789473684
(signed word) main::w2
(signed word) main::w2#0 w2 zp ZP_WORD:17 78.71428571428571
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0
(label) print_byte::@1
(label) print_byte::@return
(byte) print_byte::b
(byte) print_byte::b#0 b zp ZP_BYTE:14 4.0
(byte) print_byte::b#1 b zp ZP_BYTE:14 4.0
(byte) print_byte::b#2 b zp ZP_BYTE:14 2.0
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(byte) print_char::ch#1 reg byte a 4.0
(byte) print_char::ch#2 reg byte a 4.0
(byte) print_char::ch#4 reg byte a 4.0
(byte) print_char::ch#6 reg byte a 8.0
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:12 10001.0
(byte*~) print_char_cursor#116 print_char_cursor zp ZP_WORD:12 2002.0
(byte*) print_char_cursor#14 print_char_cursor zp ZP_WORD:12 344.3125
(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:12 4287.0
(byte*) print_char_cursor#43 print_char_cursor zp ZP_WORD:12 8.0
(byte*) print_char_cursor#60 print_char_cursor zp ZP_WORD:12 3.0
(byte*) print_char_cursor#61 print_char_cursor zp ZP_WORD:12 2.6666666666666665
(byte*) print_char_cursor#63 print_char_cursor zp ZP_WORD:12 2.0
(byte*) print_char_cursor#67 print_char_cursor zp ZP_WORD:12 35.677419354838705
(byte*) print_char_cursor#70 print_char_cursor zp ZP_WORD:12 3.0
(byte*) print_char_cursor#71 print_char_cursor zp ZP_WORD:12 3.0
(byte*) print_char_cursor#75 print_char_cursor zp ZP_WORD:12 71.0
(byte*) print_char_cursor#76 print_char_cursor zp ZP_WORD:12 445.0
(byte*) print_char_cursor#81 print_char_cursor zp ZP_WORD:12 7.333333333333333
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:5 16.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:5 16.5
(byte[]) print_hextab
(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:5 6401.0
(byte*) print_line_cursor#19 print_line_cursor zp ZP_WORD:5 233.8888888888889
(byte*) print_line_cursor#23 print_line_cursor zp ZP_WORD:5 445.0
(byte*) print_line_cursor#30 print_line_cursor zp ZP_WORD:5 71.0
(byte*) print_line_cursor#32 print_line_cursor zp ZP_WORD:5 7.333333333333333
(byte*) print_line_cursor#9 print_line_cursor zp ZP_WORD:5 20004.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:7 20002.0
(byte*) print_str::str#1 str zp ZP_WORD:7 2.0
(byte*) print_str::str#2 str zp ZP_WORD:7 10001.5
(void()) print_sword((signed word) print_sword::w)
(label) print_sword::@1
(label) print_sword::@2
(label) print_sword::@4
(label) print_sword::@return
(signed word) print_sword::w
(signed word) print_sword::w#0 w zp ZP_WORD:10 4.0
(signed word) print_sword::w#1 w zp ZP_WORD:10 4.0
(signed word) print_sword::w#2 w zp ZP_WORD:10 4.0
(signed word) print_sword::w#3 w zp ZP_WORD:10 2.5
(signed word) print_sword::w#4 w zp ZP_WORD:10 1.3333333333333333
(void()) print_word((word) print_word::w)
(label) print_word::@1
(label) print_word::@return
(word) print_word::w
(signed word[]) swords
(const signed word[]) swords#0 swords = { -(word/signed word/dword/signed dword) $6fed, (byte/signed byte/word/signed word/dword/signed dword) $12, (word/signed word/dword/signed dword) $7fed }
zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
zp ZP_BYTE:3 [ main::j#2 main::j#1 ]
reg byte x [ main::op#2 main::op#1 ]
zp ZP_BYTE:4 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ]
zp ZP_WORD:5 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#30 print_line_cursor#32 print_line_cursor#23 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ]
zp ZP_WORD:7 [ compare::ops#10 print_str::str#2 print_str::str#1 print_str::str#0 ]
zp ZP_BYTE:9 [ compare::r#10 compare::r#16 compare::r#17 compare::r#18 compare::r#19 compare::r#21 compare::r#22 ]
reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#1 print_char::ch#2 ]
zp ZP_WORD:10 [ print_sword::w#4 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_sword::w#0 compare::w1#0 ]
zp ZP_WORD:12 [ print_char_cursor#60 print_char_cursor#43 print_char_cursor#71 print_char_cursor#2 print_char_cursor#70 print_char_cursor#67 print_char_cursor#75 print_char_cursor#81 print_char_cursor#76 print_char_cursor#14 print_char_cursor#116 print_char_cursor#63 print_char_cursor#61 print_char_cursor#1 ]
zp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
reg byte a [ main::$1 ]
zp ZP_WORD:15 [ main::w1#0 ]
reg byte a [ main::$2 ]
zp ZP_WORD:17 [ main::w2#0 compare::w2#0 ]
reg byte x [ compare::op#0 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]

View File

@ -1,12 +1,16 @@
.pc = $801 "Basic" .pc = $801 "Basic"
:BasicUpstart(main) :BasicUpstart(main)
.pc = $80d "Program" .pc = $80d "Program"
// empty circle
.const FF = $57
// filled circle
.const TT = $51
.label print_char_cursor = $c .label print_char_cursor = $c
.label print_line_cursor = 5 .label print_line_cursor = 5
main: { main: {
.label w1 = $f .label w1 = $f
.label w2 = $11 .label w2 = $11
.label ln = 4 .label s = 4
.label j = 3 .label j = 3
.label i = 2 .label i = 2
jsr print_cls jsr print_cls
@ -14,12 +18,13 @@ main: {
sta print_line_cursor sta print_line_cursor
lda #>$400 lda #>$400
sta print_line_cursor+1 sta print_line_cursor+1
lda #0
sta s
lda #<$400 lda #<$400
sta print_char_cursor sta print_char_cursor
lda #>$400 lda #>$400
sta print_char_cursor+1 sta print_char_cursor+1
lda #0 lda #0
sta ln
sta i sta i
b1: b1:
lda i lda i
@ -41,24 +46,22 @@ main: {
sta w2+1 sta w2+1
ldx #0 ldx #0
b3: b3:
lda ln
cmp #$32
bcs b4
lda w1 lda w1
sta compare.w1 sta compare.w1
lda w1+1 lda w1+1
sta compare.w1+1 sta compare.w1+1
jsr compare jsr compare
inc ln inc s
lda #1 lda s
and ln cmp #3
cmp #0
bne b4 bne b4
jsr print_ln jsr print_ln
lda print_line_cursor lda print_line_cursor
sta print_char_cursor sta print_char_cursor
lda print_line_cursor+1 lda print_line_cursor+1
sta print_char_cursor+1 sta print_char_cursor+1
lda #0
sta s
b4: b4:
inx inx
cpx #6 cpx #6
@ -71,8 +74,8 @@ main: {
lda i lda i
cmp #3 cmp #3
bne b1 bne b1
b7: b6:
jmp b7 jmp b6
} }
// Print a newline // Print a newline
print_ln: { print_ln: {
@ -114,13 +117,9 @@ compare: {
jmp b3 jmp b3
!b3: !b3:
cpx #3 cpx #3
bne !b4+ beq b4
jmp b4
!b4:
cpx #4 cpx #4
bne !b5+ beq b5
jmp b5
!b5:
cpx #5 cpx #5
bne b8 bne b8
lda w1 lda w1
@ -130,11 +129,11 @@ compare: {
cmp w2+1 cmp w2+1
beq b6 beq b6
!: !:
lda #'+' lda #TT
sta r sta r
jmp b7 jmp b7
b6: b6:
lda #'-' lda #FF
sta r sta r
b7: b7:
lda #<ops_1 lda #<ops_1
@ -143,45 +142,23 @@ compare: {
sta ops+1 sta ops+1
jmp b16 jmp b16
b8: b8:
lda #'-' lda #FF
sta r sta r
lda #<0 lda #<0
sta ops sta ops
sta ops+1 sta ops+1
b16: b16:
jsr print_word jsr print_word
lda #<str
sta print_str.str
lda #>str
sta print_str.str+1
jsr print_str
lda ops
sta print_str.str
lda ops+1
sta print_str.str+1
jsr print_str
lda #<str
sta print_str.str
lda #>str
sta print_str.str+1
jsr print_str jsr print_str
lda w2 lda w2
sta print_word.w sta print_word.w
lda w2+1 lda w2+1
sta print_word.w+1 sta print_word.w+1
jsr print_word jsr print_word
lda #<str
sta print_str.str
lda #>str
sta print_str.str+1
jsr print_str
lda r lda r
jsr print_char jsr print_char
lda #<str lda #' '
sta print_str.str jsr print_char
lda #>str
sta print_str.str+1
jsr print_str
rts rts
b5: b5:
lda w1+1 lda w1+1
@ -190,11 +167,11 @@ compare: {
lda w1 lda w1
cmp w2 cmp w2
bne b10 bne b10
lda #'+' lda #TT
sta r sta r
jmp b9 jmp b9
b10: b10:
lda #'-' lda #FF
sta r sta r
b9: b9:
lda #<ops_2 lda #<ops_2
@ -211,11 +188,11 @@ compare: {
cmp w2 cmp w2
bcc b12 bcc b12
!: !:
lda #'+' lda #TT
sta r sta r
jmp b11 jmp b11
b12: b12:
lda #'-' lda #FF
sta r sta r
b11: b11:
lda #<ops_3 lda #<ops_3
@ -232,11 +209,11 @@ compare: {
!: !:
bcc b14 bcc b14
beq b14 beq b14
lda #'+' lda #TT
sta r sta r
jmp b13 jmp b13
b14: b14:
lda #'-' lda #FF
sta r sta r
b13: b13:
lda #<ops_4 lda #<ops_4
@ -253,11 +230,11 @@ compare: {
cmp w1 cmp w1
bcc b18 bcc b18
!: !:
lda #'+' lda #TT
sta r sta r
jmp b15 jmp b15
b18: b18:
lda #'-' lda #FF
sta r sta r
b15: b15:
lda #<ops_5 lda #<ops_5
@ -274,11 +251,11 @@ compare: {
!: !:
bcc b19 bcc b19
beq b19 beq b19
lda #'+' lda #TT
sta r sta r
jmp b17 jmp b17
b19: b19:
lda #'-' lda #FF
sta r sta r
b17: b17:
lda #<ops_6 lda #<ops_6
@ -286,7 +263,6 @@ compare: {
lda #>ops_6 lda #>ops_6
sta ops+1 sta ops+1
jmp b16 jmp b16
str: .text " @"
ops_1: .text "!=@" ops_1: .text "!=@"
ops_2: .text "==@" ops_2: .text "==@"
ops_3: .text ">=@" ops_3: .text ">=@"
@ -294,30 +270,6 @@ compare: {
ops_5: .text "<=@" ops_5: .text "<=@"
ops_6: .text "< @" ops_6: .text "< @"
} }
// Print a zero-terminated string
// print_str(byte* zeropage($a) str)
print_str: {
.label str = $a
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
}
// Print a single char // Print a single char
// print_char(byte register(A) ch) // print_char(byte register(A) ch)
print_char: { print_char: {
@ -360,6 +312,30 @@ print_byte: {
jsr print_char jsr print_char
rts rts
} }
// Print a zero-terminated string
// print_str(byte* zeropage(7) str)
print_str: {
.label str = 7
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
}
// Clear the screen. Also resets current line/char cursor. // Clear the screen. Also resets current line/char cursor.
print_cls: { print_cls: {
.label sc = 5 .label sc = 5

View File

@ -11,246 +11,229 @@ main: scope:[main] from @25
[4] phi() [4] phi()
[5] call print_cls [5] call print_cls
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@12 main::@1: scope:[main] from main main::@10
[6] (byte*) print_line_cursor#33 ← phi( main::@12/(byte*) print_line_cursor#23 main/((byte*))(word/signed word/dword/signed dword) $400 ) [6] (byte*) print_line_cursor#32 ← phi( main::@10/(byte*) print_line_cursor#23 main/((byte*))(word/signed word/dword/signed dword) $400 )
[6] (byte*) print_char_cursor#95 ← phi( main::@12/(byte*) print_char_cursor#68 main/((byte*))(word/signed word/dword/signed dword) $400 ) [6] (byte) main::s#7 ← phi( main::@10/(byte) main::s#10 main/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[6] (byte) main::ln#7 ← phi( main::@12/(byte) main::ln#11 main/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [6] (byte*) print_char_cursor#73 ← phi( main::@10/(byte*) print_char_cursor#62 main/((byte*))(word/signed word/dword/signed dword) $400 )
[6] (byte) main::i#2 ← phi( main::@12/(byte) main::i#1 main/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [6] (byte) main::i#2 ← phi( main::@10/(byte) main::i#1 main/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[7] (byte~) main::$1 ← (byte) main::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [7] (byte~) main::$1 ← (byte) main::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[8] (word) main::w1#0 ← *((const word[]) words#0 + (byte~) main::$1) [8] (word) main::w1#0 ← *((const word[]) words#0 + (byte~) main::$1)
to:main::@2 to:main::@2
main::@2: scope:[main] from main::@1 main::@11 main::@2: scope:[main] from main::@1 main::@9
[9] (byte*) print_line_cursor#31 ← phi( main::@1/(byte*) print_line_cursor#33 main::@11/(byte*) print_line_cursor#23 ) [9] (byte*) print_line_cursor#30 ← phi( main::@1/(byte*) print_line_cursor#32 main::@9/(byte*) print_line_cursor#23 )
[9] (byte*) print_char_cursor#79 ← phi( main::@1/(byte*) print_char_cursor#95 main::@11/(byte*) print_char_cursor#68 ) [9] (byte) main::s#5 ← phi( main::@1/(byte) main::s#7 main::@9/(byte) main::s#10 )
[9] (byte) main::ln#4 ← phi( main::@1/(byte) main::ln#7 main::@11/(byte) main::ln#11 ) [9] (byte*) print_char_cursor#61 ← phi( main::@1/(byte*) print_char_cursor#73 main::@9/(byte*) print_char_cursor#62 )
[9] (byte) main::j#2 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@11/(byte) main::j#1 ) [9] (byte) main::j#2 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@9/(byte) main::j#1 )
[10] (byte~) main::$2 ← (byte) main::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [10] (byte~) main::$2 ← (byte) main::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[11] (word) main::w2#0 ← *((const word[]) words#0 + (byte~) main::$2) [11] (word) main::w2#0 ← *((const word[]) words#0 + (byte~) main::$2)
to:main::@3 to:main::@3
main::@3: scope:[main] from main::@2 main::@4 main::@3: scope:[main] from main::@2 main::@4
[12] (byte*) print_line_cursor#19 ← phi( main::@2/(byte*) print_line_cursor#31 main::@4/(byte*) print_line_cursor#23 ) [12] (byte*) print_line_cursor#19 ← phi( main::@2/(byte*) print_line_cursor#30 main::@4/(byte*) print_line_cursor#23 )
[12] (byte*) print_char_cursor#61 ← phi( main::@2/(byte*) print_char_cursor#79 main::@4/(byte*) print_char_cursor#68 ) [12] (byte) main::s#3 ← phi( main::@2/(byte) main::s#5 main::@4/(byte) main::s#10 )
[12] (byte*) print_char_cursor#55 ← phi( main::@2/(byte*) print_char_cursor#61 main::@4/(byte*) print_char_cursor#62 )
[12] (byte) main::op#2 ← phi( main::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@4/(byte) main::op#1 ) [12] (byte) main::op#2 ← phi( main::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@4/(byte) main::op#1 )
[12] (byte) main::ln#2 ← phi( main::@2/(byte) main::ln#4 main::@4/(byte) main::ln#11 ) [13] (word) compare::w1#0 ← (word) main::w1#0
[13] if((byte) main::ln#2>=(byte/signed byte/word/signed word/dword/signed dword) $32) goto main::@4 [14] (word) compare::w2#0 ← (word) main::w2#0
to:main::@9 [15] (byte) compare::op#0 ← (byte) main::op#2
main::@9: scope:[main] from main::@3 [16] call compare
[14] (word) compare::w1#0 ← (word) main::w1#0 to:main::@16
[15] (word) compare::w2#0 ← (word) main::w2#0 main::@16: scope:[main] from main::@3
[16] (byte) compare::op#0 ← (byte) main::op#2 [17] (byte) main::s#1 ← ++ (byte) main::s#3
[17] call compare [18] if((byte) main::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@4
to:main::@18 to:main::@8
main::@18: scope:[main] from main::@9 main::@8: scope:[main] from main::@16
[18] (byte) main::ln#1 ← ++ (byte) main::ln#2 [19] phi()
[19] (byte~) main::$6 ← (byte) main::ln#1 & (byte/signed byte/word/signed word/dword/signed dword) 1 [20] call print_ln
[20] if((byte~) main::$6!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@4 [21] (byte*~) print_char_cursor#101 ← (byte*) print_line_cursor#1
to:main::@10
main::@10: scope:[main] from main::@18
[21] phi()
[22] call print_ln
[23] (byte*~) print_char_cursor#107 ← (byte*) print_line_cursor#1
to:main::@4 to:main::@4
main::@4: scope:[main] from main::@10 main::@18 main::@3 main::@4: scope:[main] from main::@16 main::@8
[24] (byte*) print_line_cursor#23 ← phi( main::@10/(byte*) print_line_cursor#1 main::@3/(byte*) print_line_cursor#19 main::@18/(byte*) print_line_cursor#19 ) [22] (byte*) print_line_cursor#23 ← phi( main::@16/(byte*) print_line_cursor#19 main::@8/(byte*) print_line_cursor#1 )
[24] (byte*) print_char_cursor#68 ← phi( main::@10/(byte*~) print_char_cursor#107 main::@3/(byte*) print_char_cursor#61 main::@18/(byte*) print_char_cursor#2 ) [22] (byte) main::s#10 ← phi( main::@16/(byte) main::s#1 main::@8/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[24] (byte) main::ln#11 ← phi( main::@10/(byte) main::ln#1 main::@3/(byte) main::ln#2 main::@18/(byte) main::ln#1 ) [22] (byte*) print_char_cursor#62 ← phi( main::@16/(byte*) print_char_cursor#11 main::@8/(byte*~) print_char_cursor#101 )
[25] (byte) main::op#1 ← ++ (byte) main::op#2 [23] (byte) main::op#1 ← ++ (byte) main::op#2
[26] if((byte) main::op#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@3 [24] if((byte) main::op#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@3
to:main::@11 to:main::@9
main::@11: scope:[main] from main::@4 main::@9: scope:[main] from main::@4
[27] (byte) main::j#1 ← ++ (byte) main::j#2 [25] (byte) main::j#1 ← ++ (byte) main::j#2
[28] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@2 [26] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@2
to:main::@12 to:main::@10
main::@12: scope:[main] from main::@11 main::@10: scope:[main] from main::@9
[29] (byte) main::i#1 ← ++ (byte) main::i#2 [27] (byte) main::i#1 ← ++ (byte) main::i#2
[30] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@1 [28] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@1
to:main::@7 to:main::@6
main::@7: scope:[main] from main::@12 main::@7 main::@6: scope:[main] from main::@10 main::@6
[31] phi() [29] phi()
to:main::@7 to:main::@6
print_ln: scope:[print_ln] from main::@10 print_ln: scope:[print_ln] from main::@8
[32] phi() [30] phi()
to:print_ln::@1 to:print_ln::@1
print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@1
[33] (byte*) print_line_cursor#9 ← phi( print_ln/(byte*) print_line_cursor#19 print_ln::@1/(byte*) print_line_cursor#1 ) [31] (byte*) print_line_cursor#9 ← phi( print_ln/(byte*) print_line_cursor#19 print_ln::@1/(byte*) print_line_cursor#1 )
[34] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte/signed byte/word/signed word/dword/signed dword) $28 [32] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte/signed byte/word/signed word/dword/signed dword) $28
[35] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [33] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#11) goto print_ln::@1
to:print_ln::@return to:print_ln::@return
print_ln::@return: scope:[print_ln] from print_ln::@1 print_ln::@return: scope:[print_ln] from print_ln::@1
[36] return [34] return
to:@return to:@return
compare: scope:[compare] from main::@9 compare: scope:[compare] from main::@3
[37] if((byte) compare::op#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto compare::@1 [35] if((byte) compare::op#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto compare::@1
to:compare::@18 to:compare::@18
compare::@18: scope:[compare] from compare compare::@18: scope:[compare] from compare
[38] if((byte) compare::op#0==(byte/signed byte/word/signed word/dword/signed dword) 1) goto compare::@2 [36] if((byte) compare::op#0==(byte/signed byte/word/signed word/dword/signed dword) 1) goto compare::@2
to:compare::@19 to:compare::@19
compare::@19: scope:[compare] from compare::@18 compare::@19: scope:[compare] from compare::@18
[39] if((byte) compare::op#0==(byte/signed byte/word/signed word/dword/signed dword) 2) goto compare::@3 [37] if((byte) compare::op#0==(byte/signed byte/word/signed word/dword/signed dword) 2) goto compare::@3
to:compare::@20 to:compare::@20
compare::@20: scope:[compare] from compare::@19 compare::@20: scope:[compare] from compare::@19
[40] if((byte) compare::op#0==(byte/signed byte/word/signed word/dword/signed dword) 3) goto compare::@4 [38] if((byte) compare::op#0==(byte/signed byte/word/signed word/dword/signed dword) 3) goto compare::@4
to:compare::@21 to:compare::@21
compare::@21: scope:[compare] from compare::@20 compare::@21: scope:[compare] from compare::@20
[41] if((byte) compare::op#0==(byte/signed byte/word/signed word/dword/signed dword) 4) goto compare::@5 [39] if((byte) compare::op#0==(byte/signed byte/word/signed word/dword/signed dword) 4) goto compare::@5
to:compare::@22 to:compare::@22
compare::@22: scope:[compare] from compare::@21 compare::@22: scope:[compare] from compare::@21
[42] if((byte) compare::op#0!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto compare::@16 [40] if((byte) compare::op#0!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto compare::@16
to:compare::@23 to:compare::@23
compare::@23: scope:[compare] from compare::@22 compare::@23: scope:[compare] from compare::@22
[43] if((word) compare::w1#0==(word) compare::w2#0) goto compare::@7 [41] if((word) compare::w1#0==(word) compare::w2#0) goto compare::@7
to:compare::@24 to:compare::@24
compare::@24: scope:[compare] from compare::@23 compare::@24: scope:[compare] from compare::@23
[44] phi() [42] phi()
to:compare::@7 to:compare::@7
compare::@7: scope:[compare] from compare::@23 compare::@24 compare::@7: scope:[compare] from compare::@23 compare::@24
[45] (byte) compare::r#19 ← phi( compare::@23/(byte) '-' compare::@24/(byte) '+' ) [43] (byte) compare::r#16 ← phi( compare::@23/(const byte) FF#0 compare::@24/(const byte) TT#0 )
to:compare::@16 to:compare::@16
compare::@16: scope:[compare] from compare::@11 compare::@13 compare::@15 compare::@17 compare::@22 compare::@7 compare::@9 compare::@16: scope:[compare] from compare::@11 compare::@13 compare::@15 compare::@17 compare::@22 compare::@7 compare::@9
[46] (byte) compare::r#10 ← phi( compare::@11/(byte) compare::r#14 compare::@13/(byte) compare::r#15 compare::@15/(byte) compare::r#16 compare::@17/(byte) compare::r#17 compare::@22/(byte) '-' compare::@7/(byte) compare::r#19 compare::@9/(byte) compare::r#20 ) [44] (byte) compare::r#10 ← phi( compare::@11/(byte) compare::r#11 compare::@13/(byte) compare::r#12 compare::@15/(byte) compare::r#13 compare::@17/(byte) compare::r#14 compare::@22/(const byte) FF#0 compare::@7/(byte) compare::r#16 compare::@9/(byte) compare::r#17 )
[46] (byte*) compare::ops#7 ← phi( compare::@11/(const byte*) compare::ops#3 compare::@13/(const byte*) compare::ops#4 compare::@15/(const byte*) compare::ops#5 compare::@17/(const byte*) compare::ops#6 compare::@22/(byte*) 0 compare::@7/(const byte*) compare::ops#1 compare::@9/(const byte*) compare::ops#2 ) [44] (byte*) compare::ops#7 ← phi( compare::@11/(const byte*) compare::ops#3 compare::@13/(const byte*) compare::ops#4 compare::@15/(const byte*) compare::ops#5 compare::@17/(const byte*) compare::ops#6 compare::@22/(byte*) 0 compare::@7/(const byte*) compare::ops#1 compare::@9/(const byte*) compare::ops#2 )
[47] (word) print_word::w#0 ← (word) compare::w1#0 [45] (word) print_word::w#0 ← (word) compare::w1#0
[48] call print_word [46] call print_word
to:compare::@35 to:compare::@35
compare::@35: scope:[compare] from compare::@16 compare::@35: scope:[compare] from compare::@16
[49] phi() [47] (byte*) print_str::str#1 ← (byte*) compare::ops#7
[50] call print_str [48] call print_str
to:compare::@36 to:compare::@36
compare::@36: scope:[compare] from compare::@35 compare::@36: scope:[compare] from compare::@35
[51] (byte*) print_str::str#2 ← (byte*) compare::ops#7 [49] (word) print_word::w#1 ← (word) compare::w2#0
[52] call print_str [50] call print_word
to:compare::@37 to:compare::@37
compare::@37: scope:[compare] from compare::@36 compare::@37: scope:[compare] from compare::@36
[53] phi() [51] (byte) print_char::ch#2 ← (byte) compare::r#10
[54] call print_str [52] call print_char
to:compare::@38 to:compare::@38
compare::@38: scope:[compare] from compare::@37 compare::@38: scope:[compare] from compare::@37
[55] (word) print_word::w#1 ← (word) compare::w2#0 [53] phi()
[56] call print_word [54] call print_char
to:compare::@39
compare::@39: scope:[compare] from compare::@38
[57] phi()
[58] call print_str
to:compare::@40
compare::@40: scope:[compare] from compare::@39
[59] (byte) print_char::ch#2 ← (byte) compare::r#10
[60] call print_char
to:compare::@41
compare::@41: scope:[compare] from compare::@40
[61] phi()
[62] call print_str
to:compare::@return to:compare::@return
compare::@return: scope:[compare] from compare::@41 compare::@return: scope:[compare] from compare::@38
[63] return [55] return
to:@return to:@return
compare::@5: scope:[compare] from compare::@21 compare::@5: scope:[compare] from compare::@21
[64] if((word) compare::w1#0!=(word) compare::w2#0) goto compare::@9 [56] if((word) compare::w1#0!=(word) compare::w2#0) goto compare::@9
to:compare::@26 to:compare::@26
compare::@26: scope:[compare] from compare::@5 compare::@26: scope:[compare] from compare::@5
[65] phi() [57] phi()
to:compare::@9 to:compare::@9
compare::@9: scope:[compare] from compare::@26 compare::@5 compare::@9: scope:[compare] from compare::@26 compare::@5
[66] (byte) compare::r#20 ← phi( compare::@26/(byte) '+' compare::@5/(byte) '-' ) [58] (byte) compare::r#17 ← phi( compare::@26/(const byte) TT#0 compare::@5/(const byte) FF#0 )
to:compare::@16 to:compare::@16
compare::@4: scope:[compare] from compare::@20 compare::@4: scope:[compare] from compare::@20
[67] if((word) compare::w1#0<(word) compare::w2#0) goto compare::@11 [59] if((word) compare::w1#0<(word) compare::w2#0) goto compare::@11
to:compare::@28 to:compare::@28
compare::@28: scope:[compare] from compare::@4 compare::@28: scope:[compare] from compare::@4
[68] phi() [60] phi()
to:compare::@11 to:compare::@11
compare::@11: scope:[compare] from compare::@28 compare::@4 compare::@11: scope:[compare] from compare::@28 compare::@4
[69] (byte) compare::r#14 ← phi( compare::@28/(byte) '+' compare::@4/(byte) '-' ) [61] (byte) compare::r#11 ← phi( compare::@28/(const byte) TT#0 compare::@4/(const byte) FF#0 )
to:compare::@16 to:compare::@16
compare::@3: scope:[compare] from compare::@19 compare::@3: scope:[compare] from compare::@19
[70] if((word) compare::w1#0<=(word) compare::w2#0) goto compare::@13 [62] if((word) compare::w1#0<=(word) compare::w2#0) goto compare::@13
to:compare::@30 to:compare::@30
compare::@30: scope:[compare] from compare::@3 compare::@30: scope:[compare] from compare::@3
[71] phi() [63] phi()
to:compare::@13 to:compare::@13
compare::@13: scope:[compare] from compare::@3 compare::@30 compare::@13: scope:[compare] from compare::@3 compare::@30
[72] (byte) compare::r#15 ← phi( compare::@3/(byte) '-' compare::@30/(byte) '+' ) [64] (byte) compare::r#12 ← phi( compare::@3/(const byte) FF#0 compare::@30/(const byte) TT#0 )
to:compare::@16 to:compare::@16
compare::@2: scope:[compare] from compare::@18 compare::@2: scope:[compare] from compare::@18
[73] if((word) compare::w1#0>(word) compare::w2#0) goto compare::@15 [65] if((word) compare::w1#0>(word) compare::w2#0) goto compare::@15
to:compare::@32 to:compare::@32
compare::@32: scope:[compare] from compare::@2 compare::@32: scope:[compare] from compare::@2
[74] phi() [66] phi()
to:compare::@15 to:compare::@15
compare::@15: scope:[compare] from compare::@2 compare::@32 compare::@15: scope:[compare] from compare::@2 compare::@32
[75] (byte) compare::r#16 ← phi( compare::@2/(byte) '-' compare::@32/(byte) '+' ) [67] (byte) compare::r#13 ← phi( compare::@2/(const byte) FF#0 compare::@32/(const byte) TT#0 )
to:compare::@16 to:compare::@16
compare::@1: scope:[compare] from compare compare::@1: scope:[compare] from compare
[76] if((word) compare::w1#0>=(word) compare::w2#0) goto compare::@17 [68] if((word) compare::w1#0>=(word) compare::w2#0) goto compare::@17
to:compare::@34 to:compare::@34
compare::@34: scope:[compare] from compare::@1 compare::@34: scope:[compare] from compare::@1
[77] phi() [69] phi()
to:compare::@17 to:compare::@17
compare::@17: scope:[compare] from compare::@1 compare::@34 compare::@17: scope:[compare] from compare::@1 compare::@34
[78] (byte) compare::r#17 ← phi( compare::@1/(byte) '-' compare::@34/(byte) '+' ) [70] (byte) compare::r#14 ← phi( compare::@1/(const byte) FF#0 compare::@34/(const byte) TT#0 )
to:compare::@16 to:compare::@16
print_str: scope:[print_str] from compare::@35 compare::@36 compare::@37 compare::@39 compare::@41 print_char: scope:[print_char] from compare::@37 compare::@38 print_byte print_byte::@1
[79] (byte*) print_char_cursor#66 ← phi( compare::@35/(byte*) print_char_cursor#11 compare::@36/(byte*) print_char_cursor#2 compare::@37/(byte*) print_char_cursor#2 compare::@39/(byte*) print_char_cursor#11 compare::@41/(byte*) print_char_cursor#11 ) [71] (byte*) print_char_cursor#36 ← phi( compare::@37/(byte*) print_char_cursor#11 compare::@38/(byte*) print_char_cursor#11 print_byte/(byte*) print_char_cursor#53 print_byte::@1/(byte*) print_char_cursor#11 )
[79] (byte*) print_str::str#8 ← phi( compare::@35/(const string) compare::str compare::@36/(byte*) print_str::str#2 compare::@37/(const string) compare::str compare::@39/(const string) compare::str compare::@41/(const string) compare::str ) [71] (byte) print_char::ch#4 ← phi( compare::@37/(byte) print_char::ch#2 compare::@38/(byte) ' ' print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 )
to:print_str::@1 [72] *((byte*) print_char_cursor#36) ← (byte) print_char::ch#4
print_str::@1: scope:[print_str] from print_str print_str::@2 [73] (byte*) print_char_cursor#11 ← ++ (byte*) print_char_cursor#36
[80] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#66 print_str::@2/(byte*) print_char_cursor#1 )
[80] (byte*) print_str::str#6 ← phi( print_str/(byte*) print_str::str#8 print_str::@2/(byte*) print_str::str#0 )
[81] if(*((byte*) print_str::str#6)!=(byte) '@') goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[82] return
to:@return
print_str::@2: scope:[print_str] from print_str::@1
[83] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#6)
[84] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2
[85] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#6
to:print_str::@1
print_char: scope:[print_char] from compare::@40 print_byte print_byte::@1
[86] (byte*) print_char_cursor#39 ← phi( compare::@40/(byte*) print_char_cursor#2 print_byte/(byte*) print_char_cursor#59 print_byte::@1/(byte*) print_char_cursor#11 )
[86] (byte) print_char::ch#3 ← phi( compare::@40/(byte) print_char::ch#2 print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 )
[87] *((byte*) print_char_cursor#39) ← (byte) print_char::ch#3
[88] (byte*) print_char_cursor#11 ← ++ (byte*) print_char_cursor#39
to:print_char::@return to:print_char::@return
print_char::@return: scope:[print_char] from print_char print_char::@return: scope:[print_char] from print_char
[89] return [74] return
to:@return to:@return
print_word: scope:[print_word] from compare::@16 compare::@38 print_word: scope:[print_word] from compare::@16 compare::@36
[90] (byte*) print_char_cursor#58 ← phi( compare::@16/(byte*) print_char_cursor#61 compare::@38/(byte*) print_char_cursor#2 ) [75] (byte*) print_char_cursor#52 ← phi( compare::@16/(byte*) print_char_cursor#55 compare::@36/(byte*) print_char_cursor#2 )
[90] (word) print_word::w#2 ← phi( compare::@16/(word) print_word::w#0 compare::@38/(word) print_word::w#1 ) [75] (word) print_word::w#2 ← phi( compare::@16/(word) print_word::w#0 compare::@36/(word) print_word::w#1 )
[91] (byte) print_byte::b#0 ← > (word) print_word::w#2 [76] (byte) print_byte::b#0 ← > (word) print_word::w#2
[92] call print_byte [77] call print_byte
to:print_word::@1 to:print_word::@1
print_word::@1: scope:[print_word] from print_word print_word::@1: scope:[print_word] from print_word
[93] (byte) print_byte::b#1 ← < (word) print_word::w#2 [78] (byte) print_byte::b#1 ← < (word) print_word::w#2
[94] call print_byte [79] call print_byte
to:print_word::@return to:print_word::@return
print_word::@return: scope:[print_word] from print_word::@1 print_word::@return: scope:[print_word] from print_word::@1
[95] return [80] return
to:@return to:@return
print_byte: scope:[print_byte] from print_word print_word::@1 print_byte: scope:[print_byte] from print_word print_word::@1
[96] (byte*) print_char_cursor#59 ← phi( print_word/(byte*) print_char_cursor#58 print_word::@1/(byte*) print_char_cursor#11 ) [81] (byte*) print_char_cursor#53 ← phi( print_word/(byte*) print_char_cursor#52 print_word::@1/(byte*) print_char_cursor#11 )
[96] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [81] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
[97] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [82] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[98] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [83] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0)
[99] call print_char [84] call print_char
to:print_byte::@1 to:print_byte::@1
print_byte::@1: scope:[print_byte] from print_byte print_byte::@1: scope:[print_byte] from print_byte
[100] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word/dword/signed dword) $f [85] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
[101] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [86] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2)
[102] call print_char [87] call print_char
to:print_byte::@return to:print_byte::@return
print_byte::@return: scope:[print_byte] from print_byte::@1 print_byte::@return: scope:[print_byte] from print_byte::@1
[103] return [88] return
to:@return to:@return
print_str: scope:[print_str] from compare::@35
[89] phi()
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[90] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#11 print_str::@2/(byte*) print_char_cursor#1 )
[90] (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#1 print_str::@2/(byte*) print_str::str#0 )
[91] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[92] return
to:@return
print_str::@2: scope:[print_str] from print_str::@1
[93] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2)
[94] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2
[95] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#2
to:print_str::@1
print_cls: scope:[print_cls] from main print_cls: scope:[print_cls] from main
[104] phi() [96] phi()
to:print_cls::@1 to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[105] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) $400 print_cls::@1/(byte*) print_cls::sc#1 ) [97] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) $400 print_cls::@1/(byte*) print_cls::sc#1 )
[106] *((byte*) print_cls::sc#2) ← (byte) ' ' [98] *((byte*) print_cls::sc#2) ← (byte) ' '
[107] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [99] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[108] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 [100] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1
to:print_cls::@return to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1 print_cls::@return: scope:[print_cls] from print_cls::@1
[109] return [101] return
to:@return to:@return

File diff suppressed because it is too large Load Diff

View File

@ -28,8 +28,13 @@
(byte*) D016 (byte*) D016
(byte*) D018 (byte*) D018
(byte) DARK_GREY (byte) DARK_GREY
(byte) EQ
(byte) FF
(const byte) FF#0 FF = (byte/signed byte/word/signed word/dword/signed dword) $57
(byte) GE
(byte) GREEN (byte) GREEN
(byte) GREY (byte) GREY
(byte) GT
(void()**) HARDWARE_IRQ (void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG (byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE (byte) IRQ_COLLISION_SPRITE
@ -38,11 +43,14 @@
(byte) IRQ_RASTER (byte) IRQ_RASTER
(byte*) IRQ_STATUS (byte*) IRQ_STATUS
(void()**) KERNEL_IRQ (void()**) KERNEL_IRQ
(byte) LE
(byte*) LIGHTPEN_X (byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y (byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE (byte) LIGHT_BLUE
(byte) LIGHT_GREEN (byte) LIGHT_GREEN
(byte) LIGHT_GREY (byte) LIGHT_GREY
(byte) LT
(byte) NE
(byte) ORANGE (byte) ORANGE
(byte) PINK (byte) PINK
(byte*) PROCPORT (byte*) PROCPORT
@ -68,6 +76,8 @@
(byte*) SPRITES_XPOS (byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS (byte*) SPRITES_YPOS
(word) SPRITE_PTRS (word) SPRITE_PTRS
(byte) TT
(const byte) TT#0 TT = (byte/signed byte/word/signed word/dword/signed dword) $51
(byte) VIC_BMM (byte) VIC_BMM
(byte*) VIC_CONTROL (byte*) VIC_CONTROL
(byte*) VIC_CONTROL2 (byte*) VIC_CONTROL2
@ -105,10 +115,7 @@
(label) compare::@36 (label) compare::@36
(label) compare::@37 (label) compare::@37
(label) compare::@38 (label) compare::@38
(label) compare::@39
(label) compare::@4 (label) compare::@4
(label) compare::@40
(label) compare::@41
(label) compare::@5 (label) compare::@5
(label) compare::@7 (label) compare::@7
(label) compare::@9 (label) compare::@9
@ -122,53 +129,50 @@
(const byte*) compare::ops#4 ops#4 = (string) "> @" (const byte*) compare::ops#4 ops#4 = (string) "> @"
(const byte*) compare::ops#5 ops#5 = (string) "<=@" (const byte*) compare::ops#5 ops#5 = (string) "<=@"
(const byte*) compare::ops#6 ops#6 = (string) "< @" (const byte*) compare::ops#6 ops#6 = (string) "< @"
(byte*) compare::ops#7 ops zp ZP_WORD:7 0.4 (byte*) compare::ops#7 ops zp ZP_WORD:7 0.6666666666666666
(byte) compare::r (byte) compare::r
(byte) compare::r#10 r zp ZP_BYTE:9 1.076923076923077 (byte) compare::r#10 r zp ZP_BYTE:9 1.9999999999999996
(byte) compare::r#11 r zp ZP_BYTE:9 2.0
(byte) compare::r#12 r zp ZP_BYTE:9 2.0
(byte) compare::r#13 r zp ZP_BYTE:9 2.0
(byte) compare::r#14 r zp ZP_BYTE:9 2.0 (byte) compare::r#14 r zp ZP_BYTE:9 2.0
(byte) compare::r#15 r zp ZP_BYTE:9 2.0
(byte) compare::r#16 r zp ZP_BYTE:9 2.0 (byte) compare::r#16 r zp ZP_BYTE:9 2.0
(byte) compare::r#17 r zp ZP_BYTE:9 2.0 (byte) compare::r#17 r zp ZP_BYTE:9 2.0
(byte) compare::r#19 r zp ZP_BYTE:9 2.0
(byte) compare::r#20 r zp ZP_BYTE:9 2.0
(const string) compare::str str = (string) " @"
(word) compare::w1 (word) compare::w1
(word) compare::w1#0 w1 zp ZP_WORD:10 36.249999999999986 (word) compare::w1#0 w1 zp ZP_WORD:10 36.249999999999986
(word) compare::w2 (word) compare::w2
(word) compare::w2#0 w2 zp ZP_WORD:17 29.0 (word) compare::w2#0 w2 zp ZP_WORD:17 32.741935483870954
(void()) main() (void()) main()
(byte~) main::$1 reg byte a 22.0 (byte~) main::$1 reg byte a 22.0
(byte~) main::$2 reg byte a 202.0 (byte~) main::$2 reg byte a 202.0
(byte~) main::$6 reg byte a 2002.0
(label) main::@1 (label) main::@1
(label) main::@10 (label) main::@10
(label) main::@11 (label) main::@16
(label) main::@12
(label) main::@18
(label) main::@2 (label) main::@2
(label) main::@3 (label) main::@3
(label) main::@4 (label) main::@4
(label) main::@7 (label) main::@6
(label) main::@8
(label) main::@9 (label) main::@9
(byte) main::i (byte) main::i
(byte) main::i#1 i zp ZP_BYTE:2 16.5 (byte) main::i#1 i zp ZP_BYTE:2 16.5
(byte) main::i#2 i zp ZP_BYTE:2 1.4347826086956523 (byte) main::i#2 i zp ZP_BYTE:2 1.5714285714285716
(byte) main::j (byte) main::j
(byte) main::j#1 j zp ZP_BYTE:3 151.5 (byte) main::j#1 j zp ZP_BYTE:3 151.5
(byte) main::j#2 j zp ZP_BYTE:3 16.833333333333332 (byte) main::j#2 j zp ZP_BYTE:3 18.9375
(byte) main::ln
(byte) main::ln#1 ln zp ZP_BYTE:4 667.3333333333334
(byte) main::ln#11 ln zp ZP_BYTE:4 588.0
(byte) main::ln#2 ln zp ZP_BYTE:4 684.1666666666667
(byte) main::ln#4 ln zp ZP_BYTE:4 71.0
(byte) main::ln#7 ln zp ZP_BYTE:4 7.333333333333333
(byte) main::op (byte) main::op
(byte) main::op#1 reg byte x 1501.5 (byte) main::op#1 reg byte x 1501.5
(byte) main::op#2 reg byte x 231.0 (byte) main::op#2 reg byte x 273.0
(byte) main::s
(byte) main::s#1 s zp ZP_BYTE:4 1501.5
(byte) main::s#10 s zp ZP_BYTE:4 302.0
(byte) main::s#3 s zp ZP_BYTE:4 420.59999999999997
(byte) main::s#5 s zp ZP_BYTE:4 71.0
(byte) main::s#7 s zp ZP_BYTE:4 7.333333333333333
(word) main::w1 (word) main::w1
(word) main::w1#0 w1 zp ZP_WORD:15 48.19047619047619 (word) main::w1#0 w1 zp ZP_WORD:15 53.26315789473684
(word) main::w2 (word) main::w2
(word) main::w2#0 w2 zp ZP_WORD:17 68.875 (word) main::w2#0 w2 zp ZP_WORD:17 78.71428571428571
(void()) print_byte((byte) print_byte::b) (void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0 (byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0 (byte~) print_byte::$2 reg byte a 4.0
@ -184,20 +188,19 @@
(byte) print_char::ch#0 reg byte a 4.0 (byte) print_char::ch#0 reg byte a 4.0
(byte) print_char::ch#1 reg byte a 4.0 (byte) print_char::ch#1 reg byte a 4.0
(byte) print_char::ch#2 reg byte a 4.0 (byte) print_char::ch#2 reg byte a 4.0
(byte) print_char::ch#3 reg byte a 8.0 (byte) print_char::ch#4 reg byte a 8.0
(byte*) print_char_cursor (byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:12 10001.0 (byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:12 10001.0
(byte*~) print_char_cursor#107 print_char_cursor zp ZP_WORD:12 2002.0 (byte*~) print_char_cursor#101 print_char_cursor zp ZP_WORD:12 2002.0
(byte*) print_char_cursor#11 print_char_cursor zp ZP_WORD:12 0.7058823529411765 (byte*) print_char_cursor#11 print_char_cursor zp ZP_WORD:12 393.3571428571428
(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:12 1783.2608695652177 (byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:12 5001.166666666666
(byte*) print_char_cursor#39 print_char_cursor zp ZP_WORD:12 5.0 (byte*) print_char_cursor#36 print_char_cursor zp ZP_WORD:12 6.0
(byte*) print_char_cursor#58 print_char_cursor zp ZP_WORD:12 3.0 (byte*) print_char_cursor#52 print_char_cursor zp ZP_WORD:12 3.0
(byte*) print_char_cursor#59 print_char_cursor zp ZP_WORD:12 2.0 (byte*) print_char_cursor#53 print_char_cursor zp ZP_WORD:12 2.0
(byte*) print_char_cursor#61 print_char_cursor zp ZP_WORD:12 67.90322580645162 (byte*) print_char_cursor#55 print_char_cursor zp ZP_WORD:12 36.800000000000004
(byte*) print_char_cursor#66 print_char_cursor zp ZP_WORD:12 12.0 (byte*) print_char_cursor#61 print_char_cursor zp ZP_WORD:12 71.0
(byte*) print_char_cursor#68 print_char_cursor zp ZP_WORD:12 588.0 (byte*) print_char_cursor#62 print_char_cursor zp ZP_WORD:12 445.0
(byte*) print_char_cursor#79 print_char_cursor zp ZP_WORD:12 71.0 (byte*) print_char_cursor#73 print_char_cursor zp ZP_WORD:12 7.333333333333333
(byte*) print_char_cursor#95 print_char_cursor zp ZP_WORD:12 7.333333333333333
(void()) print_cls() (void()) print_cls()
(label) print_cls::@1 (label) print_cls::@1
(label) print_cls::@return (label) print_cls::@return
@ -208,10 +211,10 @@
(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef" (const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(byte*) print_line_cursor (byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:5 6401.0 (byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:5 6401.0
(byte*) print_line_cursor#19 print_line_cursor zp ZP_WORD:5 282.3636363636364 (byte*) print_line_cursor#19 print_line_cursor zp ZP_WORD:5 233.8888888888889
(byte*) print_line_cursor#23 print_line_cursor zp ZP_WORD:5 588.0 (byte*) print_line_cursor#23 print_line_cursor zp ZP_WORD:5 445.0
(byte*) print_line_cursor#31 print_line_cursor zp ZP_WORD:5 71.0 (byte*) print_line_cursor#30 print_line_cursor zp ZP_WORD:5 71.0
(byte*) print_line_cursor#33 print_line_cursor zp ZP_WORD:5 7.333333333333333 (byte*) print_line_cursor#32 print_line_cursor zp ZP_WORD:5 7.333333333333333
(byte*) print_line_cursor#9 print_line_cursor zp ZP_WORD:5 20004.0 (byte*) print_line_cursor#9 print_line_cursor zp ZP_WORD:5 20004.0
(void()) print_ln() (void()) print_ln()
(label) print_ln::@1 (label) print_ln::@1
@ -222,10 +225,9 @@
(label) print_str::@2 (label) print_str::@2
(label) print_str::@return (label) print_str::@return
(byte*) print_str::str (byte*) print_str::str
(byte*) print_str::str#0 str zp ZP_WORD:10 20002.0 (byte*) print_str::str#0 str zp ZP_WORD:7 20002.0
(byte*) print_str::str#2 str zp ZP_WORD:10 4.0 (byte*) print_str::str#1 str zp ZP_WORD:7 2.0
(byte*) print_str::str#6 str zp ZP_WORD:10 10001.5 (byte*) print_str::str#2 str zp ZP_WORD:7 10001.5
(byte*) print_str::str#8 str zp ZP_WORD:10 4.0
(void()) print_word((word) print_word::w) (void()) print_word((word) print_word::w)
(label) print_word::@1 (label) print_word::@1
(label) print_word::@return (label) print_word::@return
@ -238,20 +240,19 @@
zp ZP_BYTE:2 [ main::i#2 main::i#1 ] zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
zp ZP_BYTE:3 [ main::j#2 main::j#1 ] zp ZP_BYTE:3 [ main::j#2 main::j#1 ]
zp ZP_BYTE:4 [ main::ln#2 main::ln#4 main::ln#7 main::ln#11 main::ln#1 ]
reg byte x [ main::op#2 main::op#1 ] reg byte x [ main::op#2 main::op#1 ]
zp ZP_WORD:5 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#31 print_line_cursor#33 print_line_cursor#23 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] zp ZP_BYTE:4 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ]
zp ZP_WORD:7 [ compare::ops#7 ] zp ZP_WORD:5 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#30 print_line_cursor#32 print_line_cursor#23 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ]
zp ZP_BYTE:9 [ compare::r#10 compare::r#14 compare::r#15 compare::r#16 compare::r#17 compare::r#19 compare::r#20 ] zp ZP_WORD:7 [ compare::ops#7 print_str::str#2 print_str::str#1 print_str::str#0 ]
zp ZP_WORD:10 [ print_str::str#6 print_str::str#8 print_str::str#2 print_str::str#0 print_word::w#2 print_word::w#0 print_word::w#1 compare::w1#0 ] zp ZP_BYTE:9 [ compare::r#10 compare::r#11 compare::r#12 compare::r#13 compare::r#14 compare::r#16 compare::r#17 ]
reg byte a [ print_char::ch#3 print_char::ch#2 print_char::ch#0 print_char::ch#1 ] reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
zp ZP_WORD:12 [ print_char_cursor#58 print_char_cursor#39 print_char_cursor#66 print_char_cursor#11 print_char_cursor#61 print_char_cursor#79 print_char_cursor#95 print_char_cursor#68 print_char_cursor#107 print_char_cursor#2 print_char_cursor#1 print_char_cursor#59 ] zp ZP_WORD:10 [ print_word::w#2 print_word::w#0 print_word::w#1 compare::w1#0 ]
zp ZP_WORD:12 [ print_char_cursor#52 print_char_cursor#36 print_char_cursor#55 print_char_cursor#61 print_char_cursor#73 print_char_cursor#62 print_char_cursor#11 print_char_cursor#101 print_char_cursor#53 print_char_cursor#2 print_char_cursor#1 ]
zp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] zp ZP_BYTE:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
reg byte a [ main::$1 ] reg byte a [ main::$1 ]
zp ZP_WORD:15 [ main::w1#0 ] zp ZP_WORD:15 [ main::w1#0 ]
reg byte a [ main::$2 ] reg byte a [ main::$2 ]
zp ZP_WORD:17 [ main::w2#0 compare::w2#0 ] zp ZP_WORD:17 [ main::w2#0 compare::w2#0 ]
reg byte x [ compare::op#0 ] reg byte x [ compare::op#0 ]
reg byte a [ main::$6 ]
reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ] reg byte a [ print_byte::$2 ]