diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java index 80189083c..f6e3307ac 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java @@ -713,25 +713,11 @@ class AsmFragmentTemplateSynthesisRule { synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuz1=(.*)", twoZM1+"|"+twoC1, null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x", mapZ1C1)); synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuz2=(.*)", twoZM1+"|"+twoZM2, null, "vb$1aa=$2", "ldy {z2}\n" + "sta ({z1}),y", mapZM12)); - - // Convert array indexing twice with A/zp1/zp2 to X/Y register with a ldx/ldy prefix ( ..._derefidx_vbunn..._derefidx_vbunn... -> ..._derefidx_vbuxx..._derefidx_vbuxx... ) - synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuaa(.*)_derefidx_vbuaa(.*)", threeAa+"|"+rvalXx+"|"+lvalDerefIdxAa, "tax", "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", null, null)); - synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuaa(.*)_derefidx_vbuaa(.*)", threeAa+"|"+rvalYy+"|"+lvalDerefIdxAa, "tay", "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", null, null)); - synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", threeZM1+"|"+rvalXx+"|"+lvalDerefIdxZ1, "ldx {z1}", "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", null, mapZM1)); - synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", threeZM1+"|"+rvalYy+"|"+lvalDerefIdxZ1, "ldy {z1}", "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", null, mapZM1)); - synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", threeZM2+"|"+rvalXx+"|"+lvalDerefIdxZ2, "ldx {z2}", "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", null, mapZM2)); - synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", threeZM2+"|"+rvalYy+"|"+lvalDerefIdxZ2, "ldy {z2}", "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", null, mapZM2)); - synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz3(.*)_derefidx_vbuz3(.*)", threeZM3+"|"+rvalXx+"|"+lvalDerefIdxZ3, "ldx {z3}", "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", null, mapZM3)); - synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz3(.*)_derefidx_vbuz3(.*)", threeZM3+"|"+rvalYy+"|"+lvalDerefIdxZ3, "ldy {z3}", "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", null, mapZM3)); - synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz4(.*)_derefidx_vbuz4(.*)", threeZM4+"|"+rvalXx+"|"+lvalDerefIdxZ4, "ldx {z4}", "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", null, mapZM4)); - synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz4(.*)_derefidx_vbuz4(.*)", threeZM4+"|"+rvalYy+"|"+lvalDerefIdxZ4, "ldy {z4}", "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", null, mapZM4)); - synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuz1=(.*c1.*)", twoZM1, null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x", mapZM1)); synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuz1=(.*z1.*)", twoC1, null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x", mapC1)); // Convert X/Y-based array indexing of a constant pointer into A-register by prefixing lda cn,x / lda cn,y ( ...pb.c1_derefidx_vbuxx... / ...pb.c1_derefidx_vbuyy... -> ...vb.aa... ) - synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*)", rvalAa+"|"+twoC1, "lda {c1},x", "$1=$2vb$3aa$4", null, mapC1)); synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*)", rvalYy+"|"+twoC1, "ldy {c1},x", "$1=$2vb$3yy$4", null, mapC1)); synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*c1.*)pb(.)c1_derefidx_vbuxx(.*)", rvalAa, "lda {c1},x", "$1=$2vb$3aa$4", null, null)); diff --git a/src/test/ref/fragments-assignment-binary-pbuc1_derefidx_vbuaa.log b/src/test/ref/fragments-assignment-binary-pbuc1_derefidx_vbuaa.log index de837e5b3..62862d400 100644 --- a/src/test/ref/fragments-assignment-binary-pbuc1_derefidx_vbuaa.log +++ b/src/test/ref/fragments-assignment-binary-pbuc1_derefidx_vbuaa.log @@ -3673,7 +3673,7 @@ synthesized pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz2_bor_pbuz3_derefidx_vbuz2 < lda ({z1}),y ora ({z3}),y sta {c1},x -synthesized pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz2_bor_pbuz3_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2_bor_pbuz3_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuz3_derefidx_vbuz2_bor_pbuz1_derefidx_vbuz2 < vbuaa=pbuz3_derefidx_vbuz2_bor_pbuz1_derefidx_vbuz2 < vbuaa=pbuz2_derefidx_vbuyy_bor_pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy_bor_vbuaa < vbuaa=vbuaa_bor_pbuz1_derefidx_vbuyy - clobber:A Y cycles:27.0 +synthesized pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz2_bor_pbuz3_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2_bor_pbuz3_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuz3_derefidx_vbuz2_bor_pbuz1_derefidx_vbuz2 < vbuaa=pbuz3_derefidx_vbuz2_bor_pbuz1_derefidx_vbuz2 < vbuaa=pbuz3_derefidx_vbum2_bor_pbuz1_derefidx_vbum2 < vbuaa=pbuz2_derefidx_vbuyy_bor_pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuyy_bor_vbuaa < vbuaa=vbuaa_bor_pbuz1_derefidx_vbuyy - clobber:A Y cycles:27.0 tay sty $ff @@ -3742,7 +3742,7 @@ synthesized pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz2_bxor_pbuc1_derefidx_vbuz2 lda ({z1}),y eor {c1},y sta {c1},x -synthesized pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz2_bxor_pbuc1_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2_bxor_pbuc1_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuz2_bxor_pbuz1_derefidx_vbuz2 < vbuaa=pbuc1_derefidx_vbuz2_bxor_pbuz1_derefidx_vbuz2 < vbuaa=pbuc1_derefidx_vbuyy_bxor_pbuz1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_bxor_vbuaa < vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuyy - clobber:A Y cycles:26.0 +synthesized pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz2_bxor_pbuc1_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2_bxor_pbuc1_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuz2_bxor_pbuz1_derefidx_vbuz2 < vbuaa=pbuc1_derefidx_vbuz2_bxor_pbuz1_derefidx_vbuz2 < vbuaa=pbuc1_derefidx_vbum2_bxor_pbuz1_derefidx_vbum2 < vbuaa=pbuc1_derefidx_vbuyy_bxor_pbuz1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_bxor_vbuaa < vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuyy - clobber:A Y cycles:26.0 tay sty $ff @@ -3834,7 +3834,7 @@ synthesized pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz2_bor_pbuc2_derefidx_vbuz2 < lda ({z1}),y ora {c2},y sta {c1},x -synthesized pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz2_bor_pbuc2_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2_bor_pbuc2_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz2_bor_pbuz1_derefidx_vbuz2 < vbuaa=pbuc2_derefidx_vbuz2_bor_pbuz1_derefidx_vbuz2 < vbuaa=pbuc1_derefidx_vbuz2_bor_pbuz1_derefidx_vbuz2 < vbuaa=pbuc1_derefidx_vbuyy_bor_pbuz1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_bor_vbuaa < vbuaa=vbuaa_bor_pbuc1_derefidx_vbuyy - clobber:A Y cycles:26.0 +synthesized pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuz2_bor_pbuc2_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2_bor_pbuc2_derefidx_vbuz2 < pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz2_bor_pbuz1_derefidx_vbuz2 < vbuaa=pbuc2_derefidx_vbuz2_bor_pbuz1_derefidx_vbuz2 < vbuaa=pbuc1_derefidx_vbuz2_bor_pbuz1_derefidx_vbuz2 < vbuaa=pbuc1_derefidx_vbum2_bor_pbuz1_derefidx_vbum2 < vbuaa=pbuc1_derefidx_vbuyy_bor_pbuz1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_bor_vbuaa < vbuaa=vbuaa_bor_pbuc1_derefidx_vbuyy - clobber:A Y cycles:26.0 tay sty $ff @@ -5863,7 +5863,7 @@ synthesized pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuz1_bxor_pbuz2_derefidx_vbuz1 lda ({z2}),y eor {c1},y sta {c1},x -synthesized pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuz1_bxor_pbuz2_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuz1_bxor_pbuz2_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuz1_bxor_pbuz2_derefidx_vbuz1 < vbuaa=pbuz2_derefidx_vbuz1_bxor_pbuc1_derefidx_vbuz1 < vbuaa=pbuz1_derefidx_vbuyy_bxor_pbuc1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_bxor_pbuz1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_bxor_vbuaa < vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuyy - clobber:A Y cycles:26.0 +synthesized pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuz1_bxor_pbuz2_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuz1_bxor_pbuz2_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuz1_bxor_pbuz2_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbum1_bxor_pbuz2_derefidx_vbum1 < vbuaa=pbuc1_derefidx_vbuyy_bxor_pbuz1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_bxor_vbuaa < vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuyy - clobber:A Y cycles:26.0 tay sty $ff @@ -5978,7 +5978,7 @@ synthesized pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuz1_bxor_pbuc1_derefidx_vbuz1 lda {c1},x eor {c1},x sta {c1},y -synthesized pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuz1_bxor_pbuc1_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuz1_bxor_pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuz1_bxor_pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuyy_bxor_pbuc1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_bxor_vbuaa < vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuyy - clobber:A Y cycles:25.0 +synthesized pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuz1_bxor_pbuc1_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuz1_bxor_pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuz1_bxor_pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbum1_bxor_pbuc1_derefidx_vbum1 < vbuaa=pbuc1_derefidx_vbuyy_bxor_pbuc1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_bxor_vbuaa < vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuyy - clobber:A Y cycles:25.0 tay sty $ff @@ -6122,7 +6122,7 @@ synthesized pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuz1_bor_pbuc2_derefidx_vbuz1 < lda {c1},x ora {c2},x sta {c1},y -synthesized pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuz1_bor_pbuc2_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuz1_bor_pbuc2_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1_bor_pbuc1_derefidx_vbuz1 < vbuaa=pbuc2_derefidx_vbuz1_bor_pbuc1_derefidx_vbuz1 < vbuaa=pbuc2_derefidx_vbuyy_bor_pbuc1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_bor_vbuaa < vbuaa=vbuaa_bor_pbuc1_derefidx_vbuyy - clobber:A Y cycles:25.0 +synthesized pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuz1_bor_pbuc2_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuz1_bor_pbuc2_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1_bor_pbuc1_derefidx_vbuz1 < vbuaa=pbuc2_derefidx_vbuz1_bor_pbuc1_derefidx_vbuz1 < vbuaa=pbuc2_derefidx_vbum1_bor_pbuc1_derefidx_vbum1 < vbuaa=pbuc2_derefidx_vbuyy_bor_pbuc1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_bor_vbuaa < vbuaa=vbuaa_bor_pbuc1_derefidx_vbuyy - clobber:A Y cycles:25.0 tay sty $ff @@ -9025,7 +9025,7 @@ synthesized pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1_band_pbuc1_derefidx_vbuz1 lda {c1},x and {c2},x sta {c1},y -synthesized pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1_band_pbuc1_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1_band_pbuc1_derefidx_vbuz1 < vbuaa=pbuc2_derefidx_vbuz1_band_pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuz1_band_pbuc2_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuyy_band_pbuc2_derefidx_vbuyy < vbuaa=vbuaa_band_pbuc1_derefidx_vbuyy - clobber:A Y cycles:25.0 +synthesized pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1_band_pbuc1_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1_band_pbuc1_derefidx_vbuz1 < vbuaa=pbuc2_derefidx_vbuz1_band_pbuc1_derefidx_vbuz1 < vbuaa=pbuc2_derefidx_vbum1_band_pbuc1_derefidx_vbum1 < vbuaa=pbuc2_derefidx_vbuyy_band_pbuc1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_band_pbuc2_derefidx_vbuyy < vbuaa=vbuaa_band_pbuc1_derefidx_vbuyy - clobber:A Y cycles:25.0 tay sty $ff @@ -9184,7 +9184,7 @@ synthesized pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1_band_pbuc2_derefidx_vbuz1 lda {c2},x and {c2},x sta {c1},y -synthesized pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1_band_pbuc2_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1_band_pbuc2_derefidx_vbuz1 < vbuaa=pbuc2_derefidx_vbuz1_band_pbuc2_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuz1_band_pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuyy_band_pbuc1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_band_vbuaa < vbuaa=vbuaa_band_pbuc1_derefidx_vbuyy - clobber:A Y cycles:25.0 +synthesized pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1_band_pbuc2_derefidx_vbuz1 < pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1_band_pbuc2_derefidx_vbuz1 < vbuaa=pbuc2_derefidx_vbuz1_band_pbuc2_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbuz1_band_pbuc1_derefidx_vbuz1 < vbuaa=pbuc1_derefidx_vbum1_band_pbuc1_derefidx_vbum1 < vbuaa=pbuc1_derefidx_vbuyy_band_pbuc1_derefidx_vbuyy < vbuaa=pbuc1_derefidx_vbuyy_band_vbuaa < vbuaa=vbuaa_band_pbuc1_derefidx_vbuyy - clobber:A Y cycles:25.0 tay sty $ff