mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-11-25 20:32:25 +00:00
Added more tests for __address(). Added error when using __address on a local array variable.
This commit is contained in:
parent
597b0e3a77
commit
3d4d114522
650
src/main/fragment/cache/fragment-cache-mos6502.asm
vendored
650
src/main/fragment/cache/fragment-cache-mos6502.asm
vendored
@ -1,4 +1,4 @@
|
||||
//KICKC FRAGMENT CACHE 131184b631
|
||||
//KICKC FRAGMENT CACHE 12e560f399
|
||||
//FRAGMENT vbuz1=vbuc1
|
||||
lda #{c1}
|
||||
sta {z1}
|
||||
@ -112,651 +112,3 @@ bne {la1}
|
||||
//FRAGMENT vbuyy_neq_0_then_la1
|
||||
cpy #0
|
||||
bne {la1}
|
||||
//FRAGMENT _deref_pbuc1=vbuc2
|
||||
lda #{c2}
|
||||
sta {c1}
|
||||
//FRAGMENT vbuz1=_deref_pbuc1_band_vbuc2
|
||||
lda #{c2}
|
||||
and {c1}
|
||||
sta {z1}
|
||||
//FRAGMENT vbuc1_eq_vbuz1_then_la1
|
||||
lda #{c1}
|
||||
cmp {z1}
|
||||
beq {la1}
|
||||
//FRAGMENT vbuc1_neq_vbuz1_then_la1
|
||||
lda #{c1}
|
||||
cmp {z1}
|
||||
bne {la1}
|
||||
//FRAGMENT vwuz1=vwuc1
|
||||
lda #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
sta {z1}+1
|
||||
//FRAGMENT pvoz1=pvoc1
|
||||
lda #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vbuc1
|
||||
lda #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuz1=pbuc1
|
||||
lda #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuz1=pbuc1_plus_vbuz2
|
||||
lda {z2}
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT pvoz1=pvoz2
|
||||
lda {z2}
|
||||
sta {z1}
|
||||
lda {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vbuz1=vbuz1_plus_2
|
||||
lda {z1}
|
||||
clc
|
||||
adc #2
|
||||
sta {z1}
|
||||
//FRAGMENT vbuz1=_hi_pvoz2
|
||||
lda {z2}+1
|
||||
sta {z1}
|
||||
//FRAGMENT _deref_pbuc1=vbuz1
|
||||
lda {z1}
|
||||
sta {c1}
|
||||
//FRAGMENT vbuz1=_lo_pvoz2
|
||||
lda {z2}
|
||||
sta {z1}
|
||||
//FRAGMENT vbuz1=_deref_pbuz2
|
||||
ldy #0
|
||||
lda ({z2}),y
|
||||
sta {z1}
|
||||
//FRAGMENT vbuz1=pbuz2_derefidx_vbuc1
|
||||
ldy #{c1}
|
||||
lda ({z2}),y
|
||||
sta {z1}
|
||||
//FRAGMENT pbuz1=pbuz2_plus_vbuc1
|
||||
lda #{c1}
|
||||
clc
|
||||
adc {z2}
|
||||
sta {z1}
|
||||
lda #0
|
||||
adc {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuz1_neq_pbuc1_then_la1
|
||||
lda {z1}+1
|
||||
cmp #>{c1}
|
||||
bne {la1}
|
||||
lda {z1}
|
||||
cmp #<{c1}
|
||||
bne {la1}
|
||||
//FRAGMENT _deref_pbuz1=_deref_pbuz2
|
||||
ldy #0
|
||||
lda ({z2}),y
|
||||
ldy #0
|
||||
sta ({z1}),y
|
||||
//FRAGMENT pbuz1=_inc_pbuz1
|
||||
inc {z1}
|
||||
bne !+
|
||||
inc {z1}+1
|
||||
!:
|
||||
//FRAGMENT vwuz1_lt_vwuz2_then_la1
|
||||
lda {z1}+1
|
||||
cmp {z2}+1
|
||||
bcc {la1}
|
||||
bne !+
|
||||
lda {z1}
|
||||
cmp {z2}
|
||||
bcc {la1}
|
||||
!:
|
||||
//FRAGMENT vwuz1=_inc_vwuz1
|
||||
inc {z1}
|
||||
bne !+
|
||||
inc {z1}+1
|
||||
!:
|
||||
//FRAGMENT vwuz1_lt_vwuc1_then_la1
|
||||
lda {z1}+1
|
||||
cmp #>{c1}
|
||||
bcc {la1}
|
||||
bne !+
|
||||
lda {z1}
|
||||
cmp #<{c1}
|
||||
bcc {la1}
|
||||
!:
|
||||
//FRAGMENT vbuz1=vbuz2
|
||||
lda {z2}
|
||||
sta {z1}
|
||||
//FRAGMENT _deref_pbuc1=_inc__deref_pbuc1
|
||||
inc {c1}
|
||||
//FRAGMENT _deref_pbuc1=_dec__deref_pbuc1
|
||||
dec {c1}
|
||||
//FRAGMENT vbuz1=vbuz2_rol_1
|
||||
lda {z2}
|
||||
asl
|
||||
sta {z1}
|
||||
//FRAGMENT vbuz1=vbuz2_bor_vbuz3
|
||||
lda {z2}
|
||||
ora {z3}
|
||||
sta {z1}
|
||||
//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 vbuc1_eq_vbuaa_then_la1
|
||||
cmp #{c1}
|
||||
beq {la1}
|
||||
//FRAGMENT vbuc1_neq_vbuxx_then_la1
|
||||
cpx #{c1}
|
||||
bne {la1}
|
||||
//FRAGMENT pbuz1=pbuc1_plus_vbuaa
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuz1=pbuc1_plus_vbuxx
|
||||
txa
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuz1=pbuc1_plus_vbuyy
|
||||
tya
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vbuxx=vbuxx_plus_2
|
||||
inx
|
||||
inx
|
||||
//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=pbuz1_derefidx_vbuc1
|
||||
ldy #{c1}
|
||||
lda ({z1}),y
|
||||
//FRAGMENT vbuxx=pbuz1_derefidx_vbuc1
|
||||
ldy #{c1}
|
||||
lda ({z1}),y
|
||||
tax
|
||||
//FRAGMENT vbuyy=pbuz1_derefidx_vbuc1
|
||||
ldy #{c1}
|
||||
lda ({z1}),y
|
||||
tay
|
||||
//FRAGMENT _deref_pbuc1=vbuxx
|
||||
stx {c1}
|
||||
//FRAGMENT vbuz1=vbuaa
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=vbuz1
|
||||
lda {z1}
|
||||
//FRAGMENT vbuxx=vbuz1
|
||||
ldx {z1}
|
||||
//FRAGMENT vbuz1=vbuaa_band_vbuc1
|
||||
and #{c1}
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=vbuaa_band_vbuc1
|
||||
and #{c1}
|
||||
//FRAGMENT vbuxx=vbuaa_band_vbuc1
|
||||
and #{c1}
|
||||
tax
|
||||
//FRAGMENT vbuyy=vbuaa_band_vbuc1
|
||||
and #{c1}
|
||||
tay
|
||||
//FRAGMENT vbuz1=vbuaa_rol_1
|
||||
asl
|
||||
sta {z1}
|
||||
//FRAGMENT vbuz1=vbuxx_rol_1
|
||||
txa
|
||||
asl
|
||||
sta {z1}
|
||||
//FRAGMENT vbuz1=vbuyy_rol_1
|
||||
tya
|
||||
asl
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=vbuz1_rol_1
|
||||
lda {z1}
|
||||
asl
|
||||
//FRAGMENT vbuaa=vbuaa_rol_1
|
||||
asl
|
||||
//FRAGMENT vbuaa=vbuxx_rol_1
|
||||
txa
|
||||
asl
|
||||
//FRAGMENT vbuaa=vbuyy_rol_1
|
||||
tya
|
||||
asl
|
||||
//FRAGMENT vbuxx=vbuz1_rol_1
|
||||
lda {z1}
|
||||
asl
|
||||
tax
|
||||
//FRAGMENT vbuxx=vbuaa_rol_1
|
||||
asl
|
||||
tax
|
||||
//FRAGMENT vbuxx=vbuxx_rol_1
|
||||
txa
|
||||
asl
|
||||
tax
|
||||
//FRAGMENT vbuxx=vbuyy_rol_1
|
||||
tya
|
||||
asl
|
||||
tax
|
||||
//FRAGMENT vbuyy=vbuz1_rol_1
|
||||
lda {z1}
|
||||
asl
|
||||
tay
|
||||
//FRAGMENT vbuyy=vbuaa_rol_1
|
||||
asl
|
||||
tay
|
||||
//FRAGMENT vbuyy=vbuxx_rol_1
|
||||
txa
|
||||
asl
|
||||
tay
|
||||
//FRAGMENT vbuyy=vbuyy_rol_1
|
||||
tya
|
||||
asl
|
||||
tay
|
||||
//FRAGMENT vbuz1=vbuxx_bor_vbuz2
|
||||
txa
|
||||
ora {z2}
|
||||
sta {z1}
|
||||
//FRAGMENT vbuz1=vbuyy_bor_vbuz2
|
||||
tya
|
||||
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=vbuz2_bor_vbuxx
|
||||
txa
|
||||
ora {z2}
|
||||
sta {z1}
|
||||
//FRAGMENT vbuz1=vbuxx_bor_vbuxx
|
||||
stx {z1}
|
||||
//FRAGMENT vbuyy=_hi_pvoz1
|
||||
ldy {z1}+1
|
||||
//FRAGMENT _deref_pbuc1=vbuyy
|
||||
sty {c1}
|
||||
//FRAGMENT vbuyy=_lo_pvoz1
|
||||
ldy {z1}
|
||||
//FRAGMENT vbuc1_neq_vbuyy_then_la1
|
||||
cpy #{c1}
|
||||
bne {la1}
|
||||
//FRAGMENT vbuc1_eq_vbuxx_then_la1
|
||||
cpx #{c1}
|
||||
beq {la1}
|
||||
//FRAGMENT vbuc1_eq_vbuyy_then_la1
|
||||
cpy #{c1}
|
||||
beq {la1}
|
||||
//FRAGMENT vbuz1=vbuz2_bor_vbuyy
|
||||
tya
|
||||
ora {z2}
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=vbuc1
|
||||
lda #{c1}
|
||||
//FRAGMENT vbuaa=vbuz1_bor_vbuz2
|
||||
lda {z1}
|
||||
ora {z2}
|
||||
//FRAGMENT vbuaa=vbuz1_bor_vbuaa
|
||||
ora {z1}
|
||||
//FRAGMENT vbuaa=vbuz1_bor_vbuxx
|
||||
txa
|
||||
ora {z1}
|
||||
//FRAGMENT vbuaa=vbuz1_bor_vbuyy
|
||||
tya
|
||||
ora {z1}
|
||||
//FRAGMENT vbuz1=vbuxx
|
||||
stx {z1}
|
||||
//FRAGMENT vbuxx=vbuz1_bor_vbuz2
|
||||
lda {z1}
|
||||
ora {z2}
|
||||
tax
|
||||
//FRAGMENT vbuxx=vbuz1_bor_vbuaa
|
||||
ora {z1}
|
||||
tax
|
||||
//FRAGMENT vbuxx=vbuz1_bor_vbuxx
|
||||
txa
|
||||
ora {z1}
|
||||
tax
|
||||
//FRAGMENT vbuxx=vbuz1_bor_vbuyy
|
||||
tya
|
||||
ora {z1}
|
||||
tax
|
||||
//FRAGMENT vbuz1=vbuyy
|
||||
sty {z1}
|
||||
//FRAGMENT vbuyy=vbuz1_bor_vbuz2
|
||||
lda {z1}
|
||||
ora {z2}
|
||||
tay
|
||||
//FRAGMENT vbuyy=vbuz1_bor_vbuaa
|
||||
ora {z1}
|
||||
tay
|
||||
//FRAGMENT vbuyy=vbuz1_bor_vbuxx
|
||||
txa
|
||||
ora {z1}
|
||||
tay
|
||||
//FRAGMENT vbuyy=vbuz1_bor_vbuyy
|
||||
tya
|
||||
ora {z1}
|
||||
tay
|
||||
//FRAGMENT vbuz1=vbuxx_bor_vbuyy
|
||||
txa
|
||||
sty $ff
|
||||
ora $ff
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=vbuxx_bor_vbuz1
|
||||
txa
|
||||
ora {z1}
|
||||
//FRAGMENT vbuaa=vbuxx_bor_vbuaa
|
||||
stx $ff
|
||||
ora $ff
|
||||
//FRAGMENT vbuaa=vbuxx_bor_vbuyy
|
||||
txa
|
||||
sty $ff
|
||||
ora $ff
|
||||
//FRAGMENT vbuxx=vbuxx_bor_vbuz1
|
||||
txa
|
||||
ora {z1}
|
||||
tax
|
||||
//FRAGMENT vbuxx=vbuxx_bor_vbuaa
|
||||
stx $ff
|
||||
ora $ff
|
||||
tax
|
||||
//FRAGMENT vbuxx=vbuxx_bor_vbuyy
|
||||
txa
|
||||
sty $ff
|
||||
ora $ff
|
||||
tax
|
||||
//FRAGMENT vbuyy=vbuxx_bor_vbuz1
|
||||
txa
|
||||
ora {z1}
|
||||
tay
|
||||
//FRAGMENT vbuyy=vbuxx_bor_vbuaa
|
||||
stx $ff
|
||||
ora $ff
|
||||
tay
|
||||
//FRAGMENT vbuyy=vbuxx_bor_vbuyy
|
||||
txa
|
||||
sty $ff
|
||||
ora $ff
|
||||
tay
|
||||
//FRAGMENT vbuaa=vbuyy_bor_vbuaa
|
||||
sty $ff
|
||||
ora $ff
|
||||
//FRAGMENT vbuxx=vbuaa
|
||||
tax
|
||||
//FRAGMENT vbuyy=vbuaa
|
||||
tay
|
||||
//FRAGMENT pbuz1=pbuz1_plus_vbuc1
|
||||
lda #{c1}
|
||||
clc
|
||||
adc {z1}
|
||||
sta {z1}
|
||||
bcc !+
|
||||
inc {z1}+1
|
||||
!:
|
||||
//FRAGMENT vbuz1=vbuz2_rol_2
|
||||
lda {z2}
|
||||
asl
|
||||
asl
|
||||
sta {z1}
|
||||
//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
|
||||
ldy {z2}
|
||||
lda {c2},y
|
||||
ldy {z1}
|
||||
sta {c1},y
|
||||
//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_vbuc2
|
||||
lda #{c2}
|
||||
ldy {z2}
|
||||
clc
|
||||
adc {c1},y
|
||||
sta {z1}
|
||||
//FRAGMENT pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda {z2}
|
||||
ldy {z1}
|
||||
sta {c1},y
|
||||
//FRAGMENT vbuz1=vbuz1_minus_vbuc1
|
||||
lda {z1}
|
||||
sec
|
||||
sbc #{c1}
|
||||
sta {z1}
|
||||
//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
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=vbuaa_rol_2
|
||||
asl
|
||||
asl
|
||||
//FRAGMENT vbuxx=vbuaa_rol_2
|
||||
asl
|
||||
asl
|
||||
tax
|
||||
//FRAGMENT vbuyy=vbuaa_rol_2
|
||||
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_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_vbuz1=pbuc2_derefidx_vbuxx
|
||||
lda {c2},x
|
||||
ldy {z1}
|
||||
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
|
||||
//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_vbuyy=pbuc2_derefidx_vbuyy
|
||||
lda {c2},y
|
||||
sta {c1},y
|
||||
//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1
|
||||
ldx {z1}
|
||||
tay
|
||||
lda {c2},x
|
||||
sta {c1},y
|
||||
//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuxx
|
||||
tay
|
||||
lda {c2},x
|
||||
sta {c1},y
|
||||
//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuyy
|
||||
tax
|
||||
lda {c2},y
|
||||
sta {c1},x
|
||||
//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_vbuc2
|
||||
lda #{c2}
|
||||
ldy {z1}
|
||||
clc
|
||||
adc {c1},y
|
||||
//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_vbuc2
|
||||
lda #{c2}
|
||||
ldx {z1}
|
||||
clc
|
||||
adc {c1},x
|
||||
tax
|
||||
//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_vbuc2
|
||||
lda #{c2}
|
||||
ldy {z1}
|
||||
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 #{c2}
|
||||
clc
|
||||
adc {c1},x
|
||||
tax
|
||||
//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 #{c2}
|
||||
clc
|
||||
adc {c1},y
|
||||
tax
|
||||
//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_vbuc2
|
||||
lda #{c2}
|
||||
clc
|
||||
adc {c1},y
|
||||
tay
|
||||
//FRAGMENT pbuc1_derefidx_vbuz1=vbuaa
|
||||
ldy {z1}
|
||||
sta {c1},y
|
||||
//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_vbuxx=vbuz1
|
||||
lda {z1}
|
||||
sta {c1},x
|
||||
//FRAGMENT vbuxx=vbuxx_minus_vbuc1
|
||||
txa
|
||||
sec
|
||||
sbc #{c1}
|
||||
tax
|
||||
//FRAGMENT vbuyy=vbuyy_minus_vbuc1
|
||||
tya
|
||||
sec
|
||||
sbc #{c1}
|
||||
tay
|
||||
//FRAGMENT vbuyy=vbuz1
|
||||
ldy {z1}
|
||||
//FRAGMENT pbuc1_derefidx_vbuyy=vbuaa
|
||||
sta {c1},y
|
||||
//FRAGMENT vbuaa=vbuaa_plus_vbuc1
|
||||
clc
|
||||
adc #{c1}
|
||||
//FRAGMENT vbuaa=_inc_vbuaa
|
||||
clc
|
||||
adc #1
|
||||
|
15846
src/main/fragment/cache/fragment-cache-mos6502x.asm
vendored
15846
src/main/fragment/cache/fragment-cache-mos6502x.asm
vendored
File diff suppressed because it is too large
Load Diff
@ -235,6 +235,7 @@ public class Compiler {
|
||||
new Pass1AssertReturn(program).execute();
|
||||
new Pass1AssertUsedVars(program).execute();
|
||||
new Pass1AssertNoModifyVars(program).execute();
|
||||
new Pass1AssertNoLocalAddressArray(program).execute();
|
||||
|
||||
if(getLog().isVerbosePass1CreateSsa()) {
|
||||
getLog().append("SYMBOLS");
|
||||
|
@ -0,0 +1,30 @@
|
||||
package dk.camelot64.kickc.passes;
|
||||
|
||||
import dk.camelot64.kickc.model.CompileError;
|
||||
import dk.camelot64.kickc.model.ControlFlowBlock;
|
||||
import dk.camelot64.kickc.model.Program;
|
||||
import dk.camelot64.kickc.model.statements.Statement;
|
||||
import dk.camelot64.kickc.model.statements.StatementLValue;
|
||||
import dk.camelot64.kickc.model.symbols.Variable;
|
||||
import dk.camelot64.kickc.model.values.ScopeRef;
|
||||
import dk.camelot64.kickc.model.values.SymbolRef;
|
||||
import dk.camelot64.kickc.model.values.VariableRef;
|
||||
|
||||
/**
|
||||
* Checks that no local variables with arrays and hard-coded addresses exist
|
||||
*/
|
||||
public class Pass1AssertNoLocalAddressArray extends Pass1Base {
|
||||
|
||||
public Pass1AssertNoLocalAddressArray(Program program) {
|
||||
super(program);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean step() {
|
||||
for(Variable variable : getScope().getAllVars(true)) {
|
||||
if(!ScopeRef.ROOT.equals(variable.getScope()) && variable.isArray() && variable.getMemoryAddress()!=null)
|
||||
throw new CompileError("Error! Local array variables with __address() not allowed. "+variable.toString(getProgram()));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@ -575,6 +575,21 @@ public class TestPrograms {
|
||||
// compileAndCompare("address-7.c", log());
|
||||
//}
|
||||
|
||||
@Test
|
||||
public void testAddress10() throws IOException, URISyntaxException {
|
||||
assertError("address-10.c", "Error! Local array variables with __address() not allowed.", false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddress9() throws IOException, URISyntaxException {
|
||||
compileAndCompare("address-9.c");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddress8() throws IOException, URISyntaxException {
|
||||
compileAndCompare("address-8.c");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddress6() throws IOException, URISyntaxException {
|
||||
compileAndCompare("address-6.c");
|
||||
|
10
src/test/kc/address-10.c
Normal file
10
src/test/kc/address-10.c
Normal file
@ -0,0 +1,10 @@
|
||||
// Test that a local array with a fixed location results in an error
|
||||
|
||||
int * const SCREEN = 0x0400;
|
||||
|
||||
void main() {
|
||||
// Local data array at hard-coded location should produce an error
|
||||
int __address(0x1000) DATA[1000];
|
||||
SCREEN[0] = DATA[0];
|
||||
}
|
||||
|
12
src/test/kc/address-8.c
Normal file
12
src/test/kc/address-8.c
Normal file
@ -0,0 +1,12 @@
|
||||
// Test declaring an array variable as at a hard-coded address
|
||||
|
||||
// The screen
|
||||
char * const SCREEN = 0x0400;
|
||||
|
||||
// Data to be put on the screen
|
||||
char __address(0x1000) DATA[1000];
|
||||
|
||||
void main() {
|
||||
SCREEN[0] = DATA[0];
|
||||
}
|
||||
|
12
src/test/kc/address-9.c
Normal file
12
src/test/kc/address-9.c
Normal file
@ -0,0 +1,12 @@
|
||||
// Test declaring an integer array variable as at a hard-coded address
|
||||
|
||||
// The screen
|
||||
int * const SCREEN = 0x0400;
|
||||
|
||||
// Data to be put on the screen
|
||||
int __address(0x1000) DATA[1000];
|
||||
|
||||
void main() {
|
||||
SCREEN[0] = DATA[0];
|
||||
}
|
||||
|
16
src/test/ref/address-8.asm
Normal file
16
src/test/ref/address-8.asm
Normal file
@ -0,0 +1,16 @@
|
||||
// Test declaring an array variable as at a hard-coded address
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
// The screen
|
||||
.label SCREEN = $400
|
||||
main: {
|
||||
// SCREEN[0] = DATA[0]
|
||||
lda DATA
|
||||
sta SCREEN
|
||||
// }
|
||||
rts
|
||||
}
|
||||
.pc = $1000 "DATA"
|
||||
// Data to be put on the screen
|
||||
DATA: .fill $3e8, 0
|
18
src/test/ref/address-9.asm
Normal file
18
src/test/ref/address-9.asm
Normal file
@ -0,0 +1,18 @@
|
||||
// Test declaring an integer array variable as at a hard-coded address
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
// The screen
|
||||
.label SCREEN = $400
|
||||
main: {
|
||||
// SCREEN[0] = DATA[0]
|
||||
lda DATA
|
||||
sta SCREEN
|
||||
lda DATA+1
|
||||
sta SCREEN+1
|
||||
// }
|
||||
rts
|
||||
}
|
||||
.pc = $1000 "DATA"
|
||||
// Data to be put on the screen
|
||||
DATA: .fill 2*$3e8, 0
|
Loading…
Reference in New Issue
Block a user