]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/testsuite/sim/mips/utils-dsp.inc
Update year range in copyright notice of all files owned by the GDB project.
[thirdparty/binutils-gdb.git] / sim / testsuite / sim / mips / utils-dsp.inc
1 # MIPS DSP ASE simulator testsuite utility functions.
2 # Copyright (C) 2005-2015 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
30 1:
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
431 1:
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