From 7a8a42bb03d430e9a93c8e2ff2ba346e8e88080f Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Mon, 21 Dec 2020 17:49:10 +0100 Subject: [PATCH] Added support for @nooptimize ASM tag. #599 --- .../cache/fragment-cache-csg65ce02.asm | 2 +- .../cache/fragment-cache-mega45gs02.asm | 2502 ++++++++--------- .../fragment/cache/fragment-cache-mos6502.asm | 2 +- .../cache/fragment-cache-mos6502x.asm | 1704 +++++------ .../cache/fragment-cache-rom6502x.asm | 2164 +++++++------- .../cache/fragment-cache-wdc65c02.asm | 2 +- .../mos6502-selfmod/isr_hardware_all_exit.asm | 6 +- .../camelot64/kickc/asm/AsmInstruction.java | 14 - .../java/dk/camelot64/kickc/asm/AsmLabel.java | 10 - .../java/dk/camelot64/kickc/asm/AsmLine.java | 7 + .../kickc/fragment/AsmFragmentInstance.java | 36 +- .../dk/camelot64/kickc/parser/KickCParser.g4 | 8 +- .../camelot64/kickc/parser/KickCParser.interp | 2 +- .../camelot64/kickc/parser/KickCParser.java | 435 +-- .../kickc/passes/Pass4CodeGeneration.java | 4 - .../Pass5UnnecesaryLoadElimination.java | 2 +- .../passes/Pass5UnusedLabelElimination.java | 2 +- 17 files changed, 3455 insertions(+), 3447 deletions(-) diff --git a/src/main/fragment/cache/fragment-cache-csg65ce02.asm b/src/main/fragment/cache/fragment-cache-csg65ce02.asm index a7247c54b..c3cce812d 100644 --- a/src/main/fragment/cache/fragment-cache-csg65ce02.asm +++ b/src/main/fragment/cache/fragment-cache-csg65ce02.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 15355793f5 153557b229 +//KICKC FRAGMENT CACHE 13789539dd 13789557f9 //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} diff --git a/src/main/fragment/cache/fragment-cache-mega45gs02.asm b/src/main/fragment/cache/fragment-cache-mega45gs02.asm index d23150953..fdfa5ab8e 100644 --- a/src/main/fragment/cache/fragment-cache-mega45gs02.asm +++ b/src/main/fragment/cache/fragment-cache-mega45gs02.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 15355793f5 153557b229 +//KICKC FRAGMENT CACHE 13789539dd 13789557f9 //FRAGMENT _deref_pbuc1=vbuc2 lda #{c2} sta {c1} @@ -62,16 +62,1135 @@ ldz {z1} //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} -//FRAGMENT vbuz1=_deref_pbuc1_plus_1 -lda {c1} -inc +//FRAGMENT isr_hardware_all_entry +pha @clob_a +phx @clob_x +phy @clob_y +phz @clob_z +//FRAGMENT vbuz1=_inc_vbuz1 +inc {z1} +//FRAGMENT vbuz1=vbuz2 +lda {z2} sta {z1} +//FRAGMENT vbuz1_neq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} //FRAGMENT vbuz1_lt_vbuc1_then_la1 lda {z1} cmp #{c1} bcc {la1} -//FRAGMENT vbuz1=vbuz2 +//FRAGMENT vbuz1=vbuz2_rol_4 lda {z2} +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuz1=_dec_vbuz1 +dec {z1} +//FRAGMENT vbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +sta {z1} +//FRAGMENT vbuz1_neq_0_then_la1 +lda {z1} +cmp #0 +bne {la1} +//FRAGMENT vbuz1=vbuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +//FRAGMENT _deref_pbuc1=vbuz1 +lda {z1} +sta {c1} +//FRAGMENT isr_hardware_all_exit +plz @clob_z +ply @clob_y +plx @clob_x +pla @clob_a +rti +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1},y +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_band_vbuc2 +lda #{c2} +ldy {z2} +and {c1},y +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=vbuz2 +lda {z2} +ldy {z1} +sta {c1},y +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_ror_1 +ldy {z2} +lda {c1},y +lsr +sta {z1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +//FRAGMENT vbuz1=vbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=vbuc2 +lda #{c2} +ldy {z1} +sta {c1},y +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_ror_2 +ldy {z2} +lda {c1},y +lsr +lsr +sta {z1} +//FRAGMENT vbuz1=vbuz2_ror_1 +lda {z2} +lsr +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 +ldy {z2} +lda {c2},y +ldy {z1} +sta {c1},y +//FRAGMENT vbuz1_eq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +beq {la1} +//FRAGMENT vbuz1=vbuz2_plus_1 +lda {z2} +inc +sta {z1} +//FRAGMENT vbuz1=_deref_pbuc1 +lda {c1} +sta {z1} +//FRAGMENT vbuz1_eq__deref_pbuc1_then_la1 +lda {c1} +cmp {z1} +beq {la1} +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +sta {c1} +//FRAGMENT _deref_qprc1=pprc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT pbuz1_neq_pbuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vbuaa=vbuz1 +lda {z1} +//FRAGMENT vbuxx=vbuz1 +ldx {z1} +//FRAGMENT vbuaa_neq_vbuc1_then_la1 +cmp #{c1} +bne {la1} +//FRAGMENT vbuaa_lt_vbuc1_then_la1 +cmp #{c1} +bcc {la1} +//FRAGMENT vbuaa=vbuz1_rol_4 +lda {z1} +asl +asl +asl +asl +//FRAGMENT vbuxx=vbuz1_rol_4 +lda {z1} +asl +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuz1_rol_4 +lda {z1} +asl +asl +asl +asl +tay +//FRAGMENT vbuzz=vbuz1_rol_4 +lda {z1} +asl +asl +asl +asl +taz +//FRAGMENT vbuaa=_deref_pbuz1 +ldy #0 +lda ({z1}),y +//FRAGMENT vbuxx=_deref_pbuz1 +ldy #0 +lda ({z1}),y +tax +//FRAGMENT vbuyy=_deref_pbuz1 +ldy #0 +lda ({z1}),y +tay +//FRAGMENT vbuzz=_deref_pbuz1 +ldy #0 +lda ({z1}),y +taz +//FRAGMENT vbuaa_neq_0_then_la1 +cmp #0 +bne {la1} +//FRAGMENT vbuz1=vbuaa_band_vbuc1 +and #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuxx_band_vbuc1 +txa +and #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuyy_band_vbuc1 +tya +and #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuzz_band_vbuc1 +tza +and #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +//FRAGMENT vbuaa=vbuaa_band_vbuc1 +and #{c1} +//FRAGMENT vbuaa=vbuxx_band_vbuc1 +txa +and #{c1} +//FRAGMENT vbuaa=vbuyy_band_vbuc1 +tya +and #{c1} +//FRAGMENT vbuaa=vbuzz_band_vbuc1 +tza +and #{c1} +//FRAGMENT vbuxx=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +tax +//FRAGMENT vbuxx=vbuaa_band_vbuc1 +and #{c1} +tax +//FRAGMENT vbuxx=vbuxx_band_vbuc1 +txa +and #{c1} +tax +//FRAGMENT vbuxx=vbuyy_band_vbuc1 +tya +and #{c1} +tax +//FRAGMENT vbuxx=vbuzz_band_vbuc1 +tza +and #{c1} +tax +//FRAGMENT vbuyy=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +tay +//FRAGMENT vbuyy=vbuaa_band_vbuc1 +and #{c1} +tay +//FRAGMENT vbuyy=vbuxx_band_vbuc1 +txa +and #{c1} +tay +//FRAGMENT vbuyy=vbuyy_band_vbuc1 +tya +and #{c1} +tay +//FRAGMENT vbuyy=vbuzz_band_vbuc1 +tza +and #{c1} +tay +//FRAGMENT vbuzz=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +taz +//FRAGMENT vbuzz=vbuaa_band_vbuc1 +and #{c1} +taz +//FRAGMENT vbuzz=vbuxx_band_vbuc1 +txa +and #{c1} +taz +//FRAGMENT vbuzz=vbuyy_band_vbuc1 +tya +and #{c1} +taz +//FRAGMENT vbuzz=vbuzz_band_vbuc1 +tza +and #{c1} +taz +//FRAGMENT _deref_pbuc1=vbuaa +sta {c1} +//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuaa +tay +lda {c2},y +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx +lda {c2},x +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy +lda {c2},y +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuzz=pbuc2_derefidx_vbuzz +tza +tay +lda {c2},y +sta {c1},y +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_band_vbuc2 +lda #{c2} +ldy {z1} +and {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_band_vbuc2 +lda #{c2} +ldx {z1} +and {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_band_vbuc2 +lda #{c2} +ldy {z1} +and {c1},y +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuz1_band_vbuc2 +lda #{c2} +ldy {z1} +and {c1},y +taz +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_band_vbuc2 +tay +lda #{c2} +and {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_band_vbuc2 +tay +lda #{c2} +and {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_band_vbuc2 +tax +lda #{c2} +and {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_band_vbuc2 +tay +lda #{c2} +and {c1},y +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuaa_band_vbuc2 +tay +lda #{c2} +and {c1},y +taz +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +taz +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +taz +//FRAGMENT vbuz1=pbuc1_derefidx_vbuzz_band_vbuc2 +tza +tay +lda #{c2} +and {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuzz_band_vbuc2 +tza +tay +lda #{c2} +and {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuzz_band_vbuc2 +tza +tax +lda #{c2} +and {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuzz_band_vbuc2 +tza +tay +lda #{c2} +and {c1},y +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuzz_band_vbuc2 +tza +tay +lda #{c2} +and {c1},y +taz +//FRAGMENT pbuc1_derefidx_vbuxx=vbuz1 +lda {z1} +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuz1 +lda {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuzz=vbuz1 +tza +tay +lda {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=vbuaa +ldy {z1} +sta {c1},y +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_ror_1 +ldy {z1} +lda {c1},y +lsr +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_ror_1 +ldx {z1} +lda {c1},x +lsr +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_ror_1 +ldy {z1} +lda {c1},y +lsr +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuz1_ror_1 +ldy {z1} +lda {c1},y +lsr +taz +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_ror_1 +tay +lda {c1},y +lsr +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_ror_1 +tay +lda {c1},y +lsr +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_ror_1 +tax +lda {c1},x +lsr +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_ror_1 +tay +lda {c1},y +lsr +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuaa_ror_1 +tay +lda {c1},y +lsr +taz +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_ror_1 +lda {c1},x +lsr +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_ror_1 +lda {c1},x +lsr +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_ror_1 +lda {c1},x +lsr +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_ror_1 +lda {c1},x +lsr +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuxx_ror_1 +lda {c1},x +lsr +taz +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_ror_1 +lda {c1},y +lsr +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_ror_1 +lda {c1},y +lsr +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_ror_1 +lda {c1},y +lsr +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_ror_1 +lda {c1},y +lsr +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuyy_ror_1 +lda {c1},y +lsr +taz +//FRAGMENT vbuz1=pbuc1_derefidx_vbuzz_ror_1 +tza +tay +lda {c1},y +lsr +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuzz_ror_1 +tza +tay +lda {c1},y +lsr +//FRAGMENT vbuxx=pbuc1_derefidx_vbuzz_ror_1 +tza +tax +lda {c1},x +lsr +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuzz_ror_1 +tza +tay +lda {c1},y +lsr +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuzz_ror_1 +tza +tay +lda {c1},y +lsr +taz +//FRAGMENT pbuc1_derefidx_vbuz1=vbuxx +ldy {z1} +txa +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=vbuyy +tya +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=vbuzz +ldy {z1} +tza +sta {c1},y +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1 +ldy {z1} +ldx {c1},y +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1 +ldx {z1} +ldy {c1},x +//FRAGMENT vbuzz=pbuc1_derefidx_vbuz1 +ldx {z1} +ldz {c1},x +//FRAGMENT vbuz1=vbuaa_rol_4 +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuaa_rol_4 +asl +asl +asl +asl +//FRAGMENT vbuxx=vbuaa_rol_4 +asl +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuaa_rol_4 +asl +asl +asl +asl +tay +//FRAGMENT vbuzz=vbuaa_rol_4 +asl +asl +asl +asl +taz +//FRAGMENT vbuz1=vbuxx_rol_4 +txa +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuxx_rol_4 +txa +asl +asl +asl +asl +//FRAGMENT vbuxx=vbuxx_rol_4 +txa +asl +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuxx_rol_4 +txa +asl +asl +asl +asl +tay +//FRAGMENT vbuzz=vbuxx_rol_4 +txa +asl +asl +asl +asl +taz +//FRAGMENT vbuz1=vbuyy_rol_4 +tya +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuyy_rol_4 +tya +asl +asl +asl +asl +//FRAGMENT vbuxx=vbuyy_rol_4 +tya +asl +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuyy_rol_4 +tya +asl +asl +asl +asl +tay +//FRAGMENT vbuzz=vbuyy_rol_4 +tya +asl +asl +asl +asl +taz +//FRAGMENT vbuz1=vbuzz_rol_4 +tza +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuzz_rol_4 +tza +asl +asl +asl +asl +//FRAGMENT vbuxx=vbuzz_rol_4 +tza +asl +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuzz_rol_4 +tza +asl +asl +asl +asl +tay +//FRAGMENT vbuzz=vbuzz_rol_4 +tza +asl +asl +asl +asl +taz +//FRAGMENT vbuxx=vbuxx_plus_vbuc1 +txa +clc +adc #{c1} +tax +//FRAGMENT vbuyy=vbuyy_plus_vbuc1 +tya +clc +adc #{c1} +tay +//FRAGMENT vbuzz=vbuzz_plus_vbuc1 +tza +clc +adc #{c1} +taz +//FRAGMENT pbuc1_derefidx_vbuaa=vbuc2 +tay +lda #{c2} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=vbuc2 +lda #{c2} +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuc2 +lda #{c2} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuzz=vbuc2 +tza +tay +lda #{c2} +sta {c1},y +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_ror_2 +ldy {z1} +lda {c1},y +lsr +lsr +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_ror_2 +ldx {z1} +lda {c1},x +lsr +lsr +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_ror_2 +ldy {z1} +lda {c1},y +lsr +lsr +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuz1_ror_2 +ldy {z1} +lda {c1},y +lsr +lsr +taz +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_ror_2 +tay +lda {c1},y +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_ror_2 +tay +lda {c1},y +lsr +lsr +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_ror_2 +tax +lda {c1},x +lsr +lsr +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_ror_2 +tay +lda {c1},y +lsr +lsr +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuaa_ror_2 +tay +lda {c1},y +lsr +lsr +taz +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_ror_2 +lda {c1},x +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_ror_2 +lda {c1},x +lsr +lsr +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_ror_2 +lda {c1},x +lsr +lsr +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_ror_2 +lda {c1},x +lsr +lsr +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuxx_ror_2 +lda {c1},x +lsr +lsr +taz +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_ror_2 +lda {c1},y +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_ror_2 +lda {c1},y +lsr +lsr +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_ror_2 +lda {c1},y +lsr +lsr +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_ror_2 +lda {c1},y +lsr +lsr +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuyy_ror_2 +lda {c1},y +lsr +lsr +taz +//FRAGMENT vbuz1=pbuc1_derefidx_vbuzz_ror_2 +tza +tay +lda {c1},y +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuzz_ror_2 +tza +tay +lda {c1},y +lsr +lsr +//FRAGMENT vbuxx=pbuc1_derefidx_vbuzz_ror_2 +tza +tax +lda {c1},x +lsr +lsr +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuzz_ror_2 +tza +tay +lda {c1},y +lsr +lsr +tay +//FRAGMENT vbuzz=pbuc1_derefidx_vbuzz_ror_2 +tza +tay +lda {c1},y +lsr +lsr +taz +//FRAGMENT vbuz1=vbuaa_ror_1 +lsr +sta {z1} +//FRAGMENT vbuz1=vbuxx_ror_1 +txa +lsr +sta {z1} +//FRAGMENT vbuz1=vbuyy_ror_1 +tya +lsr +sta {z1} +//FRAGMENT vbuz1=vbuzz_ror_1 +tza +lsr +sta {z1} +//FRAGMENT vbuaa=vbuz1_ror_1 +lda {z1} +lsr +//FRAGMENT vbuaa=vbuaa_ror_1 +lsr +//FRAGMENT vbuaa=vbuxx_ror_1 +txa +lsr +//FRAGMENT vbuaa=vbuyy_ror_1 +tya +lsr +//FRAGMENT vbuaa=vbuzz_ror_1 +tza +lsr +//FRAGMENT vbuxx=vbuz1_ror_1 +lda {z1} +lsr +tax +//FRAGMENT vbuxx=vbuaa_ror_1 +lsr +tax +//FRAGMENT vbuxx=vbuxx_ror_1 +txa +lsr +tax +//FRAGMENT vbuxx=vbuyy_ror_1 +tya +lsr +tax +//FRAGMENT vbuxx=vbuzz_ror_1 +tza +lsr +tax +//FRAGMENT vbuyy=vbuz1_ror_1 +lda {z1} +lsr +tay +//FRAGMENT vbuyy=vbuaa_ror_1 +lsr +tay +//FRAGMENT vbuyy=vbuxx_ror_1 +txa +lsr +tay +//FRAGMENT vbuyy=vbuyy_ror_1 +tya +lsr +tay +//FRAGMENT vbuyy=vbuzz_ror_1 +tza +lsr +tay +//FRAGMENT vbuzz=vbuz1_ror_1 +lda {z1} +lsr +taz +//FRAGMENT vbuzz=vbuaa_ror_1 +lsr +taz +//FRAGMENT vbuzz=vbuxx_ror_1 +txa +lsr +taz +//FRAGMENT vbuzz=vbuyy_ror_1 +tya +lsr +taz +//FRAGMENT vbuzz=vbuzz_ror_1 +tza +lsr +taz +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1 +ldx {z1} +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuzz=pbuc2_derefidx_vbuz1 +ldx {z1} +tza +tay +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuxx +lda {c2},x +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuzz=pbuc2_derefidx_vbuxx +tza +tay +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuyy +lda {c2},y +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuzz=pbuc2_derefidx_vbuyy +tza +tax +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuzz +tza +tay +lda {c2},y +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuzz +tza +tay +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuzz +tza +tax +lda {c2},x +sta {c1},y +//FRAGMENT vbuaa_eq_vbuc1_then_la1 +cmp #{c1} +beq {la1} +//FRAGMENT vbuaa=vbuz1_plus_1 +lda {z1} +inc +//FRAGMENT vbuxx=vbuz1_plus_1 +ldx {z1} +inx +//FRAGMENT vbuaa=_deref_pbuc1 +lda {c1} +//FRAGMENT vbuxx=_deref_pbuc1 +ldx {c1} +//FRAGMENT vbuaa_eq__deref_pbuc1_then_la1 +cmp {c1} +beq {la1} +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuxx +lda {c2},x +sta {c1} +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuyy +lda {c2},y +sta {c1} +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuzz +tza +tay +lda {c2},y +sta {c1} +//FRAGMENT vbuxx_neq_0_then_la1 +cpx #0 +bne {la1} +//FRAGMENT vbuxx_neq_vbuc1_then_la1 +cpx #{c1} +bne {la1} +//FRAGMENT vbuxx_lt_vbuc1_then_la1 +cpx #{c1} +bcc {la1} +//FRAGMENT vbuxx_eq_vbuc1_then_la1 +cpx #{c1} +beq {la1} +//FRAGMENT vbuxx=vbuc1 +ldx #{c1} +//FRAGMENT vbuxx=_inc_vbuxx +inx +//FRAGMENT vbuyy=vbuc1 +ldy #{c1} +//FRAGMENT vbuyy_lt_vbuc1_then_la1 +cpy #{c1} +bcc {la1} +//FRAGMENT vbuyy=_inc_vbuyy +iny +//FRAGMENT vbuzz=vbuc1 +ldz #{c1} +//FRAGMENT vbuzz_lt_vbuc1_then_la1 +cpz #{c1} +bcc {la1} +//FRAGMENT vbuzz=_inc_vbuzz +inz +//FRAGMENT vbuyy_neq_0_then_la1 +cpy #0 +bne {la1} +//FRAGMENT vbuzz_neq_0_then_la1 +cpz #0 +bne {la1} +//FRAGMENT vbuaa=_dec_vbuaa +sec +sbc #1 +//FRAGMENT vbuaa=_inc_vbuaa +inc +//FRAGMENT vbuxx=_dec_vbuxx +dex +//FRAGMENT vbuyy=_dec_vbuyy +dey +//FRAGMENT vbuzz=_dec_vbuzz +dez +//FRAGMENT pbuc1_derefidx_vbuxx=vbuzz +tza +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuzz +tza +sta {c1},y +//FRAGMENT vbuaa=vbuc1 +lda #{c1} +//FRAGMENT vbuxx_eq__deref_pbuc1_then_la1 +cpx {c1} +beq {la1} +//FRAGMENT vbuyy=_deref_pbuc1 +ldy {c1} +//FRAGMENT vbuyy_eq__deref_pbuc1_then_la1 +cpy {c1} +beq {la1} +//FRAGMENT vbuzz=_deref_pbuc1 +ldz {c1} +//FRAGMENT vbuzz_eq__deref_pbuc1_then_la1 +cpz {c1} +beq {la1} +//FRAGMENT vbuyy=vbuz1 +ldy {z1} +//FRAGMENT vbuzz=vbuz1 +ldz {z1} +//FRAGMENT vbuyy_neq_vbuc1_then_la1 +cpy #{c1} +bne {la1} +//FRAGMENT vbuzz_neq_vbuc1_then_la1 +cpz #{c1} +bne {la1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy +lda {c1},y +sta {z1} +//FRAGMENT vbuyy_eq_vbuc1_then_la1 +cpy #{c1} +beq {la1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuzz +tza +tay +lda {c1},y +sta {z1} +//FRAGMENT vbuzz_eq_vbuc1_then_la1 +cpz #{c1} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuxx=vbuaa +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=vbuyy +tya +sta {c1},x +//FRAGMENT vbuyy=vbuz1_plus_1 +ldy {z1} +iny +//FRAGMENT _deref_pbuc1=vbuyy +sty {c1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuzz +tza +tay +lda {c1},y +//FRAGMENT vbuyy=pbuc1_derefidx_vbuzz +tza +tax +ldy {c1},x +//FRAGMENT vbuaa=vbuaa_plus_1 +inc +//FRAGMENT vbuaa=vbuyy_plus_1 +tya +inc +//FRAGMENT _deref_pbuc1=vbuxx +stx {c1} +//FRAGMENT _deref_pbuc1=vbuzz +stz {c1} +//FRAGMENT vbuz1=_deref_pbuc1_plus_1 +lda {c1} +inc sta {z1} //FRAGMENT vwuz1=_word_vbuz2 lda {z2} @@ -121,18 +1240,10 @@ lda {z2} sta {z1} lda {z2}+1 sta {z1}+1 -//FRAGMENT vbuz1=_deref_pbuz2 -ldy #0 -lda ({z2}),y -sta {z1} //FRAGMENT 0_neq_vbuz1_then_la1 lda {z1} cmp #0 bne {la1} -//FRAGMENT vbuz1_eq_vbuc1_then_la1 -lda #{c1} -cmp {z1} -beq {la1} //FRAGMENT pbuz1_derefidx_vbuz2=vbuz3 lda {z3} ldz {z2} @@ -141,12 +1252,6 @@ sta ({z1}),z lda #{c1} ldz {z2} sta ({z1}),z -//FRAGMENT vbuz1=_inc_vbuz1 -inc {z1} -//FRAGMENT vbuz1_neq_vbuc1_then_la1 -lda #{c1} -cmp {z1} -bne {la1} //FRAGMENT pbuz1=pbuz1_plus_vbuc1 lda #{c1} clc @@ -168,8 +1273,6 @@ sta {z1} lda {z1}+1 sbc #0 sta {z1}+1 -//FRAGMENT vbuz1=_dec_vbuz1 -dec {z1} //FRAGMENT pbuz1=pbuz2_plus_vwuc1 clc lda {z2} @@ -204,13 +1307,6 @@ inc //FRAGMENT vbuxx=_deref_pbuc1_plus_1 ldx {c1} inx -//FRAGMENT vbuaa_lt_vbuc1_then_la1 -cmp #{c1} -bcc {la1} -//FRAGMENT vbuaa=vbuz1 -lda {z1} -//FRAGMENT vbuxx=vbuz1 -ldx {z1} //FRAGMENT vbuz1=vbuxx stx {z1} //FRAGMENT vwuz1=_word_vbuxx @@ -228,29 +1324,11 @@ tza sta {z1} lda #0 sta {z1}+1 -//FRAGMENT vbuaa=_deref_pbuz1 -ldy #0 -lda ({z1}),y -//FRAGMENT vbuxx=_deref_pbuz1 -ldy #0 -lda ({z1}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1 -ldy #0 -lda ({z1}),y -tay -//FRAGMENT vbuzz=_deref_pbuz1 -ldy #0 -lda ({z1}),y -taz //FRAGMENT 0_neq_vbuaa_then_la1 cmp #0 bne {la1} //FRAGMENT vbuz1=vbuaa sta {z1} -//FRAGMENT vbuaa_eq_vbuc1_then_la1 -cmp #{c1} -beq {la1} //FRAGMENT pbuz1_derefidx_vbuz2=vbuaa ldz {z2} sta ({z1}),z @@ -266,26 +1344,6 @@ sta ({z1}),z tza ldz {z2} sta ({z1}),z -//FRAGMENT vbuxx_lt_vbuc1_then_la1 -cpx #{c1} -bcc {la1} -//FRAGMENT vbuxx=vbuc1 -ldx #{c1} -//FRAGMENT vbuzz=vbuc1 -ldz #{c1} -//FRAGMENT vbuxx_eq_vbuc1_then_la1 -cpx #{c1} -beq {la1} -//FRAGMENT vbuyy=vbuz1 -ldy {z1} -//FRAGMENT vbuyy_eq_vbuc1_then_la1 -cpy #{c1} -beq {la1} -//FRAGMENT vbuzz=vbuz1 -ldz {z1} -//FRAGMENT vbuzz_eq_vbuc1_then_la1 -cpz #{c1} -beq {la1} //FRAGMENT 0_neq_vbuxx_then_la1 cpx #0 bne {la1} @@ -301,21 +1359,11 @@ cpz #0 bne {la1} //FRAGMENT vbuaa=vbuzz tza -//FRAGMENT vbuyy_lt_vbuc1_then_la1 -cpy #{c1} -bcc {la1} -//FRAGMENT vbuyy=vbuc1 -ldy #{c1} //FRAGMENT vbuz1=vbuyy sty {z1} -//FRAGMENT vbuzz_lt_vbuc1_then_la1 -cpz #{c1} -bcc {la1} //FRAGMENT vbuz1=vbuzz tza sta {z1} -//FRAGMENT vbuaa=vbuc1 -lda #{c1} //FRAGMENT vbuxx=vbuaa tax //FRAGMENT vbuyy=_deref_pbuc1_plus_1 @@ -352,10 +1400,6 @@ asw {z1} asw {z1} asw {z1} asw {z1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -sta {c1} //FRAGMENT vwuz1=vwuc1 lda #<{c1} sta {z1} @@ -405,9 +1449,6 @@ sta {z1} bcc !+ inc {z1}+1 !: -//FRAGMENT vbuz1=_deref_pbuc1 -lda {c1} -sta {z1} //FRAGMENT _deref_pwuc1=vwuz1 lda {z1} sta {c1} @@ -423,9 +1464,6 @@ lda {z1} sta {c1} lda {z1}+1 sta {c1}+1 -//FRAGMENT _deref_pbuc1=vbuz1 -lda {z1} -sta {c1} //FRAGMENT _deref_pwuc1=vwuc2 lda #<{c2} sta {c1} @@ -572,10 +1610,6 @@ sta ({z1}),y iny lda {z2}+1 sta ({z1}),y -//FRAGMENT vbuaa=_deref_pbuc1 -lda {c1} -//FRAGMENT vbuxx=_deref_pbuc1 -ldx {c1} //FRAGMENT _deref_qbuc1=_ptr_vbuxx txa sta {c1} @@ -591,27 +1625,138 @@ tza sta {c1} lda #0 sta {c1}+1 -//FRAGMENT _deref_pbuc1=vbuxx -stx {c1} -//FRAGMENT vbuxx=_inc_vbuxx -inx -//FRAGMENT vbuyy=_inc_vbuyy -iny -//FRAGMENT vbuzz=_inc_vbuzz -inz -//FRAGMENT vbuyy=_deref_pbuc1 -ldy {c1} -//FRAGMENT _deref_pbuc1=vbuyy -sty {c1} -//FRAGMENT vbuzz=_deref_pbuc1 -ldz {c1} -//FRAGMENT _deref_pbuc1=vbuzz -stz {c1} +//FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 +inc {c1} //FRAGMENT vwuz1=vbuc1 lda #<{c1} sta {z1} lda #>{c1} sta {z1}+1 +//FRAGMENT _deref_pbuc1_eq_vbuz1_then_la1 +lda {c1} +cmp {z1} +beq {la1} +//FRAGMENT _deref_pbuc1=_dec__deref_pbuc1 +dec {c1} +//FRAGMENT pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 +ldx {z1} +inc {c1},x +//FRAGMENT vbuz1=_lo_vwuz2 +lda {z2} +sta {z1} +//FRAGMENT vbuz1=_hi_vwuz2 +lda {z2}+1 +sta {z1} +//FRAGMENT vbuz1=vbuz2_bor_vbuz3 +lda {z2} +ora {z3} +sta {z1} +//FRAGMENT _deref_pbuc1_eq_vbuaa_then_la1 +cmp {c1} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuaa=_inc_pbuc1_derefidx_vbuaa +tax +inc {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx +inc {c1},x +//FRAGMENT vbuaa=_lo_vwuz1 +lda {z1} +//FRAGMENT vbuxx=_lo_vwuz1 +ldx {z1} +//FRAGMENT vbuaa=_hi_vwuz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_vwuz1 +ldx {z1}+1 +//FRAGMENT vbuz1=vbuxx_bor_vbuz2 +txa +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuyy_bor_vbuz2 +tya +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuzz_bor_vbuz2 +tza +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz2_bor_vbuaa +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuxx_bor_vbuaa +stx $ff +ora $ff +sta {z1} +//FRAGMENT vbuz1=vbuyy_bor_vbuaa +sty $ff +ora $ff +sta {z1} +//FRAGMENT vbuz1=vbuzz_bor_vbuaa +tay +tza +sty $ff +ora $ff +sta {z1} +//FRAGMENT vbuz1=vbuz2_bor_vbuxx +txa +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuxx_bor_vbuxx +stx {z1} +//FRAGMENT vbuyy=_lo_vwuz1 +ldy {z1} +//FRAGMENT vbuzz=_lo_vwuz1 +ldz {z1} +//FRAGMENT vbuyy=_hi_vwuz1 +ldy {z1}+1 +//FRAGMENT vbuzz=_hi_vwuz1 +ldz {z1}+1 +//FRAGMENT vbuz1=vbuz2_bor_vbuyy +tya +ora {z2} +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuyy=_inc_pbuc1_derefidx_vbuyy +lda {c1},y +inc +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuzz=_inc_pbuc1_derefidx_vbuzz +tza +tax +inc {c1},x +//FRAGMENT _deref_pbuc1_eq_vbuxx_then_la1 +cpx {c1} +beq {la1} +//FRAGMENT _deref_pbuc1_eq_vbuyy_then_la1 +cpy {c1} +beq {la1} +//FRAGMENT _deref_pbuc1_eq_vbuzz_then_la1 +cpz {c1} +beq {la1} +//FRAGMENT vbuaa=vbuz1_bor_vbuaa +ora {z1} +//FRAGMENT vbuxx=vbuz1_bor_vbuaa +ora {z1} +tax +//FRAGMENT vbuyy=vbuz1_bor_vbuaa +ora {z1} +tay +//FRAGMENT vbuzz=vbuz1_bor_vbuaa +ora {z1} +taz +//FRAGMENT vbuz1=vbuz2_bor_vbuzz +tza +ora {z2} +sta {z1} +//FRAGMENT vbuaa=vbuxx_bor_vbuaa +stx $ff +ora $ff +//FRAGMENT vbuaa=vbuyy_bor_vbuaa +sty $ff +ora $ff +//FRAGMENT vbuaa=vbuzz_bor_vbuaa +tay +tza +sty $ff +ora $ff //FRAGMENT vduz1=vduc1 lda #<{c1} sta {z1} @@ -633,14 +1778,6 @@ lda #{c1} clc adc {z2} sta {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=vbuz2 -lda {z2} -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1},y //FRAGMENT vwuz1=vwuc1_minus_vbuz2 sec lda #<{c1} @@ -673,27 +1810,6 @@ lda {z2} sta {z1} lda {z2}+1 sta {z1}+1 -//FRAGMENT vbuz1=_lo_vwuz2 -lda {z2} -sta {z1} -//FRAGMENT vbuz1=vbuz2_rol_4 -lda {z2} -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=_hi_vwuz2 -lda {z2}+1 -sta {z1} -//FRAGMENT vbuz1=vbuz2_band_vbuc1 -lda #{c1} -and {z2} -sta {z1} -//FRAGMENT vbuz1=vbuz2_bor_vbuz3 -lda {z2} -ora {z3} -sta {z1} //FRAGMENT vduz1=vduz2_ror_4 lda {z2}+3 lsr @@ -837,35 +1953,6 @@ tza clc adc #{c1} taz -//FRAGMENT pbuc1_derefidx_vbuxx=vbuz1 -lda {z1} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbuz1 -lda {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuzz=vbuz1 -tza -tay -lda {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=vbuaa -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuaa -tay -lda {c2},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx -lda {c2},x -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy -lda {c2},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuzz=pbuc2_derefidx_vbuzz -tza -tay -lda {c2},y -sta {c1},y //FRAGMENT vwuz1=vwuc1_minus_vbuaa tax stx $ff @@ -1309,266 +2396,6 @@ dey bne !- !e: taz -//FRAGMENT vbuaa=_lo_vwuz1 -lda {z1} -//FRAGMENT vbuxx=_lo_vwuz1 -ldx {z1} -//FRAGMENT _deref_pbuc1=vbuaa -sta {c1} -//FRAGMENT vbuaa=vbuz1_rol_4 -lda {z1} -asl -asl -asl -asl -//FRAGMENT vbuxx=vbuz1_rol_4 -lda {z1} -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuz1_rol_4 -lda {z1} -asl -asl -asl -asl -tay -//FRAGMENT vbuzz=vbuz1_rol_4 -lda {z1} -asl -asl -asl -asl -taz -//FRAGMENT vbuz1=vbuxx_rol_4 -txa -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuxx_rol_4 -txa -asl -asl -asl -asl -//FRAGMENT vbuxx=vbuxx_rol_4 -txa -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuxx_rol_4 -txa -asl -asl -asl -asl -tay -//FRAGMENT vbuzz=vbuxx_rol_4 -txa -asl -asl -asl -asl -taz -//FRAGMENT vbuz1=vbuyy_rol_4 -tya -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuyy_rol_4 -tya -asl -asl -asl -asl -//FRAGMENT vbuxx=vbuyy_rol_4 -tya -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuyy_rol_4 -tya -asl -asl -asl -asl -tay -//FRAGMENT vbuzz=vbuyy_rol_4 -tya -asl -asl -asl -asl -taz -//FRAGMENT vbuz1=vbuzz_rol_4 -tza -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuzz_rol_4 -tza -asl -asl -asl -asl -//FRAGMENT vbuxx=vbuzz_rol_4 -tza -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuzz_rol_4 -tza -asl -asl -asl -asl -tay -//FRAGMENT vbuzz=vbuzz_rol_4 -tza -asl -asl -asl -asl -taz -//FRAGMENT vbuaa=_hi_vwuz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_vwuz1 -ldx {z1}+1 -//FRAGMENT vbuz1=vbuaa_band_vbuc1 -and #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuxx_band_vbuc1 -txa -and #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuyy_band_vbuc1 -tya -and #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuzz_band_vbuc1 -tza -and #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -//FRAGMENT vbuaa=vbuaa_band_vbuc1 -and #{c1} -//FRAGMENT vbuaa=vbuxx_band_vbuc1 -txa -and #{c1} -//FRAGMENT vbuaa=vbuyy_band_vbuc1 -tya -and #{c1} -//FRAGMENT vbuaa=vbuzz_band_vbuc1 -tza -and #{c1} -//FRAGMENT vbuxx=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -tax -//FRAGMENT vbuxx=vbuaa_band_vbuc1 -and #{c1} -tax -//FRAGMENT vbuxx=vbuxx_band_vbuc1 -txa -and #{c1} -tax -//FRAGMENT vbuxx=vbuyy_band_vbuc1 -tya -and #{c1} -tax -//FRAGMENT vbuxx=vbuzz_band_vbuc1 -tza -and #{c1} -tax -//FRAGMENT vbuyy=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -tay -//FRAGMENT vbuyy=vbuaa_band_vbuc1 -and #{c1} -tay -//FRAGMENT vbuyy=vbuxx_band_vbuc1 -txa -and #{c1} -tay -//FRAGMENT vbuyy=vbuyy_band_vbuc1 -tya -and #{c1} -tay -//FRAGMENT vbuyy=vbuzz_band_vbuc1 -tza -and #{c1} -tay -//FRAGMENT vbuzz=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -taz -//FRAGMENT vbuzz=vbuaa_band_vbuc1 -and #{c1} -taz -//FRAGMENT vbuzz=vbuxx_band_vbuc1 -txa -and #{c1} -taz -//FRAGMENT vbuzz=vbuyy_band_vbuc1 -tya -and #{c1} -taz -//FRAGMENT vbuzz=vbuzz_band_vbuc1 -tza -and #{c1} -taz -//FRAGMENT vbuz1=vbuxx_bor_vbuz2 -txa -ora {z2} -sta {z1} -//FRAGMENT vbuz1=vbuyy_bor_vbuz2 -tya -ora {z2} -sta {z1} -//FRAGMENT vbuz1=vbuzz_bor_vbuz2 -tza -ora {z2} -sta {z1} -//FRAGMENT vbuz1=vbuz2_bor_vbuaa -ora {z2} -sta {z1} -//FRAGMENT vbuz1=vbuxx_bor_vbuaa -stx $ff -ora $ff -sta {z1} -//FRAGMENT vbuz1=vbuyy_bor_vbuaa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vbuz1=vbuzz_bor_vbuaa -tay -tza -sty $ff -ora $ff -sta {z1} -//FRAGMENT vbuz1=vbuz2_bor_vbuxx -txa -ora {z2} -sta {z1} -//FRAGMENT vbuz1=vbuxx_bor_vbuxx -stx {z1} //FRAGMENT vbuaa=_hi__word_vduz1 lda {z1}+1 //FRAGMENT vbuxx=_hi__word_vduz1 @@ -1633,20 +2460,6 @@ tay tza ora {z1} taz -//FRAGMENT vbuaa=vbuz1_bor_vbuaa -ora {z1} -//FRAGMENT vbuxx=vbuz1_bor_vbuaa -ora {z1} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuaa -ora {z1} -tay -//FRAGMENT vbuzz=vbuz1_bor_vbuaa -ora {z1} -taz -//FRAGMENT vbuaa=vbuxx_bor_vbuaa -stx $ff -ora $ff //FRAGMENT vbuxx=vbuxx_bor_vbuaa stx $ff ora $ff @@ -1659,9 +2472,6 @@ tay stx $ff ora $ff taz -//FRAGMENT vbuaa=vbuyy_bor_vbuaa -sty $ff -ora $ff //FRAGMENT vbuxx=vbuyy_bor_vbuaa sty $ff ora $ff @@ -1674,11 +2484,6 @@ tay sty $ff ora $ff taz -//FRAGMENT vbuaa=vbuzz_bor_vbuaa -tay -tza -sty $ff -ora $ff //FRAGMENT vbuxx=vbuzz_bor_vbuaa tax tza @@ -1712,25 +2517,11 @@ tay txa ora {z1} taz -//FRAGMENT vbuyy=_lo_vwuz1 -ldy {z1} -//FRAGMENT vbuzz=_lo_vwuz1 -ldz {z1} -//FRAGMENT vbuyy=_hi_vwuz1 -ldy {z1}+1 -//FRAGMENT vbuzz=_hi_vwuz1 -ldz {z1}+1 -//FRAGMENT vbuz1=vbuz2_bor_vbuyy -tya -ora {z2} -sta {z1} //FRAGMENT vbuyy=_hi__word_vduz1 ldy {z1}+1 //FRAGMENT vbuzz=_hi__word_vduz1 lda {z1}+1 taz -//FRAGMENT pbuc1_derefidx_vbuxx=vbuaa -sta {c1},x //FRAGMENT pbuc1_derefidx_vbuyy=vbuaa sta {c1},y //FRAGMENT pbuc1_derefidx_vbuzz=vbuaa @@ -1739,10 +2530,6 @@ tza tay txa sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=vbuxx -ldy {z1} -txa -sta {c1},y //FRAGMENT pbuc1_derefidx_vbuyy=vbuxx txa sta {c1},y @@ -1751,32 +2538,11 @@ tza tay txa sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=vbuyy -tya -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=vbuyy -tya -sta {c1},x //FRAGMENT pbuc1_derefidx_vbuzz=vbuyy tza tax tya sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuz1=vbuzz -ldy {z1} -tza -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=vbuzz -tza -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbuzz -tza -sta {c1},y -//FRAGMENT vbuz1=vbuz2_bor_vbuzz -tza -ora {z2} -sta {z1} //FRAGMENT vbuyy=vbuaa tay //FRAGMENT vbuzz=vbuaa @@ -1845,769 +2611,3 @@ sta {z1}+3 NO_SYNTHESIS //FRAGMENT vduz1=vwsc1 NO_SYNTHESIS -//FRAGMENT isr_hardware_all_entry -pha @clob_a -phx @clob_x -phy @clob_y -phz @clob_z -//FRAGMENT vbuz1_neq_0_then_la1 -lda {z1} -cmp #0 -bne {la1} -//FRAGMENT isr_hardware_all_exit -plz @clob_z -ply @clob_y -plx @clob_x -pla @clob_a -rti -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_band_vbuc2 -lda #{c2} -ldy {z2} -and {c1},y -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_ror_1 -ldy {z2} -lda {c1},y -lsr -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -//FRAGMENT vbuz1=vbuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=vbuc2 -lda #{c2} -ldy {z1} -sta {c1},y -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_ror_2 -ldy {z2} -lda {c1},y -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=vbuz2_ror_1 -lda {z2} -lsr -sta {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 -ldy {z2} -lda {c2},y -ldy {z1} -sta {c1},y -//FRAGMENT vbuz1=vbuz2_plus_1 -lda {z2} -inc -sta {z1} -//FRAGMENT vbuz1_eq__deref_pbuc1_then_la1 -lda {c1} -cmp {z1} -beq {la1} -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1} -//FRAGMENT _deref_qprc1=pprc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT pbuz1_neq_pbuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vbuaa_neq_vbuc1_then_la1 -cmp #{c1} -bne {la1} -//FRAGMENT vbuaa_neq_0_then_la1 -cmp #0 -bne {la1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldy {z1} -and {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldx {z1} -and {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldy {z1} -and {c1},y -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldy {z1} -and {c1},y -taz -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_band_vbuc2 -tax -lda #{c2} -and {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -taz -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -taz -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -taz -//FRAGMENT vbuz1=pbuc1_derefidx_vbuzz_band_vbuc2 -tza -tay -lda #{c2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuzz_band_vbuc2 -tza -tay -lda #{c2} -and {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuzz_band_vbuc2 -tza -tax -lda #{c2} -and {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuzz_band_vbuc2 -tza -tay -lda #{c2} -and {c1},y -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuzz_band_vbuc2 -tza -tay -lda #{c2} -and {c1},y -taz -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_ror_1 -ldy {z1} -lda {c1},y -lsr -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_ror_1 -ldx {z1} -lda {c1},x -lsr -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_ror_1 -ldy {z1} -lda {c1},y -lsr -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuz1_ror_1 -ldy {z1} -lda {c1},y -lsr -taz -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_ror_1 -tay -lda {c1},y -lsr -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_ror_1 -tay -lda {c1},y -lsr -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_ror_1 -tax -lda {c1},x -lsr -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_ror_1 -tay -lda {c1},y -lsr -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuaa_ror_1 -tay -lda {c1},y -lsr -taz -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -taz -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -taz -//FRAGMENT vbuz1=pbuc1_derefidx_vbuzz_ror_1 -tza -tay -lda {c1},y -lsr -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuzz_ror_1 -tza -tay -lda {c1},y -lsr -//FRAGMENT vbuxx=pbuc1_derefidx_vbuzz_ror_1 -tza -tax -lda {c1},x -lsr -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuzz_ror_1 -tza -tay -lda {c1},y -lsr -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuzz_ror_1 -tza -tay -lda {c1},y -lsr -taz -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1 -ldy {z1} -ldx {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1 -ldx {z1} -ldy {c1},x -//FRAGMENT vbuzz=pbuc1_derefidx_vbuz1 -ldx {z1} -ldz {c1},x -//FRAGMENT vbuz1=vbuaa_rol_4 -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuaa_rol_4 -asl -asl -asl -asl -//FRAGMENT vbuxx=vbuaa_rol_4 -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuaa_rol_4 -asl -asl -asl -asl -tay -//FRAGMENT vbuzz=vbuaa_rol_4 -asl -asl -asl -asl -taz -//FRAGMENT vbuxx=vbuxx_plus_vbuc1 -txa -clc -adc #{c1} -tax -//FRAGMENT vbuyy=vbuyy_plus_vbuc1 -tya -clc -adc #{c1} -tay -//FRAGMENT vbuzz=vbuzz_plus_vbuc1 -tza -clc -adc #{c1} -taz -//FRAGMENT pbuc1_derefidx_vbuaa=vbuc2 -tay -lda #{c2} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=vbuc2 -lda #{c2} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbuc2 -lda #{c2} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuzz=vbuc2 -tza -tay -lda #{c2} -sta {c1},y -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_ror_2 -ldy {z1} -lda {c1},y -lsr -lsr -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_ror_2 -ldx {z1} -lda {c1},x -lsr -lsr -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_ror_2 -ldy {z1} -lda {c1},y -lsr -lsr -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuz1_ror_2 -ldy {z1} -lda {c1},y -lsr -lsr -taz -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_ror_2 -tay -lda {c1},y -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_ror_2 -tay -lda {c1},y -lsr -lsr -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_ror_2 -tax -lda {c1},x -lsr -lsr -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_ror_2 -tay -lda {c1},y -lsr -lsr -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuaa_ror_2 -tay -lda {c1},y -lsr -lsr -taz -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_ror_2 -lda {c1},x -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_ror_2 -lda {c1},x -lsr -lsr -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_ror_2 -lda {c1},x -lsr -lsr -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_ror_2 -lda {c1},x -lsr -lsr -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuxx_ror_2 -lda {c1},x -lsr -lsr -taz -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_ror_2 -lda {c1},y -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_ror_2 -lda {c1},y -lsr -lsr -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_ror_2 -lda {c1},y -lsr -lsr -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_ror_2 -lda {c1},y -lsr -lsr -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuyy_ror_2 -lda {c1},y -lsr -lsr -taz -//FRAGMENT vbuz1=pbuc1_derefidx_vbuzz_ror_2 -tza -tay -lda {c1},y -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuzz_ror_2 -tza -tay -lda {c1},y -lsr -lsr -//FRAGMENT vbuxx=pbuc1_derefidx_vbuzz_ror_2 -tza -tax -lda {c1},x -lsr -lsr -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuzz_ror_2 -tza -tay -lda {c1},y -lsr -lsr -tay -//FRAGMENT vbuzz=pbuc1_derefidx_vbuzz_ror_2 -tza -tay -lda {c1},y -lsr -lsr -taz -//FRAGMENT vbuz1=vbuaa_ror_1 -lsr -sta {z1} -//FRAGMENT vbuz1=vbuxx_ror_1 -txa -lsr -sta {z1} -//FRAGMENT vbuz1=vbuyy_ror_1 -tya -lsr -sta {z1} -//FRAGMENT vbuz1=vbuzz_ror_1 -tza -lsr -sta {z1} -//FRAGMENT vbuaa=vbuz1_ror_1 -lda {z1} -lsr -//FRAGMENT vbuaa=vbuaa_ror_1 -lsr -//FRAGMENT vbuaa=vbuxx_ror_1 -txa -lsr -//FRAGMENT vbuaa=vbuyy_ror_1 -tya -lsr -//FRAGMENT vbuaa=vbuzz_ror_1 -tza -lsr -//FRAGMENT vbuxx=vbuz1_ror_1 -lda {z1} -lsr -tax -//FRAGMENT vbuxx=vbuaa_ror_1 -lsr -tax -//FRAGMENT vbuxx=vbuxx_ror_1 -txa -lsr -tax -//FRAGMENT vbuxx=vbuyy_ror_1 -tya -lsr -tax -//FRAGMENT vbuxx=vbuzz_ror_1 -tza -lsr -tax -//FRAGMENT vbuyy=vbuz1_ror_1 -lda {z1} -lsr -tay -//FRAGMENT vbuyy=vbuaa_ror_1 -lsr -tay -//FRAGMENT vbuyy=vbuxx_ror_1 -txa -lsr -tay -//FRAGMENT vbuyy=vbuyy_ror_1 -tya -lsr -tay -//FRAGMENT vbuyy=vbuzz_ror_1 -tza -lsr -tay -//FRAGMENT vbuzz=vbuz1_ror_1 -lda {z1} -lsr -taz -//FRAGMENT vbuzz=vbuaa_ror_1 -lsr -taz -//FRAGMENT vbuzz=vbuxx_ror_1 -txa -lsr -taz -//FRAGMENT vbuzz=vbuyy_ror_1 -tya -lsr -taz -//FRAGMENT vbuzz=vbuzz_ror_1 -tza -lsr -taz -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1 -ldx {z1} -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuzz=pbuc2_derefidx_vbuz1 -ldx {z1} -tza -tay -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuxx -lda {c2},x -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuzz=pbuc2_derefidx_vbuxx -tza -tay -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuyy -lda {c2},y -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuzz=pbuc2_derefidx_vbuyy -tza -tax -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuzz -tza -tay -lda {c2},y -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuzz -tza -tay -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuzz -tza -tax -lda {c2},x -sta {c1},y -//FRAGMENT vbuaa=vbuz1_plus_1 -lda {z1} -inc -//FRAGMENT vbuxx=vbuz1_plus_1 -ldx {z1} -inx -//FRAGMENT vbuaa_eq__deref_pbuc1_then_la1 -cmp {c1} -beq {la1} -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuxx -lda {c2},x -sta {c1} -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuyy -lda {c2},y -sta {c1} -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuzz -tza -tay -lda {c2},y -sta {c1} -//FRAGMENT vbuxx_neq_0_then_la1 -cpx #0 -bne {la1} -//FRAGMENT vbuxx_neq_vbuc1_then_la1 -cpx #{c1} -bne {la1} -//FRAGMENT vbuyy_neq_0_then_la1 -cpy #0 -bne {la1} -//FRAGMENT vbuzz_neq_0_then_la1 -cpz #0 -bne {la1} -//FRAGMENT vbuaa=_dec_vbuaa -sec -sbc #1 -//FRAGMENT vbuaa=_inc_vbuaa -inc -//FRAGMENT vbuxx=_dec_vbuxx -dex -//FRAGMENT vbuyy=_dec_vbuyy -dey -//FRAGMENT vbuzz=_dec_vbuzz -dez -//FRAGMENT vbuxx_eq__deref_pbuc1_then_la1 -cpx {c1} -beq {la1} -//FRAGMENT vbuyy_eq__deref_pbuc1_then_la1 -cpy {c1} -beq {la1} -//FRAGMENT vbuzz_eq__deref_pbuc1_then_la1 -cpz {c1} -beq {la1} -//FRAGMENT vbuyy_neq_vbuc1_then_la1 -cpy #{c1} -bne {la1} -//FRAGMENT vbuzz_neq_vbuc1_then_la1 -cpz #{c1} -bne {la1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuzz -tza -tay -lda {c1},y -sta {z1} -//FRAGMENT vbuyy=vbuz1_plus_1 -ldy {z1} -iny -//FRAGMENT vbuaa=pbuc1_derefidx_vbuzz -tza -tay -lda {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_vbuzz -tza -tax -ldy {c1},x -//FRAGMENT vbuaa=vbuaa_plus_1 -inc -//FRAGMENT vbuaa=vbuyy_plus_1 -tya -inc -//FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 -inc {c1} -//FRAGMENT _deref_pbuc1_eq_vbuz1_then_la1 -lda {c1} -cmp {z1} -beq {la1} -//FRAGMENT _deref_pbuc1=_dec__deref_pbuc1 -dec {c1} -//FRAGMENT pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 -ldx {z1} -inc {c1},x -//FRAGMENT _deref_pbuc1_eq_vbuaa_then_la1 -cmp {c1} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuaa=_inc_pbuc1_derefidx_vbuaa -tax -inc {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx -inc {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=_inc_pbuc1_derefidx_vbuyy -lda {c1},y -inc -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuzz=_inc_pbuc1_derefidx_vbuzz -tza -tax -inc {c1},x -//FRAGMENT _deref_pbuc1_eq_vbuxx_then_la1 -cpx {c1} -beq {la1} -//FRAGMENT _deref_pbuc1_eq_vbuyy_then_la1 -cpy {c1} -beq {la1} -//FRAGMENT _deref_pbuc1_eq_vbuzz_then_la1 -cpz {c1} -beq {la1} diff --git a/src/main/fragment/cache/fragment-cache-mos6502.asm b/src/main/fragment/cache/fragment-cache-mos6502.asm index 923c9b5c7..fed3d4540 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 15355793f5 153557b229 +//KICKC FRAGMENT CACHE 13789539dd 13789557f9 //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} diff --git a/src/main/fragment/cache/fragment-cache-mos6502x.asm b/src/main/fragment/cache/fragment-cache-mos6502x.asm index 4eec7b7dd..76a25b881 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502x.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502x.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 15355793f5 153557b229 +//KICKC FRAGMENT CACHE 13789539dd 13789557f9 //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} @@ -2860,6 +2860,24 @@ sta {c1},y lda {c1}+1,y adc {c2}+1,y sta {c1}+1,y +//FRAGMENT isr_hardware_all_entry +sta rega+1 @clob_a +stx regx+1 @clob_x +sty regy+1 @clob_y +//FRAGMENT isr_hardware_all_exit +rega: @clob_a @nooptimize lda #0 @clob_a @nooptimize +regx: @clob_x @nooptimize ldx #0 @clob_x @nooptimize +regy: @clob_y @nooptimize ldy #0 @clob_y @nooptimize +rti +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 +lda #{c2} +ora {c1} +sta {c1} +//FRAGMENT _deref_qprc1=pprc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 //FRAGMENT _deref_pbuc1_lt_vbuc2_then_la1 lda {c1} cmp #{c2} @@ -3695,11 +3713,6 @@ asl {z1} rol {z1}+1 //FRAGMENT isr_rom_min_c64_entry -//FRAGMENT _deref_qprc1=pprc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 //FRAGMENT isr_rom_min_c64_exit jmp $ea81 //FRAGMENT vbuz1=vbuz2_plus_vbuc1 @@ -7649,6 +7662,582 @@ bne {la1} lda {c1},y cmp #0 bne {la1} +//FRAGMENT pbuz1=pbuz2_minus_vwuc1 +lda {z2} +sec +sbc #<{c1} +sta {z1} +lda {z2}+1 +sbc #>{c1} +sta {z1}+1 +//FRAGMENT pssz1=pssc1_plus_vbuz2 +lda {z2} +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 +ldy #{c2} +lda ({z2}),y +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {z1} +//FRAGMENT pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 +lda #{c2} +ldy #{c1} +cmp ({z1}),y +beq {la1} +//FRAGMENT pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 +ldy #{c1} +lda ({z1}),y + +cmp #{c2} +bne {la1} +//FRAGMENT _deref_(qbuz1_derefidx_vbuc1)=vbuc2 +ldx #{c2} +ldy #{c1} +lda ({z1}),y +sta !+ +1 +iny +lda ({z1}),y +sta !+ +2 +!: stx $ffff +//FRAGMENT pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 +ldy #{c3} +lda ({z1}),y +ldy #{c2} +pha +lda ({z1}),y +tay +pla +sta {c1},y +//FRAGMENT vwuz1=_deref_pwuz2_ror_4 +ldy #0 +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +//FRAGMENT vbuz1=vbuc1_bxor_vbuz2 +lda #{c1} +eor {z2} +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwuz2 +ldy {z1} +lda {z2} +sta {c1},y +//FRAGMENT vwuz1=pwuz2_derefidx_vbuc1_ror_4 +ldy #{c1} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +//FRAGMENT _deref_pwuz1_lt_vwuc1_then_la1 +ldy #1 +lda ({z1}),y +cmp #>{c1} +bcc {la1} +bne !+ +dey +lda ({z1}),y +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT _deref_pwuz1_gt_vwuc1_then_la1 +ldy #1 +lda #>{c1} +cmp ({z1}),y +bcc {la1} +bne !+ +dey +lda #<{c1} +cmp ({z1}),y +bcc {la1} +!: +//FRAGMENT pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 +ldy #{c1} +iny +lda ({z1}),y +cmp #>{c2} +bcc {la1} +bne !+ +dey +lda ({z1}),y +cmp #<{c2} +bcc {la1} +!: +//FRAGMENT pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 +ldy #{c1} +iny +lda #>{c2} +cmp ({z1}),y +bcc {la1} +bne !+ +dey +lda #<{c2} +cmp ({z1}),y +bcc {la1} +!: +//FRAGMENT vwuz1=vwuz2_ror_3 +lda {z2}+1 +lsr +sta {z1}+1 +lda {z2} +ror +sta {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 +ldx {z2} +ldy #{c1} +clc +lda ({z1}),y +adc {c2},x +sta ({z1}),y +iny +lda ({z1}),y +adc {c2}+1,x +sta ({z1}),y +//FRAGMENT _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 +ldy #{c1} +sty $ff +clc +lda ({z1}),y +ldy #0 +adc ({z1}),y +sta ({z1}),y +ldy $ff +iny +lda ({z1}),y +ldy #1 +adc ({z1}),y +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 +ldy #{c2} +clc +lda ({z1}),y +ldy #{c1} +adc ({z1}),y +sta ({z1}),y +ldy #{c2}+1 +lda ({z1}),y +ldy #{c1}+1 +adc ({z1}),y +sta ({z1}),y +//FRAGMENT vbuz1=_neg_vbuz2 +lda {z2} +eor #$ff +clc +adc #$01 +sta {z1} +//FRAGMENT vbuz1=pbuz2_derefidx_vbuz3 +ldy {z3} +lda ({z2}),y +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 +lda #{c2} +ldy {z1} +cmp {c1},y +bne {la1} +//FRAGMENT vwuz1=vwuz2_rol_6 +lda {z2}+1 +lsr +sta $ff +lda {z2} +ror +sta {z1}+1 +lda #0 +ror +sta {z1} +lsr $ff +ror {z1}+1 +ror {z1} +//FRAGMENT vwuz1=vbuc1_plus_vwuz2 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_4 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT pwuc1_derefidx_vbuz1=_word_vbuz2 +lda {z2} +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vwuc2 +ldy {z1} +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT qbuc1_derefidx_vbuz1=pbuz2 +ldy {z1} +lda {z2} +sta {c1},y +lda {z2}+1 +sta {c1}+1,y +//FRAGMENT pssz1=pssc1_plus_vbuaa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pssz1=pssc1_plus_vbuxx +txa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pssz1=pssc1_plus_vbuyy +tya +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT vbuaa=vbuc1_rol_pbuz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +//FRAGMENT vbuxx=vbuc1_rol_pbuz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +tax +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +tax +//FRAGMENT vbuyy=vbuc1_rol_pbuz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +tay +//FRAGMENT vbuaa=vbuc1_bxor_vbuz1 +lda #{c1} +eor {z1} +//FRAGMENT vbuxx=vbuc1_bxor_vbuz1 +lda #{c1} +eor {z1} +tax +//FRAGMENT vbuyy=vbuc1_bxor_vbuz1 +lda #{c1} +eor {z1} +tay +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa +ldy #{c1} +tax +clc +lda ({z1}),y +adc {c2},x +sta ({z1}),y +iny +lda ({z1}),y +adc {c2}+1,x +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuxx +ldy #{c1} +clc +lda ({z1}),y +adc {c2},x +sta ({z1}),y +iny +lda ({z1}),y +adc {c2}+1,x +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuyy +tya +ldy #{c1} +tax +clc +lda ({z1}),y +adc {c2},x +sta ({z1}),y +iny +lda ({z1}),y +adc {c2}+1,x +sta ({z1}),y +//FRAGMENT vbuz1=_neg_vbuaa +eor #$ff +clc +adc #$01 +sta {z1} +//FRAGMENT vbuz1=_neg_vbuxx +dex +txa +eor #$ff +sta {z1} +//FRAGMENT vbuaa=_neg_vbuz1 +lda {z1} +eor #$ff +clc +adc #$01 +//FRAGMENT vbuaa=_neg_vbuaa +eor #$ff +clc +adc #$01 +//FRAGMENT vbuaa=_neg_vbuxx +dex +txa +eor #$ff +//FRAGMENT vbuxx=_neg_vbuz1 +lda {z1} +eor #$ff +tax +inx +//FRAGMENT vbuxx=_neg_vbuaa +eor #$ff +tax +inx +//FRAGMENT vbuxx=_neg_vbuxx +dex +txa +eor #$ff +tax +//FRAGMENT vbuyy=_neg_vbuz1 +lda {z1} +eor #$ff +tay +iny +//FRAGMENT vbuyy=_neg_vbuaa +eor #$ff +tay +iny +//FRAGMENT vbuyy=_neg_vbuxx +txa +eor #$ff +tay +iny +//FRAGMENT vbuxx=pbuz1_derefidx_vbuz2 +ldy {z2} +lda ({z1}),y +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuz2 +ldy {z2} +lda ({z1}),y +tay +//FRAGMENT vbuz1=pbuz2_derefidx_vbuxx +txa +tay +lda ({z2}),y +sta {z1} +//FRAGMENT vbuxx=pbuz1_derefidx_vbuxx +txa +tay +lda ({z1}),y +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuxx +txa +tay +lda ({z1}),y +tay +//FRAGMENT vbuz1=pbuz2_derefidx_vbuyy +lda ({z2}),y +sta {z1} +//FRAGMENT vbuxx=pbuz1_derefidx_vbuyy +lda ({z1}),y +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuyy +lda ({z1}),y +tay +//FRAGMENT vbuaa_ge_vbuz1_then_la1 +cmp {z1} +bcs {la1} +//FRAGMENT pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1 +tay +lda #{c2} +cmp {c1},y +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 +lda {c1},x +cmp #{c2} +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 +lda #{c2} +cmp {c1},y +bne {la1} +//FRAGMENT pwuc1_derefidx_vbuz1=_word_vbuxx +ldy {z1} +txa +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=_word_vbuyy +tya +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=_word_vbuz1 +lda {z1} +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=_word_vbuxx +txa +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=_word_vbuyy +tya +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=_word_vbuz1 +lda {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=_word_vbuxx +txa +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=_word_vbuyy +tya +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=vwuc2 +lda #<{c2} +sta {c1},x +lda #>{c2} +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=vwuc2 +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT qbuc1_derefidx_vbuxx=pbuz1 +lda {z1} +sta {c1},x +lda {z1}+1 +sta {c1}+1,x +//FRAGMENT qbuc1_derefidx_vbuyy=pbuz1 +lda {z1} +sta {c1},y +lda {z1}+1 +sta {c1}+1,y +//FRAGMENT vbuyy_ge_vbuz1_then_la1 +cpy {z1} +bcs {la1} +//FRAGMENT vbuyy_ge_vbuxx_then_la1 +stx $ff +cpy $ff +bcs {la1} +//FRAGMENT vbuz1_ge_vbuyy_then_la1 +lda {z1} +sty $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuxx_ge_vbuyy_then_la1 +sty $ff +cpx $ff +bcs {la1} +//FRAGMENT vwuz1=vwuz1_ror_3 +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +//FRAGMENT vwuz1=vwuz1_rol_4 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vwuz1=vwuz1_rol_6 +lda {z1}+1 +lsr +sta $ff +lda {z1} +ror +sta {z1}+1 +lda #0 +ror +sta {z1} +lsr $ff +ror {z1}+1 +ror {z1} +//FRAGMENT vwuz1=vbuc1_plus_vwuz1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: //FRAGMENT pbuz1=pbuz2_minus_vwuz3 lda {z2} sec @@ -7664,10 +8253,6 @@ sta {z1} iny lda ({z2}),y sta {z1}+1 -//FRAGMENT vbuz1=pbuz2_derefidx_vbuz3 -ldy {z3} -lda ({z2}),y -sta {z1} //FRAGMENT vbuz1_le_0_then_la1 lda {z1} cmp #0 @@ -7696,12 +8281,6 @@ cmp {z2} beq !+ bcs {la1} !: -//FRAGMENT vbuz1=_neg_vbuz2 -lda {z2} -eor #$ff -clc -adc #$01 -sta {z1} //FRAGMENT pbuz1_derefidx_(_deref_pbuz2)=_inc_pbuz1_derefidx_(_deref_pbuz2) ldy #0 lda ({z2}),y @@ -7794,29 +8373,6 @@ sta {z1} iny lda ({z2}),y sta {z1}+1 -//FRAGMENT vbuxx=pbuz1_derefidx_vbuz2 -ldy {z2} -lda ({z1}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuz2 -ldy {z2} -lda ({z1}),y -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuxx -txa -tay -lda ({z2}),y -sta {z1} -//FRAGMENT vbuxx=pbuz1_derefidx_vbuxx -txa -tay -lda ({z1}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuxx -txa -tay -lda ({z1}),y -tay //FRAGMENT vbuaa_le_0_then_la1 cmp #0 beq {la1} @@ -7847,57 +8403,6 @@ lda ({z1}),y sta $ff cpx $ff bcc {la1} -//FRAGMENT vbuz1=_neg_vbuaa -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbuz1=_neg_vbuxx -dex -txa -eor #$ff -sta {z1} -//FRAGMENT vbuaa=_neg_vbuz1 -lda {z1} -eor #$ff -clc -adc #$01 -//FRAGMENT vbuaa=_neg_vbuaa -eor #$ff -clc -adc #$01 -//FRAGMENT vbuaa=_neg_vbuxx -dex -txa -eor #$ff -//FRAGMENT vbuxx=_neg_vbuz1 -lda {z1} -eor #$ff -tax -inx -//FRAGMENT vbuxx=_neg_vbuaa -eor #$ff -tax -inx -//FRAGMENT vbuxx=_neg_vbuxx -dex -txa -eor #$ff -tax -//FRAGMENT vbuyy=_neg_vbuz1 -lda {z1} -eor #$ff -tay -iny -//FRAGMENT vbuyy=_neg_vbuaa -eor #$ff -tay -iny -//FRAGMENT vbuyy=_neg_vbuxx -txa -eor #$ff -tay -iny //FRAGMENT pwuz1_derefidx_vbuaa=vwuz2 tay lda {z2} @@ -7993,10 +8498,6 @@ ldy {z1} lda {c1},y cmp {z2} beq {la1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 -lda #{c2} -ora {c1} -sta {c1} //FRAGMENT vbsz1=_sbyte_vwuz2 lda {z2} sta {z1} @@ -8234,9 +8735,6 @@ tax //FRAGMENT 0_neq_vbsxx_then_la1 cpx #0 bne {la1} -//FRAGMENT vbuaa_ge_vbuz1_then_la1 -cmp {z1} -bcs {la1} //FRAGMENT vbuz1=vbuxx_minus_1 dex stx {z1} @@ -8253,22 +8751,6 @@ bcs {la1} //FRAGMENT vbuz1_le_vbuaa_then_la1 cmp {z1} bcs {la1} -//FRAGMENT vbuz1_ge_vbuyy_then_la1 -lda {z1} -sty $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuxx_ge_vbuyy_then_la1 -sty $ff -cpx $ff -bcs {la1} -//FRAGMENT vbuyy_ge_vbuz1_then_la1 -cpy {z1} -bcs {la1} -//FRAGMENT vbuyy_ge_vbuxx_then_la1 -stx $ff -cpy $ff -bcs {la1} //FRAGMENT vbsaa=_inc_vbsaa clc adc #1 @@ -8963,19 +9445,6 @@ ora {z2} sta {z1} lda {z2}+1 sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_rol_4 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 //FRAGMENT vbuz1=pbuz2_derefidx_vbuaa tay lda ({z2}),y @@ -8991,15 +9460,6 @@ tax tay lda ({z1}),y tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuyy -lda ({z2}),y -sta {z1} -//FRAGMENT vbuxx=pbuz1_derefidx_vbuyy -lda ({z1}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuyy -lda ({z1}),y -tay //FRAGMENT vwuz1=vwuz2_bor_vbuxx txa ora {z2} @@ -9025,15 +9485,6 @@ sta ({z1}),y txa ora {z1} sta {z1} -//FRAGMENT vwuz1=vwuz1_rol_4 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 //FRAGMENT vbuz1_ge_pbuc1_derefidx_vbuz2_then_la1 lda {z1} ldy {z2} @@ -9443,90 +9894,24 @@ sta {z1}+1 //FRAGMENT _deref_pbsc1=vbsz1 lda {z1} sta {c1} -//FRAGMENT pwuc1_derefidx_vbuz1=_word_vbuz2 -lda {z2} -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y //FRAGMENT pwuc1_derefidx_vbuaa=_word_vbuz1 tay lda {z1} sta {c1},y lda #0 sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=_word_vbuz1 -lda {z1} -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=_word_vbuz1 -lda {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=_word_vbuxx -ldy {z1} -txa -sta {c1},y -lda #0 -sta {c1}+1,y //FRAGMENT pwuc1_derefidx_vbuaa=_word_vbuxx tay txa sta {c1},y lda #0 sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=_word_vbuxx -txa -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=_word_vbuxx -txa -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=_word_vbuyy -tya -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y //FRAGMENT pwuc1_derefidx_vbuaa=_word_vbuyy tax tya sta {c1},x lda #0 sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=_word_vbuyy -tya -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=_word_vbuyy -tya -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 -lda #{c2} -ldy {z1} -cmp {c1},y -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1 -tay -lda #{c2} -cmp {c1},y -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 -lda {c1},x -cmp #{c2} -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 -lda #{c2} -cmp {c1},y -bne {la1} //FRAGMENT vbuxx_neq_vbuaa_then_la1 tay stx $ff @@ -10992,10 +11377,6 @@ bne {la1} lda {z1} cmp #<{c1} bne {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwuz2 -ldy {z1} -lda {z2} -sta {c1},y //FRAGMENT vwuz1=vwuz2_ror_4 lda {z2}+1 lsr @@ -12735,14 +13116,6 @@ sta {z1} bcc !+ inc {z1}+1 !: -//FRAGMENT pssz1=pssc1_plus_vbuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 //FRAGMENT pwsz1_derefidx_vbuc1=vwsc2 ldy #{c1} lda #<{c2} @@ -12764,29 +13137,6 @@ ldy {z1} lda {c2},y cmp #{c1} beq {la1} -//FRAGMENT pssz1=pssc1_plus_vbuaa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pssz1=pssc1_plus_vbuxx -txa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pssz1=pssc1_plus_vbuyy -tya -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 //FRAGMENT pbsz1_derefidx_vbuc1=vbsxx ldy #{c1} txa @@ -12874,10 +13224,6 @@ sta {z1} ldy {z2} lda {c1}+1,y sta {z1} -//FRAGMENT vbuz1=vbuc1_bxor_vbuz2 -lda #{c1} -eor {z2} -sta {z1} //FRAGMENT pwuc1_derefidx_vbuz1=vbuxx ldy {z1} txa @@ -13099,17 +13445,6 @@ tay //FRAGMENT vbuyy=_hi_pwuc1_derefidx_vbuxx lda {c1}+1,x tay -//FRAGMENT vbuaa=vbuc1_bxor_vbuz1 -lda #{c1} -eor {z1} -//FRAGMENT vbuxx=vbuc1_bxor_vbuz1 -lda #{c1} -eor {z1} -tax -//FRAGMENT vbuyy=vbuc1_bxor_vbuz1 -lda #{c1} -eor {z1} -tay //FRAGMENT vbuxx_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 ldy {z1} txa @@ -13289,28 +13624,12 @@ bcc {la1} ldy {m1} tya sta {c1},y -//FRAGMENT pwuc1_derefidx_vbuz1=vwuc2 -ldy {z1} -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y //FRAGMENT pwuc1_derefidx_vbuaa=vwuc2 tay lda #<{c2} sta {c1},y lda #>{c2} sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=vwuc2 -lda #<{c2} -sta {c1},x -lda #>{c2} -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vwuc2 -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y //FRAGMENT _deref_pbuc1_ge_vbuc2_then_la1 lda {c1} cmp #{c2} @@ -15589,15 +15908,6 @@ tax //FRAGMENT vbuyy=_hi_pwsc1_derefidx_vbuyy lda {c1}+1,y tay -//FRAGMENT isr_hardware_all_entry -sta rega+1 @clob_a -stx regx+1 @clob_x -sty regy+1 @clob_y -//FRAGMENT isr_hardware_all_exit -rega: @clob_a lda #0 @clob_a -regx: @clob_x ldx #0 @clob_x -regy: @clob_y ldy #0 @clob_y -rti //FRAGMENT vwuz1=vbuz2_band_vbuc1 lda {z2} and #{c1} @@ -15853,19 +16163,6 @@ bne {la1} lda {z2} ldy #0 sta ({z1}),y -//FRAGMENT vwuz1=vwuz2_rol_6 -lda {z2}+1 -lsr -sta $ff -lda {z2} -ror -sta {z1}+1 -lda #0 -ror -sta {z1} -lsr $ff -ror {z1}+1 -ror {z1} //FRAGMENT vwuz1=vwuz2_minus_vbuc1 sec lda {z2} @@ -16101,19 +16398,6 @@ and {z1} sta {z1} lda #0 sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_6 -lda {z1}+1 -lsr -sta $ff -lda {z1} -ror -sta {z1}+1 -lda #0 -ror -sta {z1} -lsr $ff -ror {z1}+1 -ror {z1} //FRAGMENT vduz1=vduz1_plus_pduz2_derefidx_vbuz3 ldy {z3} lda {z1} @@ -16362,6 +16646,112 @@ tay tya and {z1} tay +//FRAGMENT vdsz1=vdsz2_rol_4 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +//FRAGMENT vwuz1=vbuc1_plus__hi_vdsz2 +NO_SYNTHESIS +//FRAGMENT vwuz1=vwuc1_plus__hi_vdsz2 +clc +lda #<{c1} +adc {z2}+2 +sta {z1} +lda #>{c1} +adc {z2}+3 +sta {z1}+1 +//FRAGMENT vwuz1=vbsc1_plus__hi_vdsz2 +NO_SYNTHESIS +//FRAGMENT vwuz1=vwuz2_minus_vwuz1 +lda {z2} +sec +sbc {z1} +sta {z1} +lda {z2}+1 +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT vdsz1=vdsz1_rol_4 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +//FRAGMENT vwsz1=vwsz2_ror_2 +lda {z2}+1 +cmp #$80 +ror +sta {z1}+1 +lda {z2} +ror +sta {z1} +lda {z1}+1 +cmp #$80 +ror {z1}+1 +ror {z1} +//FRAGMENT vwsz1=vbsc1_plus_vwsz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_plus_vbuz2 +clc +lda {z1} +adc {z2} +sta {z1} +lda {z1}+1 +adc #0 +sta {z1}+1 +//FRAGMENT vwsz1=vwsc1_plus_vwsz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vbsc1_plus_vwsz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 //FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuz2 ldy {z2} lda {c1},y @@ -17727,17 +18117,6 @@ lda #0 !: adc {z2}+1 sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_ror_3 -lda {z2}+1 -lsr -sta {z1}+1 -lda {z2} -ror -sta {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} //FRAGMENT vbsaa_eq_vbsc1_then_la1 cmp #{c1} beq {la1} @@ -17809,13 +18188,6 @@ lda #0 !: adc {z1}+1 sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_ror_3 -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} //FRAGMENT vwuz1=vwuz1_rol_2 asl {z1} rol {z1}+1 @@ -18193,6 +18565,37 @@ ldy #{c1} clc adc ({z1}),y sta ({z1}),y +//FRAGMENT vbuz1=_deref_pbuz2_ror_4 +ldy #0 +lda ({z2}),y +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=_deref_pbuz1_ror_4 +ldy #0 +lda ({z1}),y +lsr +lsr +lsr +lsr +//FRAGMENT vbuxx=_deref_pbuz1_ror_4 +ldy #0 +lda ({z1}),y +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbuyy=_deref_pbuz1_ror_4 +ldy #0 +lda ({z1}),y +lsr +lsr +lsr +lsr +tay //FRAGMENT _deref_pbuc1=_deref_pbuc1_bxor_vbuc2 lda #{c2} eor {c1} @@ -18513,6 +18916,126 @@ cmp {z1} beq !+ bcs {la1} !: +//FRAGMENT pduc1_derefidx_vbuz1=pduc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1},y +lda {c2}+1,y +sta {c1}+1,y +lda {c2}+2,y +sta {c1}+2,y +lda {c2}+3,y +sta {c1}+3,y +//FRAGMENT pbuz1_derefidx_vbuz2_eq_0_then_la1 +ldy {z2} +lda ({z1}),y + +cmp #0 +beq {la1} +//FRAGMENT pduc1_derefidx_vbuz1=pduc1_derefidx_vbuz1_plus_pduc2_derefidx_vbuz1 +ldy {z1} +clc +lda {c1},y +adc {c2},y +sta {c1},y +lda {c1}+1,y +adc {c2}+1,y +sta {c1}+1,y +lda {c1}+2,y +adc {c2}+2,y +sta {c1}+2,y +lda {c1}+3,y +adc {c2}+3,y +sta {c1}+3,y +//FRAGMENT qbuc1_derefidx_vbuaa=pbuz1 +tay +lda {z1} +sta {c1},y +lda {z1}+1 +sta {c1}+1,y +//FRAGMENT pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa +tay +lda {c2},y +sta {c1},y +lda {c2}+1,y +sta {c1}+1,y +lda {c2}+2,y +sta {c1}+2,y +lda {c2}+3,y +sta {c1}+3,y +//FRAGMENT pduc1_derefidx_vbuxx=pduc2_derefidx_vbuxx +lda {c2},x +sta {c1},x +lda {c2}+1,x +sta {c1}+1,x +lda {c2}+2,x +sta {c1}+2,x +lda {c2}+3,x +sta {c1}+3,x +//FRAGMENT pduc1_derefidx_vbuyy=pduc2_derefidx_vbuyy +lda {c2},y +sta {c1},y +lda {c2}+1,y +sta {c1}+1,y +lda {c2}+2,y +sta {c1}+2,y +lda {c2}+3,y +sta {c1}+3,y +//FRAGMENT pbuz1_derefidx_vbuxx_eq_0_then_la1 +txa +tay +lda ({z1}),y + +cmp #0 +beq {la1} +//FRAGMENT pbuz1_derefidx_vbuyy_eq_0_then_la1 +lda ({z1}),y + +cmp #0 +beq {la1} +//FRAGMENT pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa +tay +clc +lda {c1},y +adc {c2},y +sta {c1},y +lda {c1}+1,y +adc {c2}+1,y +sta {c1}+1,y +lda {c1}+2,y +adc {c2}+2,y +sta {c1}+2,y +lda {c1}+3,y +adc {c2}+3,y +sta {c1}+3,y +//FRAGMENT pduc1_derefidx_vbuxx=pduc1_derefidx_vbuxx_plus_pduc2_derefidx_vbuxx +clc +lda {c1},x +adc {c2},x +sta {c1},x +lda {c1}+1,x +adc {c2}+1,x +sta {c1}+1,x +lda {c1}+2,x +adc {c2}+2,x +sta {c1}+2,x +lda {c1}+3,x +adc {c2}+3,x +sta {c1}+3,x +//FRAGMENT pduc1_derefidx_vbuyy=pduc1_derefidx_vbuyy_plus_pduc2_derefidx_vbuyy +clc +lda {c1},y +adc {c2},y +sta {c1},y +lda {c1}+1,y +adc {c2}+1,y +sta {c1}+1,y +lda {c1}+2,y +adc {c2}+2,y +sta {c1}+2,y +lda {c1}+3,y +adc {c2}+3,y +sta {c1}+3,y //FRAGMENT pbuz1=_dec_pbuz2 lda {z2} sec @@ -19456,526 +19979,3 @@ ror {z1} dex bne !- !e: -//FRAGMENT pbuz1=pbuz2_minus_vwuc1 -lda {z2} -sec -sbc #<{c1} -sta {z1} -lda {z2}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 -ldy #{c2} -lda ({z2}),y -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 -lda #{c2} -ldy #{c1} -cmp ({z1}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 -ldy #{c1} -lda ({z1}),y - -cmp #{c2} -bne {la1} -//FRAGMENT _deref_(qbuz1_derefidx_vbuc1)=vbuc2 -ldx #{c2} -ldy #{c1} -lda ({z1}),y -sta !+ +1 -iny -lda ({z1}),y -sta !+ +2 -!: stx $ffff -//FRAGMENT pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 -ldy #{c3} -lda ({z1}),y -ldy #{c2} -pha -lda ({z1}),y -tay -pla -sta {c1},y -//FRAGMENT vwuz1=_deref_pwuz2_ror_4 -ldy #0 -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT vwuz1=pwuz2_derefidx_vbuc1_ror_4 -ldy #{c1} -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT _deref_pwuz1_lt_vwuc1_then_la1 -ldy #1 -lda ({z1}),y -cmp #>{c1} -bcc {la1} -bne !+ -dey -lda ({z1}),y -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT _deref_pwuz1_gt_vwuc1_then_la1 -ldy #1 -lda #>{c1} -cmp ({z1}),y -bcc {la1} -bne !+ -dey -lda #<{c1} -cmp ({z1}),y -bcc {la1} -!: -//FRAGMENT pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 -ldy #{c1} -iny -lda ({z1}),y -cmp #>{c2} -bcc {la1} -bne !+ -dey -lda ({z1}),y -cmp #<{c2} -bcc {la1} -!: -//FRAGMENT pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 -ldy #{c1} -iny -lda #>{c2} -cmp ({z1}),y -bcc {la1} -bne !+ -dey -lda #<{c2} -cmp ({z1}),y -bcc {la1} -!: -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 -ldx {z2} -ldy #{c1} -clc -lda ({z1}),y -adc {c2},x -sta ({z1}),y -iny -lda ({z1}),y -adc {c2}+1,x -sta ({z1}),y -//FRAGMENT _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 -ldy #{c1} -sty $ff -clc -lda ({z1}),y -ldy #0 -adc ({z1}),y -sta ({z1}),y -ldy $ff -iny -lda ({z1}),y -ldy #1 -adc ({z1}),y -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 -ldy #{c2} -clc -lda ({z1}),y -ldy #{c1} -adc ({z1}),y -sta ({z1}),y -ldy #{c2}+1 -lda ({z1}),y -ldy #{c1}+1 -adc ({z1}),y -sta ({z1}),y -//FRAGMENT vwuz1=vbuc1_plus_vwuz2 -lda #{c1} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT qbuc1_derefidx_vbuz1=pbuz2 -ldy {z1} -lda {z2} -sta {c1},y -lda {z2}+1 -sta {c1}+1,y -//FRAGMENT vbuaa=vbuc1_rol_pbuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_pbuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -tax -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_pbuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa -ldy #{c1} -tax -clc -lda ({z1}),y -adc {c2},x -sta ({z1}),y -iny -lda ({z1}),y -adc {c2}+1,x -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuxx -ldy #{c1} -clc -lda ({z1}),y -adc {c2},x -sta ({z1}),y -iny -lda ({z1}),y -adc {c2}+1,x -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuyy -tya -ldy #{c1} -tax -clc -lda ({z1}),y -adc {c2},x -sta ({z1}),y -iny -lda ({z1}),y -adc {c2}+1,x -sta ({z1}),y -//FRAGMENT qbuc1_derefidx_vbuxx=pbuz1 -lda {z1} -sta {c1},x -lda {z1}+1 -sta {c1}+1,x -//FRAGMENT qbuc1_derefidx_vbuyy=pbuz1 -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT vwuz1=vbuc1_plus_vwuz1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vdsz1=vdsz2_rol_4 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -//FRAGMENT vwuz1=vbuc1_plus__hi_vdsz2 -NO_SYNTHESIS -//FRAGMENT vwuz1=vwuc1_plus__hi_vdsz2 -clc -lda #<{c1} -adc {z2}+2 -sta {z1} -lda #>{c1} -adc {z2}+3 -sta {z1}+1 -//FRAGMENT vwuz1=vbsc1_plus__hi_vdsz2 -NO_SYNTHESIS -//FRAGMENT vwuz1=vwuz2_minus_vwuz1 -lda {z2} -sec -sbc {z1} -sta {z1} -lda {z2}+1 -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT vdsz1=vdsz1_rol_4 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -//FRAGMENT vwsz1=vwsz2_ror_2 -lda {z2}+1 -cmp #$80 -ror -sta {z1}+1 -lda {z2} -ror -sta {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -//FRAGMENT vwsz1=vbsc1_plus_vwsz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_plus_vbuz2 -clc -lda {z1} -adc {z2} -sta {z1} -lda {z1}+1 -adc #0 -sta {z1}+1 -//FRAGMENT vwsz1=vwsc1_plus_vwsz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vbsc1_plus_vwsz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vbuz1=_deref_pbuz2_ror_4 -ldy #0 -lda ({z2}),y -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=_deref_pbuz1_ror_4 -ldy #0 -lda ({z1}),y -lsr -lsr -lsr -lsr -//FRAGMENT vbuxx=_deref_pbuz1_ror_4 -ldy #0 -lda ({z1}),y -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=_deref_pbuz1_ror_4 -ldy #0 -lda ({z1}),y -lsr -lsr -lsr -lsr -tay -//FRAGMENT pduc1_derefidx_vbuz1=pduc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1},y -lda {c2}+1,y -sta {c1}+1,y -lda {c2}+2,y -sta {c1}+2,y -lda {c2}+3,y -sta {c1}+3,y -//FRAGMENT pbuz1_derefidx_vbuz2_eq_0_then_la1 -ldy {z2} -lda ({z1}),y - -cmp #0 -beq {la1} -//FRAGMENT pduc1_derefidx_vbuz1=pduc1_derefidx_vbuz1_plus_pduc2_derefidx_vbuz1 -ldy {z1} -clc -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -lda {c1}+2,y -adc {c2}+2,y -sta {c1}+2,y -lda {c1}+3,y -adc {c2}+3,y -sta {c1}+3,y -//FRAGMENT qbuc1_derefidx_vbuaa=pbuz1 -tay -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa -tay -lda {c2},y -sta {c1},y -lda {c2}+1,y -sta {c1}+1,y -lda {c2}+2,y -sta {c1}+2,y -lda {c2}+3,y -sta {c1}+3,y -//FRAGMENT pduc1_derefidx_vbuxx=pduc2_derefidx_vbuxx -lda {c2},x -sta {c1},x -lda {c2}+1,x -sta {c1}+1,x -lda {c2}+2,x -sta {c1}+2,x -lda {c2}+3,x -sta {c1}+3,x -//FRAGMENT pduc1_derefidx_vbuyy=pduc2_derefidx_vbuyy -lda {c2},y -sta {c1},y -lda {c2}+1,y -sta {c1}+1,y -lda {c2}+2,y -sta {c1}+2,y -lda {c2}+3,y -sta {c1}+3,y -//FRAGMENT pbuz1_derefidx_vbuxx_eq_0_then_la1 -txa -tay -lda ({z1}),y - -cmp #0 -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_eq_0_then_la1 -lda ({z1}),y - -cmp #0 -beq {la1} -//FRAGMENT pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa -tay -clc -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -lda {c1}+2,y -adc {c2}+2,y -sta {c1}+2,y -lda {c1}+3,y -adc {c2}+3,y -sta {c1}+3,y -//FRAGMENT pduc1_derefidx_vbuxx=pduc1_derefidx_vbuxx_plus_pduc2_derefidx_vbuxx -clc -lda {c1},x -adc {c2},x -sta {c1},x -lda {c1}+1,x -adc {c2}+1,x -sta {c1}+1,x -lda {c1}+2,x -adc {c2}+2,x -sta {c1}+2,x -lda {c1}+3,x -adc {c2}+3,x -sta {c1}+3,x -//FRAGMENT pduc1_derefidx_vbuyy=pduc1_derefidx_vbuyy_plus_pduc2_derefidx_vbuyy -clc -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -lda {c1}+2,y -adc {c2}+2,y -sta {c1}+2,y -lda {c1}+3,y -adc {c2}+3,y -sta {c1}+3,y diff --git a/src/main/fragment/cache/fragment-cache-rom6502x.asm b/src/main/fragment/cache/fragment-cache-rom6502x.asm index 339758d6d..4f85ab34b 100644 --- a/src/main/fragment/cache/fragment-cache-rom6502x.asm +++ b/src/main/fragment/cache/fragment-cache-rom6502x.asm @@ -1,13 +1,12 @@ -//KICKC FRAGMENT CACHE 15355793f5 153557b229 +//KICKC FRAGMENT CACHE 13789539dd 13789557f9 +//FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 +inc {c1} //FRAGMENT isr_hardware_all_entry pha @clob_none txa @clob_x pha @clob_x tya @clob_y pha @clob_y -//FRAGMENT _deref_pbuc1=vbuc2 -lda #{c2} -sta {c1} //FRAGMENT isr_hardware_all_exit pla @clob_y tay @clob_y @@ -15,53 +14,71 @@ pla @clob_x tax @clob_x pla @clob_none rti -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 -lda #{c2} -ora {c1} -sta {c1} -//FRAGMENT _deref_qprc1=pprc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 -inc {c1} -//FRAGMENT vbuz1=vbuz2 -lda {z2} -sta {z1} -//FRAGMENT vbuz1=vbuz2_band_vbuc1 +//FRAGMENT vbuz1=vbuc1 lda #{c1} -and {z2} +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1},y +//FRAGMENT vbuz1=_inc_vbuz1 +inc {z1} +//FRAGMENT vbuz1_neq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuaa +tay +lda {c2},y +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx +lda {c2},x +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy +lda {c2},y +sta {c1},y +//FRAGMENT vbuxx_neq_vbuc1_then_la1 +cpx #{c1} +bne {la1} +//FRAGMENT vbuxx=vbuc1 +ldx #{c1} +//FRAGMENT vbuxx=_inc_vbuxx +inx +//FRAGMENT vbuyy=vbuc1 +ldy #{c1} +//FRAGMENT vbuyy=_inc_vbuyy +iny +//FRAGMENT vbuyy_neq_vbuc1_then_la1 +cpy #{c1} +bne {la1} +//FRAGMENT _deref_pbuc1=vbuc2 +lda #{c2} +sta {c1} +//FRAGMENT _deref_pbuc1=vbuz1 +lda {z1} +sta {c1} +//FRAGMENT vbuz1=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} sta {z1} //FRAGMENT 0_eq_vbuz1_then_la1 lda {z1} cmp #0 beq {la1} -//FRAGMENT _deref_pbuc1=_dec__deref_pbuc1 -dec {c1} -//FRAGMENT vbuz1=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1 -lda #{c1} -sta {z1} //FRAGMENT pbuc1_derefidx_vbuz1=vbuc2 lda #{c2} ldy {z1} sta {c1},y -//FRAGMENT vbuz1=_inc_vbuz1 -inc {z1} //FRAGMENT 0_neq_vbuz1_then_la1 lda {z1} cmp #0 bne {la1} -//FRAGMENT vwuz1=vwuc1 +//FRAGMENT pvoz1=pvoc1 lda #<{c1} sta {z1} lda #>{c1} sta {z1}+1 -//FRAGMENT pvoz1=pvoc1 +//FRAGMENT vwuz1=vwuc1 lda #<{c1} sta {z1} lda #>{c1} @@ -71,6 +88,673 @@ lda #<{c1} sta {z1} lda #>{c1} sta {z1}+1 +//FRAGMENT vwuz1_lt_vbuc1_then_la1 +lda {z1}+1 +bne !+ +lda {z1} +cmp #{c1} +bcc {la1} +!: +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_vbuc2 +lda #{c2} +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuz1=vbuz2_bxor_vbuc1 +lda #{c1} +eor {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz2 +lda {z2} +sta {z1} +//FRAGMENT vwuz1_ge_vbuc1_then_la1 +lda {z1}+1 +bne {la1} +lda {z1} +cmp #{c1} +bcs {la1} +!: +//FRAGMENT vbuz1=_inc_vbuz2 +ldy {z2} +iny +sty {z1} +//FRAGMENT vwuz1=_inc_vwuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1=vwuz2_rol_3 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT pwuz1=pwuc1_plus_vwuz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pwuz1=vbuc1 +lda #{c1} +ldy #0 +sta ({z1}),y +tya +iny +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=vbuc2 +lda #{c2} +ldy #{c1} +sta ({z1}),y +lda #0 +iny +sta ({z1}),y +//FRAGMENT vwuz1_lt_vwuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bcc {la1} +bne !+ +lda {z1} +cmp {z2} +bcc {la1} +!: +//FRAGMENT _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 +ldy #{c1} +sty $ff +clc +lda ({z1}),y +ldy #0 +adc ({z1}),y +sta ({z1}),y +ldy $ff +iny +lda ({z1}),y +ldy #1 +adc ({z1}),y +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_vbuc2 +lda #{c2} +ldy #{c1} +clc +adc ({z1}),y +sta ({z1}),y +iny +lda #0 +adc ({z1}),y +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 +ldy #{c2} +clc +lda ({z1}),y +ldy #{c1} +adc ({z1}),y +sta ({z1}),y +ldy #{c2}+1 +lda ({z1}),y +ldy #{c1}+1 +adc ({z1}),y +sta ({z1}),y +//FRAGMENT vwuz1=_deref_pwuz2_ror_8 +ldy #1 +lda ({z2}),y +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_bxor_vwuc2 +ldy #{c1} +lda #<{c2} +eor ({z1}),y +sta ({z1}),y +iny +lda #>{c2} +eor ({z1}),y +sta ({z1}),y +//FRAGMENT vwuz1=pwuz2_derefidx_vbuc1_ror_8 +ldy #{c1} +lda #0 +sta {z1}+1 +iny +lda ({z2}),y +sta {z1} +//FRAGMENT vbuz1=vbuz2_plus_vbuc1 +lax {z2} +axs #-[{c1}] +stx {z1} +//FRAGMENT vwuz1_lt_vbuz2_then_la1 +lda {z1}+1 +bne !+ +lda {z1} +cmp {z2} +bcc {la1} +!: +//FRAGMENT vwuz1_ge_vbuz2_then_la1 +lda {z1}+1 +bne {la1} +lda {z1} +cmp {z2} +bcs {la1} +!: +//FRAGMENT vbuz1=vbuz2_minus_2 +lda {z2} +sec +sbc #2 +sta {z1} +//FRAGMENT vwuz1=_word_vbuz2 +lda {z2} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_8 +lda {z2} +sta {z1}+1 +lda #0 +sta {z1} +//FRAGMENT pwuz1_derefidx_vbuc1=vwuz2 +ldy #{c1} +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT vbuz1=vbuz2_rol_2 +lda {z2} +asl +asl +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwuz2 +ldy {z1} +lda {z2} +sta {c1},y +//FRAGMENT vwuz1=vwuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_band_vwuc1 +lda {z2} +and #<{c1} +sta {z1} +lda {z2}+1 +and #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=vwuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +//FRAGMENT pwuz1_derefidx_vbuc1=vbuz2 +lda {z2} +ldy #{c1} +sta ({z1}),y +lda #0 +iny +sta ({z1}),y +//FRAGMENT vbuz1=_hi_pvoz2 +lda {z2}+1 +sta {z1} +//FRAGMENT vbuz1=_lo_pvoz2 +lda {z2} +sta {z1} +//FRAGMENT pbuz1=pbuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +sta {z1} +//FRAGMENT pbuz1=_inc_pbuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1=vwuz2_rol_7 +lda {z2}+1 +lsr +lda {z2} +ror +sta {z1}+1 +lda #0 +ror +sta {z1} +//FRAGMENT vwuz1=vwuz2_bxor_vwuz3 +lda {z2} +eor {z3} +sta {z1} +lda {z2}+1 +eor {z3}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_ror_9 +lda {z2}+1 +lsr +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vbuaa=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +//FRAGMENT vbuxx=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +tax +//FRAGMENT vbuyy=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +tay +//FRAGMENT 0_eq_vbuaa_then_la1 +cmp #0 +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuaa=vbuc2 +tay +lda #{c2} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=vbuc2 +lda #{c2} +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuc2 +lda #{c2} +sta {c1},y +//FRAGMENT 0_neq_vbuxx_then_la1 +cpx #0 +bne {la1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_vbuc2 +lda #{c2} +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_vbuc2 +ldx {z1} +lda {c1},x +tax +axs #-[{c2}] +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_vbuc2 +lda #{c2} +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_vbuc2 +tay +lda #{c2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_vbuc2 +tay +lda #{c2} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_vbuc2 +tax +lda {c1},x +tax +axs #-[{c2}] +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_vbuc2 +tay +lda #{c2} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_vbuc2 +lda #{c2} +clc +adc {c1},x +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_vbuc2 +lda #{c2} +clc +adc {c1},x +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_vbuc2 +lda {c1},x +tax +axs #-[{c2}] +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_vbuc2 +lda #{c2} +clc +adc {c1},x +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_vbuc2 +lda #{c2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_vbuc2 +lda #{c2} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_vbuc2 +lda {c1},y +tax +axs #-[{c2}] +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_vbuc2 +lda #{c2} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=vbuaa_bxor_vbuc1 +eor #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuxx_bxor_vbuc1 +txa +eor #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuyy_bxor_vbuc1 +tya +eor #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +//FRAGMENT vbuaa=vbuaa_bxor_vbuc1 +eor #{c1} +//FRAGMENT vbuaa=vbuxx_bxor_vbuc1 +txa +eor #{c1} +//FRAGMENT vbuaa=vbuyy_bxor_vbuc1 +tya +eor #{c1} +//FRAGMENT vbuxx=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +tax +//FRAGMENT vbuxx=vbuaa_bxor_vbuc1 +eor #{c1} +tax +//FRAGMENT vbuxx=vbuxx_bxor_vbuc1 +txa +eor #{c1} +tax +//FRAGMENT vbuxx=vbuyy_bxor_vbuc1 +tya +eor #{c1} +tax +//FRAGMENT vbuyy=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +tay +//FRAGMENT vbuyy=vbuaa_bxor_vbuc1 +eor #{c1} +tay +//FRAGMENT vbuyy=vbuxx_bxor_vbuc1 +txa +eor #{c1} +tay +//FRAGMENT vbuyy=vbuyy_bxor_vbuc1 +tya +eor #{c1} +tay +//FRAGMENT vbuz1=vbuaa +sta {z1} +//FRAGMENT vbuaa=_inc_vbuz1 +lda {z1} +clc +adc #1 +//FRAGMENT vbuz1=vbuxx_plus_vbuc1 +txa +axs #-[{c1}] +stx {z1} +//FRAGMENT vbuaa=vbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +//FRAGMENT vbuaa=vbuxx_plus_vbuc1 +txa +clc +adc #{c1} +//FRAGMENT vbuxx=vbuz1_plus_vbuc1 +lax {z1} +axs #-[{c1}] +//FRAGMENT vbuxx=vbuxx_plus_vbuc1 +txa +axs #-[{c1}] +//FRAGMENT vbuyy=vbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +tay +//FRAGMENT vbuyy=vbuxx_plus_vbuc1 +txa +clc +adc #{c1} +tay +//FRAGMENT vwuz1_lt_vbuxx_then_la1 +lda {z1}+1 +bne !+ +stx $ff +lda {z1} +cmp $ff +bcc {la1} +!: +//FRAGMENT vwuz1_ge_vbuxx_then_la1 +lda {z1}+1 +bne {la1} +stx $ff +lda {z1} +cmp $ff +bcs {la1} +!: +//FRAGMENT vwuz1_ge_vbuyy_then_la1 +lda {z1}+1 +bne {la1} +sty $ff +lda {z1} +cmp $ff +bcs {la1} +!: +//FRAGMENT vbuz1=vbuxx_minus_2 +dex +dex +stx {z1} +//FRAGMENT vwuz1=_word_vbuaa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_vbuxx +txa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_vbuyy +tya +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vbuaa=vbuz1_rol_2 +lda {z1} +asl +asl +//FRAGMENT vbuxx=vbuz1_rol_2 +lda {z1} +asl +asl +tax +//FRAGMENT vbuyy=vbuz1_rol_2 +lda {z1} +asl +asl +tay +//FRAGMENT vbuz1=vbuxx_rol_2 +txa +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuxx_rol_2 +txa +asl +asl +//FRAGMENT vbuxx=vbuxx_rol_2 +txa +asl +asl +tax +//FRAGMENT vbuyy=vbuxx_rol_2 +txa +asl +asl +tay +//FRAGMENT pbuc1_derefidx_vbuaa=_byte_vwuz1 +tay +lda {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=_byte_vwuz1 +lda {z1} +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=_byte_vwuz1 +lda {z1} +sta {c1},y +//FRAGMENT vbuxx=vbuz1 +ldx {z1} +//FRAGMENT vbuaa=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +//FRAGMENT vbuxx=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +tax +//FRAGMENT vbuyy=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +tay +//FRAGMENT pwuz1_derefidx_vbuc1=vbuxx +txa +ldy #{c1} +sta ({z1}),y +lda #0 +iny +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=vbuyy +tya +ldy #{c1} +sta ({z1}),y +lda #0 +iny +sta ({z1}),y +//FRAGMENT vbuaa=_hi_pvoz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_pvoz1 +ldx {z1}+1 +//FRAGMENT _deref_pbuc1=vbuaa +sta {c1} +//FRAGMENT vbuaa=_lo_pvoz1 +lda {z1} +//FRAGMENT vbuxx=_lo_pvoz1 +ldx {z1} +//FRAGMENT vbuaa=_deref_pbuz1 +ldy #0 +lda ({z1}),y +//FRAGMENT vbuxx=_deref_pbuz1 +ldy #0 +lda ({z1}),y +tax +//FRAGMENT vbuyy=_deref_pbuz1 +ldy #0 +lda ({z1}),y +tay +//FRAGMENT vbuaa=vbuz1_minus_2 +lda {z1} +sec +sbc #2 +//FRAGMENT vbuxx=vbuz1_minus_2 +ldx {z1} +dex +dex +//FRAGMENT vbuyy=vbuz1_minus_2 +ldy {z1} +dey +dey +//FRAGMENT vbuz1=_inc_vbuxx +inx +stx {z1} +//FRAGMENT _deref_pbuc1=vbuxx +stx {c1} +//FRAGMENT _deref_pbuc1=vbuyy +sty {c1} +//FRAGMENT vbuyy=_hi_pvoz1 +ldy {z1}+1 +//FRAGMENT vbuyy=_lo_pvoz1 +ldy {z1} +//FRAGMENT 0_neq_vbuyy_then_la1 +cpy #0 +bne {la1} +//FRAGMENT 0_eq_vbuxx_then_la1 +cpx #0 +beq {la1} +//FRAGMENT 0_eq_vbuyy_then_la1 +cpy #0 +beq {la1} +//FRAGMENT vbuz1=vbuxx +stx {z1} +//FRAGMENT vbuz1=vbuyy +sty {z1} +//FRAGMENT vbuxx=_inc_vbuz1 +ldx {z1} +inx +//FRAGMENT vbuyy=_inc_vbuz1 +ldy {z1} +iny +//FRAGMENT vwuz1=vwuz1_bxor_vwuz2 +lda {z1} +eor {z2} +sta {z1} +lda {z1}+1 +eor {z2}+1 +sta {z1}+1 +//FRAGMENT pwuz1=pwuc1_plus_vwuz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=_deref_pwuz1_ror_8 +ldy #1 +lda ({z1}),y +sta {z1} +dey +sty {z1}+1 +//FRAGMENT vwuz1=pwuz1_derefidx_vbuc1_ror_8 +ldy #{c1} +iny +lda ({z1}),y +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_rol_8 +lda {z1} +sta {z1}+1 +lda #0 +sta {z1} +//FRAGMENT vwuz1=vwuz1_band_vwuc1 +lda {z1} +and #<{c1} +sta {z1} +lda {z1}+1 +and #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 +lda #{c2} +ora {c1} +sta {c1} +//FRAGMENT _deref_qprc1=pprc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT vbuz1=vbuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +//FRAGMENT _deref_pbuc1=_dec__deref_pbuc1 +dec {c1} //FRAGMENT vbuz1_lt_vbuc1_then_la1 lda {z1} cmp #{c1} @@ -115,38 +799,6 @@ lda {z1} cmp #<{c1} bcc {la1} !: -//FRAGMENT vbuz1=_deref_pbuz2 -ldy #0 -lda ({z2}),y -sta {z1} -//FRAGMENT _deref_pbuc1=vbuz1 -lda {z1} -sta {c1} -//FRAGMENT pbuz1=_inc_pbuz1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vwuz1=_inc_vwuz1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vbuz1=_hi_pvoz2 -lda {z2}+1 -sta {z1} -//FRAGMENT vbuz1=_lo_pvoz2 -lda {z2} -sta {z1} -//FRAGMENT vwuz1_lt_vwuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bcc {la1} -bne !+ -lda {z1} -cmp {z2} -bcc {la1} -!: //FRAGMENT vbuz1=pbuz2_derefidx_vbuc1 ldy #{c1} lda ({z2}),y @@ -171,12 +823,8 @@ ldy #0 lda ({z2}),y ldy #0 sta ({z1}),y -//FRAGMENT vbuz1=vbuaa -sta {z1} //FRAGMENT vbuaa=vbuz1 lda {z1} -//FRAGMENT vbuxx=vbuz1 -ldx {z1} //FRAGMENT vbuz1=vbuaa_band_vbuc1 and #{c1} sta {z1} @@ -205,37 +853,10 @@ tax //FRAGMENT vbuxx=vbuaa_band_vbuc1 ldx #{c1} axs #0 -//FRAGMENT 0_eq_vbuaa_then_la1 -cmp #0 -beq {la1} //FRAGMENT vbuyy=vbuz1_band_vbuc1 lda #{c1} and {z1} tay -//FRAGMENT vbuaa=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -//FRAGMENT vbuxx=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -tax -//FRAGMENT vbuyy=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -tay -//FRAGMENT pbuc1_derefidx_vbuaa=vbuc2 -tay -lda #{c2} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=vbuc2 -lda #{c2} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbuc2 -lda #{c2} -sta {c1},y -//FRAGMENT 0_neq_vbuxx_then_la1 -cpx #0 -bne {la1} //FRAGMENT vbuaa_lt_vbuc1_then_la1 cmp #{c1} bcc {la1} @@ -342,29 +963,6 @@ ora {z2} sta {z1} //FRAGMENT vbuz1=vbuxx_bor_vbuxx stx {z1} -//FRAGMENT vbuaa=_deref_pbuz1 -ldy #0 -lda ({z1}),y -//FRAGMENT vbuxx=_deref_pbuz1 -ldy #0 -lda ({z1}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1 -ldy #0 -lda ({z1}),y -tay -//FRAGMENT _deref_pbuc1=vbuaa -sta {c1} -//FRAGMENT vbuaa=_hi_pvoz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_pvoz1 -ldx {z1}+1 -//FRAGMENT vbuaa=_lo_pvoz1 -lda {z1} -//FRAGMENT vbuxx=_lo_pvoz1 -ldx {z1} -//FRAGMENT _deref_pbuc1=vbuxx -stx {c1} //FRAGMENT vbuaa=pbuz1_derefidx_vbuc1 ldy #{c1} lda ({z1}),y @@ -379,23 +977,9 @@ tay //FRAGMENT vbuxx_lt_vbuc1_then_la1 cpx #{c1} bcc {la1} -//FRAGMENT vbuyy=_hi_pvoz1 -ldy {z1}+1 -//FRAGMENT _deref_pbuc1=vbuyy -sty {c1} -//FRAGMENT vbuyy=_lo_pvoz1 -ldy {z1} -//FRAGMENT vbuxx=vbuc1 -ldx #{c1} -//FRAGMENT vbuxx=_inc_vbuxx -inx -//FRAGMENT vbuyy=vbuc1 -ldy #{c1} //FRAGMENT vbuyy_lt_vbuc1_then_la1 cpy #{c1} bcc {la1} -//FRAGMENT vbuyy=_inc_vbuyy -iny //FRAGMENT vbuz1=vbuz2_bor_vbuyy tya ora {z2} @@ -413,8 +997,6 @@ ora {z1} //FRAGMENT vbuaa=vbuz1_bor_vbuyy tya ora {z1} -//FRAGMENT vbuz1=vbuxx -stx {z1} //FRAGMENT vbuxx=vbuz1_bor_vbuz2 lda {z1} ora {z2} @@ -430,8 +1012,6 @@ tax tya ora {z1} tax -//FRAGMENT vbuz1=vbuyy -sty {z1} //FRAGMENT vbuyy=vbuz1_bor_vbuz2 lda {z1} ora {z2} @@ -488,15 +1068,6 @@ txa sty $ff ora $ff tay -//FRAGMENT 0_neq_vbuyy_then_la1 -cpy #0 -bne {la1} -//FRAGMENT 0_eq_vbuxx_then_la1 -cpx #0 -beq {la1} -//FRAGMENT 0_eq_vbuyy_then_la1 -cpy #0 -beq {la1} //FRAGMENT vbuaa=vbuyy_bor_vbuaa sty $ff ora $ff @@ -512,17 +1083,374 @@ sta {z1} bcc !+ inc {z1}+1 !: -//FRAGMENT vbuz1_neq_vbuc1_then_la1 -lda #{c1} +//FRAGMENT vbuz1_ge_vbuc1_then_la1 +lda {z1} +cmp #{c1} +bcs {la1} +//FRAGMENT vbuz1=vbuz2_rol_3 +lda {z2} +asl +asl +asl +sta {z1} +//FRAGMENT pwuc1_derefidx_vbuz1=vbuc2 +lda #{c2} +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT vbuz1_lt_vbuz2_then_la1 +lda {z1} +cmp {z2} +bcc {la1} +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_pwuc2_derefidx_vbuz1 +ldy {z1} +clc +lda {c1},y +adc {c2},y +sta {c1},y +lda {c1}+1,y +adc {c2}+1,y +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_vbuc2 +ldy {z1} +clc +lda {c1},y +adc #{c2} +sta {c1},y +lda {c1}+1,y +adc #0 +sta {c1}+1,y +//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_ror_8 +ldy {z2} +lda #0 +sta {z1}+1 +lda {c1}+1,y +sta {z1} +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_bxor_vwuc2 +ldy {z1} +lda {c1},y +eor #<{c2} +sta {c1},y +lda {c1}+1,y +eor #>{c2} +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vwuz2 +ldy {z1} +lda {z2} +sta {c1},y +lda {z2}+1 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vbuz2 +lda {z2} +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT vbuxx_ge_vbuc1_then_la1 +cpx #{c1} +bcs {la1} +//FRAGMENT vbuaa=vbuz1_rol_3 +lda {z1} +asl +asl +asl +//FRAGMENT vbuxx=vbuz1_rol_3 +lda {z1} +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuz1_rol_3 +lda {z1} +asl +asl +asl +tay +//FRAGMENT vbuz1=vbuxx_rol_3 +txa +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuxx_rol_3 +txa +asl +asl +asl +//FRAGMENT vbuxx=vbuxx_rol_3 +txa +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuxx_rol_3 +txa +asl +asl +asl +tay +//FRAGMENT vbuz1=vbuyy_rol_3 +tya +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuyy_rol_3 +tya +asl +asl +asl +//FRAGMENT vbuxx=vbuyy_rol_3 +tya +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuyy_rol_3 +tya +asl +asl +asl +tay +//FRAGMENT pwuc1_derefidx_vbuaa=vbuc2 +tay +lda #{c2} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=vbuc2 +lda #{c2} +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=vbuc2 +lda #{c2} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT vbuaa_lt_vbuz1_then_la1 cmp {z1} -bne {la1} +bcc {la1} +//FRAGMENT vbuz1=vbuaa_rol_3 +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuaa_rol_3 +asl +asl +asl +//FRAGMENT vbuxx=vbuaa_rol_3 +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuaa_rol_3 +asl +asl +asl +tay +//FRAGMENT pwuc1_derefidx_vbuaa=pwuc1_derefidx_vbuaa_plus_pwuc2_derefidx_vbuaa +tax +tay +clc +lda {c1},y +adc {c2},x +sta {c1},y +lda {c1}+1,y +adc {c2}+1,x +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_pwuc2_derefidx_vbuxx +txa +tay +txa +sty $ff +ldx $ff +tay +clc +lda {c1},y +adc {c2},x +sta {c1},y +lda {c1}+1,y +adc {c2}+1,x +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_pwuc2_derefidx_vbuyy +clc +lda {c1},y +adc {c2},y +sta {c1},y +lda {c1}+1,y +adc {c2}+1,y +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vbuc2 +clc +lda {c1},x +adc #{c2} +sta {c1},x +lda {c1}+1,x +adc #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_vbuc2 +clc +lda {c1},y +adc #{c2} +sta {c1},y +lda {c1}+1,y +adc #0 +sta {c1}+1,y +//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_ror_8 +txa +tay +lda #0 +sta {z1}+1 +lda {c1}+1,y +sta {z1} +//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_ror_8 +lda #0 +sta {z1}+1 +lda {c1}+1,y +sta {z1} +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_bxor_vwuc2 +txa +tay +lda {c1},y +eor #<{c2} +sta {c1},y +lda {c1}+1,y +eor #>{c2} +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_bxor_vwuc2 +lda {c1},y +eor #<{c2} +sta {c1},y +lda {c1}+1,y +eor #>{c2} +sta {c1}+1,y +//FRAGMENT vbuz1=vbuyy_plus_vbuc1 +tya +clc +adc #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuyy_plus_vbuc1 +tya +clc +adc #{c1} +//FRAGMENT vbuxx=vbuyy_plus_vbuc1 +tya +tax +axs #-[{c1}] +//FRAGMENT vbuyy=vbuyy_plus_vbuc1 +tya +clc +adc #{c1} +tay +//FRAGMENT vwuz1_lt_vbuyy_then_la1 +lda {z1}+1 +bne !+ +sty $ff +lda {z1} +cmp $ff +bcc {la1} +!: +//FRAGMENT pwuc1_derefidx_vbuxx=vwuz1 +lda {z1} +sta {c1},x +lda {z1}+1 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=vwuz1 +lda {z1} +sta {c1},y +lda {z1}+1 +sta {c1}+1,y +//FRAGMENT vbuz1=vbuyy_rol_2 +tya +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuyy_rol_2 +tya +asl +asl +//FRAGMENT vbuxx=vbuyy_rol_2 +tya +asl +asl +tax +//FRAGMENT vbuyy=vbuyy_rol_2 +tya +asl +asl +tay +//FRAGMENT pwuc1_derefidx_vbuaa=vwuz1 +tay +lda {z1} +sta {c1},y +lda {z1}+1 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vbuaa +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vbuxx +ldy {z1} +txa +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vbuyy +tya +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=vbuz1 +lda {z1} +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=vbuaa +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=vbuxx +txa +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=vbuyy +tya +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=vbuz1 +lda {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=vbuaa +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=vbuxx +txa +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=vbuyy +tya +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT vbuxx_lt_vbuz1_then_la1 +cpx {z1} +bcc {la1} +//FRAGMENT vbuyy_lt_vbuz1_then_la1 +cpy {z1} +bcc {la1} //FRAGMENT vbuz1=_dec_vbuz1 dec {z1} -//FRAGMENT pbuz1=pbuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 //FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy {z2} lda {c1},y @@ -553,11 +1481,6 @@ lda {z1} sec sbc {z2} sta {z1} -//FRAGMENT vwuz1=_word_vbuz2 -lda {z2} -sta {z1} -lda #0 -sta {z1}+1 //FRAGMENT vwuz1=vwuz2_rol_5 lda {z2} asl @@ -704,20 +1627,6 @@ sty $ff sec sbc $ff tax -//FRAGMENT vwuz1=_word_vbuaa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_vbuxx -txa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_vbuyy -tya -sta {z1} -lda #0 -sta {z1}+1 //FRAGMENT vbuaa_eq_vbuc1_then_la1 cmp #{c1} beq {la1} @@ -799,11 +1708,6 @@ sta {z1}+1 ldy {z2} iny sty {z1} -//FRAGMENT vbuz1=vbuz2_rol_2 -lda {z2} -asl -asl -sta {z1} //FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 ldy {z2} lda {c2},y @@ -824,10 +1728,6 @@ sta {z1} lda {z2} ldy {z1} sta {c1},y -//FRAGMENT vbuz1_ge_vbuc1_then_la1 -lda {z1} -cmp #{c1} -bcs {la1} //FRAGMENT vbuz1=vbuz1_plus_vbuc1 lax {z1} axs #-[{c1}] @@ -836,20 +1736,6 @@ stx {z1} lda {z1} clc adc #1 -//FRAGMENT vbuaa=vbuz1_rol_2 -lda {z1} -asl -asl -//FRAGMENT vbuxx=vbuz1_rol_2 -lda {z1} -asl -asl -tax -//FRAGMENT vbuyy=vbuz1_rol_2 -lda {z1} -asl -asl -tay //FRAGMENT vbuz1=vbuaa_rol_2 asl asl @@ -865,44 +1751,6 @@ tax asl asl tay -//FRAGMENT vbuz1=vbuxx_rol_2 -txa -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuxx_rol_2 -txa -asl -asl -//FRAGMENT vbuxx=vbuxx_rol_2 -txa -asl -asl -tax -//FRAGMENT vbuyy=vbuxx_rol_2 -txa -asl -asl -tay -//FRAGMENT vbuz1=vbuyy_rol_2 -tya -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuyy_rol_2 -tya -asl -asl -//FRAGMENT vbuxx=vbuyy_rol_2 -tya -asl -asl -tax -//FRAGMENT vbuyy=vbuyy_rol_2 -tya -asl -asl -tay //FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1 ldx {z1} tay @@ -924,9 +1772,6 @@ sta {c1},y tay lda {c2},x sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx -lda {c2},x -sta {c1},x //FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx lda {c2},x sta {c1},y @@ -941,9 +1786,6 @@ sta {c1},x //FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy lda {c2},y sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy -lda {c2},y -sta {c1},y //FRAGMENT vbuxx=vbuxx_minus_vbuc1 txa axs #{c1} @@ -1154,17 +1996,6 @@ sta {c1},y //FRAGMENT pbuc1_derefidx_vbuxx=vbuz1 lda {z1} sta {c1},x -//FRAGMENT vbuxx_ge_vbuc1_then_la1 -cpx #{c1} -bcs {la1} -//FRAGMENT vbuxx=vbuxx_plus_vbuc1 -txa -axs #-[{c1}] -//FRAGMENT vbuyy=vbuyy_plus_vbuc1 -tya -clc -adc #{c1} -tay //FRAGMENT vbuyy_ge_vbuc1_then_la1 cpy #{c1} bcs {la1} @@ -1178,834 +2009,3 @@ inx //FRAGMENT vbuyy=vbuz1_plus_1 ldy {z1} iny -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuaa -tay -lda {c2},y -sta {c1},y -//FRAGMENT vbuxx_neq_vbuc1_then_la1 -cpx #{c1} -bne {la1} -//FRAGMENT vbuyy_neq_vbuc1_then_la1 -cpy #{c1} -bne {la1} -//FRAGMENT vwuz1_lt_vbuc1_then_la1 -lda {z1}+1 -bne !+ -lda {z1} -cmp #{c1} -bcc {la1} -!: -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_vbuc2 -lda #{c2} -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuz1=vbuz2_bxor_vbuc1 -lda #{c1} -eor {z2} -sta {z1} -//FRAGMENT vwuz1_ge_vbuc1_then_la1 -lda {z1}+1 -bne {la1} -lda {z1} -cmp #{c1} -bcs {la1} -!: -//FRAGMENT vbuz1=_inc_vbuz2 -ldy {z2} -iny -sty {z1} -//FRAGMENT vwuz1=vwuz2_rol_3 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT pwuz1=pwuc1_plus_vwuz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pwuz1=vbuc1 -lda #{c1} -ldy #0 -sta ({z1}),y -tya -iny -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=vbuc2 -lda #{c2} -ldy #{c1} -sta ({z1}),y -lda #0 -iny -sta ({z1}),y -//FRAGMENT _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 -ldy #{c1} -sty $ff -clc -lda ({z1}),y -ldy #0 -adc ({z1}),y -sta ({z1}),y -ldy $ff -iny -lda ({z1}),y -ldy #1 -adc ({z1}),y -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_vbuc2 -lda #{c2} -ldy #{c1} -clc -adc ({z1}),y -sta ({z1}),y -iny -lda #0 -adc ({z1}),y -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 -ldy #{c2} -clc -lda ({z1}),y -ldy #{c1} -adc ({z1}),y -sta ({z1}),y -ldy #{c2}+1 -lda ({z1}),y -ldy #{c1}+1 -adc ({z1}),y -sta ({z1}),y -//FRAGMENT vwuz1=_deref_pwuz2_ror_8 -ldy #1 -lda ({z2}),y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_bxor_vwuc2 -ldy #{c1} -lda #<{c2} -eor ({z1}),y -sta ({z1}),y -iny -lda #>{c2} -eor ({z1}),y -sta ({z1}),y -//FRAGMENT vwuz1=pwuz2_derefidx_vbuc1_ror_8 -ldy #{c1} -lda #0 -sta {z1}+1 -iny -lda ({z2}),y -sta {z1} -//FRAGMENT vbuz1=vbuz2_plus_vbuc1 -lax {z2} -axs #-[{c1}] -stx {z1} -//FRAGMENT vwuz1_lt_vbuz2_then_la1 -lda {z1}+1 -bne !+ -lda {z1} -cmp {z2} -bcc {la1} -!: -//FRAGMENT vwuz1_ge_vbuz2_then_la1 -lda {z1}+1 -bne {la1} -lda {z1} -cmp {z2} -bcs {la1} -!: -//FRAGMENT vbuz1=vbuz2_minus_2 -lda {z2} -sec -sbc #2 -sta {z1} -//FRAGMENT vwuz1=vwuz2_rol_8 -lda {z2} -sta {z1}+1 -lda #0 -sta {z1} -//FRAGMENT pwuz1_derefidx_vbuc1=vwuz2 -ldy #{c1} -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwuz2 -ldy {z1} -lda {z2} -sta {c1},y -//FRAGMENT vwuz1=vwuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_band_vwuc1 -lda {z2} -and #<{c1} -sta {z1} -lda {z2}+1 -and #>{c1} -sta {z1}+1 -//FRAGMENT vbuz1=vwuz2_band_vbuc1 -lda #{c1} -and {z2} -sta {z1} -//FRAGMENT pwuz1_derefidx_vbuc1=vbuz2 -lda {z2} -ldy #{c1} -sta ({z1}),y -lda #0 -iny -sta ({z1}),y -//FRAGMENT vwuz1=vwuz2_rol_7 -lda {z2}+1 -lsr -lda {z2} -ror -sta {z1}+1 -lda #0 -ror -sta {z1} -//FRAGMENT vwuz1=vwuz2_bxor_vwuz3 -lda {z2} -eor {z3} -sta {z1} -lda {z2}+1 -eor {z3}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_ror_9 -lda {z2}+1 -lsr -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_vbuc2 -lda #{c2} -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_vbuc2 -ldx {z1} -lda {c1},x -tax -axs #-[{c2}] -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_vbuc2 -lda #{c2} -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_vbuc2 -tay -lda #{c2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_vbuc2 -tay -lda #{c2} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_vbuc2 -tax -lda {c1},x -tax -axs #-[{c2}] -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_vbuc2 -tay -lda #{c2} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_vbuc2 -lda #{c2} -clc -adc {c1},x -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_vbuc2 -lda #{c2} -clc -adc {c1},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_vbuc2 -lda {c1},x -tax -axs #-[{c2}] -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_vbuc2 -lda #{c2} -clc -adc {c1},x -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_vbuc2 -lda #{c2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_vbuc2 -lda #{c2} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_vbuc2 -lda {c1},y -tax -axs #-[{c2}] -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_vbuc2 -lda #{c2} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=vbuaa_bxor_vbuc1 -eor #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuxx_bxor_vbuc1 -txa -eor #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuyy_bxor_vbuc1 -tya -eor #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuz1_bxor_vbuc1 -lda #{c1} -eor {z1} -//FRAGMENT vbuaa=vbuaa_bxor_vbuc1 -eor #{c1} -//FRAGMENT vbuaa=vbuxx_bxor_vbuc1 -txa -eor #{c1} -//FRAGMENT vbuaa=vbuyy_bxor_vbuc1 -tya -eor #{c1} -//FRAGMENT vbuxx=vbuz1_bxor_vbuc1 -lda #{c1} -eor {z1} -tax -//FRAGMENT vbuxx=vbuaa_bxor_vbuc1 -eor #{c1} -tax -//FRAGMENT vbuxx=vbuxx_bxor_vbuc1 -txa -eor #{c1} -tax -//FRAGMENT vbuxx=vbuyy_bxor_vbuc1 -tya -eor #{c1} -tax -//FRAGMENT vbuyy=vbuz1_bxor_vbuc1 -lda #{c1} -eor {z1} -tay -//FRAGMENT vbuyy=vbuaa_bxor_vbuc1 -eor #{c1} -tay -//FRAGMENT vbuyy=vbuxx_bxor_vbuc1 -txa -eor #{c1} -tay -//FRAGMENT vbuyy=vbuyy_bxor_vbuc1 -tya -eor #{c1} -tay -//FRAGMENT vbuaa=_inc_vbuz1 -lda {z1} -clc -adc #1 -//FRAGMENT vbuz1=vbuxx_plus_vbuc1 -txa -axs #-[{c1}] -stx {z1} -//FRAGMENT vbuaa=vbuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -//FRAGMENT vbuaa=vbuxx_plus_vbuc1 -txa -clc -adc #{c1} -//FRAGMENT vbuxx=vbuz1_plus_vbuc1 -lax {z1} -axs #-[{c1}] -//FRAGMENT vbuyy=vbuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -tay -//FRAGMENT vbuyy=vbuxx_plus_vbuc1 -txa -clc -adc #{c1} -tay -//FRAGMENT vwuz1_lt_vbuxx_then_la1 -lda {z1}+1 -bne !+ -stx $ff -lda {z1} -cmp $ff -bcc {la1} -!: -//FRAGMENT vwuz1_ge_vbuxx_then_la1 -lda {z1}+1 -bne {la1} -stx $ff -lda {z1} -cmp $ff -bcs {la1} -!: -//FRAGMENT vwuz1_ge_vbuyy_then_la1 -lda {z1}+1 -bne {la1} -sty $ff -lda {z1} -cmp $ff -bcs {la1} -!: -//FRAGMENT vbuz1=vbuxx_minus_2 -dex -dex -stx {z1} -//FRAGMENT pbuc1_derefidx_vbuaa=_byte_vwuz1 -tay -lda {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=_byte_vwuz1 -lda {z1} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=_byte_vwuz1 -lda {z1} -sta {c1},y -//FRAGMENT vbuaa=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -//FRAGMENT vbuxx=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -tax -//FRAGMENT vbuyy=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -tay -//FRAGMENT pwuz1_derefidx_vbuc1=vbuxx -txa -ldy #{c1} -sta ({z1}),y -lda #0 -iny -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=vbuyy -tya -ldy #{c1} -sta ({z1}),y -lda #0 -iny -sta ({z1}),y -//FRAGMENT vbuaa=vbuz1_minus_2 -lda {z1} -sec -sbc #2 -//FRAGMENT vbuxx=vbuz1_minus_2 -ldx {z1} -dex -dex -//FRAGMENT vbuyy=vbuz1_minus_2 -ldy {z1} -dey -dey -//FRAGMENT vbuz1=_inc_vbuxx -inx -stx {z1} -//FRAGMENT vbuxx=_inc_vbuz1 -ldx {z1} -inx -//FRAGMENT vbuyy=_inc_vbuz1 -ldy {z1} -iny -//FRAGMENT vwuz1=vwuz1_bxor_vwuz2 -lda {z1} -eor {z2} -sta {z1} -lda {z1}+1 -eor {z2}+1 -sta {z1}+1 -//FRAGMENT pwuz1=pwuc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=_deref_pwuz1_ror_8 -ldy #1 -lda ({z1}),y -sta {z1} -dey -sty {z1}+1 -//FRAGMENT vwuz1=pwuz1_derefidx_vbuc1_ror_8 -ldy #{c1} -iny -lda ({z1}),y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_8 -lda {z1} -sta {z1}+1 -lda #0 -sta {z1} -//FRAGMENT vwuz1=vwuz1_band_vwuc1 -lda {z1} -and #<{c1} -sta {z1} -lda {z1}+1 -and #>{c1} -sta {z1}+1 -//FRAGMENT vbuz1=vbuz2_rol_3 -lda {z2} -asl -asl -asl -sta {z1} -//FRAGMENT pwuc1_derefidx_vbuz1=vbuc2 -lda #{c2} -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT vbuz1_lt_vbuz2_then_la1 -lda {z1} -cmp {z2} -bcc {la1} -//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_pwuc2_derefidx_vbuz1 -ldy {z1} -clc -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_vbuc2 -ldy {z1} -clc -lda {c1},y -adc #{c2} -sta {c1},y -lda {c1}+1,y -adc #0 -sta {c1}+1,y -//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_ror_8 -ldy {z2} -lda #0 -sta {z1}+1 -lda {c1}+1,y -sta {z1} -//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_bxor_vwuc2 -ldy {z1} -lda {c1},y -eor #<{c2} -sta {c1},y -lda {c1}+1,y -eor #>{c2} -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=vwuz2 -ldy {z1} -lda {z2} -sta {c1},y -lda {z2}+1 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=vbuz2 -lda {z2} -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT vbuaa=vbuz1_rol_3 -lda {z1} -asl -asl -asl -//FRAGMENT vbuxx=vbuz1_rol_3 -lda {z1} -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuz1_rol_3 -lda {z1} -asl -asl -asl -tay -//FRAGMENT vbuz1=vbuxx_rol_3 -txa -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuxx_rol_3 -txa -asl -asl -asl -//FRAGMENT vbuxx=vbuxx_rol_3 -txa -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuxx_rol_3 -txa -asl -asl -asl -tay -//FRAGMENT vbuz1=vbuyy_rol_3 -tya -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuyy_rol_3 -tya -asl -asl -asl -//FRAGMENT vbuxx=vbuyy_rol_3 -tya -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuyy_rol_3 -tya -asl -asl -asl -tay -//FRAGMENT pwuc1_derefidx_vbuaa=vbuc2 -tay -lda #{c2} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=vbuc2 -lda #{c2} -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vbuc2 -lda #{c2} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT vbuaa_lt_vbuz1_then_la1 -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1=vbuaa_rol_3 -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuaa_rol_3 -asl -asl -asl -//FRAGMENT vbuxx=vbuaa_rol_3 -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuaa_rol_3 -asl -asl -asl -tay -//FRAGMENT pwuc1_derefidx_vbuaa=pwuc1_derefidx_vbuaa_plus_pwuc2_derefidx_vbuaa -tax -tay -clc -lda {c1},y -adc {c2},x -sta {c1},y -lda {c1}+1,y -adc {c2}+1,x -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_pwuc2_derefidx_vbuxx -txa -tay -txa -sty $ff -ldx $ff -tay -clc -lda {c1},y -adc {c2},x -sta {c1},y -lda {c1}+1,y -adc {c2}+1,x -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_pwuc2_derefidx_vbuyy -clc -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vbuc2 -clc -lda {c1},x -adc #{c2} -sta {c1},x -lda {c1}+1,x -adc #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_vbuc2 -clc -lda {c1},y -adc #{c2} -sta {c1},y -lda {c1}+1,y -adc #0 -sta {c1}+1,y -//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_ror_8 -txa -tay -lda #0 -sta {z1}+1 -lda {c1}+1,y -sta {z1} -//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_ror_8 -lda #0 -sta {z1}+1 -lda {c1}+1,y -sta {z1} -//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_bxor_vwuc2 -txa -tay -lda {c1},y -eor #<{c2} -sta {c1},y -lda {c1}+1,y -eor #>{c2} -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_bxor_vwuc2 -lda {c1},y -eor #<{c2} -sta {c1},y -lda {c1}+1,y -eor #>{c2} -sta {c1}+1,y -//FRAGMENT vbuz1=vbuyy_plus_vbuc1 -tya -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_vbuc1 -tya -clc -adc #{c1} -//FRAGMENT vbuxx=vbuyy_plus_vbuc1 -tya -tax -axs #-[{c1}] -//FRAGMENT vwuz1_lt_vbuyy_then_la1 -lda {z1}+1 -bne !+ -sty $ff -lda {z1} -cmp $ff -bcc {la1} -!: -//FRAGMENT pwuc1_derefidx_vbuxx=vwuz1 -lda {z1} -sta {c1},x -lda {z1}+1 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vwuz1 -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=vwuz1 -tay -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=vbuaa -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=vbuxx -ldy {z1} -txa -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=vbuyy -tya -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=vbuz1 -lda {z1} -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=vbuaa -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=vbuxx -txa -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=vbuyy -tya -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vbuz1 -lda {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuyy=vbuaa -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuyy=vbuxx -txa -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuyy=vbuyy -tya -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT vbuxx_lt_vbuz1_then_la1 -cpx {z1} -bcc {la1} -//FRAGMENT vbuyy_lt_vbuz1_then_la1 -cpy {z1} -bcc {la1} diff --git a/src/main/fragment/cache/fragment-cache-wdc65c02.asm b/src/main/fragment/cache/fragment-cache-wdc65c02.asm index 2d78ed345..9c0a953eb 100644 --- a/src/main/fragment/cache/fragment-cache-wdc65c02.asm +++ b/src/main/fragment/cache/fragment-cache-wdc65c02.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 15355793f5 153557b229 +//KICKC FRAGMENT CACHE 13789539dd 13789557f9 //FRAGMENT vwuz1=vwuc1 lda #<{c1} sta {z1} diff --git a/src/main/fragment/mos6502-selfmod/isr_hardware_all_exit.asm b/src/main/fragment/mos6502-selfmod/isr_hardware_all_exit.asm index 1fdf08deb..f45614254 100644 --- a/src/main/fragment/mos6502-selfmod/isr_hardware_all_exit.asm +++ b/src/main/fragment/mos6502-selfmod/isr_hardware_all_exit.asm @@ -1,4 +1,4 @@ -rega: @clob_a lda #0 @clob_a -regx: @clob_x ldx #0 @clob_x -regy: @clob_y ldy #0 @clob_y +rega: @clob_a @nooptimize lda #0 @clob_a @nooptimize +regx: @clob_x @nooptimize ldx #0 @clob_x @nooptimize +regy: @clob_y @nooptimize ldy #0 @clob_y @nooptimize rti \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/asm/AsmInstruction.java b/src/main/java/dk/camelot64/kickc/asm/AsmInstruction.java index 1a13ec229..edb20b995 100644 --- a/src/main/java/dk/camelot64/kickc/asm/AsmInstruction.java +++ b/src/main/java/dk/camelot64/kickc/asm/AsmInstruction.java @@ -4,9 +4,6 @@ import dk.camelot64.cpufamily6502.CpuAddressingMode; import dk.camelot64.cpufamily6502.CpuOpcode; import dk.camelot64.kickc.model.InternalError; -import java.util.ArrayList; -import java.util.List; - /** A specific assembler instruction line (opcode, addressing mode and specific parameter value) */ public class AsmInstruction extends AsmLine { @@ -19,9 +16,6 @@ public class AsmInstruction extends AsmLine { /** The second ASM opcode parameter. Null if not used. Only used for addressing mode Zeropage Test Relative {@link CpuAddressingMode#REZ} - eg. BBR0 $12,label */ private String operand2; - /** If true the instruction will not be optimized away. */ - private boolean dontOptimize; - public AsmInstruction(CpuOpcode cpuOpcode, String operand1, String operand2) { this.cpuOpcode = cpuOpcode; this.operand1 = operand1; @@ -72,14 +66,6 @@ public class AsmInstruction extends AsmLine { return getAsm(); } - public boolean isDontOptimize() { - return dontOptimize; - } - - public void setDontOptimize(boolean dontOptimize) { - this.dontOptimize = dontOptimize; - } - /*** * Get the operand value that represents a jump target (if the opcode is a jump as defined by {@link CpuOpcode#isJump()} * @return The jump target operand diff --git a/src/main/java/dk/camelot64/kickc/asm/AsmLabel.java b/src/main/java/dk/camelot64/kickc/asm/AsmLabel.java index 2f335e749..ce9fc7a57 100644 --- a/src/main/java/dk/camelot64/kickc/asm/AsmLabel.java +++ b/src/main/java/dk/camelot64/kickc/asm/AsmLabel.java @@ -5,8 +5,6 @@ public class AsmLabel extends AsmLine { private String label; - private boolean dontOptimize; - public AsmLabel(String label) { this.label = label; } @@ -34,14 +32,6 @@ public class AsmLabel extends AsmLine { return label + ":"; } - public boolean isDontOptimize() { - return dontOptimize; - } - - public void setDontOptimize(boolean dontOptimize) { - this.dontOptimize = dontOptimize; - } - @Override public String toString() { return getAsm(); diff --git a/src/main/java/dk/camelot64/kickc/asm/AsmLine.java b/src/main/java/dk/camelot64/kickc/asm/AsmLine.java index b1d5bb9fa..b6919122a 100644 --- a/src/main/java/dk/camelot64/kickc/asm/AsmLine.java +++ b/src/main/java/dk/camelot64/kickc/asm/AsmLine.java @@ -36,4 +36,11 @@ public abstract class AsmLine { return tags; } + /** + * Has the ASM line been marked as don't optimize? + * @return true if the ASM should not be optimized + */ + public boolean isNoOptimize() { + return getTags().has("nooptimize"); + } } diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java index e5b911246..ade4d7039 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java @@ -14,8 +14,10 @@ import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.values.*; import dk.camelot64.kickc.parser.KickCParser; import dk.camelot64.kickc.parser.KickCParserBaseVisitor; +import org.antlr.v4.runtime.tree.TerminalNode; import java.util.ArrayList; +import java.util.List; import java.util.Map; /** ASM Code Fragment with register/variable bindings that can be used for generating ASM code for a specific statement . */ @@ -198,26 +200,24 @@ public class AsmFragmentInstance { this.visit(context); } + private static AsmLine addTags(AsmLine asmLine, List asmTags) { + if(asmTags != null) + for(TerminalNode asmTag : asmTags) { + final String tagName = asmTag.getText().substring(1); + asmLine.getTags().add(tagName); + } + return asmLine; + } + @Override public Object visitAsmLabelName(KickCParser.AsmLabelNameContext ctx) { - final AsmLabel labelLine = new AsmLabel(ctx.ASM_NAME().getText()); - if(ctx.ASM_TAG()!=null) { - final String tagName = ctx.ASM_TAG().getText().substring(1); - labelLine.getTags().add(tagName); - } - asmProgram.addLine(labelLine); + asmProgram.addLine(addTags(new AsmLabel(ctx.ASM_NAME().getText()), ctx.ASM_TAG())); return null; } @Override public Object visitAsmLabelMulti(KickCParser.AsmLabelMultiContext ctx) { - String label = ctx.ASM_MULTI_NAME().getText(); - final AsmLabel labelLine = new AsmLabel(label); - if(ctx.ASM_TAG()!=null) { - final String tagName = ctx.ASM_TAG().getText().substring(1); - labelLine.getTags().add(tagName); - } - asmProgram.addLine(labelLine); + asmProgram.addLine(addTags(new AsmLabel(ctx.ASM_MULTI_NAME().getText()), ctx.ASM_TAG())); return null; } @@ -227,7 +227,7 @@ public class AsmFragmentInstance { for(int i = 1; i < ctx.getChildCount(); i = i + 2) { values.add(ctx.getChild(i).getText()); } - asmProgram.addLine(new AsmDataNumeric(null, AsmDataNumeric.Type.BYTE, values)); + asmProgram.addLine(addTags(new AsmDataNumeric(null, AsmDataNumeric.Type.BYTE, values), ctx.ASM_TAG())); return null; } @@ -240,12 +240,8 @@ public class AsmFragmentInstance { } else { instruction = (AsmInstruction) this.visit(paramModeCtx); } - if(ctx.ASM_TAG()!=null) { - final String tagName = ctx.ASM_TAG().getText().substring(1); - instruction.getTags().add(tagName); - } if(instruction != null) { - asmProgram.addLine(instruction); + asmProgram.addLine(addTags(instruction, ctx.ASM_TAG())); } else { throw new RuntimeException("Error parsing ASM fragment line " + name + ".asm\n - Line: " + ctx.getText()); } @@ -352,7 +348,7 @@ public class AsmFragmentInstance { String operand1 = param1 == null ? null : param1.getParam(); String operand2 = param2 == null ? null : param2.getParam(); if(cpuOpcode == null) { - throw new InternalError("Error in " + name + ".asm line " + instructionCtx.getStart().getLine() + " - Instruction type not supported " + addressingMode.getAsm(mnemonic, operand1, operand2) +" by CPU "+this.fragmentInstance.fragmentTemplate.getTargetCpu().getName()); + throw new InternalError("Error in " + name + ".asm line " + instructionCtx.getStart().getLine() + " - Instruction type not supported " + addressingMode.getAsm(mnemonic, operand1, operand2) + " by CPU " + this.fragmentInstance.fragmentTemplate.getTargetCpu().getName()); } return new AsmInstruction(cpuOpcode, operand1, operand2); } diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 index 41dd2786b..307ca7578 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 @@ -279,16 +279,16 @@ asmLine ; asmLabel - : ASM_NAME ASM_COLON ASM_TAG? #asmLabelName - | ASM_MULTI_NAME ASM_COLON ASM_TAG? #asmLabelMulti + : ASM_NAME ASM_COLON ASM_TAG* #asmLabelName + | ASM_MULTI_NAME ASM_COLON ASM_TAG* #asmLabelMulti ; asmInstruction - : ASM_MNEMONIC (asmParamMode)? ASM_TAG? + : ASM_MNEMONIC (asmParamMode)? ASM_TAG* ; asmBytes - : ASM_BYTE asmExpr ( ASM_COMMA asmExpr)* ASM_TAG? + : ASM_BYTE asmExpr ( ASM_COMMA asmExpr)* ASM_TAG* ; asmParamMode diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.interp b/src/main/java/dk/camelot64/kickc/parser/KickCParser.interp index cfdeea1c5..9a1b9823b 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.interp +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.interp @@ -363,4 +363,4 @@ asmExpr atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 156, 865, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 4, 7, 4, 104, 10, 4, 12, 4, 14, 4, 107, 11, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 123, 10, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 7, 7, 130, 10, 7, 12, 7, 14, 7, 133, 11, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 140, 10, 7, 12, 7, 14, 7, 143, 11, 7, 3, 7, 7, 7, 146, 10, 7, 12, 7, 14, 7, 149, 11, 7, 3, 8, 3, 8, 3, 8, 7, 8, 154, 10, 8, 12, 8, 14, 8, 157, 11, 8, 3, 8, 3, 8, 7, 8, 161, 10, 8, 12, 8, 14, 8, 164, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 7, 9, 170, 10, 9, 12, 9, 14, 9, 173, 11, 9, 3, 9, 3, 9, 5, 9, 177, 10, 9, 3, 9, 3, 9, 7, 9, 181, 10, 9, 12, 9, 14, 9, 184, 11, 9, 3, 9, 3, 9, 5, 9, 188, 10, 9, 3, 10, 7, 10, 191, 10, 10, 12, 10, 14, 10, 194, 11, 10, 3, 10, 3, 10, 7, 10, 198, 10, 10, 12, 10, 14, 10, 201, 11, 10, 3, 11, 3, 11, 7, 11, 205, 10, 11, 12, 11, 14, 11, 208, 11, 11, 3, 12, 3, 12, 5, 12, 212, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 224, 10, 13, 3, 13, 7, 13, 227, 10, 13, 12, 13, 14, 13, 230, 11, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 240, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 247, 10, 14, 3, 14, 3, 14, 3, 14, 5, 14, 252, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 258, 10, 14, 12, 14, 14, 14, 261, 11, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 5, 16, 268, 10, 16, 3, 16, 3, 16, 6, 16, 272, 10, 16, 13, 16, 14, 16, 273, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 5, 19, 286, 10, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 298, 10, 20, 12, 20, 14, 20, 301, 11, 20, 3, 21, 3, 21, 3, 21, 5, 21, 306, 10, 21, 3, 22, 3, 22, 7, 22, 310, 10, 22, 12, 22, 14, 22, 313, 11, 22, 3, 22, 3, 22, 3, 22, 5, 22, 318, 10, 22, 3, 22, 3, 22, 3, 22, 5, 22, 323, 10, 22, 3, 23, 3, 23, 5, 23, 327, 10, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 7, 24, 334, 10, 24, 12, 24, 14, 24, 337, 11, 24, 3, 25, 3, 25, 7, 25, 341, 10, 25, 12, 25, 14, 25, 344, 11, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 350, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 358, 10, 26, 12, 26, 14, 26, 361, 11, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 372, 10, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 383, 10, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 404, 10, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 411, 10, 28, 12, 28, 14, 28, 414, 11, 28, 3, 28, 3, 28, 3, 28, 5, 28, 419, 10, 28, 3, 29, 6, 29, 422, 10, 29, 13, 29, 14, 29, 423, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 431, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 444, 10, 30, 3, 30, 7, 30, 447, 10, 30, 12, 30, 14, 30, 450, 11, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 459, 10, 30, 12, 30, 14, 30, 462, 11, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 473, 10, 30, 12, 30, 14, 30, 476, 11, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 494, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 503, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 511, 10, 30, 3, 31, 6, 31, 514, 10, 31, 13, 31, 14, 31, 515, 3, 31, 3, 31, 3, 31, 5, 31, 521, 10, 31, 5, 31, 523, 10, 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 529, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 534, 10, 33, 3, 33, 3, 33, 5, 33, 538, 10, 33, 3, 33, 3, 33, 7, 33, 542, 10, 33, 12, 33, 14, 33, 545, 11, 33, 5, 33, 547, 10, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 555, 10, 33, 3, 34, 5, 34, 558, 10, 34, 3, 34, 5, 34, 561, 10, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 7, 36, 571, 10, 36, 12, 36, 14, 36, 574, 11, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 585, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 593, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 599, 10, 37, 3, 37, 3, 37, 5, 37, 603, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 622, 10, 37, 12, 37, 14, 37, 625, 11, 37, 3, 37, 5, 37, 628, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 6, 37, 635, 10, 37, 13, 37, 14, 37, 636, 3, 37, 3, 37, 5, 37, 641, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 691, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 701, 10, 37, 12, 37, 14, 37, 704, 11, 37, 3, 38, 3, 38, 3, 38, 7, 38, 709, 10, 38, 12, 38, 14, 38, 712, 11, 38, 3, 39, 3, 39, 5, 39, 716, 10, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 724, 10, 40, 12, 40, 14, 40, 727, 11, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 741, 10, 41, 3, 42, 7, 42, 744, 10, 42, 12, 42, 14, 42, 747, 11, 42, 3, 43, 3, 43, 3, 43, 5, 43, 752, 10, 43, 3, 44, 3, 44, 3, 44, 5, 44, 757, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 762, 10, 44, 5, 44, 764, 10, 44, 3, 45, 3, 45, 5, 45, 768, 10, 45, 3, 45, 5, 45, 771, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 777, 10, 46, 12, 46, 14, 46, 780, 11, 46, 3, 46, 5, 46, 783, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 830, 10, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 846, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 7, 48, 860, 10, 48, 12, 48, 14, 48, 863, 11, 48, 3, 48, 2, 9, 12, 24, 26, 38, 70, 72, 94, 49, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 2, 13, 3, 2, 23, 24, 5, 2, 18, 19, 25, 26, 82, 82, 4, 2, 33, 33, 36, 36, 3, 2, 29, 30, 3, 2, 20, 22, 3, 2, 18, 19, 3, 2, 31, 36, 3, 2, 127, 130, 3, 2, 125, 126, 3, 2, 131, 132, 3, 2, 127, 128, 2, 994, 2, 96, 3, 2, 2, 2, 4, 99, 3, 2, 2, 2, 6, 105, 3, 2, 2, 2, 8, 122, 3, 2, 2, 2, 10, 124, 3, 2, 2, 2, 12, 127, 3, 2, 2, 2, 14, 150, 3, 2, 2, 2, 16, 187, 3, 2, 2, 2, 18, 192, 3, 2, 2, 2, 20, 202, 3, 2, 2, 2, 22, 209, 3, 2, 2, 2, 24, 215, 3, 2, 2, 2, 26, 246, 3, 2, 2, 2, 28, 262, 3, 2, 2, 2, 30, 265, 3, 2, 2, 2, 32, 277, 3, 2, 2, 2, 34, 280, 3, 2, 2, 2, 36, 283, 3, 2, 2, 2, 38, 291, 3, 2, 2, 2, 40, 302, 3, 2, 2, 2, 42, 307, 3, 2, 2, 2, 44, 324, 3, 2, 2, 2, 46, 330, 3, 2, 2, 2, 48, 349, 3, 2, 2, 2, 50, 351, 3, 2, 2, 2, 52, 371, 3, 2, 2, 2, 54, 418, 3, 2, 2, 2, 56, 421, 3, 2, 2, 2, 58, 510, 3, 2, 2, 2, 60, 513, 3, 2, 2, 2, 62, 524, 3, 2, 2, 2, 64, 554, 3, 2, 2, 2, 66, 560, 3, 2, 2, 2, 68, 562, 3, 2, 2, 2, 70, 564, 3, 2, 2, 2, 72, 640, 3, 2, 2, 2, 74, 705, 3, 2, 2, 2, 76, 713, 3, 2, 2, 2, 78, 719, 3, 2, 2, 2, 80, 740, 3, 2, 2, 2, 82, 745, 3, 2, 2, 2, 84, 751, 3, 2, 2, 2, 86, 763, 3, 2, 2, 2, 88, 765, 3, 2, 2, 2, 90, 772, 3, 2, 2, 2, 92, 829, 3, 2, 2, 2, 94, 845, 3, 2, 2, 2, 96, 97, 5, 6, 4, 2, 97, 98, 7, 2, 2, 3, 98, 3, 3, 2, 2, 2, 99, 100, 5, 82, 42, 2, 100, 101, 7, 2, 2, 3, 101, 5, 3, 2, 2, 2, 102, 104, 5, 8, 5, 2, 103, 102, 3, 2, 2, 2, 104, 107, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 7, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 108, 109, 5, 10, 6, 2, 109, 110, 7, 10, 2, 2, 110, 123, 3, 2, 2, 2, 111, 112, 5, 30, 16, 2, 112, 113, 7, 10, 2, 2, 113, 123, 3, 2, 2, 2, 114, 115, 5, 36, 19, 2, 115, 116, 7, 10, 2, 2, 116, 123, 3, 2, 2, 2, 117, 123, 5, 42, 22, 2, 118, 123, 5, 50, 26, 2, 119, 120, 5, 14, 8, 2, 120, 121, 7, 10, 2, 2, 121, 123, 3, 2, 2, 2, 122, 108, 3, 2, 2, 2, 122, 111, 3, 2, 2, 2, 122, 114, 3, 2, 2, 2, 122, 117, 3, 2, 2, 2, 122, 118, 3, 2, 2, 2, 122, 119, 3, 2, 2, 2, 123, 9, 3, 2, 2, 2, 124, 125, 5, 18, 10, 2, 125, 126, 5, 12, 7, 2, 126, 11, 3, 2, 2, 2, 127, 131, 8, 7, 1, 2, 128, 130, 5, 20, 11, 2, 129, 128, 3, 2, 2, 2, 130, 133, 3, 2, 2, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 134, 3, 2, 2, 2, 133, 131, 3, 2, 2, 2, 134, 135, 5, 16, 9, 2, 135, 147, 3, 2, 2, 2, 136, 137, 12, 3, 2, 2, 137, 141, 7, 12, 2, 2, 138, 140, 5, 20, 11, 2, 139, 138, 3, 2, 2, 2, 140, 143, 3, 2, 2, 2, 141, 139, 3, 2, 2, 2, 141, 142, 3, 2, 2, 2, 142, 144, 3, 2, 2, 2, 143, 141, 3, 2, 2, 2, 144, 146, 5, 16, 9, 2, 145, 136, 3, 2, 2, 2, 146, 149, 3, 2, 2, 2, 147, 145, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 13, 3, 2, 2, 2, 149, 147, 3, 2, 2, 2, 150, 151, 7, 41, 2, 2, 151, 155, 5, 18, 10, 2, 152, 154, 5, 20, 11, 2, 153, 152, 3, 2, 2, 2, 154, 157, 3, 2, 2, 2, 155, 153, 3, 2, 2, 2, 155, 156, 3, 2, 2, 2, 156, 158, 3, 2, 2, 2, 157, 155, 3, 2, 2, 2, 158, 162, 7, 109, 2, 2, 159, 161, 5, 22, 12, 2, 160, 159, 3, 2, 2, 2, 161, 164, 3, 2, 2, 2, 162, 160, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, 165, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 165, 166, 8, 8, 1, 2, 166, 15, 3, 2, 2, 2, 167, 171, 7, 109, 2, 2, 168, 170, 5, 22, 12, 2, 169, 168, 3, 2, 2, 2, 170, 173, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 176, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 174, 175, 7, 39, 2, 2, 175, 177, 5, 72, 37, 2, 176, 174, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 188, 3, 2, 2, 2, 178, 182, 7, 109, 2, 2, 179, 181, 5, 22, 12, 2, 180, 179, 3, 2, 2, 2, 181, 184, 3, 2, 2, 2, 182, 180, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 185, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 185, 186, 7, 39, 2, 2, 186, 188, 5, 76, 39, 2, 187, 167, 3, 2, 2, 2, 187, 178, 3, 2, 2, 2, 188, 17, 3, 2, 2, 2, 189, 191, 5, 54, 28, 2, 190, 189, 3, 2, 2, 2, 191, 194, 3, 2, 2, 2, 192, 190, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 195, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 195, 199, 5, 26, 14, 2, 196, 198, 5, 54, 28, 2, 197, 196, 3, 2, 2, 2, 198, 201, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 19, 3, 2, 2, 2, 201, 199, 3, 2, 2, 2, 202, 206, 7, 20, 2, 2, 203, 205, 5, 54, 28, 2, 204, 203, 3, 2, 2, 2, 205, 208, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 206, 207, 3, 2, 2, 2, 207, 21, 3, 2, 2, 2, 208, 206, 3, 2, 2, 2, 209, 211, 7, 6, 2, 2, 210, 212, 5, 72, 37, 2, 211, 210, 3, 2, 2, 2, 211, 212, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 214, 7, 7, 2, 2, 214, 23, 3, 2, 2, 2, 215, 216, 8, 13, 1, 2, 216, 217, 5, 26, 14, 2, 217, 228, 3, 2, 2, 2, 218, 219, 12, 4, 2, 2, 219, 227, 7, 20, 2, 2, 220, 221, 12, 3, 2, 2, 221, 223, 7, 6, 2, 2, 222, 224, 5, 72, 37, 2, 223, 222, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 227, 7, 7, 2, 2, 226, 218, 3, 2, 2, 2, 226, 220, 3, 2, 2, 2, 227, 230, 3, 2, 2, 2, 228, 226, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 25, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 231, 232, 8, 14, 1, 2, 232, 233, 7, 8, 2, 2, 233, 234, 5, 26, 14, 2, 234, 235, 7, 9, 2, 2, 235, 247, 3, 2, 2, 2, 236, 247, 7, 84, 2, 2, 237, 239, 7, 83, 2, 2, 238, 240, 7, 84, 2, 2, 239, 238, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 247, 3, 2, 2, 2, 241, 247, 5, 30, 16, 2, 242, 247, 5, 28, 15, 2, 243, 247, 5, 36, 19, 2, 244, 247, 5, 34, 18, 2, 245, 247, 7, 3, 2, 2, 246, 231, 3, 2, 2, 2, 246, 236, 3, 2, 2, 2, 246, 237, 3, 2, 2, 2, 246, 241, 3, 2, 2, 2, 246, 242, 3, 2, 2, 2, 246, 243, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 246, 245, 3, 2, 2, 2, 247, 259, 3, 2, 2, 2, 248, 249, 12, 9, 2, 2, 249, 251, 7, 6, 2, 2, 250, 252, 5, 72, 37, 2, 251, 250, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 258, 7, 7, 2, 2, 254, 255, 12, 8, 2, 2, 255, 256, 7, 8, 2, 2, 256, 258, 7, 9, 2, 2, 257, 248, 3, 2, 2, 2, 257, 254, 3, 2, 2, 2, 258, 261, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 27, 3, 2, 2, 2, 261, 259, 3, 2, 2, 2, 262, 263, 7, 71, 2, 2, 263, 264, 7, 109, 2, 2, 264, 29, 3, 2, 2, 2, 265, 267, 7, 71, 2, 2, 266, 268, 7, 109, 2, 2, 267, 266, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 271, 7, 4, 2, 2, 270, 272, 5, 32, 17, 2, 271, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 271, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 7, 5, 2, 2, 276, 31, 3, 2, 2, 2, 277, 278, 5, 10, 6, 2, 278, 279, 7, 10, 2, 2, 279, 33, 3, 2, 2, 2, 280, 281, 7, 72, 2, 2, 281, 282, 7, 109, 2, 2, 282, 35, 3, 2, 2, 2, 283, 285, 7, 72, 2, 2, 284, 286, 7, 109, 2, 2, 285, 284, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 288, 7, 4, 2, 2, 288, 289, 5, 38, 20, 2, 289, 290, 7, 5, 2, 2, 290, 37, 3, 2, 2, 2, 291, 292, 8, 20, 1, 2, 292, 293, 5, 40, 21, 2, 293, 299, 3, 2, 2, 2, 294, 295, 12, 3, 2, 2, 295, 296, 7, 12, 2, 2, 296, 298, 5, 40, 21, 2, 297, 294, 3, 2, 2, 2, 298, 301, 3, 2, 2, 2, 299, 297, 3, 2, 2, 2, 299, 300, 3, 2, 2, 2, 300, 39, 3, 2, 2, 2, 301, 299, 3, 2, 2, 2, 302, 305, 7, 109, 2, 2, 303, 304, 7, 39, 2, 2, 304, 306, 5, 72, 37, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 41, 3, 2, 2, 2, 307, 311, 5, 18, 10, 2, 308, 310, 5, 20, 11, 2, 309, 308, 3, 2, 2, 2, 310, 313, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 314, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 314, 315, 7, 109, 2, 2, 315, 317, 7, 8, 2, 2, 316, 318, 5, 46, 24, 2, 317, 316, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 322, 7, 9, 2, 2, 320, 323, 5, 44, 23, 2, 321, 323, 7, 10, 2, 2, 322, 320, 3, 2, 2, 2, 322, 321, 3, 2, 2, 2, 323, 43, 3, 2, 2, 2, 324, 326, 7, 4, 2, 2, 325, 327, 5, 56, 29, 2, 326, 325, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 329, 7, 5, 2, 2, 329, 45, 3, 2, 2, 2, 330, 335, 5, 48, 25, 2, 331, 332, 7, 12, 2, 2, 332, 334, 5, 48, 25, 2, 333, 331, 3, 2, 2, 2, 334, 337, 3, 2, 2, 2, 335, 333, 3, 2, 2, 2, 335, 336, 3, 2, 2, 2, 336, 47, 3, 2, 2, 2, 337, 335, 3, 2, 2, 2, 338, 342, 5, 18, 10, 2, 339, 341, 5, 20, 11, 2, 340, 339, 3, 2, 2, 2, 341, 344, 3, 2, 2, 2, 342, 340, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 345, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 345, 346, 7, 109, 2, 2, 346, 350, 3, 2, 2, 2, 347, 350, 7, 84, 2, 2, 348, 350, 7, 14, 2, 2, 349, 338, 3, 2, 2, 2, 349, 347, 3, 2, 2, 2, 349, 348, 3, 2, 2, 2, 350, 49, 3, 2, 2, 2, 351, 352, 7, 89, 2, 2, 352, 353, 7, 109, 2, 2, 353, 354, 7, 8, 2, 2, 354, 359, 5, 52, 27, 2, 355, 356, 7, 12, 2, 2, 356, 358, 5, 52, 27, 2, 357, 355, 3, 2, 2, 2, 358, 361, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 362, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 362, 363, 7, 9, 2, 2, 363, 51, 3, 2, 2, 2, 364, 372, 7, 100, 2, 2, 365, 366, 7, 100, 2, 2, 366, 367, 7, 13, 2, 2, 367, 372, 7, 100, 2, 2, 368, 372, 7, 109, 2, 2, 369, 372, 7, 110, 2, 2, 370, 372, 7, 58, 2, 2, 371, 364, 3, 2, 2, 2, 371, 365, 3, 2, 2, 2, 371, 368, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 370, 3, 2, 2, 2, 372, 53, 3, 2, 2, 2, 373, 419, 7, 42, 2, 2, 374, 375, 7, 45, 2, 2, 375, 376, 7, 8, 2, 2, 376, 377, 7, 100, 2, 2, 377, 419, 7, 9, 2, 2, 378, 382, 7, 50, 2, 2, 379, 380, 7, 8, 2, 2, 380, 381, 7, 109, 2, 2, 381, 383, 7, 9, 2, 2, 382, 379, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 419, 3, 2, 2, 2, 384, 419, 7, 53, 2, 2, 385, 419, 7, 54, 2, 2, 386, 387, 7, 52, 2, 2, 387, 388, 7, 8, 2, 2, 388, 389, 5, 72, 37, 2, 389, 390, 7, 9, 2, 2, 390, 419, 3, 2, 2, 2, 391, 419, 7, 47, 2, 2, 392, 419, 7, 48, 2, 2, 393, 419, 7, 55, 2, 2, 394, 419, 7, 56, 2, 2, 395, 419, 7, 43, 2, 2, 396, 419, 7, 44, 2, 2, 397, 419, 7, 46, 2, 2, 398, 419, 7, 57, 2, 2, 399, 403, 7, 49, 2, 2, 400, 401, 7, 8, 2, 2, 401, 402, 7, 109, 2, 2, 402, 404, 7, 9, 2, 2, 403, 400, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 419, 3, 2, 2, 2, 405, 406, 7, 51, 2, 2, 406, 407, 7, 8, 2, 2, 407, 412, 5, 52, 27, 2, 408, 409, 7, 12, 2, 2, 409, 411, 5, 52, 27, 2, 410, 408, 3, 2, 2, 2, 411, 414, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 415, 3, 2, 2, 2, 414, 412, 3, 2, 2, 2, 415, 416, 7, 9, 2, 2, 416, 419, 3, 2, 2, 2, 417, 419, 7, 58, 2, 2, 418, 373, 3, 2, 2, 2, 418, 374, 3, 2, 2, 2, 418, 378, 3, 2, 2, 2, 418, 384, 3, 2, 2, 2, 418, 385, 3, 2, 2, 2, 418, 386, 3, 2, 2, 2, 418, 391, 3, 2, 2, 2, 418, 392, 3, 2, 2, 2, 418, 393, 3, 2, 2, 2, 418, 394, 3, 2, 2, 2, 418, 395, 3, 2, 2, 2, 418, 396, 3, 2, 2, 2, 418, 397, 3, 2, 2, 2, 418, 398, 3, 2, 2, 2, 418, 399, 3, 2, 2, 2, 418, 405, 3, 2, 2, 2, 418, 417, 3, 2, 2, 2, 419, 55, 3, 2, 2, 2, 420, 422, 5, 58, 30, 2, 421, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 57, 3, 2, 2, 2, 425, 426, 5, 10, 6, 2, 426, 427, 7, 10, 2, 2, 427, 511, 3, 2, 2, 2, 428, 430, 7, 4, 2, 2, 429, 431, 5, 56, 29, 2, 430, 429, 3, 2, 2, 2, 430, 431, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 511, 7, 5, 2, 2, 433, 434, 5, 70, 36, 2, 434, 435, 7, 10, 2, 2, 435, 511, 3, 2, 2, 2, 436, 437, 7, 59, 2, 2, 437, 438, 7, 8, 2, 2, 438, 439, 5, 70, 36, 2, 439, 440, 7, 9, 2, 2, 440, 443, 5, 58, 30, 2, 441, 442, 7, 60, 2, 2, 442, 444, 5, 58, 30, 2, 443, 441, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 511, 3, 2, 2, 2, 445, 447, 5, 54, 28, 2, 446, 445, 3, 2, 2, 2, 447, 450, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 451, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 451, 452, 7, 61, 2, 2, 452, 453, 7, 8, 2, 2, 453, 454, 5, 70, 36, 2, 454, 455, 7, 9, 2, 2, 455, 456, 5, 58, 30, 2, 456, 511, 3, 2, 2, 2, 457, 459, 5, 54, 28, 2, 458, 457, 3, 2, 2, 2, 459, 462, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 460, 461, 3, 2, 2, 2, 461, 463, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 463, 464, 7, 62, 2, 2, 464, 465, 5, 58, 30, 2, 465, 466, 7, 61, 2, 2, 466, 467, 7, 8, 2, 2, 467, 468, 5, 70, 36, 2, 468, 469, 7, 9, 2, 2, 469, 470, 7, 10, 2, 2, 470, 511, 3, 2, 2, 2, 471, 473, 5, 54, 28, 2, 472, 471, 3, 2, 2, 2, 473, 476, 3, 2, 2, 2, 474, 472, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 477, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 477, 478, 7, 63, 2, 2, 478, 479, 7, 8, 2, 2, 479, 480, 5, 64, 33, 2, 480, 481, 7, 9, 2, 2, 481, 482, 5, 58, 30, 2, 482, 511, 3, 2, 2, 2, 483, 484, 7, 64, 2, 2, 484, 485, 7, 8, 2, 2, 485, 486, 5, 70, 36, 2, 486, 487, 7, 9, 2, 2, 487, 488, 7, 4, 2, 2, 488, 489, 5, 60, 31, 2, 489, 490, 7, 5, 2, 2, 490, 511, 3, 2, 2, 2, 491, 493, 7, 65, 2, 2, 492, 494, 5, 70, 36, 2, 493, 492, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 511, 7, 10, 2, 2, 496, 497, 7, 66, 2, 2, 497, 511, 7, 10, 2, 2, 498, 499, 7, 67, 2, 2, 499, 511, 7, 10, 2, 2, 500, 502, 7, 68, 2, 2, 501, 503, 5, 78, 40, 2, 502, 501, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 504, 3, 2, 2, 2, 504, 505, 7, 4, 2, 2, 505, 506, 5, 82, 42, 2, 506, 507, 7, 134, 2, 2, 507, 511, 3, 2, 2, 2, 508, 511, 5, 76, 39, 2, 509, 511, 7, 10, 2, 2, 510, 425, 3, 2, 2, 2, 510, 428, 3, 2, 2, 2, 510, 433, 3, 2, 2, 2, 510, 436, 3, 2, 2, 2, 510, 448, 3, 2, 2, 2, 510, 460, 3, 2, 2, 2, 510, 474, 3, 2, 2, 2, 510, 483, 3, 2, 2, 2, 510, 491, 3, 2, 2, 2, 510, 496, 3, 2, 2, 2, 510, 498, 3, 2, 2, 2, 510, 500, 3, 2, 2, 2, 510, 508, 3, 2, 2, 2, 510, 509, 3, 2, 2, 2, 511, 59, 3, 2, 2, 2, 512, 514, 5, 62, 32, 2, 513, 512, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 513, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 522, 3, 2, 2, 2, 517, 518, 7, 69, 2, 2, 518, 520, 7, 11, 2, 2, 519, 521, 5, 56, 29, 2, 520, 519, 3, 2, 2, 2, 520, 521, 3, 2, 2, 2, 521, 523, 3, 2, 2, 2, 522, 517, 3, 2, 2, 2, 522, 523, 3, 2, 2, 2, 523, 61, 3, 2, 2, 2, 524, 525, 7, 70, 2, 2, 525, 526, 5, 72, 37, 2, 526, 528, 7, 11, 2, 2, 527, 529, 5, 56, 29, 2, 528, 527, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 63, 3, 2, 2, 2, 530, 531, 5, 66, 34, 2, 531, 533, 7, 10, 2, 2, 532, 534, 5, 68, 35, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 537, 7, 10, 2, 2, 536, 538, 5, 70, 36, 2, 537, 536, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 555, 3, 2, 2, 2, 539, 543, 5, 18, 10, 2, 540, 542, 5, 20, 11, 2, 541, 540, 3, 2, 2, 2, 542, 545, 3, 2, 2, 2, 543, 541, 3, 2, 2, 2, 543, 544, 3, 2, 2, 2, 544, 547, 3, 2, 2, 2, 545, 543, 3, 2, 2, 2, 546, 539, 3, 2, 2, 2, 546, 547, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 549, 7, 109, 2, 2, 549, 550, 7, 11, 2, 2, 550, 551, 5, 72, 37, 2, 551, 552, 7, 13, 2, 2, 552, 553, 5, 72, 37, 2, 553, 555, 3, 2, 2, 2, 554, 530, 3, 2, 2, 2, 554, 546, 3, 2, 2, 2, 555, 65, 3, 2, 2, 2, 556, 558, 5, 10, 6, 2, 557, 556, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 561, 3, 2, 2, 2, 559, 561, 5, 70, 36, 2, 560, 557, 3, 2, 2, 2, 560, 559, 3, 2, 2, 2, 561, 67, 3, 2, 2, 2, 562, 563, 5, 70, 36, 2, 563, 69, 3, 2, 2, 2, 564, 565, 8, 36, 1, 2, 565, 566, 5, 72, 37, 2, 566, 572, 3, 2, 2, 2, 567, 568, 12, 3, 2, 2, 568, 569, 7, 12, 2, 2, 569, 571, 5, 72, 37, 2, 570, 567, 3, 2, 2, 2, 571, 574, 3, 2, 2, 2, 572, 570, 3, 2, 2, 2, 572, 573, 3, 2, 2, 2, 573, 71, 3, 2, 2, 2, 574, 572, 3, 2, 2, 2, 575, 576, 8, 37, 1, 2, 576, 577, 7, 8, 2, 2, 577, 578, 5, 70, 36, 2, 578, 579, 7, 9, 2, 2, 579, 641, 3, 2, 2, 2, 580, 581, 7, 73, 2, 2, 581, 584, 7, 8, 2, 2, 582, 585, 5, 72, 37, 2, 583, 585, 5, 24, 13, 2, 584, 582, 3, 2, 2, 2, 584, 583, 3, 2, 2, 2, 585, 586, 3, 2, 2, 2, 586, 587, 7, 9, 2, 2, 587, 641, 3, 2, 2, 2, 588, 589, 7, 74, 2, 2, 589, 592, 7, 8, 2, 2, 590, 593, 5, 72, 37, 2, 591, 593, 5, 24, 13, 2, 592, 590, 3, 2, 2, 2, 592, 591, 3, 2, 2, 2, 593, 594, 3, 2, 2, 2, 594, 595, 7, 9, 2, 2, 595, 641, 3, 2, 2, 2, 596, 598, 7, 75, 2, 2, 597, 599, 7, 8, 2, 2, 598, 597, 3, 2, 2, 2, 598, 599, 3, 2, 2, 2, 599, 600, 3, 2, 2, 2, 600, 602, 7, 109, 2, 2, 601, 603, 7, 9, 2, 2, 602, 601, 3, 2, 2, 2, 602, 603, 3, 2, 2, 2, 603, 641, 3, 2, 2, 2, 604, 605, 7, 8, 2, 2, 605, 606, 5, 24, 13, 2, 606, 607, 7, 9, 2, 2, 607, 608, 5, 72, 37, 26, 608, 641, 3, 2, 2, 2, 609, 610, 9, 2, 2, 2, 610, 641, 5, 72, 37, 25, 611, 612, 7, 20, 2, 2, 612, 641, 5, 72, 37, 23, 613, 614, 9, 3, 2, 2, 614, 641, 5, 72, 37, 22, 615, 616, 9, 4, 2, 2, 616, 641, 5, 72, 37, 18, 617, 618, 7, 4, 2, 2, 618, 623, 5, 72, 37, 2, 619, 620, 7, 12, 2, 2, 620, 622, 5, 72, 37, 2, 621, 619, 3, 2, 2, 2, 622, 625, 3, 2, 2, 2, 623, 621, 3, 2, 2, 2, 623, 624, 3, 2, 2, 2, 624, 627, 3, 2, 2, 2, 625, 623, 3, 2, 2, 2, 626, 628, 7, 12, 2, 2, 627, 626, 3, 2, 2, 2, 627, 628, 3, 2, 2, 2, 628, 629, 3, 2, 2, 2, 629, 630, 7, 5, 2, 2, 630, 641, 3, 2, 2, 2, 631, 641, 7, 109, 2, 2, 632, 641, 7, 100, 2, 2, 633, 635, 7, 110, 2, 2, 634, 633, 3, 2, 2, 2, 635, 636, 3, 2, 2, 2, 636, 634, 3, 2, 2, 2, 636, 637, 3, 2, 2, 2, 637, 641, 3, 2, 2, 2, 638, 641, 7, 111, 2, 2, 639, 641, 7, 85, 2, 2, 640, 575, 3, 2, 2, 2, 640, 580, 3, 2, 2, 2, 640, 588, 3, 2, 2, 2, 640, 596, 3, 2, 2, 2, 640, 604, 3, 2, 2, 2, 640, 609, 3, 2, 2, 2, 640, 611, 3, 2, 2, 2, 640, 613, 3, 2, 2, 2, 640, 615, 3, 2, 2, 2, 640, 617, 3, 2, 2, 2, 640, 631, 3, 2, 2, 2, 640, 632, 3, 2, 2, 2, 640, 634, 3, 2, 2, 2, 640, 638, 3, 2, 2, 2, 640, 639, 3, 2, 2, 2, 641, 702, 3, 2, 2, 2, 642, 643, 12, 21, 2, 2, 643, 644, 9, 5, 2, 2, 644, 701, 5, 72, 37, 22, 645, 646, 12, 20, 2, 2, 646, 647, 9, 6, 2, 2, 647, 701, 5, 72, 37, 21, 648, 649, 12, 19, 2, 2, 649, 650, 9, 7, 2, 2, 650, 701, 5, 72, 37, 20, 651, 652, 12, 17, 2, 2, 652, 653, 9, 8, 2, 2, 653, 701, 5, 72, 37, 18, 654, 655, 12, 16, 2, 2, 655, 656, 7, 25, 2, 2, 656, 701, 5, 72, 37, 17, 657, 658, 12, 15, 2, 2, 658, 659, 7, 27, 2, 2, 659, 701, 5, 72, 37, 16, 660, 661, 12, 14, 2, 2, 661, 662, 7, 28, 2, 2, 662, 701, 5, 72, 37, 15, 663, 664, 12, 13, 2, 2, 664, 665, 7, 37, 2, 2, 665, 701, 5, 72, 37, 14, 666, 667, 12, 12, 2, 2, 667, 668, 7, 38, 2, 2, 668, 701, 5, 72, 37, 13, 669, 670, 12, 11, 2, 2, 670, 671, 7, 15, 2, 2, 671, 672, 5, 72, 37, 2, 672, 673, 7, 11, 2, 2, 673, 674, 5, 72, 37, 12, 674, 701, 3, 2, 2, 2, 675, 676, 12, 10, 2, 2, 676, 677, 7, 39, 2, 2, 677, 701, 5, 72, 37, 10, 678, 679, 12, 9, 2, 2, 679, 680, 7, 40, 2, 2, 680, 701, 5, 72, 37, 9, 681, 682, 12, 33, 2, 2, 682, 683, 7, 16, 2, 2, 683, 701, 7, 109, 2, 2, 684, 685, 12, 32, 2, 2, 685, 686, 7, 17, 2, 2, 686, 701, 7, 109, 2, 2, 687, 688, 12, 31, 2, 2, 688, 690, 7, 8, 2, 2, 689, 691, 5, 74, 38, 2, 690, 689, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 692, 3, 2, 2, 2, 692, 701, 7, 9, 2, 2, 693, 694, 12, 27, 2, 2, 694, 695, 7, 6, 2, 2, 695, 696, 5, 70, 36, 2, 696, 697, 7, 7, 2, 2, 697, 701, 3, 2, 2, 2, 698, 699, 12, 24, 2, 2, 699, 701, 9, 2, 2, 2, 700, 642, 3, 2, 2, 2, 700, 645, 3, 2, 2, 2, 700, 648, 3, 2, 2, 2, 700, 651, 3, 2, 2, 2, 700, 654, 3, 2, 2, 2, 700, 657, 3, 2, 2, 2, 700, 660, 3, 2, 2, 2, 700, 663, 3, 2, 2, 2, 700, 666, 3, 2, 2, 2, 700, 669, 3, 2, 2, 2, 700, 675, 3, 2, 2, 2, 700, 678, 3, 2, 2, 2, 700, 681, 3, 2, 2, 2, 700, 684, 3, 2, 2, 2, 700, 687, 3, 2, 2, 2, 700, 693, 3, 2, 2, 2, 700, 698, 3, 2, 2, 2, 701, 704, 3, 2, 2, 2, 702, 700, 3, 2, 2, 2, 702, 703, 3, 2, 2, 2, 703, 73, 3, 2, 2, 2, 704, 702, 3, 2, 2, 2, 705, 710, 5, 72, 37, 2, 706, 707, 7, 12, 2, 2, 707, 709, 5, 72, 37, 2, 708, 706, 3, 2, 2, 2, 709, 712, 3, 2, 2, 2, 710, 708, 3, 2, 2, 2, 710, 711, 3, 2, 2, 2, 711, 75, 3, 2, 2, 2, 712, 710, 3, 2, 2, 2, 713, 715, 7, 76, 2, 2, 714, 716, 5, 78, 40, 2, 715, 714, 3, 2, 2, 2, 715, 716, 3, 2, 2, 2, 716, 717, 3, 2, 2, 2, 717, 718, 7, 86, 2, 2, 718, 77, 3, 2, 2, 2, 719, 720, 7, 8, 2, 2, 720, 725, 5, 80, 41, 2, 721, 722, 7, 12, 2, 2, 722, 724, 5, 80, 41, 2, 723, 721, 3, 2, 2, 2, 724, 727, 3, 2, 2, 2, 725, 723, 3, 2, 2, 2, 725, 726, 3, 2, 2, 2, 726, 728, 3, 2, 2, 2, 727, 725, 3, 2, 2, 2, 728, 729, 7, 9, 2, 2, 729, 79, 3, 2, 2, 2, 730, 731, 7, 77, 2, 2, 731, 741, 7, 110, 2, 2, 732, 733, 7, 78, 2, 2, 733, 741, 7, 109, 2, 2, 734, 735, 7, 79, 2, 2, 735, 741, 7, 110, 2, 2, 736, 737, 7, 80, 2, 2, 737, 741, 5, 72, 37, 2, 738, 739, 7, 81, 2, 2, 739, 741, 5, 72, 37, 2, 740, 730, 3, 2, 2, 2, 740, 732, 3, 2, 2, 2, 740, 734, 3, 2, 2, 2, 740, 736, 3, 2, 2, 2, 740, 738, 3, 2, 2, 2, 741, 81, 3, 2, 2, 2, 742, 744, 5, 84, 43, 2, 743, 742, 3, 2, 2, 2, 744, 747, 3, 2, 2, 2, 745, 743, 3, 2, 2, 2, 745, 746, 3, 2, 2, 2, 746, 83, 3, 2, 2, 2, 747, 745, 3, 2, 2, 2, 748, 752, 5, 86, 44, 2, 749, 752, 5, 88, 45, 2, 750, 752, 5, 90, 46, 2, 751, 748, 3, 2, 2, 2, 751, 749, 3, 2, 2, 2, 751, 750, 3, 2, 2, 2, 752, 85, 3, 2, 2, 2, 753, 754, 7, 147, 2, 2, 754, 756, 7, 118, 2, 2, 755, 757, 7, 148, 2, 2, 756, 755, 3, 2, 2, 2, 756, 757, 3, 2, 2, 2, 757, 764, 3, 2, 2, 2, 758, 759, 7, 146, 2, 2, 759, 761, 7, 118, 2, 2, 760, 762, 7, 148, 2, 2, 761, 760, 3, 2, 2, 2, 761, 762, 3, 2, 2, 2, 762, 764, 3, 2, 2, 2, 763, 753, 3, 2, 2, 2, 763, 758, 3, 2, 2, 2, 764, 87, 3, 2, 2, 2, 765, 767, 7, 116, 2, 2, 766, 768, 5, 92, 47, 2, 767, 766, 3, 2, 2, 2, 767, 768, 3, 2, 2, 2, 768, 770, 3, 2, 2, 2, 769, 771, 7, 148, 2, 2, 770, 769, 3, 2, 2, 2, 770, 771, 3, 2, 2, 2, 771, 89, 3, 2, 2, 2, 772, 773, 7, 115, 2, 2, 773, 778, 5, 94, 48, 2, 774, 775, 7, 119, 2, 2, 775, 777, 5, 94, 48, 2, 776, 774, 3, 2, 2, 2, 777, 780, 3, 2, 2, 2, 778, 776, 3, 2, 2, 2, 778, 779, 3, 2, 2, 2, 779, 782, 3, 2, 2, 2, 780, 778, 3, 2, 2, 2, 781, 783, 7, 148, 2, 2, 782, 781, 3, 2, 2, 2, 782, 783, 3, 2, 2, 2, 783, 91, 3, 2, 2, 2, 784, 830, 5, 94, 48, 2, 785, 786, 7, 117, 2, 2, 786, 830, 5, 94, 48, 2, 787, 788, 5, 94, 48, 2, 788, 789, 7, 119, 2, 2, 789, 790, 5, 94, 48, 2, 790, 830, 3, 2, 2, 2, 791, 792, 7, 120, 2, 2, 792, 793, 5, 94, 48, 2, 793, 794, 7, 121, 2, 2, 794, 795, 7, 119, 2, 2, 795, 796, 7, 147, 2, 2, 796, 830, 3, 2, 2, 2, 797, 798, 7, 120, 2, 2, 798, 799, 7, 120, 2, 2, 799, 800, 5, 94, 48, 2, 800, 801, 7, 121, 2, 2, 801, 802, 7, 121, 2, 2, 802, 803, 7, 119, 2, 2, 803, 804, 7, 147, 2, 2, 804, 830, 3, 2, 2, 2, 805, 806, 7, 120, 2, 2, 806, 807, 5, 94, 48, 2, 807, 808, 7, 119, 2, 2, 808, 809, 7, 147, 2, 2, 809, 810, 7, 121, 2, 2, 810, 811, 7, 119, 2, 2, 811, 812, 7, 147, 2, 2, 812, 830, 3, 2, 2, 2, 813, 814, 7, 120, 2, 2, 814, 815, 5, 94, 48, 2, 815, 816, 7, 119, 2, 2, 816, 817, 7, 147, 2, 2, 817, 818, 7, 121, 2, 2, 818, 830, 3, 2, 2, 2, 819, 820, 7, 120, 2, 2, 820, 821, 5, 94, 48, 2, 821, 822, 7, 121, 2, 2, 822, 830, 3, 2, 2, 2, 823, 824, 7, 120, 2, 2, 824, 825, 7, 120, 2, 2, 825, 826, 5, 94, 48, 2, 826, 827, 7, 121, 2, 2, 827, 828, 7, 121, 2, 2, 828, 830, 3, 2, 2, 2, 829, 784, 3, 2, 2, 2, 829, 785, 3, 2, 2, 2, 829, 787, 3, 2, 2, 2, 829, 791, 3, 2, 2, 2, 829, 797, 3, 2, 2, 2, 829, 805, 3, 2, 2, 2, 829, 813, 3, 2, 2, 2, 829, 819, 3, 2, 2, 2, 829, 823, 3, 2, 2, 2, 830, 93, 3, 2, 2, 2, 831, 832, 8, 48, 1, 2, 832, 833, 7, 122, 2, 2, 833, 834, 5, 94, 48, 2, 834, 835, 7, 123, 2, 2, 835, 846, 3, 2, 2, 2, 836, 837, 9, 9, 2, 2, 837, 846, 5, 94, 48, 10, 838, 846, 7, 147, 2, 2, 839, 846, 7, 145, 2, 2, 840, 841, 7, 133, 2, 2, 841, 842, 7, 147, 2, 2, 842, 846, 7, 134, 2, 2, 843, 846, 7, 135, 2, 2, 844, 846, 7, 144, 2, 2, 845, 831, 3, 2, 2, 2, 845, 836, 3, 2, 2, 2, 845, 838, 3, 2, 2, 2, 845, 839, 3, 2, 2, 2, 845, 840, 3, 2, 2, 2, 845, 843, 3, 2, 2, 2, 845, 844, 3, 2, 2, 2, 846, 861, 3, 2, 2, 2, 847, 848, 12, 12, 2, 2, 848, 849, 7, 124, 2, 2, 849, 860, 5, 94, 48, 13, 850, 851, 12, 11, 2, 2, 851, 852, 9, 10, 2, 2, 852, 860, 5, 94, 48, 12, 853, 854, 12, 9, 2, 2, 854, 855, 9, 11, 2, 2, 855, 860, 5, 94, 48, 10, 856, 857, 12, 8, 2, 2, 857, 858, 9, 12, 2, 2, 858, 860, 5, 94, 48, 9, 859, 847, 3, 2, 2, 2, 859, 850, 3, 2, 2, 2, 859, 853, 3, 2, 2, 2, 859, 856, 3, 2, 2, 2, 860, 863, 3, 2, 2, 2, 861, 859, 3, 2, 2, 2, 861, 862, 3, 2, 2, 2, 862, 95, 3, 2, 2, 2, 863, 861, 3, 2, 2, 2, 92, 105, 122, 131, 141, 147, 155, 162, 171, 176, 182, 187, 192, 199, 206, 211, 223, 226, 228, 239, 246, 251, 257, 259, 267, 273, 285, 299, 305, 311, 317, 322, 326, 335, 342, 349, 359, 371, 382, 403, 412, 418, 423, 430, 443, 448, 460, 474, 493, 502, 510, 515, 520, 522, 528, 533, 537, 543, 546, 554, 557, 560, 572, 584, 592, 598, 602, 623, 627, 636, 640, 690, 700, 702, 710, 715, 725, 740, 745, 751, 756, 761, 763, 767, 770, 778, 782, 829, 845, 859, 861] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 156, 877, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 4, 7, 4, 104, 10, 4, 12, 4, 14, 4, 107, 11, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 123, 10, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 7, 7, 130, 10, 7, 12, 7, 14, 7, 133, 11, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 140, 10, 7, 12, 7, 14, 7, 143, 11, 7, 3, 7, 7, 7, 146, 10, 7, 12, 7, 14, 7, 149, 11, 7, 3, 8, 3, 8, 3, 8, 7, 8, 154, 10, 8, 12, 8, 14, 8, 157, 11, 8, 3, 8, 3, 8, 7, 8, 161, 10, 8, 12, 8, 14, 8, 164, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 7, 9, 170, 10, 9, 12, 9, 14, 9, 173, 11, 9, 3, 9, 3, 9, 5, 9, 177, 10, 9, 3, 9, 3, 9, 7, 9, 181, 10, 9, 12, 9, 14, 9, 184, 11, 9, 3, 9, 3, 9, 5, 9, 188, 10, 9, 3, 10, 7, 10, 191, 10, 10, 12, 10, 14, 10, 194, 11, 10, 3, 10, 3, 10, 7, 10, 198, 10, 10, 12, 10, 14, 10, 201, 11, 10, 3, 11, 3, 11, 7, 11, 205, 10, 11, 12, 11, 14, 11, 208, 11, 11, 3, 12, 3, 12, 5, 12, 212, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 224, 10, 13, 3, 13, 7, 13, 227, 10, 13, 12, 13, 14, 13, 230, 11, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 240, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 247, 10, 14, 3, 14, 3, 14, 3, 14, 5, 14, 252, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 258, 10, 14, 12, 14, 14, 14, 261, 11, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 5, 16, 268, 10, 16, 3, 16, 3, 16, 6, 16, 272, 10, 16, 13, 16, 14, 16, 273, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 5, 19, 286, 10, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 298, 10, 20, 12, 20, 14, 20, 301, 11, 20, 3, 21, 3, 21, 3, 21, 5, 21, 306, 10, 21, 3, 22, 3, 22, 7, 22, 310, 10, 22, 12, 22, 14, 22, 313, 11, 22, 3, 22, 3, 22, 3, 22, 5, 22, 318, 10, 22, 3, 22, 3, 22, 3, 22, 5, 22, 323, 10, 22, 3, 23, 3, 23, 5, 23, 327, 10, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 7, 24, 334, 10, 24, 12, 24, 14, 24, 337, 11, 24, 3, 25, 3, 25, 7, 25, 341, 10, 25, 12, 25, 14, 25, 344, 11, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 350, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 358, 10, 26, 12, 26, 14, 26, 361, 11, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 372, 10, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 383, 10, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 404, 10, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 411, 10, 28, 12, 28, 14, 28, 414, 11, 28, 3, 28, 3, 28, 3, 28, 5, 28, 419, 10, 28, 3, 29, 6, 29, 422, 10, 29, 13, 29, 14, 29, 423, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 431, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 444, 10, 30, 3, 30, 7, 30, 447, 10, 30, 12, 30, 14, 30, 450, 11, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 459, 10, 30, 12, 30, 14, 30, 462, 11, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 473, 10, 30, 12, 30, 14, 30, 476, 11, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 494, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 503, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 511, 10, 30, 3, 31, 6, 31, 514, 10, 31, 13, 31, 14, 31, 515, 3, 31, 3, 31, 3, 31, 5, 31, 521, 10, 31, 5, 31, 523, 10, 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 529, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 534, 10, 33, 3, 33, 3, 33, 5, 33, 538, 10, 33, 3, 33, 3, 33, 7, 33, 542, 10, 33, 12, 33, 14, 33, 545, 11, 33, 5, 33, 547, 10, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 555, 10, 33, 3, 34, 5, 34, 558, 10, 34, 3, 34, 5, 34, 561, 10, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 7, 36, 571, 10, 36, 12, 36, 14, 36, 574, 11, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 585, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 593, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 599, 10, 37, 3, 37, 3, 37, 5, 37, 603, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 622, 10, 37, 12, 37, 14, 37, 625, 11, 37, 3, 37, 5, 37, 628, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 6, 37, 635, 10, 37, 13, 37, 14, 37, 636, 3, 37, 3, 37, 5, 37, 641, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 691, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 701, 10, 37, 12, 37, 14, 37, 704, 11, 37, 3, 38, 3, 38, 3, 38, 7, 38, 709, 10, 38, 12, 38, 14, 38, 712, 11, 38, 3, 39, 3, 39, 5, 39, 716, 10, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 724, 10, 40, 12, 40, 14, 40, 727, 11, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 741, 10, 41, 3, 42, 7, 42, 744, 10, 42, 12, 42, 14, 42, 747, 11, 42, 3, 43, 3, 43, 3, 43, 5, 43, 752, 10, 43, 3, 44, 3, 44, 3, 44, 7, 44, 757, 10, 44, 12, 44, 14, 44, 760, 11, 44, 3, 44, 3, 44, 3, 44, 7, 44, 765, 10, 44, 12, 44, 14, 44, 768, 11, 44, 5, 44, 770, 10, 44, 3, 45, 3, 45, 5, 45, 774, 10, 45, 3, 45, 7, 45, 777, 10, 45, 12, 45, 14, 45, 780, 11, 45, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 786, 10, 46, 12, 46, 14, 46, 789, 11, 46, 3, 46, 7, 46, 792, 10, 46, 12, 46, 14, 46, 795, 11, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 842, 10, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 858, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 7, 48, 872, 10, 48, 12, 48, 14, 48, 875, 11, 48, 3, 48, 2, 9, 12, 24, 26, 38, 70, 72, 94, 49, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 2, 13, 3, 2, 23, 24, 5, 2, 18, 19, 25, 26, 82, 82, 4, 2, 33, 33, 36, 36, 3, 2, 29, 30, 3, 2, 20, 22, 3, 2, 18, 19, 3, 2, 31, 36, 3, 2, 127, 130, 3, 2, 125, 126, 3, 2, 131, 132, 3, 2, 127, 128, 2, 1006, 2, 96, 3, 2, 2, 2, 4, 99, 3, 2, 2, 2, 6, 105, 3, 2, 2, 2, 8, 122, 3, 2, 2, 2, 10, 124, 3, 2, 2, 2, 12, 127, 3, 2, 2, 2, 14, 150, 3, 2, 2, 2, 16, 187, 3, 2, 2, 2, 18, 192, 3, 2, 2, 2, 20, 202, 3, 2, 2, 2, 22, 209, 3, 2, 2, 2, 24, 215, 3, 2, 2, 2, 26, 246, 3, 2, 2, 2, 28, 262, 3, 2, 2, 2, 30, 265, 3, 2, 2, 2, 32, 277, 3, 2, 2, 2, 34, 280, 3, 2, 2, 2, 36, 283, 3, 2, 2, 2, 38, 291, 3, 2, 2, 2, 40, 302, 3, 2, 2, 2, 42, 307, 3, 2, 2, 2, 44, 324, 3, 2, 2, 2, 46, 330, 3, 2, 2, 2, 48, 349, 3, 2, 2, 2, 50, 351, 3, 2, 2, 2, 52, 371, 3, 2, 2, 2, 54, 418, 3, 2, 2, 2, 56, 421, 3, 2, 2, 2, 58, 510, 3, 2, 2, 2, 60, 513, 3, 2, 2, 2, 62, 524, 3, 2, 2, 2, 64, 554, 3, 2, 2, 2, 66, 560, 3, 2, 2, 2, 68, 562, 3, 2, 2, 2, 70, 564, 3, 2, 2, 2, 72, 640, 3, 2, 2, 2, 74, 705, 3, 2, 2, 2, 76, 713, 3, 2, 2, 2, 78, 719, 3, 2, 2, 2, 80, 740, 3, 2, 2, 2, 82, 745, 3, 2, 2, 2, 84, 751, 3, 2, 2, 2, 86, 769, 3, 2, 2, 2, 88, 771, 3, 2, 2, 2, 90, 781, 3, 2, 2, 2, 92, 841, 3, 2, 2, 2, 94, 857, 3, 2, 2, 2, 96, 97, 5, 6, 4, 2, 97, 98, 7, 2, 2, 3, 98, 3, 3, 2, 2, 2, 99, 100, 5, 82, 42, 2, 100, 101, 7, 2, 2, 3, 101, 5, 3, 2, 2, 2, 102, 104, 5, 8, 5, 2, 103, 102, 3, 2, 2, 2, 104, 107, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 7, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 108, 109, 5, 10, 6, 2, 109, 110, 7, 10, 2, 2, 110, 123, 3, 2, 2, 2, 111, 112, 5, 30, 16, 2, 112, 113, 7, 10, 2, 2, 113, 123, 3, 2, 2, 2, 114, 115, 5, 36, 19, 2, 115, 116, 7, 10, 2, 2, 116, 123, 3, 2, 2, 2, 117, 123, 5, 42, 22, 2, 118, 123, 5, 50, 26, 2, 119, 120, 5, 14, 8, 2, 120, 121, 7, 10, 2, 2, 121, 123, 3, 2, 2, 2, 122, 108, 3, 2, 2, 2, 122, 111, 3, 2, 2, 2, 122, 114, 3, 2, 2, 2, 122, 117, 3, 2, 2, 2, 122, 118, 3, 2, 2, 2, 122, 119, 3, 2, 2, 2, 123, 9, 3, 2, 2, 2, 124, 125, 5, 18, 10, 2, 125, 126, 5, 12, 7, 2, 126, 11, 3, 2, 2, 2, 127, 131, 8, 7, 1, 2, 128, 130, 5, 20, 11, 2, 129, 128, 3, 2, 2, 2, 130, 133, 3, 2, 2, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 134, 3, 2, 2, 2, 133, 131, 3, 2, 2, 2, 134, 135, 5, 16, 9, 2, 135, 147, 3, 2, 2, 2, 136, 137, 12, 3, 2, 2, 137, 141, 7, 12, 2, 2, 138, 140, 5, 20, 11, 2, 139, 138, 3, 2, 2, 2, 140, 143, 3, 2, 2, 2, 141, 139, 3, 2, 2, 2, 141, 142, 3, 2, 2, 2, 142, 144, 3, 2, 2, 2, 143, 141, 3, 2, 2, 2, 144, 146, 5, 16, 9, 2, 145, 136, 3, 2, 2, 2, 146, 149, 3, 2, 2, 2, 147, 145, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 13, 3, 2, 2, 2, 149, 147, 3, 2, 2, 2, 150, 151, 7, 41, 2, 2, 151, 155, 5, 18, 10, 2, 152, 154, 5, 20, 11, 2, 153, 152, 3, 2, 2, 2, 154, 157, 3, 2, 2, 2, 155, 153, 3, 2, 2, 2, 155, 156, 3, 2, 2, 2, 156, 158, 3, 2, 2, 2, 157, 155, 3, 2, 2, 2, 158, 162, 7, 109, 2, 2, 159, 161, 5, 22, 12, 2, 160, 159, 3, 2, 2, 2, 161, 164, 3, 2, 2, 2, 162, 160, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, 165, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 165, 166, 8, 8, 1, 2, 166, 15, 3, 2, 2, 2, 167, 171, 7, 109, 2, 2, 168, 170, 5, 22, 12, 2, 169, 168, 3, 2, 2, 2, 170, 173, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 176, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 174, 175, 7, 39, 2, 2, 175, 177, 5, 72, 37, 2, 176, 174, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 188, 3, 2, 2, 2, 178, 182, 7, 109, 2, 2, 179, 181, 5, 22, 12, 2, 180, 179, 3, 2, 2, 2, 181, 184, 3, 2, 2, 2, 182, 180, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 185, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 185, 186, 7, 39, 2, 2, 186, 188, 5, 76, 39, 2, 187, 167, 3, 2, 2, 2, 187, 178, 3, 2, 2, 2, 188, 17, 3, 2, 2, 2, 189, 191, 5, 54, 28, 2, 190, 189, 3, 2, 2, 2, 191, 194, 3, 2, 2, 2, 192, 190, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 195, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 195, 199, 5, 26, 14, 2, 196, 198, 5, 54, 28, 2, 197, 196, 3, 2, 2, 2, 198, 201, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 19, 3, 2, 2, 2, 201, 199, 3, 2, 2, 2, 202, 206, 7, 20, 2, 2, 203, 205, 5, 54, 28, 2, 204, 203, 3, 2, 2, 2, 205, 208, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 206, 207, 3, 2, 2, 2, 207, 21, 3, 2, 2, 2, 208, 206, 3, 2, 2, 2, 209, 211, 7, 6, 2, 2, 210, 212, 5, 72, 37, 2, 211, 210, 3, 2, 2, 2, 211, 212, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 214, 7, 7, 2, 2, 214, 23, 3, 2, 2, 2, 215, 216, 8, 13, 1, 2, 216, 217, 5, 26, 14, 2, 217, 228, 3, 2, 2, 2, 218, 219, 12, 4, 2, 2, 219, 227, 7, 20, 2, 2, 220, 221, 12, 3, 2, 2, 221, 223, 7, 6, 2, 2, 222, 224, 5, 72, 37, 2, 223, 222, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 227, 7, 7, 2, 2, 226, 218, 3, 2, 2, 2, 226, 220, 3, 2, 2, 2, 227, 230, 3, 2, 2, 2, 228, 226, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 25, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 231, 232, 8, 14, 1, 2, 232, 233, 7, 8, 2, 2, 233, 234, 5, 26, 14, 2, 234, 235, 7, 9, 2, 2, 235, 247, 3, 2, 2, 2, 236, 247, 7, 84, 2, 2, 237, 239, 7, 83, 2, 2, 238, 240, 7, 84, 2, 2, 239, 238, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 247, 3, 2, 2, 2, 241, 247, 5, 30, 16, 2, 242, 247, 5, 28, 15, 2, 243, 247, 5, 36, 19, 2, 244, 247, 5, 34, 18, 2, 245, 247, 7, 3, 2, 2, 246, 231, 3, 2, 2, 2, 246, 236, 3, 2, 2, 2, 246, 237, 3, 2, 2, 2, 246, 241, 3, 2, 2, 2, 246, 242, 3, 2, 2, 2, 246, 243, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 246, 245, 3, 2, 2, 2, 247, 259, 3, 2, 2, 2, 248, 249, 12, 9, 2, 2, 249, 251, 7, 6, 2, 2, 250, 252, 5, 72, 37, 2, 251, 250, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 258, 7, 7, 2, 2, 254, 255, 12, 8, 2, 2, 255, 256, 7, 8, 2, 2, 256, 258, 7, 9, 2, 2, 257, 248, 3, 2, 2, 2, 257, 254, 3, 2, 2, 2, 258, 261, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 27, 3, 2, 2, 2, 261, 259, 3, 2, 2, 2, 262, 263, 7, 71, 2, 2, 263, 264, 7, 109, 2, 2, 264, 29, 3, 2, 2, 2, 265, 267, 7, 71, 2, 2, 266, 268, 7, 109, 2, 2, 267, 266, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 271, 7, 4, 2, 2, 270, 272, 5, 32, 17, 2, 271, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 271, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 7, 5, 2, 2, 276, 31, 3, 2, 2, 2, 277, 278, 5, 10, 6, 2, 278, 279, 7, 10, 2, 2, 279, 33, 3, 2, 2, 2, 280, 281, 7, 72, 2, 2, 281, 282, 7, 109, 2, 2, 282, 35, 3, 2, 2, 2, 283, 285, 7, 72, 2, 2, 284, 286, 7, 109, 2, 2, 285, 284, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 288, 7, 4, 2, 2, 288, 289, 5, 38, 20, 2, 289, 290, 7, 5, 2, 2, 290, 37, 3, 2, 2, 2, 291, 292, 8, 20, 1, 2, 292, 293, 5, 40, 21, 2, 293, 299, 3, 2, 2, 2, 294, 295, 12, 3, 2, 2, 295, 296, 7, 12, 2, 2, 296, 298, 5, 40, 21, 2, 297, 294, 3, 2, 2, 2, 298, 301, 3, 2, 2, 2, 299, 297, 3, 2, 2, 2, 299, 300, 3, 2, 2, 2, 300, 39, 3, 2, 2, 2, 301, 299, 3, 2, 2, 2, 302, 305, 7, 109, 2, 2, 303, 304, 7, 39, 2, 2, 304, 306, 5, 72, 37, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 41, 3, 2, 2, 2, 307, 311, 5, 18, 10, 2, 308, 310, 5, 20, 11, 2, 309, 308, 3, 2, 2, 2, 310, 313, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 314, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 314, 315, 7, 109, 2, 2, 315, 317, 7, 8, 2, 2, 316, 318, 5, 46, 24, 2, 317, 316, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 322, 7, 9, 2, 2, 320, 323, 5, 44, 23, 2, 321, 323, 7, 10, 2, 2, 322, 320, 3, 2, 2, 2, 322, 321, 3, 2, 2, 2, 323, 43, 3, 2, 2, 2, 324, 326, 7, 4, 2, 2, 325, 327, 5, 56, 29, 2, 326, 325, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 329, 7, 5, 2, 2, 329, 45, 3, 2, 2, 2, 330, 335, 5, 48, 25, 2, 331, 332, 7, 12, 2, 2, 332, 334, 5, 48, 25, 2, 333, 331, 3, 2, 2, 2, 334, 337, 3, 2, 2, 2, 335, 333, 3, 2, 2, 2, 335, 336, 3, 2, 2, 2, 336, 47, 3, 2, 2, 2, 337, 335, 3, 2, 2, 2, 338, 342, 5, 18, 10, 2, 339, 341, 5, 20, 11, 2, 340, 339, 3, 2, 2, 2, 341, 344, 3, 2, 2, 2, 342, 340, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 345, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 345, 346, 7, 109, 2, 2, 346, 350, 3, 2, 2, 2, 347, 350, 7, 84, 2, 2, 348, 350, 7, 14, 2, 2, 349, 338, 3, 2, 2, 2, 349, 347, 3, 2, 2, 2, 349, 348, 3, 2, 2, 2, 350, 49, 3, 2, 2, 2, 351, 352, 7, 89, 2, 2, 352, 353, 7, 109, 2, 2, 353, 354, 7, 8, 2, 2, 354, 359, 5, 52, 27, 2, 355, 356, 7, 12, 2, 2, 356, 358, 5, 52, 27, 2, 357, 355, 3, 2, 2, 2, 358, 361, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 362, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 362, 363, 7, 9, 2, 2, 363, 51, 3, 2, 2, 2, 364, 372, 7, 100, 2, 2, 365, 366, 7, 100, 2, 2, 366, 367, 7, 13, 2, 2, 367, 372, 7, 100, 2, 2, 368, 372, 7, 109, 2, 2, 369, 372, 7, 110, 2, 2, 370, 372, 7, 58, 2, 2, 371, 364, 3, 2, 2, 2, 371, 365, 3, 2, 2, 2, 371, 368, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 370, 3, 2, 2, 2, 372, 53, 3, 2, 2, 2, 373, 419, 7, 42, 2, 2, 374, 375, 7, 45, 2, 2, 375, 376, 7, 8, 2, 2, 376, 377, 7, 100, 2, 2, 377, 419, 7, 9, 2, 2, 378, 382, 7, 50, 2, 2, 379, 380, 7, 8, 2, 2, 380, 381, 7, 109, 2, 2, 381, 383, 7, 9, 2, 2, 382, 379, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 419, 3, 2, 2, 2, 384, 419, 7, 53, 2, 2, 385, 419, 7, 54, 2, 2, 386, 387, 7, 52, 2, 2, 387, 388, 7, 8, 2, 2, 388, 389, 5, 72, 37, 2, 389, 390, 7, 9, 2, 2, 390, 419, 3, 2, 2, 2, 391, 419, 7, 47, 2, 2, 392, 419, 7, 48, 2, 2, 393, 419, 7, 55, 2, 2, 394, 419, 7, 56, 2, 2, 395, 419, 7, 43, 2, 2, 396, 419, 7, 44, 2, 2, 397, 419, 7, 46, 2, 2, 398, 419, 7, 57, 2, 2, 399, 403, 7, 49, 2, 2, 400, 401, 7, 8, 2, 2, 401, 402, 7, 109, 2, 2, 402, 404, 7, 9, 2, 2, 403, 400, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 419, 3, 2, 2, 2, 405, 406, 7, 51, 2, 2, 406, 407, 7, 8, 2, 2, 407, 412, 5, 52, 27, 2, 408, 409, 7, 12, 2, 2, 409, 411, 5, 52, 27, 2, 410, 408, 3, 2, 2, 2, 411, 414, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 415, 3, 2, 2, 2, 414, 412, 3, 2, 2, 2, 415, 416, 7, 9, 2, 2, 416, 419, 3, 2, 2, 2, 417, 419, 7, 58, 2, 2, 418, 373, 3, 2, 2, 2, 418, 374, 3, 2, 2, 2, 418, 378, 3, 2, 2, 2, 418, 384, 3, 2, 2, 2, 418, 385, 3, 2, 2, 2, 418, 386, 3, 2, 2, 2, 418, 391, 3, 2, 2, 2, 418, 392, 3, 2, 2, 2, 418, 393, 3, 2, 2, 2, 418, 394, 3, 2, 2, 2, 418, 395, 3, 2, 2, 2, 418, 396, 3, 2, 2, 2, 418, 397, 3, 2, 2, 2, 418, 398, 3, 2, 2, 2, 418, 399, 3, 2, 2, 2, 418, 405, 3, 2, 2, 2, 418, 417, 3, 2, 2, 2, 419, 55, 3, 2, 2, 2, 420, 422, 5, 58, 30, 2, 421, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 57, 3, 2, 2, 2, 425, 426, 5, 10, 6, 2, 426, 427, 7, 10, 2, 2, 427, 511, 3, 2, 2, 2, 428, 430, 7, 4, 2, 2, 429, 431, 5, 56, 29, 2, 430, 429, 3, 2, 2, 2, 430, 431, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 511, 7, 5, 2, 2, 433, 434, 5, 70, 36, 2, 434, 435, 7, 10, 2, 2, 435, 511, 3, 2, 2, 2, 436, 437, 7, 59, 2, 2, 437, 438, 7, 8, 2, 2, 438, 439, 5, 70, 36, 2, 439, 440, 7, 9, 2, 2, 440, 443, 5, 58, 30, 2, 441, 442, 7, 60, 2, 2, 442, 444, 5, 58, 30, 2, 443, 441, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 511, 3, 2, 2, 2, 445, 447, 5, 54, 28, 2, 446, 445, 3, 2, 2, 2, 447, 450, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 451, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 451, 452, 7, 61, 2, 2, 452, 453, 7, 8, 2, 2, 453, 454, 5, 70, 36, 2, 454, 455, 7, 9, 2, 2, 455, 456, 5, 58, 30, 2, 456, 511, 3, 2, 2, 2, 457, 459, 5, 54, 28, 2, 458, 457, 3, 2, 2, 2, 459, 462, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 460, 461, 3, 2, 2, 2, 461, 463, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 463, 464, 7, 62, 2, 2, 464, 465, 5, 58, 30, 2, 465, 466, 7, 61, 2, 2, 466, 467, 7, 8, 2, 2, 467, 468, 5, 70, 36, 2, 468, 469, 7, 9, 2, 2, 469, 470, 7, 10, 2, 2, 470, 511, 3, 2, 2, 2, 471, 473, 5, 54, 28, 2, 472, 471, 3, 2, 2, 2, 473, 476, 3, 2, 2, 2, 474, 472, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 477, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 477, 478, 7, 63, 2, 2, 478, 479, 7, 8, 2, 2, 479, 480, 5, 64, 33, 2, 480, 481, 7, 9, 2, 2, 481, 482, 5, 58, 30, 2, 482, 511, 3, 2, 2, 2, 483, 484, 7, 64, 2, 2, 484, 485, 7, 8, 2, 2, 485, 486, 5, 70, 36, 2, 486, 487, 7, 9, 2, 2, 487, 488, 7, 4, 2, 2, 488, 489, 5, 60, 31, 2, 489, 490, 7, 5, 2, 2, 490, 511, 3, 2, 2, 2, 491, 493, 7, 65, 2, 2, 492, 494, 5, 70, 36, 2, 493, 492, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 511, 7, 10, 2, 2, 496, 497, 7, 66, 2, 2, 497, 511, 7, 10, 2, 2, 498, 499, 7, 67, 2, 2, 499, 511, 7, 10, 2, 2, 500, 502, 7, 68, 2, 2, 501, 503, 5, 78, 40, 2, 502, 501, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 504, 3, 2, 2, 2, 504, 505, 7, 4, 2, 2, 505, 506, 5, 82, 42, 2, 506, 507, 7, 134, 2, 2, 507, 511, 3, 2, 2, 2, 508, 511, 5, 76, 39, 2, 509, 511, 7, 10, 2, 2, 510, 425, 3, 2, 2, 2, 510, 428, 3, 2, 2, 2, 510, 433, 3, 2, 2, 2, 510, 436, 3, 2, 2, 2, 510, 448, 3, 2, 2, 2, 510, 460, 3, 2, 2, 2, 510, 474, 3, 2, 2, 2, 510, 483, 3, 2, 2, 2, 510, 491, 3, 2, 2, 2, 510, 496, 3, 2, 2, 2, 510, 498, 3, 2, 2, 2, 510, 500, 3, 2, 2, 2, 510, 508, 3, 2, 2, 2, 510, 509, 3, 2, 2, 2, 511, 59, 3, 2, 2, 2, 512, 514, 5, 62, 32, 2, 513, 512, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 513, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 522, 3, 2, 2, 2, 517, 518, 7, 69, 2, 2, 518, 520, 7, 11, 2, 2, 519, 521, 5, 56, 29, 2, 520, 519, 3, 2, 2, 2, 520, 521, 3, 2, 2, 2, 521, 523, 3, 2, 2, 2, 522, 517, 3, 2, 2, 2, 522, 523, 3, 2, 2, 2, 523, 61, 3, 2, 2, 2, 524, 525, 7, 70, 2, 2, 525, 526, 5, 72, 37, 2, 526, 528, 7, 11, 2, 2, 527, 529, 5, 56, 29, 2, 528, 527, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 63, 3, 2, 2, 2, 530, 531, 5, 66, 34, 2, 531, 533, 7, 10, 2, 2, 532, 534, 5, 68, 35, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 537, 7, 10, 2, 2, 536, 538, 5, 70, 36, 2, 537, 536, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 555, 3, 2, 2, 2, 539, 543, 5, 18, 10, 2, 540, 542, 5, 20, 11, 2, 541, 540, 3, 2, 2, 2, 542, 545, 3, 2, 2, 2, 543, 541, 3, 2, 2, 2, 543, 544, 3, 2, 2, 2, 544, 547, 3, 2, 2, 2, 545, 543, 3, 2, 2, 2, 546, 539, 3, 2, 2, 2, 546, 547, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 549, 7, 109, 2, 2, 549, 550, 7, 11, 2, 2, 550, 551, 5, 72, 37, 2, 551, 552, 7, 13, 2, 2, 552, 553, 5, 72, 37, 2, 553, 555, 3, 2, 2, 2, 554, 530, 3, 2, 2, 2, 554, 546, 3, 2, 2, 2, 555, 65, 3, 2, 2, 2, 556, 558, 5, 10, 6, 2, 557, 556, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 561, 3, 2, 2, 2, 559, 561, 5, 70, 36, 2, 560, 557, 3, 2, 2, 2, 560, 559, 3, 2, 2, 2, 561, 67, 3, 2, 2, 2, 562, 563, 5, 70, 36, 2, 563, 69, 3, 2, 2, 2, 564, 565, 8, 36, 1, 2, 565, 566, 5, 72, 37, 2, 566, 572, 3, 2, 2, 2, 567, 568, 12, 3, 2, 2, 568, 569, 7, 12, 2, 2, 569, 571, 5, 72, 37, 2, 570, 567, 3, 2, 2, 2, 571, 574, 3, 2, 2, 2, 572, 570, 3, 2, 2, 2, 572, 573, 3, 2, 2, 2, 573, 71, 3, 2, 2, 2, 574, 572, 3, 2, 2, 2, 575, 576, 8, 37, 1, 2, 576, 577, 7, 8, 2, 2, 577, 578, 5, 70, 36, 2, 578, 579, 7, 9, 2, 2, 579, 641, 3, 2, 2, 2, 580, 581, 7, 73, 2, 2, 581, 584, 7, 8, 2, 2, 582, 585, 5, 72, 37, 2, 583, 585, 5, 24, 13, 2, 584, 582, 3, 2, 2, 2, 584, 583, 3, 2, 2, 2, 585, 586, 3, 2, 2, 2, 586, 587, 7, 9, 2, 2, 587, 641, 3, 2, 2, 2, 588, 589, 7, 74, 2, 2, 589, 592, 7, 8, 2, 2, 590, 593, 5, 72, 37, 2, 591, 593, 5, 24, 13, 2, 592, 590, 3, 2, 2, 2, 592, 591, 3, 2, 2, 2, 593, 594, 3, 2, 2, 2, 594, 595, 7, 9, 2, 2, 595, 641, 3, 2, 2, 2, 596, 598, 7, 75, 2, 2, 597, 599, 7, 8, 2, 2, 598, 597, 3, 2, 2, 2, 598, 599, 3, 2, 2, 2, 599, 600, 3, 2, 2, 2, 600, 602, 7, 109, 2, 2, 601, 603, 7, 9, 2, 2, 602, 601, 3, 2, 2, 2, 602, 603, 3, 2, 2, 2, 603, 641, 3, 2, 2, 2, 604, 605, 7, 8, 2, 2, 605, 606, 5, 24, 13, 2, 606, 607, 7, 9, 2, 2, 607, 608, 5, 72, 37, 26, 608, 641, 3, 2, 2, 2, 609, 610, 9, 2, 2, 2, 610, 641, 5, 72, 37, 25, 611, 612, 7, 20, 2, 2, 612, 641, 5, 72, 37, 23, 613, 614, 9, 3, 2, 2, 614, 641, 5, 72, 37, 22, 615, 616, 9, 4, 2, 2, 616, 641, 5, 72, 37, 18, 617, 618, 7, 4, 2, 2, 618, 623, 5, 72, 37, 2, 619, 620, 7, 12, 2, 2, 620, 622, 5, 72, 37, 2, 621, 619, 3, 2, 2, 2, 622, 625, 3, 2, 2, 2, 623, 621, 3, 2, 2, 2, 623, 624, 3, 2, 2, 2, 624, 627, 3, 2, 2, 2, 625, 623, 3, 2, 2, 2, 626, 628, 7, 12, 2, 2, 627, 626, 3, 2, 2, 2, 627, 628, 3, 2, 2, 2, 628, 629, 3, 2, 2, 2, 629, 630, 7, 5, 2, 2, 630, 641, 3, 2, 2, 2, 631, 641, 7, 109, 2, 2, 632, 641, 7, 100, 2, 2, 633, 635, 7, 110, 2, 2, 634, 633, 3, 2, 2, 2, 635, 636, 3, 2, 2, 2, 636, 634, 3, 2, 2, 2, 636, 637, 3, 2, 2, 2, 637, 641, 3, 2, 2, 2, 638, 641, 7, 111, 2, 2, 639, 641, 7, 85, 2, 2, 640, 575, 3, 2, 2, 2, 640, 580, 3, 2, 2, 2, 640, 588, 3, 2, 2, 2, 640, 596, 3, 2, 2, 2, 640, 604, 3, 2, 2, 2, 640, 609, 3, 2, 2, 2, 640, 611, 3, 2, 2, 2, 640, 613, 3, 2, 2, 2, 640, 615, 3, 2, 2, 2, 640, 617, 3, 2, 2, 2, 640, 631, 3, 2, 2, 2, 640, 632, 3, 2, 2, 2, 640, 634, 3, 2, 2, 2, 640, 638, 3, 2, 2, 2, 640, 639, 3, 2, 2, 2, 641, 702, 3, 2, 2, 2, 642, 643, 12, 21, 2, 2, 643, 644, 9, 5, 2, 2, 644, 701, 5, 72, 37, 22, 645, 646, 12, 20, 2, 2, 646, 647, 9, 6, 2, 2, 647, 701, 5, 72, 37, 21, 648, 649, 12, 19, 2, 2, 649, 650, 9, 7, 2, 2, 650, 701, 5, 72, 37, 20, 651, 652, 12, 17, 2, 2, 652, 653, 9, 8, 2, 2, 653, 701, 5, 72, 37, 18, 654, 655, 12, 16, 2, 2, 655, 656, 7, 25, 2, 2, 656, 701, 5, 72, 37, 17, 657, 658, 12, 15, 2, 2, 658, 659, 7, 27, 2, 2, 659, 701, 5, 72, 37, 16, 660, 661, 12, 14, 2, 2, 661, 662, 7, 28, 2, 2, 662, 701, 5, 72, 37, 15, 663, 664, 12, 13, 2, 2, 664, 665, 7, 37, 2, 2, 665, 701, 5, 72, 37, 14, 666, 667, 12, 12, 2, 2, 667, 668, 7, 38, 2, 2, 668, 701, 5, 72, 37, 13, 669, 670, 12, 11, 2, 2, 670, 671, 7, 15, 2, 2, 671, 672, 5, 72, 37, 2, 672, 673, 7, 11, 2, 2, 673, 674, 5, 72, 37, 12, 674, 701, 3, 2, 2, 2, 675, 676, 12, 10, 2, 2, 676, 677, 7, 39, 2, 2, 677, 701, 5, 72, 37, 10, 678, 679, 12, 9, 2, 2, 679, 680, 7, 40, 2, 2, 680, 701, 5, 72, 37, 9, 681, 682, 12, 33, 2, 2, 682, 683, 7, 16, 2, 2, 683, 701, 7, 109, 2, 2, 684, 685, 12, 32, 2, 2, 685, 686, 7, 17, 2, 2, 686, 701, 7, 109, 2, 2, 687, 688, 12, 31, 2, 2, 688, 690, 7, 8, 2, 2, 689, 691, 5, 74, 38, 2, 690, 689, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 692, 3, 2, 2, 2, 692, 701, 7, 9, 2, 2, 693, 694, 12, 27, 2, 2, 694, 695, 7, 6, 2, 2, 695, 696, 5, 70, 36, 2, 696, 697, 7, 7, 2, 2, 697, 701, 3, 2, 2, 2, 698, 699, 12, 24, 2, 2, 699, 701, 9, 2, 2, 2, 700, 642, 3, 2, 2, 2, 700, 645, 3, 2, 2, 2, 700, 648, 3, 2, 2, 2, 700, 651, 3, 2, 2, 2, 700, 654, 3, 2, 2, 2, 700, 657, 3, 2, 2, 2, 700, 660, 3, 2, 2, 2, 700, 663, 3, 2, 2, 2, 700, 666, 3, 2, 2, 2, 700, 669, 3, 2, 2, 2, 700, 675, 3, 2, 2, 2, 700, 678, 3, 2, 2, 2, 700, 681, 3, 2, 2, 2, 700, 684, 3, 2, 2, 2, 700, 687, 3, 2, 2, 2, 700, 693, 3, 2, 2, 2, 700, 698, 3, 2, 2, 2, 701, 704, 3, 2, 2, 2, 702, 700, 3, 2, 2, 2, 702, 703, 3, 2, 2, 2, 703, 73, 3, 2, 2, 2, 704, 702, 3, 2, 2, 2, 705, 710, 5, 72, 37, 2, 706, 707, 7, 12, 2, 2, 707, 709, 5, 72, 37, 2, 708, 706, 3, 2, 2, 2, 709, 712, 3, 2, 2, 2, 710, 708, 3, 2, 2, 2, 710, 711, 3, 2, 2, 2, 711, 75, 3, 2, 2, 2, 712, 710, 3, 2, 2, 2, 713, 715, 7, 76, 2, 2, 714, 716, 5, 78, 40, 2, 715, 714, 3, 2, 2, 2, 715, 716, 3, 2, 2, 2, 716, 717, 3, 2, 2, 2, 717, 718, 7, 86, 2, 2, 718, 77, 3, 2, 2, 2, 719, 720, 7, 8, 2, 2, 720, 725, 5, 80, 41, 2, 721, 722, 7, 12, 2, 2, 722, 724, 5, 80, 41, 2, 723, 721, 3, 2, 2, 2, 724, 727, 3, 2, 2, 2, 725, 723, 3, 2, 2, 2, 725, 726, 3, 2, 2, 2, 726, 728, 3, 2, 2, 2, 727, 725, 3, 2, 2, 2, 728, 729, 7, 9, 2, 2, 729, 79, 3, 2, 2, 2, 730, 731, 7, 77, 2, 2, 731, 741, 7, 110, 2, 2, 732, 733, 7, 78, 2, 2, 733, 741, 7, 109, 2, 2, 734, 735, 7, 79, 2, 2, 735, 741, 7, 110, 2, 2, 736, 737, 7, 80, 2, 2, 737, 741, 5, 72, 37, 2, 738, 739, 7, 81, 2, 2, 739, 741, 5, 72, 37, 2, 740, 730, 3, 2, 2, 2, 740, 732, 3, 2, 2, 2, 740, 734, 3, 2, 2, 2, 740, 736, 3, 2, 2, 2, 740, 738, 3, 2, 2, 2, 741, 81, 3, 2, 2, 2, 742, 744, 5, 84, 43, 2, 743, 742, 3, 2, 2, 2, 744, 747, 3, 2, 2, 2, 745, 743, 3, 2, 2, 2, 745, 746, 3, 2, 2, 2, 746, 83, 3, 2, 2, 2, 747, 745, 3, 2, 2, 2, 748, 752, 5, 86, 44, 2, 749, 752, 5, 88, 45, 2, 750, 752, 5, 90, 46, 2, 751, 748, 3, 2, 2, 2, 751, 749, 3, 2, 2, 2, 751, 750, 3, 2, 2, 2, 752, 85, 3, 2, 2, 2, 753, 754, 7, 147, 2, 2, 754, 758, 7, 118, 2, 2, 755, 757, 7, 148, 2, 2, 756, 755, 3, 2, 2, 2, 757, 760, 3, 2, 2, 2, 758, 756, 3, 2, 2, 2, 758, 759, 3, 2, 2, 2, 759, 770, 3, 2, 2, 2, 760, 758, 3, 2, 2, 2, 761, 762, 7, 146, 2, 2, 762, 766, 7, 118, 2, 2, 763, 765, 7, 148, 2, 2, 764, 763, 3, 2, 2, 2, 765, 768, 3, 2, 2, 2, 766, 764, 3, 2, 2, 2, 766, 767, 3, 2, 2, 2, 767, 770, 3, 2, 2, 2, 768, 766, 3, 2, 2, 2, 769, 753, 3, 2, 2, 2, 769, 761, 3, 2, 2, 2, 770, 87, 3, 2, 2, 2, 771, 773, 7, 116, 2, 2, 772, 774, 5, 92, 47, 2, 773, 772, 3, 2, 2, 2, 773, 774, 3, 2, 2, 2, 774, 778, 3, 2, 2, 2, 775, 777, 7, 148, 2, 2, 776, 775, 3, 2, 2, 2, 777, 780, 3, 2, 2, 2, 778, 776, 3, 2, 2, 2, 778, 779, 3, 2, 2, 2, 779, 89, 3, 2, 2, 2, 780, 778, 3, 2, 2, 2, 781, 782, 7, 115, 2, 2, 782, 787, 5, 94, 48, 2, 783, 784, 7, 119, 2, 2, 784, 786, 5, 94, 48, 2, 785, 783, 3, 2, 2, 2, 786, 789, 3, 2, 2, 2, 787, 785, 3, 2, 2, 2, 787, 788, 3, 2, 2, 2, 788, 793, 3, 2, 2, 2, 789, 787, 3, 2, 2, 2, 790, 792, 7, 148, 2, 2, 791, 790, 3, 2, 2, 2, 792, 795, 3, 2, 2, 2, 793, 791, 3, 2, 2, 2, 793, 794, 3, 2, 2, 2, 794, 91, 3, 2, 2, 2, 795, 793, 3, 2, 2, 2, 796, 842, 5, 94, 48, 2, 797, 798, 7, 117, 2, 2, 798, 842, 5, 94, 48, 2, 799, 800, 5, 94, 48, 2, 800, 801, 7, 119, 2, 2, 801, 802, 5, 94, 48, 2, 802, 842, 3, 2, 2, 2, 803, 804, 7, 120, 2, 2, 804, 805, 5, 94, 48, 2, 805, 806, 7, 121, 2, 2, 806, 807, 7, 119, 2, 2, 807, 808, 7, 147, 2, 2, 808, 842, 3, 2, 2, 2, 809, 810, 7, 120, 2, 2, 810, 811, 7, 120, 2, 2, 811, 812, 5, 94, 48, 2, 812, 813, 7, 121, 2, 2, 813, 814, 7, 121, 2, 2, 814, 815, 7, 119, 2, 2, 815, 816, 7, 147, 2, 2, 816, 842, 3, 2, 2, 2, 817, 818, 7, 120, 2, 2, 818, 819, 5, 94, 48, 2, 819, 820, 7, 119, 2, 2, 820, 821, 7, 147, 2, 2, 821, 822, 7, 121, 2, 2, 822, 823, 7, 119, 2, 2, 823, 824, 7, 147, 2, 2, 824, 842, 3, 2, 2, 2, 825, 826, 7, 120, 2, 2, 826, 827, 5, 94, 48, 2, 827, 828, 7, 119, 2, 2, 828, 829, 7, 147, 2, 2, 829, 830, 7, 121, 2, 2, 830, 842, 3, 2, 2, 2, 831, 832, 7, 120, 2, 2, 832, 833, 5, 94, 48, 2, 833, 834, 7, 121, 2, 2, 834, 842, 3, 2, 2, 2, 835, 836, 7, 120, 2, 2, 836, 837, 7, 120, 2, 2, 837, 838, 5, 94, 48, 2, 838, 839, 7, 121, 2, 2, 839, 840, 7, 121, 2, 2, 840, 842, 3, 2, 2, 2, 841, 796, 3, 2, 2, 2, 841, 797, 3, 2, 2, 2, 841, 799, 3, 2, 2, 2, 841, 803, 3, 2, 2, 2, 841, 809, 3, 2, 2, 2, 841, 817, 3, 2, 2, 2, 841, 825, 3, 2, 2, 2, 841, 831, 3, 2, 2, 2, 841, 835, 3, 2, 2, 2, 842, 93, 3, 2, 2, 2, 843, 844, 8, 48, 1, 2, 844, 845, 7, 122, 2, 2, 845, 846, 5, 94, 48, 2, 846, 847, 7, 123, 2, 2, 847, 858, 3, 2, 2, 2, 848, 849, 9, 9, 2, 2, 849, 858, 5, 94, 48, 10, 850, 858, 7, 147, 2, 2, 851, 858, 7, 145, 2, 2, 852, 853, 7, 133, 2, 2, 853, 854, 7, 147, 2, 2, 854, 858, 7, 134, 2, 2, 855, 858, 7, 135, 2, 2, 856, 858, 7, 144, 2, 2, 857, 843, 3, 2, 2, 2, 857, 848, 3, 2, 2, 2, 857, 850, 3, 2, 2, 2, 857, 851, 3, 2, 2, 2, 857, 852, 3, 2, 2, 2, 857, 855, 3, 2, 2, 2, 857, 856, 3, 2, 2, 2, 858, 873, 3, 2, 2, 2, 859, 860, 12, 12, 2, 2, 860, 861, 7, 124, 2, 2, 861, 872, 5, 94, 48, 13, 862, 863, 12, 11, 2, 2, 863, 864, 9, 10, 2, 2, 864, 872, 5, 94, 48, 12, 865, 866, 12, 9, 2, 2, 866, 867, 9, 11, 2, 2, 867, 872, 5, 94, 48, 10, 868, 869, 12, 8, 2, 2, 869, 870, 9, 12, 2, 2, 870, 872, 5, 94, 48, 9, 871, 859, 3, 2, 2, 2, 871, 862, 3, 2, 2, 2, 871, 865, 3, 2, 2, 2, 871, 868, 3, 2, 2, 2, 872, 875, 3, 2, 2, 2, 873, 871, 3, 2, 2, 2, 873, 874, 3, 2, 2, 2, 874, 95, 3, 2, 2, 2, 875, 873, 3, 2, 2, 2, 92, 105, 122, 131, 141, 147, 155, 162, 171, 176, 182, 187, 192, 199, 206, 211, 223, 226, 228, 239, 246, 251, 257, 259, 267, 273, 285, 299, 305, 311, 317, 322, 326, 335, 342, 349, 359, 371, 382, 403, 412, 418, 423, 430, 443, 448, 460, 474, 493, 502, 510, 515, 520, 522, 528, 533, 537, 543, 546, 554, 557, 560, 572, 584, 592, 598, 602, 623, 627, 636, 640, 690, 700, 702, 710, 715, 725, 740, 745, 751, 758, 766, 769, 773, 778, 787, 793, 841, 857, 871, 873] \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java index 38017962c..8a7687385 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java @@ -6119,7 +6119,10 @@ public class KickCParser extends Parser { public static class AsmLabelNameContext extends AsmLabelContext { public TerminalNode ASM_NAME() { return getToken(KickCParser.ASM_NAME, 0); } public TerminalNode ASM_COLON() { return getToken(KickCParser.ASM_COLON, 0); } - public TerminalNode ASM_TAG() { return getToken(KickCParser.ASM_TAG, 0); } + public List ASM_TAG() { return getTokens(KickCParser.ASM_TAG); } + public TerminalNode ASM_TAG(int i) { + return getToken(KickCParser.ASM_TAG, i); + } public AsmLabelNameContext(AsmLabelContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { @@ -6138,7 +6141,10 @@ public class KickCParser extends Parser { public static class AsmLabelMultiContext extends AsmLabelContext { public TerminalNode ASM_MULTI_NAME() { return getToken(KickCParser.ASM_MULTI_NAME, 0); } public TerminalNode ASM_COLON() { return getToken(KickCParser.ASM_COLON, 0); } - public TerminalNode ASM_TAG() { return getToken(KickCParser.ASM_TAG, 0); } + public List ASM_TAG() { return getTokens(KickCParser.ASM_TAG); } + public TerminalNode ASM_TAG(int i) { + return getToken(KickCParser.ASM_TAG, i); + } public AsmLabelMultiContext(AsmLabelContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { @@ -6160,7 +6166,7 @@ public class KickCParser extends Parser { enterRule(_localctx, 84, RULE_asmLabel); int _la; try { - setState(761); + setState(767); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_NAME: @@ -6171,36 +6177,44 @@ public class KickCParser extends Parser { match(ASM_NAME); setState(752); match(ASM_COLON); - setState(754); + setState(756); _errHandler.sync(this); _la = _input.LA(1); - if (_la==ASM_TAG) { + while (_la==ASM_TAG) { + { { setState(753); match(ASM_TAG); } + } + setState(758); + _errHandler.sync(this); + _la = _input.LA(1); } - } break; case ASM_MULTI_NAME: _localctx = new AsmLabelMultiContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(756); - match(ASM_MULTI_NAME); - setState(757); - match(ASM_COLON); setState(759); + match(ASM_MULTI_NAME); + setState(760); + match(ASM_COLON); + setState(764); _errHandler.sync(this); _la = _input.LA(1); - if (_la==ASM_TAG) { + while (_la==ASM_TAG) { { - setState(758); + { + setState(761); match(ASM_TAG); } + } + setState(766); + _errHandler.sync(this); + _la = _input.LA(1); } - } break; default: @@ -6223,7 +6237,10 @@ public class KickCParser extends Parser { public AsmParamModeContext asmParamMode() { return getRuleContext(AsmParamModeContext.class,0); } - public TerminalNode ASM_TAG() { return getToken(KickCParser.ASM_TAG, 0); } + public List ASM_TAG() { return getTokens(KickCParser.ASM_TAG); } + public TerminalNode ASM_TAG(int i) { + return getToken(KickCParser.ASM_TAG, i); + } public AsmInstructionContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -6250,28 +6267,32 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(763); + setState(769); match(ASM_MNEMONIC); - setState(765); + setState(771); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,82,_ctx) ) { case 1: { - setState(764); + setState(770); asmParamMode(); } break; } - setState(768); + setState(776); _errHandler.sync(this); _la = _input.LA(1); - if (_la==ASM_TAG) { + while (_la==ASM_TAG) { { - setState(767); + { + setState(773); match(ASM_TAG); } + } + setState(778); + _errHandler.sync(this); + _la = _input.LA(1); } - } } catch (RecognitionException re) { @@ -6297,7 +6318,10 @@ public class KickCParser extends Parser { public TerminalNode ASM_COMMA(int i) { return getToken(KickCParser.ASM_COMMA, i); } - public TerminalNode ASM_TAG() { return getToken(KickCParser.ASM_TAG, 0); } + public List ASM_TAG() { return getTokens(KickCParser.ASM_TAG); } + public TerminalNode ASM_TAG(int i) { + return getToken(KickCParser.ASM_TAG, i); + } public AsmBytesContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -6324,36 +6348,40 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(770); + setState(779); match(ASM_BYTE); - setState(771); + setState(780); asmExpr(0); - setState(776); + setState(785); _errHandler.sync(this); _la = _input.LA(1); while (_la==ASM_COMMA) { { { - setState(772); + setState(781); match(ASM_COMMA); - setState(773); + setState(782); asmExpr(0); } } - setState(778); + setState(787); _errHandler.sync(this); _la = _input.LA(1); } - setState(780); + setState(791); _errHandler.sync(this); _la = _input.LA(1); - if (_la==ASM_TAG) { + while (_la==ASM_TAG) { { - setState(779); + { + setState(788); match(ASM_TAG); } + } + setState(793); + _errHandler.sync(this); + _la = _input.LA(1); } - } } catch (RecognitionException re) { @@ -6597,14 +6625,14 @@ public class KickCParser extends Parser { AsmParamModeContext _localctx = new AsmParamModeContext(_ctx, getState()); enterRule(_localctx, 90, RULE_asmParamMode); try { - setState(827); + setState(839); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,86,_ctx) ) { case 1: _localctx = new AsmModeAbsContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(782); + setState(794); asmExpr(0); } break; @@ -6612,9 +6640,9 @@ public class KickCParser extends Parser { _localctx = new AsmModeImmContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(783); + setState(795); match(ASM_IMM); - setState(784); + setState(796); asmExpr(0); } break; @@ -6622,11 +6650,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeAbsXYContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(785); + setState(797); asmExpr(0); - setState(786); + setState(798); match(ASM_COMMA); - setState(787); + setState(799); asmExpr(0); } break; @@ -6634,15 +6662,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndIdxXYContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(789); + setState(801); match(ASM_PAR_BEGIN); - setState(790); + setState(802); asmExpr(0); - setState(791); + setState(803); match(ASM_PAR_END); - setState(792); + setState(804); match(ASM_COMMA); - setState(793); + setState(805); match(ASM_NAME); } break; @@ -6650,19 +6678,19 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndLongIdxXYContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(795); + setState(807); match(ASM_PAR_BEGIN); - setState(796); + setState(808); match(ASM_PAR_BEGIN); - setState(797); + setState(809); asmExpr(0); - setState(798); + setState(810); match(ASM_PAR_END); - setState(799); + setState(811); match(ASM_PAR_END); - setState(800); + setState(812); match(ASM_COMMA); - setState(801); + setState(813); match(ASM_NAME); } break; @@ -6670,19 +6698,19 @@ public class KickCParser extends Parser { _localctx = new AsmModeSPIndIdxContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(803); + setState(815); match(ASM_PAR_BEGIN); - setState(804); + setState(816); asmExpr(0); - setState(805); + setState(817); match(ASM_COMMA); - setState(806); + setState(818); match(ASM_NAME); - setState(807); + setState(819); match(ASM_PAR_END); - setState(808); + setState(820); match(ASM_COMMA); - setState(809); + setState(821); match(ASM_NAME); } break; @@ -6690,15 +6718,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIdxIndXYContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(811); + setState(823); match(ASM_PAR_BEGIN); - setState(812); + setState(824); asmExpr(0); - setState(813); + setState(825); match(ASM_COMMA); - setState(814); + setState(826); match(ASM_NAME); - setState(815); + setState(827); match(ASM_PAR_END); } break; @@ -6706,11 +6734,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(817); + setState(829); match(ASM_PAR_BEGIN); - setState(818); + setState(830); asmExpr(0); - setState(819); + setState(831); match(ASM_PAR_END); } break; @@ -6718,15 +6746,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndLongContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(821); + setState(833); match(ASM_PAR_BEGIN); - setState(822); + setState(834); match(ASM_PAR_BEGIN); - setState(823); + setState(835); asmExpr(0); - setState(824); + setState(836); match(ASM_PAR_END); - setState(825); + setState(837); match(ASM_PAR_END); } break; @@ -6931,7 +6959,7 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(843); + setState(855); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_BRACKET_BEGIN: @@ -6940,11 +6968,11 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(830); + setState(842); match(ASM_BRACKET_BEGIN); - setState(831); + setState(843); asmExpr(0); - setState(832); + setState(844); match(ASM_BRACKET_END); } break; @@ -6956,7 +6984,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(834); + setState(846); _la = _input.LA(1); if ( !(((((_la - 125)) & ~0x3f) == 0 && ((1L << (_la - 125)) & ((1L << (ASM_PLUS - 125)) | (1L << (ASM_MINUS - 125)) | (1L << (ASM_LESS_THAN - 125)) | (1L << (ASM_GREATER_THAN - 125)))) != 0)) ) { _errHandler.recoverInline(this); @@ -6966,7 +6994,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(835); + setState(847); asmExpr(8); } break; @@ -6975,7 +7003,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(836); + setState(848); match(ASM_NAME); } break; @@ -6984,7 +7012,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelRelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(837); + setState(849); match(ASM_MULTI_REL); } break; @@ -6993,11 +7021,11 @@ public class KickCParser extends Parser { _localctx = new AsmExprReplaceContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(838); + setState(850); match(ASM_CURLY_BEGIN); - setState(839); + setState(851); match(ASM_NAME); - setState(840); + setState(852); match(ASM_CURLY_END); } break; @@ -7006,7 +7034,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprIntContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(841); + setState(853); match(ASM_NUMBER); } break; @@ -7015,7 +7043,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(842); + setState(854); match(ASM_CHAR); } break; @@ -7023,7 +7051,7 @@ public class KickCParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(859); + setState(871); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,89,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -7031,20 +7059,20 @@ public class KickCParser extends Parser { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(857); + setState(869); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,88,_ctx) ) { case 1: { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(845); + setState(857); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { - setState(846); + setState(858); match(ASM_DOT); } - setState(847); + setState(859); asmExpr(11); } break; @@ -7052,9 +7080,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(848); + setState(860); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(849); + setState(861); _la = _input.LA(1); if ( !(_la==ASM_SHIFT_LEFT || _la==ASM_SHIFT_RIGHT) ) { _errHandler.recoverInline(this); @@ -7064,7 +7092,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(850); + setState(862); asmExpr(10); } break; @@ -7072,9 +7100,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(851); + setState(863); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(852); + setState(864); _la = _input.LA(1); if ( !(_la==ASM_MULTIPLY || _la==ASM_DIVIDE) ) { _errHandler.recoverInline(this); @@ -7084,7 +7112,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(853); + setState(865); asmExpr(8); } break; @@ -7092,9 +7120,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(854); + setState(866); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(855); + setState(867); _la = _input.LA(1); if ( !(_la==ASM_PLUS || _la==ASM_MINUS) ) { _errHandler.recoverInline(this); @@ -7104,14 +7132,14 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(856); + setState(868); asmExpr(7); } break; } } } - setState(861); + setState(873); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,89,_ctx); } @@ -7240,7 +7268,7 @@ public class KickCParser extends Parser { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u009c\u0361\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u009c\u036d\4\2\t"+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ @@ -7295,61 +7323,62 @@ public class KickCParser extends Parser { "\u02bd\n%\f%\16%\u02c0\13%\3&\3&\3&\7&\u02c5\n&\f&\16&\u02c8\13&\3\'\3"+ "\'\5\'\u02cc\n\'\3\'\3\'\3(\3(\3(\3(\7(\u02d4\n(\f(\16(\u02d7\13(\3(\3"+ "(\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\5)\u02e5\n)\3*\7*\u02e8\n*\f*\16*\u02eb"+ - "\13*\3+\3+\3+\5+\u02f0\n+\3,\3,\3,\5,\u02f5\n,\3,\3,\3,\5,\u02fa\n,\5"+ - ",\u02fc\n,\3-\3-\5-\u0300\n-\3-\5-\u0303\n-\3.\3.\3.\3.\7.\u0309\n.\f"+ - ".\16.\u030c\13.\3.\5.\u030f\n.\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/"+ - "\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/"+ - "\3/\3/\3/\3/\3/\3/\3/\3/\3/\5/\u033e\n/\3\60\3\60\3\60\3\60\3\60\3\60"+ - "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\5\60\u034e\n\60\3\60\3\60\3\60"+ - "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\7\60\u035c\n\60\f\60\16"+ - "\60\u035f\13\60\3\60\2\t\f\30\32&FH^\61\2\4\6\b\n\f\16\20\22\24\26\30"+ - "\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^\2\r\3\2\27\30\5\2"+ - "\22\23\31\32RR\4\2!!$$\3\2\35\36\3\2\24\26\3\2\22\23\3\2\37$\3\2\177\u0082"+ - "\3\2}~\3\2\u0083\u0084\3\2\177\u0080\2\u03e2\2`\3\2\2\2\4c\3\2\2\2\6i"+ - "\3\2\2\2\bz\3\2\2\2\n|\3\2\2\2\f\177\3\2\2\2\16\u0096\3\2\2\2\20\u00bb"+ - "\3\2\2\2\22\u00c0\3\2\2\2\24\u00ca\3\2\2\2\26\u00d1\3\2\2\2\30\u00d7\3"+ - "\2\2\2\32\u00f6\3\2\2\2\34\u0106\3\2\2\2\36\u0109\3\2\2\2 \u0115\3\2\2"+ - "\2\"\u0118\3\2\2\2$\u011b\3\2\2\2&\u0123\3\2\2\2(\u012e\3\2\2\2*\u0133"+ - "\3\2\2\2,\u0144\3\2\2\2.\u014a\3\2\2\2\60\u015d\3\2\2\2\62\u015f\3\2\2"+ - "\2\64\u0173\3\2\2\2\66\u01a2\3\2\2\28\u01a5\3\2\2\2:\u01fe\3\2\2\2<\u0201"+ - "\3\2\2\2>\u020c\3\2\2\2@\u022a\3\2\2\2B\u0230\3\2\2\2D\u0232\3\2\2\2F"+ - "\u0234\3\2\2\2H\u0280\3\2\2\2J\u02c1\3\2\2\2L\u02c9\3\2\2\2N\u02cf\3\2"+ - "\2\2P\u02e4\3\2\2\2R\u02e9\3\2\2\2T\u02ef\3\2\2\2V\u02fb\3\2\2\2X\u02fd"+ - "\3\2\2\2Z\u0304\3\2\2\2\\\u033d\3\2\2\2^\u034d\3\2\2\2`a\5\6\4\2ab\7\2"+ - "\2\3b\3\3\2\2\2cd\5R*\2de\7\2\2\3e\5\3\2\2\2fh\5\b\5\2gf\3\2\2\2hk\3\2"+ - "\2\2ig\3\2\2\2ij\3\2\2\2j\7\3\2\2\2ki\3\2\2\2lm\5\n\6\2mn\7\n\2\2n{\3"+ - "\2\2\2op\5\36\20\2pq\7\n\2\2q{\3\2\2\2rs\5$\23\2st\7\n\2\2t{\3\2\2\2u"+ - "{\5*\26\2v{\5\62\32\2wx\5\16\b\2xy\7\n\2\2y{\3\2\2\2zl\3\2\2\2zo\3\2\2"+ - "\2zr\3\2\2\2zu\3\2\2\2zv\3\2\2\2zw\3\2\2\2{\t\3\2\2\2|}\5\22\n\2}~\5\f"+ - "\7\2~\13\3\2\2\2\177\u0083\b\7\1\2\u0080\u0082\5\24\13\2\u0081\u0080\3"+ - "\2\2\2\u0082\u0085\3\2\2\2\u0083\u0081\3\2\2\2\u0083\u0084\3\2\2\2\u0084"+ - "\u0086\3\2\2\2\u0085\u0083\3\2\2\2\u0086\u0087\5\20\t\2\u0087\u0093\3"+ - "\2\2\2\u0088\u0089\f\3\2\2\u0089\u008d\7\f\2\2\u008a\u008c\5\24\13\2\u008b"+ - "\u008a\3\2\2\2\u008c\u008f\3\2\2\2\u008d\u008b\3\2\2\2\u008d\u008e\3\2"+ - "\2\2\u008e\u0090\3\2\2\2\u008f\u008d\3\2\2\2\u0090\u0092\5\20\t\2\u0091"+ - "\u0088\3\2\2\2\u0092\u0095\3\2\2\2\u0093\u0091\3\2\2\2\u0093\u0094\3\2"+ - "\2\2\u0094\r\3\2\2\2\u0095\u0093\3\2\2\2\u0096\u0097\7)\2\2\u0097\u009b"+ - "\5\22\n\2\u0098\u009a\5\24\13\2\u0099\u0098\3\2\2\2\u009a\u009d\3\2\2"+ - "\2\u009b\u0099\3\2\2\2\u009b\u009c\3\2\2\2\u009c\u009e\3\2\2\2\u009d\u009b"+ - "\3\2\2\2\u009e\u00a2\7m\2\2\u009f\u00a1\5\26\f\2\u00a0\u009f\3\2\2\2\u00a1"+ - "\u00a4\3\2\2\2\u00a2\u00a0\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3\u00a5\3\2"+ - "\2\2\u00a4\u00a2\3\2\2\2\u00a5\u00a6\b\b\1\2\u00a6\17\3\2\2\2\u00a7\u00ab"+ - "\7m\2\2\u00a8\u00aa\5\26\f\2\u00a9\u00a8\3\2\2\2\u00aa\u00ad\3\2\2\2\u00ab"+ - "\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00b0\3\2\2\2\u00ad\u00ab\3\2"+ - "\2\2\u00ae\u00af\7\'\2\2\u00af\u00b1\5H%\2\u00b0\u00ae\3\2\2\2\u00b0\u00b1"+ - "\3\2\2\2\u00b1\u00bc\3\2\2\2\u00b2\u00b6\7m\2\2\u00b3\u00b5\5\26\f\2\u00b4"+ - "\u00b3\3\2\2\2\u00b5\u00b8\3\2\2\2\u00b6\u00b4\3\2\2\2\u00b6\u00b7\3\2"+ - "\2\2\u00b7\u00b9\3\2\2\2\u00b8\u00b6\3\2\2\2\u00b9\u00ba\7\'\2\2\u00ba"+ - "\u00bc\5L\'\2\u00bb\u00a7\3\2\2\2\u00bb\u00b2\3\2\2\2\u00bc\21\3\2\2\2"+ - "\u00bd\u00bf\5\66\34\2\u00be\u00bd\3\2\2\2\u00bf\u00c2\3\2\2\2\u00c0\u00be"+ - "\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c3\3\2\2\2\u00c2\u00c0\3\2\2\2\u00c3"+ - "\u00c7\5\32\16\2\u00c4\u00c6\5\66\34\2\u00c5\u00c4\3\2\2\2\u00c6\u00c9"+ - "\3\2\2\2\u00c7\u00c5\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\23\3\2\2\2\u00c9"+ - "\u00c7\3\2\2\2\u00ca\u00ce\7\24\2\2\u00cb\u00cd\5\66\34\2\u00cc\u00cb"+ - "\3\2\2\2\u00cd\u00d0\3\2\2\2\u00ce\u00cc\3\2\2\2\u00ce\u00cf\3\2\2\2\u00cf"+ - "\25\3\2\2\2\u00d0\u00ce\3\2\2\2\u00d1\u00d3\7\6\2\2\u00d2\u00d4\5H%\2"+ - "\u00d3\u00d2\3\2\2\2\u00d3\u00d4\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d6"+ - "\7\7\2\2\u00d6\27\3\2\2\2\u00d7\u00d8\b\r\1\2\u00d8\u00d9\5\32\16\2\u00d9"+ + "\13*\3+\3+\3+\5+\u02f0\n+\3,\3,\3,\7,\u02f5\n,\f,\16,\u02f8\13,\3,\3,"+ + "\3,\7,\u02fd\n,\f,\16,\u0300\13,\5,\u0302\n,\3-\3-\5-\u0306\n-\3-\7-\u0309"+ + "\n-\f-\16-\u030c\13-\3.\3.\3.\3.\7.\u0312\n.\f.\16.\u0315\13.\3.\7.\u0318"+ + "\n.\f.\16.\u031b\13.\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3"+ + "/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3"+ + "/\3/\3/\3/\3/\3/\5/\u034a\n/\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3"+ + "\60\3\60\3\60\3\60\3\60\3\60\5\60\u035a\n\60\3\60\3\60\3\60\3\60\3\60"+ + "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\7\60\u0368\n\60\f\60\16\60\u036b\13"+ + "\60\3\60\2\t\f\30\32&FH^\61\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \""+ + "$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^\2\r\3\2\27\30\5\2\22\23\31\32"+ + "RR\4\2!!$$\3\2\35\36\3\2\24\26\3\2\22\23\3\2\37$\3\2\177\u0082\3\2}~\3"+ + "\2\u0083\u0084\3\2\177\u0080\2\u03ee\2`\3\2\2\2\4c\3\2\2\2\6i\3\2\2\2"+ + "\bz\3\2\2\2\n|\3\2\2\2\f\177\3\2\2\2\16\u0096\3\2\2\2\20\u00bb\3\2\2\2"+ + "\22\u00c0\3\2\2\2\24\u00ca\3\2\2\2\26\u00d1\3\2\2\2\30\u00d7\3\2\2\2\32"+ + "\u00f6\3\2\2\2\34\u0106\3\2\2\2\36\u0109\3\2\2\2 \u0115\3\2\2\2\"\u0118"+ + "\3\2\2\2$\u011b\3\2\2\2&\u0123\3\2\2\2(\u012e\3\2\2\2*\u0133\3\2\2\2,"+ + "\u0144\3\2\2\2.\u014a\3\2\2\2\60\u015d\3\2\2\2\62\u015f\3\2\2\2\64\u0173"+ + "\3\2\2\2\66\u01a2\3\2\2\28\u01a5\3\2\2\2:\u01fe\3\2\2\2<\u0201\3\2\2\2"+ + ">\u020c\3\2\2\2@\u022a\3\2\2\2B\u0230\3\2\2\2D\u0232\3\2\2\2F\u0234\3"+ + "\2\2\2H\u0280\3\2\2\2J\u02c1\3\2\2\2L\u02c9\3\2\2\2N\u02cf\3\2\2\2P\u02e4"+ + "\3\2\2\2R\u02e9\3\2\2\2T\u02ef\3\2\2\2V\u0301\3\2\2\2X\u0303\3\2\2\2Z"+ + "\u030d\3\2\2\2\\\u0349\3\2\2\2^\u0359\3\2\2\2`a\5\6\4\2ab\7\2\2\3b\3\3"+ + "\2\2\2cd\5R*\2de\7\2\2\3e\5\3\2\2\2fh\5\b\5\2gf\3\2\2\2hk\3\2\2\2ig\3"+ + "\2\2\2ij\3\2\2\2j\7\3\2\2\2ki\3\2\2\2lm\5\n\6\2mn\7\n\2\2n{\3\2\2\2op"+ + "\5\36\20\2pq\7\n\2\2q{\3\2\2\2rs\5$\23\2st\7\n\2\2t{\3\2\2\2u{\5*\26\2"+ + "v{\5\62\32\2wx\5\16\b\2xy\7\n\2\2y{\3\2\2\2zl\3\2\2\2zo\3\2\2\2zr\3\2"+ + "\2\2zu\3\2\2\2zv\3\2\2\2zw\3\2\2\2{\t\3\2\2\2|}\5\22\n\2}~\5\f\7\2~\13"+ + "\3\2\2\2\177\u0083\b\7\1\2\u0080\u0082\5\24\13\2\u0081\u0080\3\2\2\2\u0082"+ + "\u0085\3\2\2\2\u0083\u0081\3\2\2\2\u0083\u0084\3\2\2\2\u0084\u0086\3\2"+ + "\2\2\u0085\u0083\3\2\2\2\u0086\u0087\5\20\t\2\u0087\u0093\3\2\2\2\u0088"+ + "\u0089\f\3\2\2\u0089\u008d\7\f\2\2\u008a\u008c\5\24\13\2\u008b\u008a\3"+ + "\2\2\2\u008c\u008f\3\2\2\2\u008d\u008b\3\2\2\2\u008d\u008e\3\2\2\2\u008e"+ + "\u0090\3\2\2\2\u008f\u008d\3\2\2\2\u0090\u0092\5\20\t\2\u0091\u0088\3"+ + "\2\2\2\u0092\u0095\3\2\2\2\u0093\u0091\3\2\2\2\u0093\u0094\3\2\2\2\u0094"+ + "\r\3\2\2\2\u0095\u0093\3\2\2\2\u0096\u0097\7)\2\2\u0097\u009b\5\22\n\2"+ + "\u0098\u009a\5\24\13\2\u0099\u0098\3\2\2\2\u009a\u009d\3\2\2\2\u009b\u0099"+ + "\3\2\2\2\u009b\u009c\3\2\2\2\u009c\u009e\3\2\2\2\u009d\u009b\3\2\2\2\u009e"+ + "\u00a2\7m\2\2\u009f\u00a1\5\26\f\2\u00a0\u009f\3\2\2\2\u00a1\u00a4\3\2"+ + "\2\2\u00a2\u00a0\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3\u00a5\3\2\2\2\u00a4"+ + "\u00a2\3\2\2\2\u00a5\u00a6\b\b\1\2\u00a6\17\3\2\2\2\u00a7\u00ab\7m\2\2"+ + "\u00a8\u00aa\5\26\f\2\u00a9\u00a8\3\2\2\2\u00aa\u00ad\3\2\2\2\u00ab\u00a9"+ + "\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00b0\3\2\2\2\u00ad\u00ab\3\2\2\2\u00ae"+ + "\u00af\7\'\2\2\u00af\u00b1\5H%\2\u00b0\u00ae\3\2\2\2\u00b0\u00b1\3\2\2"+ + "\2\u00b1\u00bc\3\2\2\2\u00b2\u00b6\7m\2\2\u00b3\u00b5\5\26\f\2\u00b4\u00b3"+ + "\3\2\2\2\u00b5\u00b8\3\2\2\2\u00b6\u00b4\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7"+ + "\u00b9\3\2\2\2\u00b8\u00b6\3\2\2\2\u00b9\u00ba\7\'\2\2\u00ba\u00bc\5L"+ + "\'\2\u00bb\u00a7\3\2\2\2\u00bb\u00b2\3\2\2\2\u00bc\21\3\2\2\2\u00bd\u00bf"+ + "\5\66\34\2\u00be\u00bd\3\2\2\2\u00bf\u00c2\3\2\2\2\u00c0\u00be\3\2\2\2"+ + "\u00c0\u00c1\3\2\2\2\u00c1\u00c3\3\2\2\2\u00c2\u00c0\3\2\2\2\u00c3\u00c7"+ + "\5\32\16\2\u00c4\u00c6\5\66\34\2\u00c5\u00c4\3\2\2\2\u00c6\u00c9\3\2\2"+ + "\2\u00c7\u00c5\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\23\3\2\2\2\u00c9\u00c7"+ + "\3\2\2\2\u00ca\u00ce\7\24\2\2\u00cb\u00cd\5\66\34\2\u00cc\u00cb\3\2\2"+ + "\2\u00cd\u00d0\3\2\2\2\u00ce\u00cc\3\2\2\2\u00ce\u00cf\3\2\2\2\u00cf\25"+ + "\3\2\2\2\u00d0\u00ce\3\2\2\2\u00d1\u00d3\7\6\2\2\u00d2\u00d4\5H%\2\u00d3"+ + "\u00d2\3\2\2\2\u00d3\u00d4\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d6\7\7"+ + "\2\2\u00d6\27\3\2\2\2\u00d7\u00d8\b\r\1\2\u00d8\u00d9\5\32\16\2\u00d9"+ "\u00e4\3\2\2\2\u00da\u00db\f\4\2\2\u00db\u00e3\7\24\2\2\u00dc\u00dd\f"+ "\3\2\2\u00dd\u00df\7\6\2\2\u00de\u00e0\5H%\2\u00df\u00de\3\2\2\2\u00df"+ "\u00e0\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1\u00e3\7\7\2\2\u00e2\u00da\3\2"+ @@ -7535,52 +7564,56 @@ public class KickCParser extends Parser { "\u02eb\3\2\2\2\u02e9\u02e7\3\2\2\2\u02e9\u02ea\3\2\2\2\u02eaS\3\2\2\2"+ "\u02eb\u02e9\3\2\2\2\u02ec\u02f0\5V,\2\u02ed\u02f0\5X-\2\u02ee\u02f0\5"+ "Z.\2\u02ef\u02ec\3\2\2\2\u02ef\u02ed\3\2\2\2\u02ef\u02ee\3\2\2\2\u02f0"+ - "U\3\2\2\2\u02f1\u02f2\7\u0093\2\2\u02f2\u02f4\7v\2\2\u02f3\u02f5\7\u0094"+ - "\2\2\u02f4\u02f3\3\2\2\2\u02f4\u02f5\3\2\2\2\u02f5\u02fc\3\2\2\2\u02f6"+ - "\u02f7\7\u0092\2\2\u02f7\u02f9\7v\2\2\u02f8\u02fa\7\u0094\2\2\u02f9\u02f8"+ - "\3\2\2\2\u02f9\u02fa\3\2\2\2\u02fa\u02fc\3\2\2\2\u02fb\u02f1\3\2\2\2\u02fb"+ - "\u02f6\3\2\2\2\u02fcW\3\2\2\2\u02fd\u02ff\7t\2\2\u02fe\u0300\5\\/\2\u02ff"+ - "\u02fe\3\2\2\2\u02ff\u0300\3\2\2\2\u0300\u0302\3\2\2\2\u0301\u0303\7\u0094"+ - "\2\2\u0302\u0301\3\2\2\2\u0302\u0303\3\2\2\2\u0303Y\3\2\2\2\u0304\u0305"+ - "\7s\2\2\u0305\u030a\5^\60\2\u0306\u0307\7w\2\2\u0307\u0309\5^\60\2\u0308"+ - "\u0306\3\2\2\2\u0309\u030c\3\2\2\2\u030a\u0308\3\2\2\2\u030a\u030b\3\2"+ - "\2\2\u030b\u030e\3\2\2\2\u030c\u030a\3\2\2\2\u030d\u030f\7\u0094\2\2\u030e"+ - "\u030d\3\2\2\2\u030e\u030f\3\2\2\2\u030f[\3\2\2\2\u0310\u033e\5^\60\2"+ - "\u0311\u0312\7u\2\2\u0312\u033e\5^\60\2\u0313\u0314\5^\60\2\u0314\u0315"+ - "\7w\2\2\u0315\u0316\5^\60\2\u0316\u033e\3\2\2\2\u0317\u0318\7x\2\2\u0318"+ - "\u0319\5^\60\2\u0319\u031a\7y\2\2\u031a\u031b\7w\2\2\u031b\u031c\7\u0093"+ - "\2\2\u031c\u033e\3\2\2\2\u031d\u031e\7x\2\2\u031e\u031f\7x\2\2\u031f\u0320"+ - "\5^\60\2\u0320\u0321\7y\2\2\u0321\u0322\7y\2\2\u0322\u0323\7w\2\2\u0323"+ - "\u0324\7\u0093\2\2\u0324\u033e\3\2\2\2\u0325\u0326\7x\2\2\u0326\u0327"+ - "\5^\60\2\u0327\u0328\7w\2\2\u0328\u0329\7\u0093\2\2\u0329\u032a\7y\2\2"+ - "\u032a\u032b\7w\2\2\u032b\u032c\7\u0093\2\2\u032c\u033e\3\2\2\2\u032d"+ - "\u032e\7x\2\2\u032e\u032f\5^\60\2\u032f\u0330\7w\2\2\u0330\u0331\7\u0093"+ - "\2\2\u0331\u0332\7y\2\2\u0332\u033e\3\2\2\2\u0333\u0334\7x\2\2\u0334\u0335"+ - "\5^\60\2\u0335\u0336\7y\2\2\u0336\u033e\3\2\2\2\u0337\u0338\7x\2\2\u0338"+ - "\u0339\7x\2\2\u0339\u033a\5^\60\2\u033a\u033b\7y\2\2\u033b\u033c\7y\2"+ - "\2\u033c\u033e\3\2\2\2\u033d\u0310\3\2\2\2\u033d\u0311\3\2\2\2\u033d\u0313"+ - "\3\2\2\2\u033d\u0317\3\2\2\2\u033d\u031d\3\2\2\2\u033d\u0325\3\2\2\2\u033d"+ - "\u032d\3\2\2\2\u033d\u0333\3\2\2\2\u033d\u0337\3\2\2\2\u033e]\3\2\2\2"+ - "\u033f\u0340\b\60\1\2\u0340\u0341\7z\2\2\u0341\u0342\5^\60\2\u0342\u0343"+ - "\7{\2\2\u0343\u034e\3\2\2\2\u0344\u0345\t\t\2\2\u0345\u034e\5^\60\n\u0346"+ - "\u034e\7\u0093\2\2\u0347\u034e\7\u0091\2\2\u0348\u0349\7\u0085\2\2\u0349"+ - "\u034a\7\u0093\2\2\u034a\u034e\7\u0086\2\2\u034b\u034e\7\u0087\2\2\u034c"+ - "\u034e\7\u0090\2\2\u034d\u033f\3\2\2\2\u034d\u0344\3\2\2\2\u034d\u0346"+ - "\3\2\2\2\u034d\u0347\3\2\2\2\u034d\u0348\3\2\2\2\u034d\u034b\3\2\2\2\u034d"+ - "\u034c\3\2\2\2\u034e\u035d\3\2\2\2\u034f\u0350\f\f\2\2\u0350\u0351\7|"+ - "\2\2\u0351\u035c\5^\60\r\u0352\u0353\f\13\2\2\u0353\u0354\t\n\2\2\u0354"+ - "\u035c\5^\60\f\u0355\u0356\f\t\2\2\u0356\u0357\t\13\2\2\u0357\u035c\5"+ - "^\60\n\u0358\u0359\f\b\2\2\u0359\u035a\t\f\2\2\u035a\u035c\5^\60\t\u035b"+ - "\u034f\3\2\2\2\u035b\u0352\3\2\2\2\u035b\u0355\3\2\2\2\u035b\u0358\3\2"+ - "\2\2\u035c\u035f\3\2\2\2\u035d\u035b\3\2\2\2\u035d\u035e\3\2\2\2\u035e"+ - "_\3\2\2\2\u035f\u035d\3\2\2\2\\iz\u0083\u008d\u0093\u009b\u00a2\u00ab"+ - "\u00b0\u00b6\u00bb\u00c0\u00c7\u00ce\u00d3\u00df\u00e2\u00e4\u00ef\u00f6"+ - "\u00fb\u0101\u0103\u010b\u0111\u011d\u012b\u0131\u0137\u013d\u0142\u0146"+ - "\u014f\u0156\u015d\u0167\u0173\u017e\u0193\u019c\u01a2\u01a7\u01ae\u01bb"+ - "\u01c0\u01cc\u01da\u01ed\u01f6\u01fe\u0203\u0208\u020a\u0210\u0215\u0219"+ - "\u021f\u0222\u022a\u022d\u0230\u023c\u0248\u0250\u0256\u025a\u026f\u0273"+ - "\u027c\u0280\u02b2\u02bc\u02be\u02c6\u02cb\u02d5\u02e4\u02e9\u02ef\u02f4"+ - "\u02f9\u02fb\u02ff\u0302\u030a\u030e\u033d\u034d\u035b\u035d"; + "U\3\2\2\2\u02f1\u02f2\7\u0093\2\2\u02f2\u02f6\7v\2\2\u02f3\u02f5\7\u0094"+ + "\2\2\u02f4\u02f3\3\2\2\2\u02f5\u02f8\3\2\2\2\u02f6\u02f4\3\2\2\2\u02f6"+ + "\u02f7\3\2\2\2\u02f7\u0302\3\2\2\2\u02f8\u02f6\3\2\2\2\u02f9\u02fa\7\u0092"+ + "\2\2\u02fa\u02fe\7v\2\2\u02fb\u02fd\7\u0094\2\2\u02fc\u02fb\3\2\2\2\u02fd"+ + "\u0300\3\2\2\2\u02fe\u02fc\3\2\2\2\u02fe\u02ff\3\2\2\2\u02ff\u0302\3\2"+ + "\2\2\u0300\u02fe\3\2\2\2\u0301\u02f1\3\2\2\2\u0301\u02f9\3\2\2\2\u0302"+ + "W\3\2\2\2\u0303\u0305\7t\2\2\u0304\u0306\5\\/\2\u0305\u0304\3\2\2\2\u0305"+ + "\u0306\3\2\2\2\u0306\u030a\3\2\2\2\u0307\u0309\7\u0094\2\2\u0308\u0307"+ + "\3\2\2\2\u0309\u030c\3\2\2\2\u030a\u0308\3\2\2\2\u030a\u030b\3\2\2\2\u030b"+ + "Y\3\2\2\2\u030c\u030a\3\2\2\2\u030d\u030e\7s\2\2\u030e\u0313\5^\60\2\u030f"+ + "\u0310\7w\2\2\u0310\u0312\5^\60\2\u0311\u030f\3\2\2\2\u0312\u0315\3\2"+ + "\2\2\u0313\u0311\3\2\2\2\u0313\u0314\3\2\2\2\u0314\u0319\3\2\2\2\u0315"+ + "\u0313\3\2\2\2\u0316\u0318\7\u0094\2\2\u0317\u0316\3\2\2\2\u0318\u031b"+ + "\3\2\2\2\u0319\u0317\3\2\2\2\u0319\u031a\3\2\2\2\u031a[\3\2\2\2\u031b"+ + "\u0319\3\2\2\2\u031c\u034a\5^\60\2\u031d\u031e\7u\2\2\u031e\u034a\5^\60"+ + "\2\u031f\u0320\5^\60\2\u0320\u0321\7w\2\2\u0321\u0322\5^\60\2\u0322\u034a"+ + "\3\2\2\2\u0323\u0324\7x\2\2\u0324\u0325\5^\60\2\u0325\u0326\7y\2\2\u0326"+ + "\u0327\7w\2\2\u0327\u0328\7\u0093\2\2\u0328\u034a\3\2\2\2\u0329\u032a"+ + "\7x\2\2\u032a\u032b\7x\2\2\u032b\u032c\5^\60\2\u032c\u032d\7y\2\2\u032d"+ + "\u032e\7y\2\2\u032e\u032f\7w\2\2\u032f\u0330\7\u0093\2\2\u0330\u034a\3"+ + "\2\2\2\u0331\u0332\7x\2\2\u0332\u0333\5^\60\2\u0333\u0334\7w\2\2\u0334"+ + "\u0335\7\u0093\2\2\u0335\u0336\7y\2\2\u0336\u0337\7w\2\2\u0337\u0338\7"+ + "\u0093\2\2\u0338\u034a\3\2\2\2\u0339\u033a\7x\2\2\u033a\u033b\5^\60\2"+ + "\u033b\u033c\7w\2\2\u033c\u033d\7\u0093\2\2\u033d\u033e\7y\2\2\u033e\u034a"+ + "\3\2\2\2\u033f\u0340\7x\2\2\u0340\u0341\5^\60\2\u0341\u0342\7y\2\2\u0342"+ + "\u034a\3\2\2\2\u0343\u0344\7x\2\2\u0344\u0345\7x\2\2\u0345\u0346\5^\60"+ + "\2\u0346\u0347\7y\2\2\u0347\u0348\7y\2\2\u0348\u034a\3\2\2\2\u0349\u031c"+ + "\3\2\2\2\u0349\u031d\3\2\2\2\u0349\u031f\3\2\2\2\u0349\u0323\3\2\2\2\u0349"+ + "\u0329\3\2\2\2\u0349\u0331\3\2\2\2\u0349\u0339\3\2\2\2\u0349\u033f\3\2"+ + "\2\2\u0349\u0343\3\2\2\2\u034a]\3\2\2\2\u034b\u034c\b\60\1\2\u034c\u034d"+ + "\7z\2\2\u034d\u034e\5^\60\2\u034e\u034f\7{\2\2\u034f\u035a\3\2\2\2\u0350"+ + "\u0351\t\t\2\2\u0351\u035a\5^\60\n\u0352\u035a\7\u0093\2\2\u0353\u035a"+ + "\7\u0091\2\2\u0354\u0355\7\u0085\2\2\u0355\u0356\7\u0093\2\2\u0356\u035a"+ + "\7\u0086\2\2\u0357\u035a\7\u0087\2\2\u0358\u035a\7\u0090\2\2\u0359\u034b"+ + "\3\2\2\2\u0359\u0350\3\2\2\2\u0359\u0352\3\2\2\2\u0359\u0353\3\2\2\2\u0359"+ + "\u0354\3\2\2\2\u0359\u0357\3\2\2\2\u0359\u0358\3\2\2\2\u035a\u0369\3\2"+ + "\2\2\u035b\u035c\f\f\2\2\u035c\u035d\7|\2\2\u035d\u0368\5^\60\r\u035e"+ + "\u035f\f\13\2\2\u035f\u0360\t\n\2\2\u0360\u0368\5^\60\f\u0361\u0362\f"+ + "\t\2\2\u0362\u0363\t\13\2\2\u0363\u0368\5^\60\n\u0364\u0365\f\b\2\2\u0365"+ + "\u0366\t\f\2\2\u0366\u0368\5^\60\t\u0367\u035b\3\2\2\2\u0367\u035e\3\2"+ + "\2\2\u0367\u0361\3\2\2\2\u0367\u0364\3\2\2\2\u0368\u036b\3\2\2\2\u0369"+ + "\u0367\3\2\2\2\u0369\u036a\3\2\2\2\u036a_\3\2\2\2\u036b\u0369\3\2\2\2"+ + "\\iz\u0083\u008d\u0093\u009b\u00a2\u00ab\u00b0\u00b6\u00bb\u00c0\u00c7"+ + "\u00ce\u00d3\u00df\u00e2\u00e4\u00ef\u00f6\u00fb\u0101\u0103\u010b\u0111"+ + "\u011d\u012b\u0131\u0137\u013d\u0142\u0146\u014f\u0156\u015d\u0167\u0173"+ + "\u017e\u0193\u019c\u01a2\u01a7\u01ae\u01bb\u01c0\u01cc\u01da\u01ed\u01f6"+ + "\u01fe\u0203\u0208\u020a\u0210\u0215\u0219\u021f\u0222\u022a\u022d\u0230"+ + "\u023c\u0248\u0250\u0256\u025a\u026f\u0273\u027c\u0280\u02b2\u02bc\u02be"+ + "\u02c6\u02cb\u02d5\u02e4\u02e9\u02ef\u02f6\u02fe\u0301\u0305\u030a\u0313"+ + "\u0319\u0349\u0359\u0367\u0369"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 88168deeb..d485ec6df 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -1060,10 +1060,6 @@ public class Pass4CodeGeneration { } catch(AsmFragmentTemplateSynthesizer.UnknownFragmentException e) { throw new CompileError("Interrupt type not supported " + procedure.getInterruptType() + " int " + procedure.toString() + "\n" + e.getMessage()); } - // Mark labels as don't optimize - for(AsmLine asmLine : asm.getCurrentChunk().getLines()) { - if(asmLine instanceof AsmLabel) ((AsmLabel) asmLine).setDontOptimize(true); - } } private void addKickAsm(AsmProgram asm, StatementKickAsm statementKasm) { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass5UnnecesaryLoadElimination.java b/src/main/java/dk/camelot64/kickc/passes/Pass5UnnecesaryLoadElimination.java index 4379c4ae7..10a7cf14c 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass5UnnecesaryLoadElimination.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass5UnnecesaryLoadElimination.java @@ -32,7 +32,7 @@ public class Pass5UnnecesaryLoadElimination extends Pass5AsmOptimization { AsmLine line = lineIt.next(); if(line instanceof AsmInstruction) { AsmInstruction instruction = (AsmInstruction) line; - if(instruction.isDontOptimize()) { + if(instruction.isNoOptimize()) { continue; } CpuOpcode cpuOpcode = instruction.getCpuOpcode(); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass5UnusedLabelElimination.java b/src/main/java/dk/camelot64/kickc/passes/Pass5UnusedLabelElimination.java index 0bb8b9d3e..f739d9bae 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass5UnusedLabelElimination.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass5UnusedLabelElimination.java @@ -72,7 +72,7 @@ public class Pass5UnusedLabelElimination extends Pass5AsmOptimization { currentScope = ""; } else if(line instanceof AsmLabel) { AsmLabel label = (AsmLabel) line; - if(label.isDontOptimize()) { + if(label.isNoOptimize()) { continue; } String labelStr = currentScope + "::" + label.getLabel();