1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +00:00

Removed one synth rule. Fixed flaw in others.

This commit is contained in:
jespergravgaard 2018-01-18 23:51:42 +01:00
parent eadf85a048
commit cdbc2e05cf
7 changed files with 6524 additions and 2542 deletions

View File

@ -219,6 +219,7 @@ class AsmFragmentTemplateSynthesisRule {
String rvalZ1 = ".*=.*z1.*|.*_.*z1.*|...z1_(lt|gt|le|ge|eq|neq)_.*";
String rvalZ2 = ".*=.*z2.*|.*_.*z2.*|...z2_(lt|gt|le|ge|eq|neq)_.*";
String lvalDerefZ1 = ".*_deref_...z1=.*";
String lvalDerefC1 = ".*_deref_...c1=.*";
String lvalDerefIdxAa = ".*_derefidx_...aa=.*";
String lvalDerefIdxZ1 = ".*_derefidx_...z1=.*";
String lvalDerefIdxZ2 = ".*_derefidx_...z2=.*";
@ -395,54 +396,45 @@ class AsmFragmentTemplateSynthesisRule {
// Rewrite _deref_pb.z1_ to _vb.aa_ (if no other Z1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)z1(.*)", twoZ1+"|"+rvalAa+"|"+rvalYy+"|"+ lvalDerefZ1, "ldy #0\n"+"lda ({z1}),y", "$1vb$2aa$3", null, mapZ));
// Rewrite _deref_pb.z1_ to _vb.aa_ (if other Z1)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*z1.*)_deref_pb(.)z1(.*)", lvalDerefZ1+"|"+rvalAa+"|"+rvalYy, "ldy #0\n"+"lda ({z1}),y", "$1vb$2aa$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*z1.*)_deref_pb(.)z1(.*)", rvalAa+"|"+rvalYy+"|"+lvalDerefZ1, "ldy #0\n"+"lda ({z1}),y", "$1vb$2aa$3", null, null));
// Rewrite _deref_pb.z1_ to _vb.aa_ (if other Z1)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)z1(.*z1.*)", ".*z1.*=.*"+"|"+rvalAa+"|"+rvalYy, "ldy #0\n"+"lda ({z1}),y", "$1vb$2aa$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)z1(.*z1.*)", rvalAa+"|"+rvalYy+"|"+ lvalDerefZ1, "ldy #0\n"+"lda ({z1}),y", "$1vb$2aa$3", null, null));
// Rewrite *C1 to AA (if no other C1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*)", rvalAa+"|"+twoC1, "lda {c1}", "$1_vb$2aa$3", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*)", rvalAa+"|"+twoC1+"|"+lvalDerefC1, "lda {c1}", "$1vb$2aa$3", null, mapC));
// Rewrite *C1 to AA (if other C1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*c1.*)", rvalAa, "lda {c1}", "$1_vb$2aa$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*c1.*)", rvalAa+"|"+lvalDerefC1, "lda {c1}", "$1vb$2aa$3", null, null));
// Rewrite *C1 to AA (if other C1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*c1.*)_deref_pb(.)c1(.*)", rvalAa, "lda {c1}", "$1_vb$2aa$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*c1.*)_deref_pb(.)c1(.*)", rvalAa+"|"+lvalDerefC1, "lda {c1}", "$1vb$2aa$3", null, null));
// Rewrite *C1 to XX (if no other C1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*)", rvalXx+"|"+twoC1, "ldx {c1}", "$1_vb$2xx$3", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*)", rvalXx+"|"+twoC1+"|"+lvalDerefC1, "ldx {c1}", "$1vb$2xx$3", null, mapC));
// Rewrite *C1 to XX (if other C1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*c1.*)", rvalXx, "ldx {c1}", "$1_vb$2xx$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*c1.*)", rvalXx+"|"+lvalDerefC1, "ldx {c1}", "$1vb$2xx$3", null, null));
// Rewrite *C1 to XX (if other C1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*c1.*)_deref_pb(.)c1(.*)", rvalXx, "ldx {c1}", "$1_vb$2xx$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*c1.*)_deref_pb(.)c1(.*)", rvalXx+"|"+lvalDerefC1, "ldx {c1}", "$1vb$2xx$3", null, null));
// Rewrite *C1 to YY (if no other C1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*)", rvalYy+"|"+twoC1, "ldy {c1}", "$1_vb$2yy$3", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*)", rvalYy+"|"+twoC1+"|"+lvalDerefC1, "ldy {c1}", "$1vb$2yy$3", null, mapC));
// Rewrite *C1 to YY (if other C1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*c1.*)", rvalYy, "ldy {c1}", "$1_vb$2yy$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*c1.*)", rvalYy+"|"+lvalDerefC1, "ldy {c1}", "$1vb$2yy$3", null, null));
// Rewrite *C1 to YY (if other C1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*c1.*)_deref_pb(.)c1(.*)", rvalYy, "ldy {c1}", "$1_vb$2yy$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("_deref_pb(.)c1_(lt|gt|le|ge|eq|neq)_(.*)", ".*vb.aa.*", "lda {c1}", "vb$1aa_$2_$3", null, mapC));
//synths.add(new AsmFragmentTemplateSynthesisRule("_deref_pb(.)z1_(lt|gt|le|ge|eq|neq)_(.*)", ".*vb.aa.*|.*vb.yy.*|.*z1.*z1.*", "ldy #0\n" + "lda ({z1}),y", "vb$1aa_$2_$3", null, mapZ));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*c1.*)_deref_pb(.)c1(.*)", rvalYy+"|"+lvalDerefC1, "ldy {c1}", "$1vb$2yy$3", null, null));
// OLD STYLE REWRITES - written when only one rule could be taken
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_(band|bor|bxor|plus)_(vb.aa)", ".*=vb.aa_.*", null, "$1=$4_$3_$2", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_(band|bor|bxor|plus)_(vb.xx)", ".*=vb.[ax][ax]_.*", null, "$1=$4_$3_$2", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_(band|bor|bxor|plus)_(vb.yy)", ".*=vb.[axy][axy]_.*", null, "$1=$4_$3_$2", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("vb(.)xx=(.*)", null, null, "vb$1aa=$2", "tax\n", null));
synths.add(new AsmFragmentTemplateSynthesisRule("vb(.)yy=(.*)", null, null, "vb$1aa=$2", "tay\n", null));
//synths.add(new AsmFragmentTemplateSynthesisRule("vbsyy=(.*)", null, null, "vbsaa=$1", "tay\n", null));
//synths.add(new AsmFragmentTemplateSynthesisRule("vbsz1=(.*)", ".*=.*vb.z1.*", null, "vbsaa=$1", "sta {z1}\n", mapZ));
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_vbuyy=(.*)", twoC1, null, "vb$1aa=$2", "sta {c1},y", mapC, "yy"));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx=(.*)", twoC1, null, "vb$1aa=$2", "sta {c1},x", mapC, "xx"));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuz2=(.*)", twoZ1+"|"+twoZ2, null, "vb$1aa=$2", "ldy {z2}\n" + "sta ({z1}),y", mapZ2));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=_deref_pb(.)c1(.*)", rvalAa+"|"+twoC1, "lda {c1}", "$1=vb$2aa$3", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=_deref_pb(.)z1(.*)", rvalAa+"|"+rvalYy+"|"+twoZ1, "ldy #0\n" + "lda ({z1}),y", "$1=vb$2aa$3", null, mapZ));
// Convert array indexing with A register to X/Y register by prefixing tax/tay (..._derefidx_vbuaa... -> ..._derefidx_vbuxx... /... _derefidx_vbuyy... )
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_derefidx_vbuaa(.*)", rvalXx, "tax", "$1=$2_derefidx_vbuxx$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_derefidx_vbuaa(.*)", rvalYy, "tay", "$1=$2_derefidx_vbuyy$3", null, null));
// Convert array indexing with zero page to x/y register by prefixing ldx z1 / ldy z1 ( ..._derefidx_vbuzn... -> ..._derefidx_vbuxx... / ..._derefidx_vbuyy... )
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_derefidx_vbuz1(.*)", rvalXx+"|"+twoZ1, "ldx {z1}", "$1=$2_derefidx_vbuxx$3", null, mapZ));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_derefidx_vbuz1(.*)", rvalYy+"|"+twoZ1, "ldy {z1}", "$1=$2_derefidx_vbuyy$3", null, mapZ));
@ -475,28 +467,9 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*c2.*)pb(.)c2_derefidx_vbuyy(.*)", rvalAa, "lda {c2},y", "$1=$2vb$3aa$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c2_derefidx_vbuyy(.*c2.*)", rvalAa, "lda {c2},y", "$1=$2vb$3aa$4", null, null));
// Convert zeropage/constants/X/Y in assignments to A-register using LDA/TXA/TYA prefix
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)vbuz1(.*)", ".*z1.*=.*|.*=.*aa.*|.*z1.*z1.*", "lda {z1}", "$1=$2vbuaa$3", null, mapZ));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)vbsz1(.*)", ".*z1.*=.*|.*=.*aa.*|.*z1.*z1.*", "lda {z1}", "$1=$2vbsaa$3", null, mapZ));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)vbuz2(.*)", ".*z2.*=.*|.*=.*aa.*|.*z2.*z2.*|.*z3.*", "lda {z2}", "$1=$2vbuaa$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)vbsz2(.*)", ".*z2.*=.*|.*=.*aa.*|.*z2.*z2.*|.*z3.*", "lda {z2}", "$1=$2vbsaa$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)vbuz2(.*z3.*)", ".*z2.*=.*|.*=.*aa.*|.*z2.*z2.*|.*z3.*", "lda {z2}", "$1=$2vbuaa$3", null, mapZ3));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)vbsz2(.*z3.*)", ".*z2.*=.*|.*=.*aa.*|.*z2.*z2.*|.*z3.*", "lda {z2}", "$1=$2vbsaa$3", null, mapZ3));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_vbuxx", ".*=.*[ax][ax].*xx|.*derefidx_vb.xx", "txa", "$1=$2_vbuaa", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_vbsxx", ".*=.*[ax][ax].*xx|.*derefidx_vb.xx", "txa", "$1=$2_vbsaa", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_vbuyy", ".*=.*[ay][ay].*yy|.*derefidx_vb.yy", "tya", "$1=$2_vbuaa", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_vbsyy", ".*=-*[ay][ay].*yy|.*derefidx_vb.yy", "tya", "$1=$2_vbsaa", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_vbuz1", rvalAa+"|"+".*z1.*z1.*", "lda {z1}", "$1=$2_vbuaa", null, mapZ));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_vbsz1", rvalAa+"|"+".*z1.*z1.*", "lda {z1}", "$1=$2_vbsaa", null, mapZ));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_vbuz2", rvalAa+"|"+".*z2.*z2.*", "lda {z2}", "$1=$2_vbuaa", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)_vbuz3", rvalAa+"|"+".*z3.*z3.*", "lda {z3}", "$1=$2_vbuaa", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("vbuz1=vbuz1(.*)", rvalAa+"|"+threeZ1, "lda {z1}", "vbuaa=vbuaa$1", "sta {z1}", mapZ));
synths.add(new AsmFragmentTemplateSynthesisRule("vbsz1=vbsz1(.*)", rvalAa+"|"+threeZ1, "lda {z1}", "vbsaa=vbsaa$1", "sta {z1}", mapZ));
//synths.add(new AsmFragmentTemplateSynthesisRule("vbuz1_(lt|gt|le|ge|eq|neq)_(.*)", ".*vb.aa.*|.*z1.*z1.*", "lda {z1}", "vbuaa_$1_$2", null, mapZ));
//synths.add(new AsmFragmentTemplateSynthesisRule("vbsz1_(lt|gt|le|ge|eq|neq)_(.*)", ".*vb.aa.*|.*z1.*z1.*", "lda {z1}", "vbsaa_$1_$2", null, mapZ));
synths.add(new AsmFragmentTemplateSynthesisRule("_deref_pb(.)c1_(lt|gt|le|ge|eq|neq)_(.*)", rvalAa, "lda {c1}", "vb$1aa_$2_$3", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("_deref_pb(.)z1_(lt|gt|le|ge|eq|neq)_(.*)", rvalAa+"|"+rvalYy+"|"+twoZ1, "ldy #0\n" + "lda ({z1}),y", "vb$1aa_$2_$3", null, mapZ));
@ -508,25 +481,6 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx_(lt|gt|le|ge|eq|neq)_(.*)", rvalAa+"|"+twoC1, "lda {c1},x", "vb$1aa_$2_$3", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx_(lt|gt|le|ge|eq|neq)_(.*c1.*)", rvalAa, "lda {c1},x", "vb$1aa_$2_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_ge_(vb.aa)_then_(.*)", ".*vb.aa.*_ge.*", null, "$2_le_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_ge_(vb.xx)_then_(.*)", ".*vb.[ax][ax].*_ge.*", null, "$2_le_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_ge_(vb.yy)_then_(.*)", ".*vb.[axy][axy].*_ge.*", null, "$2_le_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_lt_(vb.aa)_then_(.*)", ".*vb.aa.*_lt.*", null, "$2_gt_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_lt_(vb.xx)_then_(.*)", ".*vb.[ax][ax].*_lt.*", null, "$2_gt_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_lt_(vb.yy)_then_(.*)", ".*vb.[axy][axy].*_lt.*", null, "$2_gt_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_gt_(vb.aa)_then_(.*)", ".*vb.aa.*_gt.*", null, "$2_lt_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_gt_(vb.xx)_then_(.*)", ".*vb.[ax][ax].*_gt.*", null, "$2_lt_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_gt_(vb.yy)_then_(.*)", ".*vb.[axy][axy].*_gt.*", null, "$2_lt_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_le_(vb.aa)_then_(.*)", ".*vb.aa.*_le.*", null, "$2_ge_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_le_(vb.xx)_then_(.*)", ".*vb.[ax][ax].*_le.*", null, "$2_ge_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_le_(vb.yy)_then_(.*)", ".*vb.[axy][axy].*_le.*", null, "$2_ge_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_neq_(vb.aa)_then_(.*)", ".*vb.aa.*_neq.*", null, "$2_neq_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_neq_(vb.xx)_then_(.*)", ".*vb.[ax][ax].*_neq.*", null, "$2_neq_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_neq_(vb.yy)_then_(.*)", ".*vb.[axy][axy].*_neq.*", null, "$2_neq_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_eq_(vb.aa)_then_(.*)", ".*vb.aa.*_eq.*", null, "$2_eq_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_eq_(vb.xx)_then_(.*)", ".*vb.[ax][ax].*_eq.*", null, "$2_eq_$1_then_$3", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_eq_(vb.yy)_then_(.*)", ".*vb.[axy][axy].*_eq.*", null, "$2_eq_$1_then_$3", null, null));
// Use unsigned ASM to synthesize signed ASM ( ...vbs... -> ...vbu... )
synths.add(new AsmFragmentTemplateSynthesisRule("(vbsz.|vbsc.|vbsaa|vbsxx|vbsyy)_(eq|neq)_(vbsz.|vbsc.|vbsaa|vbsxx|vbsyy)_then_(.*)", null, null, "$1_$2_$3_then_$4", null, mapSToU));
synths.add(new AsmFragmentTemplateSynthesisRule("(vbsz.|vbsc.|vbsaa|vbsxx|vbsyy)=(vbsz.|vbsc.|vbsaa|vbsxx|vbsyy)", null, null, "$1=$2", null, mapSToU));
@ -543,10 +497,6 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(vwsz.)=(vwsz.)_(plus|minus|band|bxor|bor)_vb.c(.)", null, null, "$1=$2_$3_vwsc$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vwsz.)=vb.c(.)_(plus|minus|band|bxor|bor)_(vwsz.)", null, null, "$1=vwsc$2_$3_$4", null, null));
// Move constant words to the end of the ASM signature for symmetric operators ( ...vw.c...vw.z... -> ...vw.z...vw.c... )
//synths.add(new AsmFragmentTemplateSynthesisRule("(vwuz.)=(vwuc.)_(plus|band|bxor|bor)_(vwuz.)", null, null, "$1=$4_$3_$2", null, null));
//synths.add(new AsmFragmentTemplateSynthesisRule("(vwsz.)=(vwsc.)_(plus|band|bxor|bor)_(vwsz.)", null, null, "$1=$4_$3_$2", null, null));
// Use Z1/Z2 ASM to synthesize Z1-only code ( ...z1...z1... -> ...z1...z2... )
synths.add(new AsmFragmentTemplateSynthesisRule("(v..)z1=(v..)z1_(plus|minus|band|bxor|bor)_(.*)", oneZ2, null, "$1z1=$2z2_$3_$4", null, mapZ, false));
synths.add(new AsmFragmentTemplateSynthesisRule("(v..)z1=(.*)_(plus|minus|band|bxor|bor)_(v..)z1", oneZ2, null, "$1z1=$2_$3_$4z2", null, mapZ, false));

View File

@ -1125,7 +1125,11 @@ pbuz1_derefidx_vbuc1=_deref_pbuz1 < pbuz1_derefidx_vbuc1=vbuaa - clobber:A Y cy
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuc1=_deref_pbuz2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuc1=_deref_pbuc1
pbuz1_derefidx_vbuc1=_deref_pbuc1 < pbuz1_derefidx_vbuc1=vbuaa - clobber:A Y cycles:12.0
lda {c1}
ldy #{c1}
sta ({z1}),y
CANNOT SYNTHESIZE pbuz1_derefidx_vbuc1=_deref_pbuc2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuc1=pbuz1_derefidx_vbuaa
CANNOT SYNTHESIZE pbuz1_derefidx_vbuc1=pbuz1_derefidx_vbuxx
@ -1215,7 +1219,16 @@ pbuc1_derefidx_vbuaa=_deref_pbuz1 < pbuc1_derefidx_vbuxx=_deref_pbuz1 < pbuc1_de
lda ({z1}),y
sta {c1},x
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=_deref_pbuc1
pbuc1_derefidx_vbuaa=_deref_pbuc1 < pbuc1_derefidx_vbuxx=_deref_pbuc1 < pbuc1_derefidx_vbuxx=vbuaa - clobber:A X cycles:11.0
tax
lda {c1}
sta {c1},x
pbuc1_derefidx_vbuaa=_deref_pbuc1 < pbuc1_derefidx_vbuyy=_deref_pbuc1 < pbuc1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:11.0
tay
lda {c1}
sta {c1},y
pbuc1_derefidx_vbuaa=_deref_pbuc2 < pbuc1_derefidx_vbuxx=_deref_pbuc2 < vbuaa=_deref_pbuc1 - clobber:A X cycles:11.0
tax
lda {c2}
@ -1308,7 +1321,10 @@ pbuc1_derefidx_vbuxx=_deref_pbuz1 < pbuc1_derefidx_vbuxx=vbuaa - clobber:A Y cy
lda ({z1}),y
sta {c1},x
CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=_deref_pbuc1
pbuc1_derefidx_vbuxx=_deref_pbuc1 < pbuc1_derefidx_vbuxx=vbuaa - clobber:A cycles:9.0
lda {c1}
sta {c1},x
pbuc1_derefidx_vbuxx=_deref_pbuc2 < vbuaa=_deref_pbuc1 - clobber:A cycles:9.0
lda {c2}
sta {c1},x
@ -1386,7 +1402,10 @@ pbuc1_derefidx_vbuyy=_deref_pbuz1 < pbuc1_derefidx_vbuaa=_deref_pbuz1 < pbuc1_de
lda ({z1}),y
sta {c1},x
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=_deref_pbuc1
pbuc1_derefidx_vbuyy=_deref_pbuc1 < pbuc1_derefidx_vbuyy=vbuaa - clobber:A cycles:9.0
lda {c1}
sta {c1},y
pbuc1_derefidx_vbuyy=_deref_pbuc2 < vbuaa=_deref_pbuc1 - clobber:A cycles:9.0
lda {c2}
sta {c1},y
@ -1499,10 +1518,16 @@ pbuc1_derefidx_vbuz1=_deref_pbuz2 < pbuc1_derefidx_vbuxx=_deref_pbuz1 < pbuc1_de
lda ({z2}),y
sta {c1},x
pbuc1_derefidx_vbuz1=_deref_pbuc1 < vbuaa=_deref_pbuc1 - clobber:A X cycles:12.0
pbuc1_derefidx_vbuz1=_deref_pbuc1 < pbuc1_derefidx_vbuyy=_deref_pbuc1 < pbuc1_derefidx_vbuyy=vbuaa - clobber:A Y cycles:12.0
ldy {z1}
lda {c1}
sta {c1},y
pbuc1_derefidx_vbuz1=_deref_pbuc1 < pbuc1_derefidx_vbuxx=_deref_pbuc1 < pbuc1_derefidx_vbuxx=vbuaa - clobber:A X cycles:12.0
ldx {z1}
lda {c1}
sta {c1},x
pbuc1_derefidx_vbuz1=_deref_pbuc2 < pbuc1_derefidx_vbuyy=_deref_pbuc2 < vbuaa=_deref_pbuc1 - clobber:A Y cycles:12.0
ldy {z1}
lda {c2}

View File

@ -54,11 +54,11 @@ vbuaa=_inc__deref_pbuz1 < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A Y c
CANNOT SYNTHESIZE vbuaa=_neg__deref_pbuz1
CANNOT SYNTHESIZE vbuaa=_pos__deref_pbuz1
CANNOT SYNTHESIZE vbuaa=_not__deref_pbuc1
vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A cycles:8.0
vbuaa=_dec__deref_pbuc1 < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A cycles:8.0
lda {c1}
sec
sbc #1
vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A cycles:8.0
vbuaa=_inc__deref_pbuc1 < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A cycles:8.0
lda {c1}
clc
adc #1
@ -233,16 +233,12 @@ vbuxx=_inc__deref_pbuz1 < vbuxx=_inc_vbuaa < vbuxx=_inc_vbuxx - clobber:A X Y c
CANNOT SYNTHESIZE vbuxx=_neg__deref_pbuz1
CANNOT SYNTHESIZE vbuxx=_pos__deref_pbuz1
CANNOT SYNTHESIZE vbuxx=_not__deref_pbuc1
vbuxx=_dec__deref_pbuc1 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A X cycles:10.0
lda {c1}
sec
sbc #1
tax
vbuxx=_inc__deref_pbuc1 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A X cycles:10.0
lda {c1}
clc
adc #1
tax
vbuxx=_dec__deref_pbuc1 < vbuxx=_dec_vbuxx - clobber:X cycles:6.0
ldx {c1}
dex
vbuxx=_inc__deref_pbuc1 < vbuxx=_inc_vbuxx - clobber:X cycles:6.0
ldx {c1}
inx
CANNOT SYNTHESIZE vbuxx=_neg__deref_pbuc1
CANNOT SYNTHESIZE vbuxx=_pos__deref_pbuc1
CANNOT SYNTHESIZE vbuxx=_not_pbuz1_derefidx_vbuaa
@ -394,16 +390,12 @@ vbuyy=_inc__deref_pbuz1 < vbuyy=_inc_vbuaa < vbuyy=_inc_vbuyy - clobber:A Y cyc
CANNOT SYNTHESIZE vbuyy=_neg__deref_pbuz1
CANNOT SYNTHESIZE vbuyy=_pos__deref_pbuz1
CANNOT SYNTHESIZE vbuyy=_not__deref_pbuc1
vbuyy=_dec__deref_pbuc1 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A Y cycles:10.0
lda {c1}
sec
sbc #1
tay
vbuyy=_inc__deref_pbuc1 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A Y cycles:10.0
lda {c1}
clc
adc #1
tay
vbuyy=_dec__deref_pbuc1 < vbuyy=_dec_vbuyy - clobber:Y cycles:6.0
ldy {c1}
dey
vbuyy=_inc__deref_pbuc1 < vbuyy=_inc_vbuyy - clobber:Y cycles:6.0
ldy {c1}
iny
CANNOT SYNTHESIZE vbuyy=_neg__deref_pbuc1
CANNOT SYNTHESIZE vbuyy=_pos__deref_pbuc1
CANNOT SYNTHESIZE vbuyy=_not_pbuz1_derefidx_vbuaa
@ -637,16 +629,32 @@ vbuz1=_inc__deref_pbuz2 < vbuaa=_inc__deref_pbuz1 < vbuaa=_inc_vbuaa < vbuaa=vbu
CANNOT SYNTHESIZE vbuz1=_neg__deref_pbuz2
CANNOT SYNTHESIZE vbuz1=_pos__deref_pbuz2
CANNOT SYNTHESIZE vbuz1=_not__deref_pbuc1
vbuz1=_dec__deref_pbuc1 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A cycles:11.0
vbuz1=_dec__deref_pbuc1 < vbuaa=_dec__deref_pbuc1 < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A cycles:11.0
lda {c1}
sec
sbc #1
sta {z1}
vbuz1=_inc__deref_pbuc1 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A cycles:11.0
vbuz1=_dec__deref_pbuc1 < vbuyy=_dec__deref_pbuc1 < vbuyy=_dec_vbuyy - clobber:Y cycles:9.0
ldy {c1}
dey
sty {z1}
vbuz1=_dec__deref_pbuc1 < vbuxx=_dec__deref_pbuc1 < vbuxx=_dec_vbuxx - clobber:X cycles:9.0
ldx {c1}
dex
stx {z1}
vbuz1=_inc__deref_pbuc1 < vbuaa=_inc__deref_pbuc1 < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A cycles:11.0
lda {c1}
clc
adc #1
sta {z1}
vbuz1=_inc__deref_pbuc1 < vbuyy=_inc__deref_pbuc1 < vbuyy=_inc_vbuyy - clobber:Y cycles:9.0
ldy {c1}
iny
sty {z1}
vbuz1=_inc__deref_pbuc1 < vbuxx=_inc__deref_pbuc1 < vbuxx=_inc_vbuxx - clobber:X cycles:9.0
ldx {c1}
inx
stx {z1}
CANNOT SYNTHESIZE vbuz1=_neg__deref_pbuc1
CANNOT SYNTHESIZE vbuz1=_pos__deref_pbuc1
CANNOT SYNTHESIZE vbuz1=_not_pbuz1_derefidx_vbuaa
@ -952,13 +960,13 @@ _deref_pbuz1=_inc__deref_pbuz2 < vbuaa=_inc__deref_pbuz1 < vbuaa=_inc_vbuaa < vb
CANNOT SYNTHESIZE _deref_pbuz1=_neg__deref_pbuz2
CANNOT SYNTHESIZE _deref_pbuz1=_pos__deref_pbuz2
CANNOT SYNTHESIZE _deref_pbuz1=_not__deref_pbuc1
_deref_pbuz1=_dec__deref_pbuc1 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A Y cycles:16.0
_deref_pbuz1=_dec__deref_pbuc1 < vbuaa=_dec__deref_pbuc1 < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A Y cycles:16.0
lda {c1}
sec
sbc #1
ldy #0
sta ({z1}),y
_deref_pbuz1=_inc__deref_pbuc1 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A Y cycles:16.0
_deref_pbuz1=_inc__deref_pbuc1 < vbuaa=_inc__deref_pbuc1 < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A Y cycles:16.0
lda {c1}
clc
adc #1
@ -1212,12 +1220,12 @@ CANNOT SYNTHESIZE _deref_pbuc1=_not__deref_pbuc1
CANNOT SYNTHESIZE _deref_pbuc1=_neg__deref_pbuc1
CANNOT SYNTHESIZE _deref_pbuc1=_pos__deref_pbuc1
CANNOT SYNTHESIZE _deref_pbuc1=_not__deref_pbuc2
_deref_pbuc1=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A cycles:12.0
_deref_pbuc1=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A cycles:12.0
lda {c2}
sec
sbc #1
sta {c1}
_deref_pbuc1=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A cycles:12.0
_deref_pbuc1=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A cycles:12.0
lda {c2}
clc
adc #1
@ -2204,13 +2212,13 @@ pbuz1_derefidx_vbuz2=_inc__deref_pbuz3 < vbuaa=_inc__deref_pbuz1 < vbuaa=_inc_vb
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=_neg__deref_pbuz3
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=_pos__deref_pbuz3
CANNOT SYNTHESIZE pbuz1_derefidx_vbuz2=_not__deref_pbuc1
pbuz1_derefidx_vbuz2=_dec__deref_pbuc1 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A Y cycles:17.0
pbuz1_derefidx_vbuz2=_dec__deref_pbuc1 < pbuz1_derefidx_vbuz2=_dec_vbuaa < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A Y cycles:17.0
lda {c1}
sec
sbc #1
ldy {z2}
sta ({z1}),y
pbuz1_derefidx_vbuz2=_inc__deref_pbuc1 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A Y cycles:17.0
pbuz1_derefidx_vbuz2=_inc__deref_pbuc1 < pbuz1_derefidx_vbuz2=_inc_vbuaa < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A Y cycles:17.0
lda {c1}
clc
adc #1
@ -2758,30 +2766,52 @@ pbuc1_derefidx_vbuaa=_inc__deref_pbuz1 < pbuc1_derefidx_vbuxx=_inc__deref_pbuz1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=_neg__deref_pbuz1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=_pos__deref_pbuz1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=_not__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=_dec__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=_inc__deref_pbuc1
pbuc1_derefidx_vbuaa=_dec__deref_pbuc1 < pbuc1_derefidx_vbuxx=_dec__deref_pbuc1 < pbuc1_derefidx_vbuxx=_dec_vbuaa < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A X cycles:15.0
tax
lda {c1}
sec
sbc #1
sta {c1},x
pbuc1_derefidx_vbuaa=_dec__deref_pbuc1 < pbuc1_derefidx_vbuyy=_dec__deref_pbuc1 < pbuc1_derefidx_vbuyy=_dec_vbuaa < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A Y cycles:15.0
tay
lda {c1}
sec
sbc #1
sta {c1},y
pbuc1_derefidx_vbuaa=_inc__deref_pbuc1 < pbuc1_derefidx_vbuxx=_inc__deref_pbuc1 < pbuc1_derefidx_vbuxx=_inc_vbuaa < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A X cycles:15.0
tax
lda {c1}
clc
adc #1
sta {c1},x
pbuc1_derefidx_vbuaa=_inc__deref_pbuc1 < pbuc1_derefidx_vbuyy=_inc__deref_pbuc1 < pbuc1_derefidx_vbuyy=_inc_vbuaa < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A Y cycles:15.0
tay
lda {c1}
clc
adc #1
sta {c1},y
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=_neg__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=_pos__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuaa=_not__deref_pbuc2
pbuc1_derefidx_vbuaa=_dec__deref_pbuc2 < pbuc1_derefidx_vbuxx=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A X cycles:15.0
pbuc1_derefidx_vbuaa=_dec__deref_pbuc2 < pbuc1_derefidx_vbuxx=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A X cycles:15.0
tax
lda {c2}
sec
sbc #1
sta {c1},x
pbuc1_derefidx_vbuaa=_dec__deref_pbuc2 < pbuc1_derefidx_vbuyy=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A Y cycles:15.0
pbuc1_derefidx_vbuaa=_dec__deref_pbuc2 < pbuc1_derefidx_vbuyy=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A Y cycles:15.0
tay
lda {c2}
sec
sbc #1
sta {c1},y
pbuc1_derefidx_vbuaa=_inc__deref_pbuc2 < pbuc1_derefidx_vbuxx=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A X cycles:15.0
pbuc1_derefidx_vbuaa=_inc__deref_pbuc2 < pbuc1_derefidx_vbuxx=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A X cycles:15.0
tax
lda {c2}
clc
adc #1
sta {c1},x
pbuc1_derefidx_vbuaa=_inc__deref_pbuc2 < pbuc1_derefidx_vbuyy=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A Y cycles:15.0
pbuc1_derefidx_vbuaa=_inc__deref_pbuc2 < pbuc1_derefidx_vbuyy=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A Y cycles:15.0
tay
lda {c2}
clc
@ -3041,17 +3071,25 @@ pbuc1_derefidx_vbuxx=_inc__deref_pbuz1 < pbuc1_derefidx_vbuxx=_inc_vbuaa < vbuaa
CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=_neg__deref_pbuz1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=_pos__deref_pbuz1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=_not__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=_dec__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=_inc__deref_pbuc1
pbuc1_derefidx_vbuxx=_dec__deref_pbuc1 < pbuc1_derefidx_vbuxx=_dec_vbuaa < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A cycles:13.0
lda {c1}
sec
sbc #1
sta {c1},x
pbuc1_derefidx_vbuxx=_inc__deref_pbuc1 < pbuc1_derefidx_vbuxx=_inc_vbuaa < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A cycles:13.0
lda {c1}
clc
adc #1
sta {c1},x
CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=_neg__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=_pos__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuxx=_not__deref_pbuc2
pbuc1_derefidx_vbuxx=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A cycles:13.0
pbuc1_derefidx_vbuxx=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A cycles:13.0
lda {c2}
sec
sbc #1
sta {c1},x
pbuc1_derefidx_vbuxx=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A cycles:13.0
pbuc1_derefidx_vbuxx=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A cycles:13.0
lda {c2}
clc
adc #1
@ -3282,17 +3320,25 @@ pbuc1_derefidx_vbuyy=_inc__deref_pbuz1 < pbuc1_derefidx_vbuaa=_inc__deref_pbuz1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=_neg__deref_pbuz1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=_pos__deref_pbuz1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=_not__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=_dec__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=_inc__deref_pbuc1
pbuc1_derefidx_vbuyy=_dec__deref_pbuc1 < pbuc1_derefidx_vbuyy=_dec_vbuaa < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A cycles:13.0
lda {c1}
sec
sbc #1
sta {c1},y
pbuc1_derefidx_vbuyy=_inc__deref_pbuc1 < pbuc1_derefidx_vbuyy=_inc_vbuaa < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A cycles:13.0
lda {c1}
clc
adc #1
sta {c1},y
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=_neg__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=_pos__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuyy=_not__deref_pbuc2
pbuc1_derefidx_vbuyy=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A cycles:13.0
pbuc1_derefidx_vbuyy=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A cycles:13.0
lda {c2}
sec
sbc #1
sta {c1},y
pbuc1_derefidx_vbuyy=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A cycles:13.0
pbuc1_derefidx_vbuyy=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A cycles:13.0
lda {c2}
clc
adc #1
@ -3619,40 +3665,52 @@ pbuc1_derefidx_vbuz1=_inc__deref_pbuz2 < pbuc1_derefidx_vbuxx=_inc__deref_pbuz1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuz1=_neg__deref_pbuz2
CANNOT SYNTHESIZE pbuc1_derefidx_vbuz1=_pos__deref_pbuz2
CANNOT SYNTHESIZE pbuc1_derefidx_vbuz1=_not__deref_pbuc1
pbuc1_derefidx_vbuz1=_dec__deref_pbuc1 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A X cycles:16.0
pbuc1_derefidx_vbuz1=_dec__deref_pbuc1 < pbuc1_derefidx_vbuyy=_dec__deref_pbuc1 < pbuc1_derefidx_vbuyy=_dec_vbuaa < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A Y cycles:16.0
ldy {z1}
lda {c1}
sec
sbc #1
sta {c1},y
pbuc1_derefidx_vbuz1=_dec__deref_pbuc1 < pbuc1_derefidx_vbuxx=_dec__deref_pbuc1 < pbuc1_derefidx_vbuxx=_dec_vbuaa < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A X cycles:16.0
ldx {z1}
lda {c1}
sec
sbc #1
sta {c1},x
pbuc1_derefidx_vbuz1=_inc__deref_pbuc1 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A X cycles:16.0
pbuc1_derefidx_vbuz1=_inc__deref_pbuc1 < pbuc1_derefidx_vbuyy=_inc__deref_pbuc1 < pbuc1_derefidx_vbuyy=_inc_vbuaa < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A Y cycles:16.0
ldy {z1}
lda {c1}
clc
adc #1
sta {c1},y
pbuc1_derefidx_vbuz1=_inc__deref_pbuc1 < pbuc1_derefidx_vbuxx=_inc__deref_pbuc1 < pbuc1_derefidx_vbuxx=_inc_vbuaa < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A X cycles:16.0
ldx {z1}
lda {c1}
clc
adc #1
sta {c1},x
CANNOT SYNTHESIZE pbuc1_derefidx_vbuz1=_neg__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuz1=_pos__deref_pbuc1
CANNOT SYNTHESIZE pbuc1_derefidx_vbuz1=_not__deref_pbuc2
pbuc1_derefidx_vbuz1=_dec__deref_pbuc2 < pbuc1_derefidx_vbuyy=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A Y cycles:16.0
pbuc1_derefidx_vbuz1=_dec__deref_pbuc2 < pbuc1_derefidx_vbuyy=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A Y cycles:16.0
ldy {z1}
lda {c2}
sec
sbc #1
sta {c1},y
pbuc1_derefidx_vbuz1=_dec__deref_pbuc2 < pbuc1_derefidx_vbuxx=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_deref_pbuc1_minus_1 < vbuaa=vbuaa_minus_1 - clobber:A X cycles:16.0
pbuc1_derefidx_vbuz1=_dec__deref_pbuc2 < pbuc1_derefidx_vbuxx=_dec__deref_pbuc2 < vbuaa=_dec__deref_pbuc1 < vbuaa=_dec_vbuaa < vbuaa=vbuaa_minus_1 - clobber:A X cycles:16.0
ldx {z1}
lda {c2}
sec
sbc #1
sta {c1},x
pbuc1_derefidx_vbuz1=_inc__deref_pbuc2 < pbuc1_derefidx_vbuyy=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A Y cycles:16.0
pbuc1_derefidx_vbuz1=_inc__deref_pbuc2 < pbuc1_derefidx_vbuyy=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A Y cycles:16.0
ldy {z1}
lda {c2}
clc
adc #1
sta {c1},y
pbuc1_derefidx_vbuz1=_inc__deref_pbuc2 < pbuc1_derefidx_vbuxx=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_deref_pbuc1_plus_1 < vbuaa=vbuaa_plus_1 - clobber:A X cycles:16.0
pbuc1_derefidx_vbuz1=_inc__deref_pbuc2 < pbuc1_derefidx_vbuxx=_inc__deref_pbuc2 < vbuaa=_inc__deref_pbuc1 < vbuaa=_inc_vbuaa < vbuaa=vbuaa_plus_1 - clobber:A X cycles:16.0
ldx {z1}
lda {c2}
clc

View File

@ -14,46 +14,46 @@ main: {
jmp b1
}
animate: {
lda XPOS+0
clc
adc #1
sta XPOS+0
ldx XPOS+0
inx
stx XPOS+0
txa
cmp #$28
bne b1
lda #0
sta XPOS+0
b1:
lda YPOS+0
clc
adc #1
sta YPOS+0
ldx YPOS+0
inx
stx YPOS+0
txa
cmp #$19
bne b2
lda #0
sta YPOS+0
b2:
lda XPOS+1
sec
sbc #1
sta XPOS+1
ldx XPOS+1
dex
stx XPOS+1
txa
cmp #$ff
bne b3
lda #$28
sta XPOS+1
b3:
lda YPOS+2
clc
adc #1
sta YPOS+2
ldx YPOS+2
inx
stx YPOS+2
txa
cmp #$19
bne b4
lda #0
sta YPOS+2
b4:
lda YPOS+3
sec
sbc #1
sta YPOS+3
ldx YPOS+3
dex
stx YPOS+3
txa
cmp #$ff
bne breturn
lda #$19

View File

@ -2052,10 +2052,9 @@ animate: {
.label _15 = $12
.label _18 = $13
//SEG24 [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuz1=_deref_pbuc1_plus_1
lda XPOS+0
clc
adc #1
sta _0
ldy XPOS+0
iny
sty _0
//SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1
lda _0
sta XPOS+0
@ -2073,10 +2072,9 @@ animate: {
//SEG29 animate::@1
b1:
//SEG30 [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuz1=_deref_pbuc1_plus_1
lda YPOS+0
clc
adc #1
sta _3
ldy YPOS+0
iny
sty _3
//SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1
lda _3
sta YPOS+0
@ -2094,10 +2092,9 @@ animate: {
//SEG35 animate::@2
b2:
//SEG36 [20] (byte/signed byte/word/signed word~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuz1=_deref_pbuc1_minus_1
lda XPOS+1
sec
sbc #1
sta _6
ldx XPOS+1
dex
stx _6
//SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1
lda _6
sta XPOS+1
@ -2115,10 +2112,9 @@ animate: {
//SEG41 animate::@3
b3:
//SEG42 [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuz1=_deref_pbuc1_plus_1
lda YPOS+2
clc
adc #1
sta _9
ldy YPOS+2
iny
sty _9
//SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1
lda _9
sta YPOS+2
@ -2136,10 +2132,9 @@ animate: {
//SEG47 animate::@4
b4:
//SEG48 [28] (byte/signed byte/word/signed word~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuz1=_deref_pbuc1_minus_1
lda YPOS+3
sec
sbc #1
sta _12
ldx YPOS+3
dex
stx _12
//SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1
lda _12
sta YPOS+3
@ -2491,19 +2486,14 @@ initscreen: {
COLS: .byte 1, 2, 3, 4, 5, 7
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) always clobbers reg byte a
Statement [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0)!=(byte/signed byte/word/signed word) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [15] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) always clobbers reg byte a
Statement [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0)!=(byte/signed byte/word/signed word) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [19] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [20] (byte/signed byte/word/signed word~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) always clobbers reg byte a
Statement [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1)!=(byte/word/signed word) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [23] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) always clobbers reg byte a
Statement [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2)!=(byte/signed byte/word/signed word) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [27] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [28] (byte/signed byte/word/signed word~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) always clobbers reg byte a
Statement [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3)!=(byte/word/signed word) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) always clobbers reg byte a
@ -2527,19 +2517,14 @@ Statement [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed
Statement [77] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ) always clobbers reg byte a
Statement [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] ( main:2::initscreen:5 [ initscreen::screen#2 ] ) always clobbers reg byte a reg byte y
Statement [82] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) always clobbers reg byte a
Statement [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) always clobbers reg byte a
Statement [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0)!=(byte/signed byte/word/signed word) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [15] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) always clobbers reg byte a
Statement [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0)!=(byte/signed byte/word/signed word) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [19] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [20] (byte/signed byte/word/signed word~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) always clobbers reg byte a
Statement [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1)!=(byte/word/signed word) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [23] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) always clobbers reg byte a
Statement [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2)!=(byte/signed byte/word/signed word) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [27] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [28] (byte/signed byte/word/signed word~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) always clobbers reg byte a
Statement [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3)!=(byte/word/signed word) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) always clobbers reg byte a
@ -2588,33 +2573,33 @@ Uplift Scope [main]
Uplift Scope []
Uplift attempts [findcol] 10000/2239488 (limiting to 10000)
Uplifting [findcol] best 1714005 combination reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ] zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] reg byte y [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ] zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] reg byte a [ findcol::$10 ] reg byte a [ findcol::$12 ] reg byte x [ findcol::i#10 findcol::i#1 ] zp ZP_BYTE:24 [ findcol::xp#0 ] zp ZP_BYTE:25 [ findcol::yp#0 ] zp ZP_BYTE:22 [ findcol::return#0 ] zp ZP_BYTE:21 [ findcol::y#0 ] zp ZP_BYTE:20 [ findcol::x#0 ]
Uplifting [findcol] best 1713995 combination reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ] zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] reg byte y [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ] zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] reg byte a [ findcol::$10 ] reg byte a [ findcol::$12 ] reg byte x [ findcol::i#10 findcol::i#1 ] zp ZP_BYTE:24 [ findcol::xp#0 ] zp ZP_BYTE:25 [ findcol::yp#0 ] zp ZP_BYTE:22 [ findcol::return#0 ] zp ZP_BYTE:21 [ findcol::y#0 ] zp ZP_BYTE:20 [ findcol::x#0 ]
Limited combination testing to 10000 combinations of 2239488 possible.
Uplifting [render] best 1708005 combination zp ZP_BYTE:5 [ render::x#2 render::x#1 ] reg byte a [ render::col#0 ] zp ZP_BYTE:2 [ render::y#4 render::y#1 ] zp ZP_WORD:3 [ render::colline#5 render::colline#1 ]
Uplifting [initscreen] best 1708005 combination zp ZP_WORD:11 [ initscreen::screen#2 initscreen::screen#1 ]
Uplifting [render] best 1707995 combination zp ZP_BYTE:5 [ render::x#2 render::x#1 ] reg byte a [ render::col#0 ] zp ZP_BYTE:2 [ render::y#4 render::y#1 ] zp ZP_WORD:3 [ render::colline#5 render::colline#1 ]
Uplifting [initscreen] best 1707995 combination zp ZP_WORD:11 [ initscreen::screen#2 initscreen::screen#1 ]
Uplift attempts [animate] 10000/16384 (limiting to 10000)
Uplifting [animate] best 1707963 combination reg byte a [ animate::$0 ] reg byte a [ animate::$3 ] reg byte a [ animate::$6 ] reg byte a [ animate::$9 ] reg byte a [ animate::$12 ] reg byte a [ animate::$15 ] reg byte a [ animate::$18 ]
Uplifting [animate] best 1707953 combination reg byte x [ animate::$0 ] reg byte x [ animate::$3 ] reg byte x [ animate::$6 ] reg byte x [ animate::$9 ] reg byte x [ animate::$12 ] reg byte a [ animate::$15 ] reg byte a [ animate::$18 ]
Limited combination testing to 10000 combinations of 16384 possible.
Uplifting [main] best 1707963 combination
Uplifting [] best 1707963 combination
Uplifting [main] best 1707953 combination
Uplifting [] best 1707953 combination
Attempting to uplift remaining variables inzp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
Uplifting [findcol] best 1707963 combination zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
Uplifting [findcol] best 1707953 combination zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ]
Uplifting [findcol] best 1707963 combination zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ]
Uplifting [findcol] best 1707953 combination zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ]
Attempting to uplift remaining variables inzp ZP_BYTE:24 [ findcol::xp#0 ]
Uplifting [findcol] best 1707963 combination zp ZP_BYTE:24 [ findcol::xp#0 ]
Uplifting [findcol] best 1707953 combination zp ZP_BYTE:24 [ findcol::xp#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ findcol::yp#0 ]
Uplifting [findcol] best 1707963 combination zp ZP_BYTE:25 [ findcol::yp#0 ]
Uplifting [findcol] best 1707953 combination zp ZP_BYTE:25 [ findcol::yp#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ render::x#2 render::x#1 ]
Uplifting [render] best 1707963 combination zp ZP_BYTE:5 [ render::x#2 render::x#1 ]
Uplifting [render] best 1707953 combination zp ZP_BYTE:5 [ render::x#2 render::x#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:22 [ findcol::return#0 ]
Uplifting [findcol] best 1703963 combination reg byte a [ findcol::return#0 ]
Uplifting [findcol] best 1703953 combination reg byte a [ findcol::return#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:21 [ findcol::y#0 ]
Uplifting [findcol] best 1703963 combination zp ZP_BYTE:21 [ findcol::y#0 ]
Uplifting [findcol] best 1703953 combination zp ZP_BYTE:21 [ findcol::y#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:20 [ findcol::x#0 ]
Uplifting [findcol] best 1703963 combination zp ZP_BYTE:20 [ findcol::x#0 ]
Uplifting [findcol] best 1703953 combination zp ZP_BYTE:20 [ findcol::x#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ render::y#4 render::y#1 ]
Uplifting [render] best 1703963 combination zp ZP_BYTE:2 [ render::y#4 render::y#1 ]
Uplifting [render] best 1703953 combination zp ZP_BYTE:2 [ render::y#4 render::y#1 ]
Coalescing zero page register [ zp ZP_BYTE:2 [ render::y#4 render::y#1 ] ] with [ zp ZP_BYTE:21 [ findcol::y#0 ] ]
Coalescing zero page register [ zp ZP_WORD:3 [ render::colline#5 render::colline#1 ] ] with [ zp ZP_WORD:11 [ initscreen::screen#2 initscreen::screen#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:5 [ render::x#2 render::x#1 ] ] with [ zp ZP_BYTE:20 [ findcol::x#0 ] ]
@ -2685,12 +2670,11 @@ main: {
}
//SEG23 animate
animate: {
//SEG24 [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuaa=_deref_pbuc1_plus_1
lda XPOS+0
clc
adc #1
//SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa
sta XPOS+0
//SEG24 [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuxx=_deref_pbuc1_plus_1
ldx XPOS+0
inx
//SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx
stx XPOS+0
//SEG26 [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0)!=(byte/signed byte/word/signed word) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1
lda XPOS+0
cmp #$28
@ -2704,12 +2688,11 @@ animate: {
jmp b1
//SEG29 animate::@1
b1:
//SEG30 [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuaa=_deref_pbuc1_plus_1
lda YPOS+0
clc
adc #1
//SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa
sta YPOS+0
//SEG30 [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuxx=_deref_pbuc1_plus_1
ldx YPOS+0
inx
//SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx
stx YPOS+0
//SEG32 [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0)!=(byte/signed byte/word/signed word) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1
lda YPOS+0
cmp #$19
@ -2723,12 +2706,11 @@ animate: {
jmp b2
//SEG35 animate::@2
b2:
//SEG36 [20] (byte/signed byte/word/signed word~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuaa=_deref_pbuc1_minus_1
lda XPOS+1
sec
sbc #1
//SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa
sta XPOS+1
//SEG36 [20] (byte/signed byte/word/signed word~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuxx=_deref_pbuc1_minus_1
ldx XPOS+1
dex
//SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx
stx XPOS+1
//SEG38 [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1)!=(byte/word/signed word) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1
lda XPOS+1
cmp #$ff
@ -2742,12 +2724,11 @@ animate: {
jmp b3
//SEG41 animate::@3
b3:
//SEG42 [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuaa=_deref_pbuc1_plus_1
lda YPOS+2
clc
adc #1
//SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa
sta YPOS+2
//SEG42 [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuxx=_deref_pbuc1_plus_1
ldx YPOS+2
inx
//SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx
stx YPOS+2
//SEG44 [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2)!=(byte/signed byte/word/signed word) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1
lda YPOS+2
cmp #$19
@ -2761,12 +2742,11 @@ animate: {
jmp b4
//SEG47 animate::@4
b4:
//SEG48 [28] (byte/signed byte/word/signed word~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuaa=_deref_pbuc1_minus_1
lda YPOS+3
sec
sbc #1
//SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa
sta YPOS+3
//SEG48 [28] (byte/signed byte/word/signed word~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuxx=_deref_pbuc1_minus_1
ldx YPOS+3
dex
//SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx
stx YPOS+3
//SEG50 [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3)!=(byte/word/signed word) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1
lda YPOS+3
cmp #$ff
@ -3111,11 +3091,11 @@ Removing instruction jmp b8
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda XPOS+0
Removing instruction lda YPOS+0
Removing instruction lda XPOS+1
Removing instruction lda YPOS+2
Removing instruction lda YPOS+3
Replacing instruction lda XPOS+0 with TXA
Replacing instruction lda YPOS+0 with TXA
Replacing instruction lda XPOS+1 with TXA
Replacing instruction lda YPOS+2 with TXA
Replacing instruction lda YPOS+3 with TXA
Removing instruction lda XPOS+3
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b1_from_b5 with b1
@ -3199,13 +3179,13 @@ FINAL SYMBOL TABLE
(byte[]) YPOS
(const byte[]) YPOS#0 YPOS = { (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 8, (byte/signed byte/word/signed word) 14, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 17, (byte/signed byte/word/signed word) 22 }
(void()) animate()
(byte/word~) animate::$0 reg byte a 4.0
(byte/signed byte/word/signed word~) animate::$12 reg byte a 4.0
(byte/word~) animate::$0 reg byte x 4.0
(byte/signed byte/word/signed word~) animate::$12 reg byte x 4.0
(byte/word~) animate::$15 reg byte a 4.0
(byte/signed byte/word/signed word~) animate::$18 reg byte a 4.0
(byte/word~) animate::$3 reg byte a 4.0
(byte/signed byte/word/signed word~) animate::$6 reg byte a 4.0
(byte/word~) animate::$9 reg byte a 4.0
(byte/word~) animate::$3 reg byte x 4.0
(byte/signed byte/word/signed word~) animate::$6 reg byte x 4.0
(byte/word~) animate::$9 reg byte x 4.0
(label) animate::@1
(label) animate::@10
(label) animate::@11
@ -3303,11 +3283,11 @@ zp ZP_BYTE:6 [ findcol::mindiff#10 findcol::mindiff#13 ]
reg byte y [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
zp ZP_BYTE:7 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 findcol::xp#0 ]
reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ]
reg byte a [ animate::$0 ]
reg byte a [ animate::$3 ]
reg byte a [ animate::$6 ]
reg byte a [ animate::$9 ]
reg byte a [ animate::$12 ]
reg byte x [ animate::$0 ]
reg byte x [ animate::$3 ]
reg byte x [ animate::$6 ]
reg byte x [ animate::$9 ]
reg byte x [ animate::$12 ]
reg byte a [ animate::$15 ]
reg byte a [ animate::$18 ]
reg byte a [ findcol::return#0 ]
@ -3360,13 +3340,13 @@ main: {
}
//SEG23 animate
animate: {
//SEG24 [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuaa=_deref_pbuc1_plus_1
lda XPOS+0
clc
adc #1
//SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa
sta XPOS+0
//SEG24 [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuxx=_deref_pbuc1_plus_1
ldx XPOS+0
inx
//SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx
stx XPOS+0
//SEG26 [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0)!=(byte/signed byte/word/signed word) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1
txa
cmp #$28
bne b1
//SEG27 animate::@7
@ -3375,13 +3355,13 @@ animate: {
sta XPOS+0
//SEG29 animate::@1
b1:
//SEG30 [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuaa=_deref_pbuc1_plus_1
lda YPOS+0
clc
adc #1
//SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa
sta YPOS+0
//SEG30 [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuxx=_deref_pbuc1_plus_1
ldx YPOS+0
inx
//SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx
stx YPOS+0
//SEG32 [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 0)!=(byte/signed byte/word/signed word) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1
txa
cmp #$19
bne b2
//SEG33 animate::@8
@ -3390,13 +3370,13 @@ animate: {
sta YPOS+0
//SEG35 animate::@2
b2:
//SEG36 [20] (byte/signed byte/word/signed word~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuaa=_deref_pbuc1_minus_1
lda XPOS+1
sec
sbc #1
//SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa
sta XPOS+1
//SEG36 [20] (byte/signed byte/word/signed word~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuxx=_deref_pbuc1_minus_1
ldx XPOS+1
dex
//SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx
stx XPOS+1
//SEG38 [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 1)!=(byte/word/signed word) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1
txa
cmp #$ff
bne b3
//SEG39 animate::@9
@ -3405,13 +3385,13 @@ animate: {
sta XPOS+1
//SEG41 animate::@3
b3:
//SEG42 [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuaa=_deref_pbuc1_plus_1
lda YPOS+2
clc
adc #1
//SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa
sta YPOS+2
//SEG42 [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuxx=_deref_pbuc1_plus_1
ldx YPOS+2
inx
//SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx
stx YPOS+2
//SEG44 [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 2)!=(byte/signed byte/word/signed word) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1
txa
cmp #$19
bne b4
//SEG45 animate::@10
@ -3420,13 +3400,13 @@ animate: {
sta YPOS+2
//SEG47 animate::@4
b4:
//SEG48 [28] (byte/signed byte/word/signed word~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuaa=_deref_pbuc1_minus_1
lda YPOS+3
sec
sbc #1
//SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa
sta YPOS+3
//SEG48 [28] (byte/signed byte/word/signed word~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuxx=_deref_pbuc1_minus_1
ldx YPOS+3
dex
//SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx
stx YPOS+3
//SEG50 [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3)!=(byte/word/signed word) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1
txa
cmp #$ff
bne breturn
//SEG51 animate::@11

View File

@ -14,13 +14,13 @@
(byte[]) YPOS
(const byte[]) YPOS#0 YPOS = { (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 8, (byte/signed byte/word/signed word) 14, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 17, (byte/signed byte/word/signed word) 22 }
(void()) animate()
(byte/word~) animate::$0 reg byte a 4.0
(byte/signed byte/word/signed word~) animate::$12 reg byte a 4.0
(byte/word~) animate::$0 reg byte x 4.0
(byte/signed byte/word/signed word~) animate::$12 reg byte x 4.0
(byte/word~) animate::$15 reg byte a 4.0
(byte/signed byte/word/signed word~) animate::$18 reg byte a 4.0
(byte/word~) animate::$3 reg byte a 4.0
(byte/signed byte/word/signed word~) animate::$6 reg byte a 4.0
(byte/word~) animate::$9 reg byte a 4.0
(byte/word~) animate::$3 reg byte x 4.0
(byte/signed byte/word/signed word~) animate::$6 reg byte x 4.0
(byte/word~) animate::$9 reg byte x 4.0
(label) animate::@1
(label) animate::@10
(label) animate::@11
@ -118,11 +118,11 @@ zp ZP_BYTE:6 [ findcol::mindiff#10 findcol::mindiff#13 ]
reg byte y [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
zp ZP_BYTE:7 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 findcol::xp#0 ]
reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ]
reg byte a [ animate::$0 ]
reg byte a [ animate::$3 ]
reg byte a [ animate::$6 ]
reg byte a [ animate::$9 ]
reg byte a [ animate::$12 ]
reg byte x [ animate::$0 ]
reg byte x [ animate::$3 ]
reg byte x [ animate::$6 ]
reg byte x [ animate::$9 ]
reg byte x [ animate::$12 ]
reg byte a [ animate::$15 ]
reg byte a [ animate::$18 ]
reg byte a [ findcol::return#0 ]