binutils-gdb/sim/testsuite/frv-elf/cache.s

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