123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- # mach: frv fr500 fr550
- # sim: --memory-region 0xff000000,4 --memory-region 0xfe000000,00404000
- # xfail: "crashes with bad write" *-*
- ; 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
|