Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / diag / assembly / uarch / lsu / diag / lsu_hang_cwp.s
CommitLineData
86530b38
AT
1/*
2* ========== Copyright Header Begin ==========================================
3*
4* OpenSPARC T2 Processor File: lsu_hang_cwp.s
5* Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
6* 4150 Network Circle, Santa Clara, California 95054, U.S.A.
7*
8* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9*
10* This program is free software; you can redistribute it and/or modify
11* it under the terms of the GNU General Public License as published by
12* the Free Software Foundation; version 2 of the License.
13*
14* This program is distributed in the hope that it will be useful,
15* but WITHOUT ANY WARRANTY; without even the implied warranty of
16* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17* GNU General Public License for more details.
18*
19* You should have received a copy of the GNU General Public License
20* along with this program; if not, write to the Free Software
21* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22*
23* For the avoidance of doubt, and except that if any non-GPL license
24* choice is available it will apply instead, Sun elects to use only
25* the General Public License version 2 (GPLv2) at this time for any
26* software where a choice of GPL license versions is made
27* available with the language indicating that GPLv2 or any later version
28* may be used, or where a choice of which version of the GPL is applied is
29* otherwise unspecified.
30*
31* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
32* CA 95054 USA or visit www.sun.com if you need additional information or
33* have any questions.
34*
35*
36* ========== Copyright Header End ============================================
37*/
38#define MAIN_PAGE_HV_ALSO
39#include "hboot.s"
40
41#ifndef THREADS
42#define THREADS 8
43#endif
44
45#ifndef LOOPS
46#define LOOPS 30
47#endif
48!SIMS+ARGS: -vcs_run_args=+min_ccx_gnt_delay=500
49!SIMS+ARGS: -vcs_run_args=+max_ccx_gnt_delay=1000
50! Variable usage
51! %o0, %o1 used in ldd
52! %o2 is location of TID number - local_counter
53! incremented each loop to next line
54! %o3 is thread specific scratch memory location
55! %o5 is static counter
56! %o7 is loop count
57
58! %l1 is my TID
59
60! Algorithm :
61!
62! for (loop count) {
63! until ([%o2] == mytid) {st %o1, [%o3], ld [%o3]}
64! increment [%o5]
65! increment [%o2]
66! until ([%o5]==max_thread) {}
67! increment %o2
68! reset [%o2]
69! }
70!
71.global main
72
73main: /* test begin */
74
75 ta T_CHANGE_HPRIV
76
77 ldxa [%g0]0x63, %l1 ! my TID
78 mov LOOPS, %o7
79 setx static_counter, %o0, %o5
80 setx thread_scratch, %o0, %o3
81 sllx %l1, 6, %o6
82 add %o3, %o6, %o3 ! Offset by 2xTID
83 setx local_counter , %o0, %o2
84
85 cmp %l1, THREADS-1
86 be lone_star
87 nop
88main_loop:
89
90 ldd [%o2], %o0
91wait_for_tid_match:
92 st %o1, [%o3]
93 ld [%o3], %o4
94 cmp %l1, %o0
95 bne,a wait_for_tid_match
96 ldd [%o2], %o0
97 cmp %l1, %o4
98 bne,a wait_for_tid_match
99 ldd [%o2], %o0
100
101 add %l1, 1, %l2
102 st %l2, [%o5] ! Set [%o5] = tid
103
104 add %l1, 1, %l3
105 std %l2, [%o2] ! Set [%o2] = tid
106
107 ld [%o5], %o6
108wait_for_tid_match2:
109 cmp %o6, THREADS-1
110 bne,a wait_for_tid_match2
111 ld [%o5], %o6
112
113
114 add %o2, 0x80, %o2
115
116 dec %o7
117 brnz %o7, main_loop
118 nop
119 nop
120
121 ta T_GOOD_TRAP
122
123 nop
124 nop
125lone_star:
126
127 mov (LOOPS *5), %g7
128
129lone_loop:
130 wrpr 1, %cwp
131 rdpr %cwp, %g1
132 wrpr 2, %cwp
133 rdpr %cwp, %g1
134 wrpr 3, %cwp
135 rdpr %cwp, %g1
136 wrpr 4, %cwp
137 rdpr %cwp, %g1
138 wrpr 5, %cwp
139 rdpr %cwp, %g1
140 wrpr 6, %cwp
141 rdpr %cwp, %g1
142 wrpr 7, %cwp
143 rdpr %cwp, %g1
144 wrpr 1, %cwp
145 rdpr %cwp, %g1
146 wrpr 2, %cwp
147 rdpr %cwp, %g1
148 wrpr 3, %cwp
149 rdpr %cwp, %g1
150 wrpr 4, %cwp
151 rdpr %cwp, %g1
152 wrpr 5, %cwp
153 rdpr %cwp, %g1
154 wrpr 6, %cwp
155 rdpr %cwp, %g1
156 wrpr 7, %cwp
157 rdpr %cwp, %g1
158 wrpr 1, %cwp
159 rdpr %cwp, %g1
160 wrpr 2, %cwp
161 rdpr %cwp, %g1
162 wrpr 3, %cwp
163 rdpr %cwp, %g1
164 wrpr 4, %cwp
165 rdpr %cwp, %g1
166 wrpr 5, %cwp
167 rdpr %cwp, %g1
168 wrpr 6, %cwp
169 rdpr %cwp, %g1
170 wrpr 7, %cwp
171 rdpr %cwp, %g1
172 wrpr 1, %cwp
173 rdpr %cwp, %g1
174 wrpr 2, %cwp
175 rdpr %cwp, %g1
176 wrpr 3, %cwp
177 rdpr %cwp, %g1
178 wrpr 4, %cwp
179 rdpr %cwp, %g1
180 wrpr 5, %cwp
181 rdpr %cwp, %g1
182 wrpr 6, %cwp
183 rdpr %cwp, %g1
184 wrpr 7, %cwp
185 rdpr %cwp, %g1
186
187 dec %g7
188 brnz %g7, lone_loop
189 nop
190
191 nop
192
193 ta T_GOOD_TRAP
194
195.data
196
197static_counter:
198.xword 0
199.xword 0
200
201thread_scratch:
202.xword 0 0
203.xword 0 0
204.xword 0 0
205.xword 0 0
206.xword 0 0
207.xword 0 0
208.xword 0 0
209.xword 0 0
210.xword 0 0
211.xword 0 0
212.xword 0 0
213.xword 0 0
214.xword 0 0
215.xword 0 0
216.xword 0 0
217.xword 0 0
218.xword 0 0
219.xword 0 0
220.xword 0 0
221.xword 0 0
222.xword 0 0
223.xword 0 0
224.xword 0 0
225.xword 0 0
226.xword 0 0
227.xword 0 0
228.xword 0 0
229.xword 0 0
230.xword 0 0
231.xword 0 0
232.xword 0 0
233.xword 0 0
234.xword 0 0
235.xword 0 0
236.xword 0 0
237.xword 0 0
238.xword 0 0
239.xword 0 0
240.xword 0 0
241.xword 0 0
242.xword 0 0
243.xword 0 0
244.xword 0 0
245.xword 0 0
246.xword 0 0
247.xword 0 0
248.xword 0 0
249.xword 0 0
250.xword 0 0
251.xword 0 0
252.xword 0 0
253.xword 0 0
254.xword 0 0
255.xword 0 0
256.xword 0 0
257.xword 0 0
258.xword 0 0
259.xword 0 0
260.xword 0 0
261.xword 0 0
262.xword 0 0
263.xword 0 0
264.xword 0 0
265.xword 0 0
266
267local_counter:
268.xword 0 0
269.xword 0 0
270.xword 0 0
271.xword 0 0
272.xword 0 0
273.xword 0 0
274.xword 0 0
275.xword 0 0
276.xword 0 0
277.xword 0 0
278.xword 0 0
279.xword 0 0
280.xword 0 0
281.xword 0 0
282.xword 0 0
283.xword 0 0
284.xword 0 0
285.xword 0 0
286.xword 0 0
287.xword 0 0
288.xword 0 0
289.xword 0 0
290.xword 0 0
291.xword 0 0
292.xword 0 0
293.xword 0 0
294.xword 0 0
295.xword 0 0
296.xword 0 0
297.xword 0 0
298.xword 0 0
299.xword 0 0
300.xword 0 0
301.xword 0 0
302.xword 0 0
303.xword 0 0
304.xword 0 0
305.xword 0 0
306.xword 0 0
307.xword 0 0
308.xword 0 0
309.xword 0 0
310.xword 0 0
311.xword 0 0
312.xword 0 0
313.xword 0 0
314.xword 0 0
315.xword 0 0
316.xword 0 0
317.xword 0 0
318.xword 0 0
319.xword 0 0
320.xword 0 0
321.xword 0 0
322.xword 0 0
323.xword 0 0
324.xword 0 0
325.xword 0 0
326.xword 0 0
327.xword 0 0
328.xword 0 0
329.xword 0 0
330.xword 0 0
331.xword 0 0