• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/gdb/sim/testsuite/sim/mips/
1# MIPS DSP ASE simulator testsuite utility functions.
2# Copyright (C) 2005, 2007 Free Software Foundation, Inc.
3# Contributed by MIPS Technologies, Inc.  Written by Chao-ying Fu.
4#
5# This file is part of the GNU simulators.
6#
7# This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20# $4, $5, $6, $7, $ac0, $ac1, $ac2, $ac3 are used as temps by the macros
21# defined here.
22
23	# If a != b, jump to _fail.
24	# Otherwise, fall through.
25	.macro dsp_assert a, b
26	beq	\a, \b, 1f
27	nop
28	j	_fail
29	nop
301:
31	.endm
32
33	# Set dsp control register <= crin
34	# Check if d == (inst ?, s, t)
35	# Check if crout == dsp control register
36	.macro dspck_dstio inst, d, s, t, crin, crout
37	li	$4, \crin
38	wrdsp	$4
39	li	$4, \s
40	li	$5, \t
41	\inst	$6, $4, $5
42	li	$7, \d
43	dsp_assert	$6, $7
44	li	$4, \crout
45	rddsp	$5
46	dsp_assert	$4, $5
47	.endm
48
49	# Set dsp control register <= crin
50	# (inst s, t)
51	# Check if crout == dsp control register
52	.macro dspck_stio inst, s, t, crin, crout
53	li	$4, \crin
54	wrdsp	$4
55	li	$4, \s
56	li	$5, \t
57	\inst	$4, $5
58	li	$4, \crout
59	rddsp	$5
60	dsp_assert	$4, $5
61	.endm
62
63	# Set dsp control register <= crin
64	# Check if d == (inst ?, s, t)
65	.macro dspck_dsti inst, d, s, t, crin
66	li	$4, \crin
67	wrdsp	$4
68	li	$4, \s
69	li	$5, \t
70	\inst	$6, $4, $5
71	li	$7, \d
72	dsp_assert	$6, $7
73	.endm
74
75	# Set dsp control register <= crin
76	# Check if tou == (inst tin, s)
77	.macro dspck_tsi inst, tou, tin, s, crin
78	li	$4, \crin
79	wrdsp	$4
80	li	$4, \s
81	li	$5, \tin
82	\inst	$5, $4
83	li	$6, \tou
84	dsp_assert	$5, $6
85	.endm
86
87	# Set dsp control register <= crin
88	# Check if d == (inst ?, imm)
89	# Check if crout == dsp control register
90	.macro dspck_dIio inst, d, imm, crin, crout
91	li	$4, \crin
92	wrdsp	$4
93	\inst	$5, \imm
94	li	$6, \d
95	dsp_assert	$5, $6
96	li	$4, \crout
97	rddsp	$5
98	dsp_assert	$4, $5
99	.endm
100
101	# Set dsp control register <= crin
102	# Check if d == (inst ?, s)
103	# Check if crout == dsp control register
104	.macro dspck_dsio inst, d, s, crin, crout
105	li	$4, \crin
106	wrdsp	$4
107	li	$4, \s
108	\inst	$6, $4
109	li	$7, \d
110	dsp_assert	$6, $7
111	li	$4, \crout
112	rddsp	$5
113	dsp_assert	$4, $5
114	.endm
115
116	# Set dsp control register <= crin
117	# Check if d == (inst ?, t, sa)
118	# Check if crout == dsp control register
119	.macro dspck_dtsaio inst, d, t, sa, crin, crout
120	li	$4, \crin
121	wrdsp	$4
122	li	$4, \t
123	\inst	$6, $4, \sa
124	li	$7, \d
125	dsp_assert	$6, $7
126	li	$4, \crout
127	rddsp	$5
128	dsp_assert	$4, $5
129	.endm
130
131	# Set dsp control register <= crin
132	# Check if d == (inst ?, t, sa)
133	.macro dspck_dtsai inst, d, t, sa, crin
134	li	$4, \crin
135	wrdsp	$4
136	li	$4, \t
137	\inst	$6, $4, \sa
138	li	$7, \d
139	dsp_assert	$6, $7
140	.endm
141
142	# Set dsp control register <= crin
143	# Set $ac3 <= {hiin, loin}
144	# (inst $ac3, s, t)
145	# Check if {hiou, loou} == $ac3
146	# Check if (crout & 0x80000) == (dsp control register & 0x80000)
147	.macro dspck_astio inst, hiin, loin, hiou, loou, s, t, crin, crout
148	li	$4, \crin
149	wrdsp	$4
150	li	$4, \hiin
151	mthi	$4, $ac3
152	li	$4, \loin
153	mtlo	$4, $ac3
154	li	$4, \s
155	li	$5, \t
156	\inst	$ac3, $4, $5
157	li	$4, \hiou
158	mfhi	$5, $ac3
159	dsp_assert	$4, $5
160	li	$4, \loou
161	mflo	$5, $ac3
162	dsp_assert	$4, $5
163	li	$4, \crout
164	and	$4, $4, 0x80000
165	rddsp	$5
166	and	$5, $5, 0x80000
167	dsp_assert	$4, $5
168	.endm
169
170	# Set dsp control register <= crin
171	# Set $ac1 <= {hi, lo}
172	# Check if t == (inst ? $ac1, sa)
173	# Check if crout == dsp control register
174	.macro dspck_atsaio inst, hi, lo, t, sa, crin, crout
175	li	$4, \crin
176	wrdsp	$4
177	li	$4, \hi
178	mthi	$4, $ac1
179	li	$4, \lo
180	mtlo	$4, $ac1
181	\inst	$5, $ac1, \sa
182	li	$6, \t
183	dsp_assert	$5, $6
184	li	$4, \crout
185	rddsp	$5
186	dsp_assert	$4, $5
187	.endm
188
189	# Set dsp control register <= crin
190	# Set acc <= {hiin, loin}
191	# (inst acc, s, t)
192	# Check if {hiou, loou} == acc
193	# Check if (crout & 0x80000) == (dsp control register & 0x80000)
194	.macro dspckacc_astio inst, acc, hiin, loin, hiou, loou, s, t, crin, crout
195	li	$4, \crin
196	wrdsp	$4
197	li	$4, \hiin
198	mthi	$4, \acc
199	li	$4, \loin
200	mtlo	$4, \acc
201	li	$4, \s
202	li	$5, \t
203	\inst	\acc, $4, $5
204	li	$4, \hiou
205	mfhi	$5, \acc
206	dsp_assert	$4, $5
207	li	$4, \loou
208	mflo	$5, \acc
209	dsp_assert	$4, $5
210	li	$4, \crout
211	and	$4, $4, 0x80000
212	rddsp	$5
213	and	$5, $5, 0x80000
214	dsp_assert	$4, $5
215	.endm
216
217	# Set dsp control register <= crin
218	# Set $ac1 <= {hi, lo}
219	# Check if t == (inst ? $ac1, s)
220	# Check if crout == dsp control register
221	.macro dspck_atsio inst, hi, lo, t, s, crin, crout
222	li	$4, \crin
223	wrdsp	$4
224	li	$4, \hi
225	mthi	$4, $ac1
226	li	$4, \lo
227	mtlo	$4, $ac1
228	li	$4, \s
229	\inst	$5, $ac1, $4
230	li	$6, \t
231	dsp_assert	$5, $6
232	li	$4, \crout
233	rddsp	$5
234	dsp_assert	$4, $5
235	.endm
236
237	# Set dsp control register <= (crin & crinmask)
238	# Set $ac2 <= {hi, lo}
239	# Check if t == (inst ? $ac2, size)
240	# Check if (crout & croutmask) == (dsp control register & croutmask)
241	.macro dspck_tasiimom inst, hi, lo, t, size, crin, crinmask, crout, croutmask
242	li	$4, \crin
243	and	$4, \crinmask
244	wrdsp	$4
245	li	$4, \hi
246	mthi	$4, $ac2
247	li	$4, \lo
248	mtlo	$4, $ac2
249	\inst	$5, $ac2, \size
250	li	$6, \t
251	dsp_assert	$5, $6
252	li	$4, \crout
253	and	$4, \croutmask
254	rddsp	$5
255	and	$5, \croutmask
256	dsp_assert	$4, $5
257	.endm
258
259	# Set dsp control register <= (crin & crinmask)
260	# Set $ac2 <= {hi, lo}
261	# Check if t == (inst ? $ac2, size)
262	.macro dspck_tasiim inst, hi, lo, t, size, crin, crinmask
263	li	$4, \crin
264	and	$4, \crinmask
265	wrdsp	$4
266	li	$4, \hi
267	mthi	$4, $ac2
268	li	$4, \lo
269	mtlo	$4, $ac2
270	\inst	$5, $ac2, \size
271	li	$6, \t
272	dsp_assert	$5, $6
273	.endm
274
275	# Set dsp control register <= (crin & crinmask)
276	# Set $ac2 <= {hi, lo}
277	# Check if t == (inst ? $ac2, s)
278	# Check if (crout & croutmask) == (dsp control register & croutmask)
279	.macro dspck_tasimom inst, hi, lo, t, s, crin, crinmask, crout, croutmask
280	li	$4, \crin
281	and	$4, \crinmask
282	wrdsp	$4
283	li	$4, \hi
284	mthi	$4, $ac2
285	li	$4, \lo
286	mtlo	$4, $ac2
287	li	$4, \s
288	\inst	$5, $ac2, $4
289	li	$6, \t
290	dsp_assert	$5, $6
291	li	$4, \crout
292	and	$4, \croutmask
293	rddsp	$5
294	and	$5, \croutmask
295	dsp_assert	$4, $5
296	.endm
297
298	# Set dsp control register <= (crin & crinmask)
299	# Set $ac2 <= {hi, lo}
300	# Check if t == (inst ? $ac2, s)
301	.macro dspck_tasim inst, hi, lo, t, s, crin, crinmask
302	li	$4, \crin
303	and	$4, \crinmask
304	wrdsp	$4
305	li	$4, \hi
306	mthi	$4, $ac2
307	li	$4, \lo
308	mtlo	$4, $ac2
309	li	$4, \s
310	\inst	$5, $ac2, $4
311	li	$6, \t
312	dsp_assert	$5, $6
313	.endm
314
315	# Set dsp control register <= crin
316	# Set $ac0 <= {hi, lo}
317	# (inst $ac0, shift)
318	# Check if $ac0 == {hio, loo}
319	# Check if crout == dsp control register
320	.macro dspck_asaio inst, hi, lo, hio, loo, shift, crin, crout
321	li	$4, \crin
322	wrdsp	$4
323	li	$4, \hi
324	mthi	$4, $ac0
325	li	$4, \lo
326	mtlo	$4, $ac0
327	\inst	$ac0, \shift
328	mfhi	$5, $ac0
329	li	$6, \hio
330	dsp_assert	$5, $6
331	mflo	$5, $ac0
332	li	$6, \loo
333	dsp_assert	$5, $6
334	li	$4, \crout
335	rddsp	$5
336	dsp_assert	$4, $5
337	.endm
338
339	# Set dsp control register <= crin
340	# Set $ac0 <= {hi, lo}
341	# (inst $ac0, s)
342	# Check if $ac0 == {hio, loo}
343	# Check if crout == dsp control register
344	.macro dspck_asio inst, hi, lo, hio, loo, s, crin, crout
345	li	$4, \crin
346	wrdsp	$4
347	li	$4, \hi
348	mthi	$4, $ac0
349	li	$4, \lo
350	mtlo	$4, $ac0
351	li	$4, \s
352	\inst	$ac0, $4
353	mfhi	$5, $ac0
354	li	$6, \hio
355	dsp_assert	$5, $6
356	mflo	$5, $ac0
357	li	$6, \loo
358	dsp_assert	$5, $6
359	li	$4, \crout
360	rddsp	$5
361	dsp_assert	$4, $5
362	.endm
363
364	# Set dsp control register <= crin
365	# Set $ac3 <= {hi, lo}
366	# Check if s == (inst ? $ac3)
367	# Check if $ac3 == {hio, loo}
368	# Check if crout == dsp control register
369	.macro dspck_saio inst, hi, lo, hio, loo, s, crin, crout
370	li	$4, \crin
371	wrdsp	$4
372	li	$4, \hi
373	mthi	$4, $ac3
374	li	$4, \lo
375	mtlo	$4, $ac3
376	li	$5, \s
377	\inst	$5, $ac3
378	mfhi	$5, $ac3
379	li	$6, \hio
380	dsp_assert	$5, $6
381	mflo	$5, $ac3
382	li	$6, \loo
383	dsp_assert	$5, $6
384	li	$4, \crout
385	rddsp	$5
386	dsp_assert	$4, $5
387	.endm
388
389	# Set dsp control register <= crin
390	# (wrdsp s, m)
391	# Check if crout == dsp control register
392	.macro dspck_wrdsp s, m, crin, crout
393	li	$4, \crin
394	wrdsp	$4
395	li	$5, \s
396	wrdsp	$5, \m
397	li	$6, \crout
398	rddsp	$7
399	dsp_assert	$6, $7
400	.endm
401
402	# Set dsp control register <= crin
403	# Check if d == (rddsp ?, m)
404	.macro dspck_rddsp d, m, crin
405	li	$4, \crin
406	wrdsp	$4
407	rddsp	$5, \m
408	li	$6, \d
409	dsp_assert	$5, $6
410	.endm
411
412	# Check if d == (inst i(b))
413	.macro dspck_load inst, d, i, b
414	li	$4, \i
415	la	$5, \b
416	\inst	$6, $4($5)
417	li	$7, \d
418	dsp_assert	$6, $7
419	.endm
420
421	# Set dsp control register <= crin
422	# Check if bposge32 is taken or not as expected in r
423	# (1 => taken, 0 => not taken)
424	.macro dspck_bposge32 crin, r
425	li	$4, \crin
426	wrdsp	$4
427	li	$5, 1
428	bposge32	1f
429	nop
430	li	$5, 0
4311:
432	li	$6, \r
433	dsp_assert	$5, $6
434	.endm
435
436	# Check if tou == (inst tin, s)
437	.macro dspck_tsimm inst, tou, tin, s, sa
438	li	$4, \s
439	li	$5, \tin
440	\inst	$5, $4, \sa
441	li	$6, \tou
442	dsp_assert	$5, $6
443	.endm
444