cache.ms revision 1.1.1.1 1 # mach: frv fr500 fr550
2 # sim: --memory-region 0xff000000,4 --memory-region 0xfe000000,00404000
3 # xfail: "crashes with bad write" *-*
4
5 ; Exit with return code
6
7 .macro exit rc
8 setlos.p #1,gr7
9 setlos \rc,gr8
10 tira gr0,#0
11 .endm
12
13 ; Pass the test case
14 .macro pass
15 pass:
16 setlos.p #5,gr10
17 setlos #1,gr8
18 setlos #5,gr7
19 sethi.p %hi(passmsg),gr9
20 setlo %lo(passmsg),gr9
21 tira gr0,#0
22 exit #0
23 .endm
24
25 ; Fail the testcase
26 .macro fail
27 fail\@:
28 setlos.p #5,gr10
29 setlos #1,gr8
30 setlos #5,gr7
31 sethi.p %hi(failmsg),gr9
32 setlo %lo(failmsg),gr9
33 tira gr0,#0
34 exit #1
35 .endm
36
37 .data
38 failmsg:
39 .ascii "fail\n"
40 passmsg:
41 .ascii "pass\n"
42
43 .text
44 .global _start
45 _start:
46 movsg hsr0,gr10 ; enable insn and data caches
47 sethi.p 0xc800,gr11 ; in copy-back mode
48 setlo 0x0000,gr11
49 or gr10,gr11,gr10
50 movgs gr10,hsr0
51
52 sethi.p 0x7,sp
53 setlo 0x0000,sp
54
55 ; fill the cache
56 sethi.p %hi(done1),gr10
57 setlo %lo(done1),gr10
58 movgs gr10,lr
59 setlos.p 0x1000,gr10
60 setlos 0x0,gr11
61 movgs gr10,lcr
62 write1: st.p gr11,@(sp,gr11)
63 addi.p gr11,4,gr11
64 bctrlr.p 1,0
65 bra write1
66 done1:
67 ; read it back
68 sethi.p %hi(done2),gr10
69 setlo %lo(done2),gr10
70 movgs gr10,lr
71 setlos.p 0x1000,gr10
72 setlos 0x0,gr11
73 movgs gr10,lcr
74 read1: ld @(sp,gr11),gr12
75 cmp gr11,gr12,icc0
76 bne icc0,1,fail
77 addi.p gr11,4,gr11
78 bctrlr.p 1,0
79 bra read1
80 done2:
81
82 ; fill the cache twice
83 sethi.p %hi(done3),gr10
84 setlo %lo(done3),gr10
85 movgs gr10,lr
86 setlos.p 0x2000,gr10
87 setlos 0x0,gr11
88 movgs gr10,lcr
89 write3: st.p gr11,@(sp,gr11)
90 addi.p gr11,4,gr11
91 bctrlr.p 1,0
92 bra write3
93 done3:
94 ; read it back
95 sethi.p %hi(done4),gr10
96 setlo %lo(done4),gr10
97 movgs gr10,lr
98 setlos.p 0x2000,gr10
99 setlos 0x0,gr11
100 movgs gr10,lcr
101 read4: ld @(sp,gr11),gr12
102 cmp gr11,gr12,icc0
103 bne icc0,1,fail
104 addi.p gr11,4,gr11
105 bctrlr.p 1,0
106 bra read4
107 done4:
108 ; read it back in reverse
109 sethi.p %hi(done5),gr10
110 setlo %lo(done5),gr10
111 movgs gr10,lr
112 setlos.p 0x2000,gr10
113 setlos 0x7ffc,gr11
114 movgs gr10,lcr
115 read5: ld @(sp,gr11),gr12
116 cmp gr11,gr12,icc0
117 bne icc0,1,fail
118 subi.p gr11,4,gr11
119 bctrlr.p 1,0
120 bra read5
121 done5:
122
123 ; access data and insns in non-cache areas
124 sethi.p 0x8038,gr11 ; bctrlr 0,0
125 setlo 0x2000,gr11
126
127 sethi.p 0xff00,gr10 ; documented area
128 setlo 0x0000,gr10
129 sti gr11,@(gr10,0)
130 jmpl @(gr10,gr0)
131
132 ; enable RAM mode
133 movsg hsr0,gr10
134 sethi.p 0x0040,gr12
135 setlo 0x0000,gr12
136 or gr10,gr12,gr10
137 movgs gr10,hsr0
138
139 sethi.p 0xfe00,gr10 ; documented area
140 setlo 0x0400,gr10
141 sti gr11,@(gr10,0)
142 jmpl @(gr10,gr0)
143
144 sethi.p 0xfe40,gr10 ; documented area
145 setlo 0x0400,gr10
146 sti gr11,@(gr10,0)
147 dcf @(gr10,gr0)
148 jmpl @(gr10,gr0)
149
150 sethi.p 0x0007,gr10 ; non RAM area
151 setlo 0x0000,gr10
152 sti gr11,@(gr10,0)
153 jmpl @(gr10,gr0)
154
155 sethi.p 0xfe00,gr10 ; insn RAM area
156 setlo 0x0000,gr10
157 sti gr11,@(gr10,0)
158 jmpl @(gr10,gr0)
159
160 sethi.p 0xfe40,gr10 ; data RAM area
161 setlo 0x0000,gr10
162 sti gr11,@(gr10,0)
163 dcf @(gr10,gr0)
164 jmpl @(gr10,gr0)
165
166 pass
167 fail:
168 fail
169