165 lines
2.9 KiB
ArmAsm
165 lines
2.9 KiB
ArmAsm
# run with --memory-region 0xff000000,4 --memory-region 0xfe000000,00404000
|
|
; Exit with return code
|
|
.macro exit rc
|
|
setlos.p #1,gr7
|
|
setlos \rc,gr8
|
|
tira gr0,#0
|
|
.endm
|
|
|
|
; Pass the test case
|
|
.macro pass
|
|
pass:
|
|
setlos.p #5,gr10
|
|
setlos #1,gr8
|
|
setlos #5,gr7
|
|
sethi.p %hi(passmsg),gr9
|
|
setlo %lo(passmsg),gr9
|
|
tira gr0,#0
|
|
exit #0
|
|
.endm
|
|
|
|
; Fail the testcase
|
|
.macro fail
|
|
fail\@:
|
|
setlos.p #5,gr10
|
|
setlos #1,gr8
|
|
setlos #5,gr7
|
|
sethi.p %hi(failmsg),gr9
|
|
setlo %lo(failmsg),gr9
|
|
tira gr0,#0
|
|
exit #1
|
|
.endm
|
|
|
|
.data
|
|
failmsg:
|
|
.ascii "fail\n"
|
|
passmsg:
|
|
.ascii "pass\n"
|
|
|
|
.text
|
|
.global _start
|
|
_start:
|
|
movsg hsr0,gr10 ; enable insn and data caches
|
|
sethi.p 0xc800,gr11 ; in copy-back mode
|
|
setlo 0x0000,gr11
|
|
or gr10,gr11,gr10
|
|
movgs gr10,hsr0
|
|
|
|
sethi.p 0x7,sp
|
|
setlo 0x0000,sp
|
|
|
|
; fill the cache
|
|
sethi.p %hi(done1),gr10
|
|
setlo %lo(done1),gr10
|
|
movgs gr10,lr
|
|
setlos.p 0x1000,gr10
|
|
setlos 0x0,gr11
|
|
movgs gr10,lcr
|
|
write1: st.p gr11,@(sp,gr11)
|
|
addi.p gr11,4,gr11
|
|
bctrlr.p 1,0
|
|
bra write1
|
|
done1:
|
|
; read it back
|
|
sethi.p %hi(done2),gr10
|
|
setlo %lo(done2),gr10
|
|
movgs gr10,lr
|
|
setlos.p 0x1000,gr10
|
|
setlos 0x0,gr11
|
|
movgs gr10,lcr
|
|
read1: ld @(sp,gr11),gr12
|
|
cmp gr11,gr12,icc0
|
|
bne icc0,1,fail
|
|
addi.p gr11,4,gr11
|
|
bctrlr.p 1,0
|
|
bra read1
|
|
done2:
|
|
|
|
; fill the cache twice
|
|
sethi.p %hi(done3),gr10
|
|
setlo %lo(done3),gr10
|
|
movgs gr10,lr
|
|
setlos.p 0x2000,gr10
|
|
setlos 0x0,gr11
|
|
movgs gr10,lcr
|
|
write3: st.p gr11,@(sp,gr11)
|
|
addi.p gr11,4,gr11
|
|
bctrlr.p 1,0
|
|
bra write3
|
|
done3:
|
|
; read it back
|
|
sethi.p %hi(done4),gr10
|
|
setlo %lo(done4),gr10
|
|
movgs gr10,lr
|
|
setlos.p 0x2000,gr10
|
|
setlos 0x0,gr11
|
|
movgs gr10,lcr
|
|
read4: ld @(sp,gr11),gr12
|
|
cmp gr11,gr12,icc0
|
|
bne icc0,1,fail
|
|
addi.p gr11,4,gr11
|
|
bctrlr.p 1,0
|
|
bra read4
|
|
done4:
|
|
; read it back in reverse
|
|
sethi.p %hi(done5),gr10
|
|
setlo %lo(done5),gr10
|
|
movgs gr10,lr
|
|
setlos.p 0x2000,gr10
|
|
setlos 0x7ffc,gr11
|
|
movgs gr10,lcr
|
|
read5: ld @(sp,gr11),gr12
|
|
cmp gr11,gr12,icc0
|
|
bne icc0,1,fail
|
|
subi.p gr11,4,gr11
|
|
bctrlr.p 1,0
|
|
bra read5
|
|
done5:
|
|
|
|
; access data and insns in non-cache areas
|
|
sethi.p 0x8038,gr11 ; bctrlr 0,0
|
|
setlo 0x2000,gr11
|
|
|
|
sethi.p 0xff00,gr10 ; documented area
|
|
setlo 0x0000,gr10
|
|
sti gr11,@(gr10,0)
|
|
jmpl @(gr10,gr0)
|
|
|
|
; enable RAM mode
|
|
movsg hsr0,gr10
|
|
sethi.p 0x0040,gr12
|
|
setlo 0x0000,gr12
|
|
or gr10,gr12,gr10
|
|
movgs gr10,hsr0
|
|
|
|
sethi.p 0xfe00,gr10 ; documented area
|
|
setlo 0x0400,gr10
|
|
sti gr11,@(gr10,0)
|
|
jmpl @(gr10,gr0)
|
|
|
|
sethi.p 0xfe40,gr10 ; documented area
|
|
setlo 0x0400,gr10
|
|
sti gr11,@(gr10,0)
|
|
dcf @(gr10,gr0)
|
|
jmpl @(gr10,gr0)
|
|
|
|
sethi.p 0x0007,gr10 ; non RAM area
|
|
setlo 0x0000,gr10
|
|
sti gr11,@(gr10,0)
|
|
jmpl @(gr10,gr0)
|
|
|
|
sethi.p 0xfe00,gr10 ; insn RAM area
|
|
setlo 0x0000,gr10
|
|
sti gr11,@(gr10,0)
|
|
jmpl @(gr10,gr0)
|
|
|
|
sethi.p 0xfe40,gr10 ; data RAM area
|
|
setlo 0x0000,gr10
|
|
sti gr11,@(gr10,0)
|
|
dcf @(gr10,gr0)
|
|
jmpl @(gr10,gr0)
|
|
|
|
pass
|
|
fail:
|
|
fail
|