diff options
Diffstat (limited to 'arch/m68k/ifpsp060/src/ftest.S')
-rw-r--r-- | arch/m68k/ifpsp060/src/ftest.S | 1456 |
1 files changed, 1456 insertions, 0 deletions
diff --git a/arch/m68k/ifpsp060/src/ftest.S b/arch/m68k/ifpsp060/src/ftest.S new file mode 100644 index 000000000000..2edcbae0fd53 --- /dev/null +++ b/arch/m68k/ifpsp060/src/ftest.S | |||
@@ -0,0 +1,1456 @@ | |||
1 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
2 | MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP | ||
3 | M68000 Hi-Performance Microprocessor Division | ||
4 | M68060 Software Package | ||
5 | Production Release P1.00 -- October 10, 1994 | ||
6 | |||
7 | M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. | ||
8 | |||
9 | THE SOFTWARE is provided on an "AS IS" basis and without warranty. | ||
10 | To the maximum extent permitted by applicable law, | ||
11 | MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, | ||
12 | INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE | ||
13 | and any warranty against infringement with regard to the SOFTWARE | ||
14 | (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. | ||
15 | |||
16 | To the maximum extent permitted by applicable law, | ||
17 | IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER | ||
18 | (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, | ||
19 | BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) | ||
20 | ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE. | ||
21 | Motorola assumes no responsibility for the maintenance and support of the SOFTWARE. | ||
22 | |||
23 | You are hereby granted a copyright license to use, modify, and distribute the SOFTWARE | ||
24 | so long as this entire notice is retained without alteration in any modified and/or | ||
25 | redistributed versions, and that such modified versions are clearly identified as such. | ||
26 | No licenses are granted by implication, estoppel or otherwise under any patents | ||
27 | or trademarks of Motorola, Inc. | ||
28 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
29 | ############################################# | ||
30 | set SREGS, -64 | ||
31 | set IREGS, -128 | ||
32 | set IFPREGS, -224 | ||
33 | set SFPREGS, -320 | ||
34 | set IFPCREGS, -332 | ||
35 | set SFPCREGS, -344 | ||
36 | set ICCR, -346 | ||
37 | set SCCR, -348 | ||
38 | set TESTCTR, -352 | ||
39 | set DATA, -384 | ||
40 | |||
41 | ############################################# | ||
42 | TESTTOP: | ||
43 | bra.l _060TESTS_ | ||
44 | short 0x0000 | ||
45 | |||
46 | bra.l _060TESTS_unimp | ||
47 | short 0x0000 | ||
48 | |||
49 | bra.l _060TESTS_enable | ||
50 | short 0x0000 | ||
51 | |||
52 | start_str: | ||
53 | string "Testing 68060 FPSP started:\n" | ||
54 | |||
55 | start_str_unimp: | ||
56 | string "Testing 68060 FPSP unimplemented instruction started:\n" | ||
57 | |||
58 | start_str_enable: | ||
59 | string "Testing 68060 FPSP exception enabled started:\n" | ||
60 | |||
61 | pass_str: | ||
62 | string "passed\n" | ||
63 | |||
64 | fail_str: | ||
65 | string " failed\n" | ||
66 | |||
67 | align 0x4 | ||
68 | chk_test: | ||
69 | tst.l %d0 | ||
70 | bne.b test_fail | ||
71 | test_pass: | ||
72 | pea pass_str(%pc) | ||
73 | bsr.l _print_str | ||
74 | addq.l &0x4,%sp | ||
75 | rts | ||
76 | test_fail: | ||
77 | mov.l %d1,-(%sp) | ||
78 | bsr.l _print_num | ||
79 | addq.l &0x4,%sp | ||
80 | |||
81 | pea fail_str(%pc) | ||
82 | bsr.l _print_str | ||
83 | addq.l &0x4,%sp | ||
84 | rts | ||
85 | |||
86 | ############################################# | ||
87 | _060TESTS_: | ||
88 | link %a6,&-384 | ||
89 | |||
90 | movm.l &0x3f3c,-(%sp) | ||
91 | fmovm.x &0xff,-(%sp) | ||
92 | |||
93 | pea start_str(%pc) | ||
94 | bsr.l _print_str | ||
95 | addq.l &0x4,%sp | ||
96 | |||
97 | ### effadd | ||
98 | clr.l TESTCTR(%a6) | ||
99 | pea effadd_str(%pc) | ||
100 | bsr.l _print_str | ||
101 | addq.l &0x4,%sp | ||
102 | |||
103 | bsr.l effadd_0 | ||
104 | |||
105 | bsr.l chk_test | ||
106 | |||
107 | ### unsupp | ||
108 | clr.l TESTCTR(%a6) | ||
109 | pea unsupp_str(%pc) | ||
110 | bsr.l _print_str | ||
111 | addq.l &0x4,%sp | ||
112 | |||
113 | bsr.l unsupp_0 | ||
114 | |||
115 | bsr.l chk_test | ||
116 | |||
117 | ### ovfl non-maskable | ||
118 | clr.l TESTCTR(%a6) | ||
119 | pea ovfl_nm_str(%pc) | ||
120 | bsr.l _print_str | ||
121 | bsr.l ovfl_nm_0 | ||
122 | |||
123 | bsr.l chk_test | ||
124 | |||
125 | ### unfl non-maskable | ||
126 | clr.l TESTCTR(%a6) | ||
127 | pea unfl_nm_str(%pc) | ||
128 | bsr.l _print_str | ||
129 | bsr.l unfl_nm_0 | ||
130 | |||
131 | bsr.l chk_test | ||
132 | |||
133 | movm.l (%sp)+,&0x3cfc | ||
134 | fmovm.x (%sp)+,&0xff | ||
135 | |||
136 | unlk %a6 | ||
137 | rts | ||
138 | |||
139 | _060TESTS_unimp: | ||
140 | link %a6,&-384 | ||
141 | |||
142 | movm.l &0x3f3c,-(%sp) | ||
143 | fmovm.x &0xff,-(%sp) | ||
144 | |||
145 | pea start_str_unimp(%pc) | ||
146 | bsr.l _print_str | ||
147 | addq.l &0x4,%sp | ||
148 | |||
149 | ### unimp | ||
150 | clr.l TESTCTR(%a6) | ||
151 | pea unimp_str(%pc) | ||
152 | bsr.l _print_str | ||
153 | addq.l &0x4,%sp | ||
154 | |||
155 | bsr.l unimp_0 | ||
156 | |||
157 | bsr.l chk_test | ||
158 | |||
159 | movm.l (%sp)+,&0x3cfc | ||
160 | fmovm.x (%sp)+,&0xff | ||
161 | |||
162 | unlk %a6 | ||
163 | rts | ||
164 | |||
165 | _060TESTS_enable: | ||
166 | link %a6,&-384 | ||
167 | |||
168 | movm.l &0x3f3c,-(%sp) | ||
169 | fmovm.x &0xff,-(%sp) | ||
170 | |||
171 | pea start_str_enable(%pc) | ||
172 | bsr.l _print_str | ||
173 | addq.l &0x4,%sp | ||
174 | |||
175 | ### snan | ||
176 | clr.l TESTCTR(%a6) | ||
177 | pea snan_str(%pc) | ||
178 | bsr.l _print_str | ||
179 | bsr.l snan_0 | ||
180 | |||
181 | bsr.l chk_test | ||
182 | |||
183 | ### operr | ||
184 | clr.l TESTCTR(%a6) | ||
185 | pea operr_str(%pc) | ||
186 | bsr.l _print_str | ||
187 | bsr.l operr_0 | ||
188 | |||
189 | bsr.l chk_test | ||
190 | |||
191 | ### ovfl | ||
192 | clr.l TESTCTR(%a6) | ||
193 | pea ovfl_str(%pc) | ||
194 | bsr.l _print_str | ||
195 | bsr.l ovfl_0 | ||
196 | |||
197 | bsr.l chk_test | ||
198 | |||
199 | ### unfl | ||
200 | clr.l TESTCTR(%a6) | ||
201 | pea unfl_str(%pc) | ||
202 | bsr.l _print_str | ||
203 | bsr.l unfl_0 | ||
204 | |||
205 | bsr.l chk_test | ||
206 | |||
207 | ### dz | ||
208 | clr.l TESTCTR(%a6) | ||
209 | pea dz_str(%pc) | ||
210 | bsr.l _print_str | ||
211 | bsr.l dz_0 | ||
212 | |||
213 | bsr.l chk_test | ||
214 | |||
215 | ### inexact | ||
216 | clr.l TESTCTR(%a6) | ||
217 | pea inex_str(%pc) | ||
218 | bsr.l _print_str | ||
219 | bsr.l inex_0 | ||
220 | |||
221 | bsr.l chk_test | ||
222 | |||
223 | movm.l (%sp)+,&0x3cfc | ||
224 | fmovm.x (%sp)+,&0xff | ||
225 | |||
226 | unlk %a6 | ||
227 | rts | ||
228 | |||
229 | ############################################# | ||
230 | ############################################# | ||
231 | |||
232 | unimp_str: | ||
233 | string "\tUnimplemented FP instructions..." | ||
234 | |||
235 | align 0x4 | ||
236 | unimp_0: | ||
237 | addq.l &0x1,TESTCTR(%a6) | ||
238 | |||
239 | movm.l DEF_REGS(%pc),&0x3fff | ||
240 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
241 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
242 | |||
243 | mov.w &0x0000,ICCR(%a6) | ||
244 | movm.l &0x7fff,IREGS(%a6) | ||
245 | fmovm.x &0xff,IFPREGS(%a6) | ||
246 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
247 | |||
248 | mov.l &0x40000000,DATA+0x0(%a6) | ||
249 | mov.l &0xc90fdaa2,DATA+0x4(%a6) | ||
250 | mov.l &0x2168c235,DATA+0x8(%a6) | ||
251 | |||
252 | mov.w &0x0000,%cc | ||
253 | unimp_0_pc: | ||
254 | fsin.x DATA(%a6),%fp0 | ||
255 | |||
256 | mov.w %cc,SCCR(%a6) | ||
257 | movm.l &0x7fff,SREGS(%a6) | ||
258 | fmovm.x &0xff,SFPREGS(%a6) | ||
259 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
260 | |||
261 | mov.l &0xbfbf0000,IFPREGS+0x0(%a6) | ||
262 | mov.l &0x80000000,IFPREGS+0x4(%a6) | ||
263 | mov.l &0x00000000,IFPREGS+0x8(%a6) | ||
264 | mov.l &0x08000208,IFPCREGS+0x4(%a6) | ||
265 | lea unimp_0_pc(%pc),%a0 | ||
266 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
267 | |||
268 | bsr.l chkregs | ||
269 | tst.b %d0 | ||
270 | bne.l error | ||
271 | |||
272 | bsr.l chkfpregs | ||
273 | tst.b %d0 | ||
274 | bne.l error | ||
275 | |||
276 | unimp_1: | ||
277 | addq.l &0x1,TESTCTR(%a6) | ||
278 | |||
279 | movm.l DEF_REGS(%pc),&0x3fff | ||
280 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
281 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
282 | |||
283 | mov.w &0x0000,ICCR(%a6) | ||
284 | movm.l &0x7fff,IREGS(%a6) | ||
285 | fmovm.x &0xff,IFPREGS(%a6) | ||
286 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
287 | |||
288 | mov.l &0x3ffe0000,DATA+0x0(%a6) | ||
289 | mov.l &0xc90fdaa2,DATA+0x4(%a6) | ||
290 | mov.l &0x2168c235,DATA+0x8(%a6) | ||
291 | |||
292 | mov.w &0x0000,%cc | ||
293 | unimp_1_pc: | ||
294 | ftan.x DATA(%a6),%fp0 | ||
295 | |||
296 | mov.w %cc,SCCR(%a6) | ||
297 | movm.l &0x7fff,SREGS(%a6) | ||
298 | fmovm.x &0xff,SFPREGS(%a6) | ||
299 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
300 | |||
301 | mov.l &0x3fff0000,IFPREGS+0x0(%a6) | ||
302 | mov.l &0x80000000,IFPREGS+0x4(%a6) | ||
303 | mov.l &0x00000000,IFPREGS+0x8(%a6) | ||
304 | mov.l &0x00000208,IFPCREGS+0x4(%a6) | ||
305 | lea unimp_1_pc(%pc),%a0 | ||
306 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
307 | |||
308 | bsr.l chkregs | ||
309 | tst.b %d0 | ||
310 | bne.l error | ||
311 | |||
312 | bsr.l chkfpregs | ||
313 | tst.b %d0 | ||
314 | bne.l error | ||
315 | |||
316 | # fmovecr | ||
317 | unimp_2: | ||
318 | addq.l &0x1,TESTCTR(%a6) | ||
319 | |||
320 | movm.l DEF_REGS(%pc),&0x3fff | ||
321 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
322 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
323 | |||
324 | mov.w &0x0000,ICCR(%a6) | ||
325 | movm.l &0x7fff,IREGS(%a6) | ||
326 | fmovm.x &0xff,IFPREGS(%a6) | ||
327 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
328 | |||
329 | mov.w &0x0000,%cc | ||
330 | unimp_2_pc: | ||
331 | fmovcr.x &0x31,%fp0 | ||
332 | |||
333 | mov.w %cc,SCCR(%a6) | ||
334 | movm.l &0x7fff,SREGS(%a6) | ||
335 | fmovm.x &0xff,SFPREGS(%a6) | ||
336 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
337 | |||
338 | mov.l &0x40000000,IFPREGS+0x0(%a6) | ||
339 | mov.l &0x935d8ddd,IFPREGS+0x4(%a6) | ||
340 | mov.l &0xaaa8ac17,IFPREGS+0x8(%a6) | ||
341 | mov.l &0x00000208,IFPCREGS+0x4(%a6) | ||
342 | lea unimp_2_pc(%pc),%a0 | ||
343 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
344 | |||
345 | bsr.l chkregs | ||
346 | tst.b %d0 | ||
347 | bne.l error | ||
348 | |||
349 | bsr.l chkfpregs | ||
350 | tst.b %d0 | ||
351 | bne.l error | ||
352 | |||
353 | # fscc | ||
354 | unimp_3: | ||
355 | addq.l &0x1,TESTCTR(%a6) | ||
356 | |||
357 | movm.l DEF_REGS(%pc),&0x3fff | ||
358 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
359 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
360 | |||
361 | fmov.l &0x0f000000,%fpsr | ||
362 | mov.l &0x00,%d7 | ||
363 | |||
364 | mov.w &0x0000,ICCR(%a6) | ||
365 | movm.l &0x7fff,IREGS(%a6) | ||
366 | fmovm.x &0xff,IFPREGS(%a6) | ||
367 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
368 | |||
369 | mov.w &0x0000,%cc | ||
370 | unimp_3_pc: | ||
371 | fsgt %d7 | ||
372 | |||
373 | mov.w %cc,SCCR(%a6) | ||
374 | movm.l &0x7fff,SREGS(%a6) | ||
375 | fmovm.x &0xff,SFPREGS(%a6) | ||
376 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
377 | mov.l &0x0f008080,IFPCREGS+0x4(%a6) | ||
378 | lea unimp_3_pc(%pc),%a0 | ||
379 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
380 | |||
381 | bsr.l chkregs | ||
382 | tst.b %d0 | ||
383 | bne.l error | ||
384 | |||
385 | bsr.l chkfpregs | ||
386 | tst.b %d0 | ||
387 | bne.l error | ||
388 | |||
389 | # fdbcc | ||
390 | unimp_4: | ||
391 | addq.l &0x1,TESTCTR(%a6) | ||
392 | |||
393 | movm.l DEF_REGS(%pc),&0x3fff | ||
394 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
395 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
396 | |||
397 | fmov.l &0x0f000000,%fpsr | ||
398 | mov.l &0x2,%d7 | ||
399 | |||
400 | mov.w &0x0000,ICCR(%a6) | ||
401 | movm.l &0x7fff,IREGS(%a6) | ||
402 | fmovm.x &0xff,IFPREGS(%a6) | ||
403 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
404 | |||
405 | mov.w &0x0000,%cc | ||
406 | unimp_4_pc: | ||
407 | fdbgt.w %d7,unimp_4_pc | ||
408 | |||
409 | mov.w %cc,SCCR(%a6) | ||
410 | movm.l &0x7fff,SREGS(%a6) | ||
411 | fmovm.x &0xff,SFPREGS(%a6) | ||
412 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
413 | mov.w &0xffff,IREGS+28+2(%a6) | ||
414 | mov.l &0x0f008080,IFPCREGS+0x4(%a6) | ||
415 | lea unimp_4_pc(%pc),%a0 | ||
416 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
417 | |||
418 | bsr.l chkregs | ||
419 | tst.b %d0 | ||
420 | bne.l error | ||
421 | |||
422 | bsr.l chkfpregs | ||
423 | tst.b %d0 | ||
424 | bne.l error | ||
425 | |||
426 | # ftrapcc | ||
427 | unimp_5: | ||
428 | addq.l &0x1,TESTCTR(%a6) | ||
429 | |||
430 | movm.l DEF_REGS(%pc),&0x3fff | ||
431 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
432 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
433 | |||
434 | fmov.l &0x0f000000,%fpsr | ||
435 | |||
436 | mov.w &0x0000,ICCR(%a6) | ||
437 | movm.l &0x7fff,IREGS(%a6) | ||
438 | fmovm.x &0xff,IFPREGS(%a6) | ||
439 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
440 | |||
441 | mov.w &0x0000,%cc | ||
442 | unimp_5_pc: | ||
443 | ftpgt.l &0xabcdef01 | ||
444 | |||
445 | mov.w %cc,SCCR(%a6) | ||
446 | movm.l &0x7fff,SREGS(%a6) | ||
447 | fmovm.x &0xff,SFPREGS(%a6) | ||
448 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
449 | mov.l &0x0f008080,IFPCREGS+0x4(%a6) | ||
450 | lea unimp_5_pc(%pc),%a0 | ||
451 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
452 | |||
453 | bsr.l chkregs | ||
454 | tst.b %d0 | ||
455 | bne.l error | ||
456 | |||
457 | bsr.l chkfpregs | ||
458 | tst.b %d0 | ||
459 | bne.l error | ||
460 | |||
461 | clr.l %d0 | ||
462 | rts | ||
463 | |||
464 | ############################################# | ||
465 | |||
466 | effadd_str: | ||
467 | string "\tUnimplemented <ea>..." | ||
468 | |||
469 | align 0x4 | ||
470 | effadd_0: | ||
471 | addq.l &0x1,TESTCTR(%a6) | ||
472 | |||
473 | movm.l DEF_REGS(%pc),&0x3fff | ||
474 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
475 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
476 | |||
477 | mov.w &0x0000,ICCR(%a6) | ||
478 | movm.l &0x7fff,IREGS(%a6) | ||
479 | fmovm.x &0xff,IFPREGS(%a6) | ||
480 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
481 | |||
482 | fmov.b &0x2,%fp0 | ||
483 | |||
484 | mov.w &0x0000,%cc | ||
485 | effadd_0_pc: | ||
486 | fmul.x &0xc00000008000000000000000,%fp0 | ||
487 | |||
488 | mov.w %cc,SCCR(%a6) | ||
489 | movm.l &0x7fff,SREGS(%a6) | ||
490 | fmovm.x &0xff,SFPREGS(%a6) | ||
491 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
492 | |||
493 | mov.l &0xc0010000,IFPREGS+0x0(%a6) | ||
494 | mov.l &0x80000000,IFPREGS+0x4(%a6) | ||
495 | mov.l &0x00000000,IFPREGS+0x8(%a6) | ||
496 | mov.l &0x08000000,IFPCREGS+0x4(%a6) | ||
497 | lea effadd_0_pc(%pc),%a0 | ||
498 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
499 | |||
500 | bsr.l chkregs | ||
501 | tst.b %d0 | ||
502 | bne.l error | ||
503 | |||
504 | bsr.l chkfpregs | ||
505 | tst.b %d0 | ||
506 | bne.l error | ||
507 | |||
508 | effadd_1: | ||
509 | addq.l &0x1,TESTCTR(%a6) | ||
510 | |||
511 | movm.l DEF_REGS(%pc),&0x3fff | ||
512 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
513 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
514 | |||
515 | mov.w &0x0000,ICCR(%a6) | ||
516 | movm.l &0x7fff,IREGS(%a6) | ||
517 | fmovm.x &0xff,IFPREGS(%a6) | ||
518 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
519 | |||
520 | mov.w &0x0000,%cc | ||
521 | effadd_1_pc: | ||
522 | fabs.p &0xc12300012345678912345678,%fp0 | ||
523 | |||
524 | mov.w %cc,SCCR(%a6) | ||
525 | movm.l &0x7fff,SREGS(%a6) | ||
526 | fmovm.x &0xff,SFPREGS(%a6) | ||
527 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
528 | |||
529 | mov.l &0x3e660000,IFPREGS+0x0(%a6) | ||
530 | mov.l &0xd0ed23e8,IFPREGS+0x4(%a6) | ||
531 | mov.l &0xd14035bc,IFPREGS+0x8(%a6) | ||
532 | mov.l &0x00000108,IFPCREGS+0x4(%a6) | ||
533 | lea effadd_1_pc(%pc),%a0 | ||
534 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
535 | |||
536 | bsr.l chkregs | ||
537 | tst.b %d0 | ||
538 | bne.l error | ||
539 | |||
540 | bsr.l chkfpregs | ||
541 | tst.b %d0 | ||
542 | bne.l error | ||
543 | |||
544 | fmovml_0: | ||
545 | addq.l &0x1,TESTCTR(%a6) | ||
546 | |||
547 | movm.l DEF_REGS(%pc),&0x3fff | ||
548 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
549 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
550 | |||
551 | mov.w &0x0000,ICCR(%a6) | ||
552 | mov.w &0x0000,%cc | ||
553 | movm.l &0x7fff,IREGS(%a6) | ||
554 | fmovm.x &0xff,IFPREGS(%a6) | ||
555 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
556 | |||
557 | fmovm.l &0xffffffffffffffff,%fpcr,%fpsr | ||
558 | |||
559 | mov.w %cc,SCCR(%a6) | ||
560 | movm.l &0x7fff,SREGS(%a6) | ||
561 | fmovm.x &0xff,SFPREGS(%a6) | ||
562 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
563 | mov.l &0x0000fff0,IFPCREGS+0x0(%a6) | ||
564 | mov.l &0x0ffffff8,IFPCREGS+0x4(%a6) | ||
565 | |||
566 | bsr.l chkregs | ||
567 | tst.b %d0 | ||
568 | bne.l error | ||
569 | |||
570 | bsr.l chkfpregs | ||
571 | tst.b %d0 | ||
572 | bne.l error | ||
573 | |||
574 | fmovml_1: | ||
575 | addq.l &0x1,TESTCTR(%a6) | ||
576 | |||
577 | movm.l DEF_REGS(%pc),&0x3fff | ||
578 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
579 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
580 | |||
581 | mov.w &0x0000,ICCR(%a6) | ||
582 | mov.w &0x0000,%cc | ||
583 | movm.l &0x7fff,IREGS(%a6) | ||
584 | fmovm.x &0xff,IFPREGS(%a6) | ||
585 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
586 | |||
587 | fmovm.l &0xffffffffffffffff,%fpcr,%fpiar | ||
588 | |||
589 | mov.w %cc,SCCR(%a6) | ||
590 | movm.l &0x7fff,SREGS(%a6) | ||
591 | fmovm.x &0xff,SFPREGS(%a6) | ||
592 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
593 | mov.l &0x0000fff0,IFPCREGS+0x0(%a6) | ||
594 | mov.l &0xffffffff,IFPCREGS+0x8(%a6) | ||
595 | |||
596 | bsr.l chkregs | ||
597 | tst.b %d0 | ||
598 | bne.l error | ||
599 | |||
600 | bsr.l chkfpregs | ||
601 | tst.b %d0 | ||
602 | bne.l error | ||
603 | |||
604 | fmovml_2: | ||
605 | addq.l &0x1,TESTCTR(%a6) | ||
606 | |||
607 | movm.l DEF_REGS(%pc),&0x3fff | ||
608 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
609 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
610 | |||
611 | mov.w &0x0000,ICCR(%a6) | ||
612 | mov.w &0x0000,%cc | ||
613 | movm.l &0x7fff,IREGS(%a6) | ||
614 | fmovm.x &0xff,IFPREGS(%a6) | ||
615 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
616 | |||
617 | fmovm.l &0xffffffffffffffff,%fpsr,%fpiar | ||
618 | |||
619 | mov.w %cc,SCCR(%a6) | ||
620 | movm.l &0x7fff,SREGS(%a6) | ||
621 | fmovm.x &0xff,SFPREGS(%a6) | ||
622 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
623 | mov.l &0x0ffffff8,IFPCREGS+0x4(%a6) | ||
624 | mov.l &0xffffffff,IFPCREGS+0x8(%a6) | ||
625 | |||
626 | bsr.l chkregs | ||
627 | tst.b %d0 | ||
628 | bne.l error | ||
629 | |||
630 | bsr.l chkfpregs | ||
631 | tst.b %d0 | ||
632 | bne.l error | ||
633 | |||
634 | fmovml_3: | ||
635 | addq.l &0x1,TESTCTR(%a6) | ||
636 | |||
637 | movm.l DEF_REGS(%pc),&0x3fff | ||
638 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
639 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
640 | |||
641 | mov.w &0x0000,ICCR(%a6) | ||
642 | mov.w &0x0000,%cc | ||
643 | movm.l &0x7fff,IREGS(%a6) | ||
644 | fmovm.x &0xff,IFPREGS(%a6) | ||
645 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
646 | |||
647 | fmovm.l &0xffffffffffffffffffffffff,%fpcr,%fpsr,%fpiar | ||
648 | |||
649 | mov.w %cc,SCCR(%a6) | ||
650 | movm.l &0x7fff,SREGS(%a6) | ||
651 | fmovm.x &0xff,SFPREGS(%a6) | ||
652 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
653 | mov.l &0x0000fff0,IFPCREGS+0x0(%a6) | ||
654 | mov.l &0x0ffffff8,IFPCREGS+0x4(%a6) | ||
655 | mov.l &0xffffffff,IFPCREGS+0x8(%a6) | ||
656 | |||
657 | bsr.l chkregs | ||
658 | tst.b %d0 | ||
659 | bne.l error | ||
660 | |||
661 | bsr.l chkfpregs | ||
662 | tst.b %d0 | ||
663 | bne.l error | ||
664 | |||
665 | # fmovmx dynamic | ||
666 | fmovmx_0: | ||
667 | addq.l &0x1,TESTCTR(%a6) | ||
668 | |||
669 | movm.l DEF_REGS(%pc),&0x3fff | ||
670 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
671 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
672 | |||
673 | fmov.b &0x1,%fp0 | ||
674 | fmov.b &0x2,%fp1 | ||
675 | fmov.b &0x3,%fp2 | ||
676 | fmov.b &0x4,%fp3 | ||
677 | fmov.b &0x5,%fp4 | ||
678 | fmov.b &0x6,%fp5 | ||
679 | fmov.b &0x7,%fp6 | ||
680 | fmov.b &0x8,%fp7 | ||
681 | |||
682 | fmov.l &0x0,%fpiar | ||
683 | mov.l &0xffffffaa,%d0 | ||
684 | |||
685 | mov.w &0x0000,ICCR(%a6) | ||
686 | movm.l &0xffff,IREGS(%a6) | ||
687 | |||
688 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
689 | fmovm.x &0xff,IFPREGS(%a6) | ||
690 | |||
691 | mov.w &0x0000,%cc | ||
692 | |||
693 | fmovm.x %d0,-(%sp) | ||
694 | |||
695 | mov.w %cc,SCCR(%a6) | ||
696 | |||
697 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
698 | |||
699 | fmov.s &0x7f800000,%fp1 | ||
700 | fmov.s &0x7f800000,%fp3 | ||
701 | fmov.s &0x7f800000,%fp5 | ||
702 | fmov.s &0x7f800000,%fp7 | ||
703 | |||
704 | fmov.x (%sp)+,%fp1 | ||
705 | fmov.x (%sp)+,%fp3 | ||
706 | fmov.x (%sp)+,%fp5 | ||
707 | fmov.x (%sp)+,%fp7 | ||
708 | |||
709 | movm.l &0xffff,SREGS(%a6) | ||
710 | fmovm.x &0xff,SFPREGS(%a6) | ||
711 | |||
712 | bsr.l chkregs | ||
713 | tst.b %d0 | ||
714 | bne.l error | ||
715 | |||
716 | bsr.l chkfpregs | ||
717 | tst.b %d0 | ||
718 | bne.l error | ||
719 | |||
720 | fmovmx_1: | ||
721 | addq.l &0x1,TESTCTR(%a6) | ||
722 | |||
723 | movm.l DEF_REGS(%pc),&0x3fff | ||
724 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
725 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
726 | |||
727 | fmov.b &0x1,%fp0 | ||
728 | fmov.b &0x2,%fp1 | ||
729 | fmov.b &0x3,%fp2 | ||
730 | fmov.b &0x4,%fp3 | ||
731 | fmov.b &0x5,%fp4 | ||
732 | fmov.b &0x6,%fp5 | ||
733 | fmov.b &0x7,%fp6 | ||
734 | fmov.b &0x8,%fp7 | ||
735 | |||
736 | fmov.x %fp6,-(%sp) | ||
737 | fmov.x %fp4,-(%sp) | ||
738 | fmov.x %fp2,-(%sp) | ||
739 | fmov.x %fp0,-(%sp) | ||
740 | |||
741 | fmovm.x &0xff,IFPREGS(%a6) | ||
742 | |||
743 | fmov.s &0x7f800000,%fp6 | ||
744 | fmov.s &0x7f800000,%fp4 | ||
745 | fmov.s &0x7f800000,%fp2 | ||
746 | fmov.s &0x7f800000,%fp0 | ||
747 | |||
748 | fmov.l &0x0,%fpiar | ||
749 | fmov.l &0x0,%fpsr | ||
750 | mov.l &0xffffffaa,%d0 | ||
751 | |||
752 | mov.w &0x0000,ICCR(%a6) | ||
753 | movm.l &0xffff,IREGS(%a6) | ||
754 | |||
755 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
756 | |||
757 | mov.w &0x0000,%cc | ||
758 | |||
759 | fmovm.x (%sp)+,%d0 | ||
760 | |||
761 | mov.w %cc,SCCR(%a6) | ||
762 | |||
763 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
764 | |||
765 | movm.l &0xffff,SREGS(%a6) | ||
766 | fmovm.x &0xff,SFPREGS(%a6) | ||
767 | |||
768 | bsr.l chkregs | ||
769 | tst.b %d0 | ||
770 | bne.l error | ||
771 | |||
772 | bsr.l chkfpregs | ||
773 | tst.b %d0 | ||
774 | bne.l error | ||
775 | |||
776 | fmovmx_2: | ||
777 | addq.l &0x1,TESTCTR(%a6) | ||
778 | |||
779 | movm.l DEF_REGS(%pc),&0x3fff | ||
780 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
781 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
782 | |||
783 | fmov.b &0x1,%fp0 | ||
784 | fmov.b &0x2,%fp1 | ||
785 | fmov.b &0x3,%fp2 | ||
786 | fmov.b &0x4,%fp3 | ||
787 | fmov.b &0x5,%fp4 | ||
788 | fmov.b &0x6,%fp5 | ||
789 | fmov.b &0x7,%fp6 | ||
790 | fmov.b &0x8,%fp7 | ||
791 | |||
792 | fmov.l &0x0,%fpiar | ||
793 | mov.l &0xffffff00,%d0 | ||
794 | |||
795 | mov.w &0x0000,ICCR(%a6) | ||
796 | movm.l &0xffff,IREGS(%a6) | ||
797 | |||
798 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
799 | fmovm.x &0xff,IFPREGS(%a6) | ||
800 | |||
801 | mov.w &0x0000,%cc | ||
802 | |||
803 | fmovm.x %d0,-(%sp) | ||
804 | |||
805 | mov.w %cc,SCCR(%a6) | ||
806 | |||
807 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
808 | |||
809 | movm.l &0xffff,SREGS(%a6) | ||
810 | fmovm.x &0xff,SFPREGS(%a6) | ||
811 | |||
812 | bsr.l chkregs | ||
813 | tst.b %d0 | ||
814 | bne.l error | ||
815 | |||
816 | bsr.l chkfpregs | ||
817 | tst.b %d0 | ||
818 | bne.l error | ||
819 | |||
820 | clr.l %d0 | ||
821 | rts | ||
822 | |||
823 | ########################################################### | ||
824 | |||
825 | # This test will take a non-maskable overflow directly. | ||
826 | ovfl_nm_str: | ||
827 | string "\tNon-maskable overflow..." | ||
828 | |||
829 | align 0x4 | ||
830 | ovfl_nm_0: | ||
831 | addq.l &0x1,TESTCTR(%a6) | ||
832 | |||
833 | movm.l DEF_REGS(%pc),&0x3fff | ||
834 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
835 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
836 | |||
837 | mov.w &0x0000,ICCR(%a6) | ||
838 | movm.l &0x7fff,IREGS(%a6) | ||
839 | fmovm.x &0xff,IFPREGS(%a6) | ||
840 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
841 | |||
842 | fmov.b &0x2,%fp0 | ||
843 | mov.l &0x7ffe0000,DATA+0x0(%a6) | ||
844 | mov.l &0x80000000,DATA+0x4(%a6) | ||
845 | mov.l &0x00000000,DATA+0x8(%a6) | ||
846 | |||
847 | mov.w &0x0000,%cc | ||
848 | ovfl_nm_0_pc: | ||
849 | fmul.x DATA(%a6),%fp0 | ||
850 | |||
851 | mov.w %cc,SCCR(%a6) | ||
852 | movm.l &0x7fff,SREGS(%a6) | ||
853 | fmovm.x &0xff,SFPREGS(%a6) | ||
854 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
855 | |||
856 | mov.l &0x7fff0000,IFPREGS+0x0(%a6) | ||
857 | mov.l &0x00000000,IFPREGS+0x4(%a6) | ||
858 | mov.l &0x00000000,IFPREGS+0x8(%a6) | ||
859 | mov.l &0x02001048,IFPCREGS+0x4(%a6) | ||
860 | lea ovfl_nm_0_pc(%pc),%a0 | ||
861 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
862 | |||
863 | bsr.l chkregs | ||
864 | tst.b %d0 | ||
865 | bne.l error | ||
866 | |||
867 | bsr.l chkfpregs | ||
868 | tst.b %d0 | ||
869 | bne.l error | ||
870 | |||
871 | clr.l %d0 | ||
872 | rts | ||
873 | |||
874 | ########################################################### | ||
875 | |||
876 | # This test will take an overflow directly. | ||
877 | ovfl_str: | ||
878 | string "\tEnabled overflow..." | ||
879 | |||
880 | align 0x4 | ||
881 | ovfl_0: | ||
882 | addq.l &0x1,TESTCTR(%a6) | ||
883 | |||
884 | movm.l DEF_REGS(%pc),&0x3fff | ||
885 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
886 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
887 | |||
888 | mov.w &0x0000,ICCR(%a6) | ||
889 | movm.l &0x7fff,IREGS(%a6) | ||
890 | fmovm.x &0xff,IFPREGS(%a6) | ||
891 | fmov.l &0x00001000,%fpcr | ||
892 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
893 | |||
894 | fmov.b &0x2,%fp0 | ||
895 | mov.l &0x7ffe0000,DATA+0x0(%a6) | ||
896 | mov.l &0x80000000,DATA+0x4(%a6) | ||
897 | mov.l &0x00000000,DATA+0x8(%a6) | ||
898 | |||
899 | mov.w &0x0000,%cc | ||
900 | ovfl_0_pc: | ||
901 | fmul.x DATA(%a6),%fp0 | ||
902 | |||
903 | mov.w %cc,SCCR(%a6) | ||
904 | movm.l &0x7fff,SREGS(%a6) | ||
905 | fmovm.x &0xff,SFPREGS(%a6) | ||
906 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
907 | |||
908 | mov.l &0x7fff0000,IFPREGS+0x0(%a6) | ||
909 | mov.l &0x00000000,IFPREGS+0x4(%a6) | ||
910 | mov.l &0x00000000,IFPREGS+0x8(%a6) | ||
911 | mov.l &0x02001048,IFPCREGS+0x4(%a6) | ||
912 | lea ovfl_0_pc(%pc),%a0 | ||
913 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
914 | |||
915 | bsr.l chkregs | ||
916 | tst.b %d0 | ||
917 | bne.l error | ||
918 | |||
919 | bsr.l chkfpregs | ||
920 | tst.b %d0 | ||
921 | bne.l error | ||
922 | |||
923 | clr.l %d0 | ||
924 | rts | ||
925 | |||
926 | ##################################################################### | ||
927 | |||
928 | # This test will take an underflow directly. | ||
929 | unfl_str: | ||
930 | string "\tEnabled underflow..." | ||
931 | |||
932 | align 0x4 | ||
933 | unfl_0: | ||
934 | addq.l &0x1,TESTCTR(%a6) | ||
935 | |||
936 | movm.l DEF_REGS(%pc),&0x3fff | ||
937 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
938 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
939 | |||
940 | mov.w &0x0000,ICCR(%a6) | ||
941 | movm.l &0x7fff,IREGS(%a6) | ||
942 | fmovm.x &0xff,IFPREGS(%a6) | ||
943 | fmov.l &0x00000800,%fpcr | ||
944 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
945 | |||
946 | mov.l &0x00000000,DATA+0x0(%a6) | ||
947 | mov.l &0x80000000,DATA+0x4(%a6) | ||
948 | mov.l &0x00000000,DATA+0x8(%a6) | ||
949 | fmovm.x DATA(%a6),&0x80 | ||
950 | |||
951 | mov.w &0x0000,%cc | ||
952 | unfl_0_pc: | ||
953 | fdiv.b &0x2,%fp0 | ||
954 | |||
955 | mov.w %cc,SCCR(%a6) | ||
956 | movm.l &0x7fff,SREGS(%a6) | ||
957 | fmovm.x &0xff,SFPREGS(%a6) | ||
958 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
959 | |||
960 | mov.l &0x00000000,IFPREGS+0x0(%a6) | ||
961 | mov.l &0x40000000,IFPREGS+0x4(%a6) | ||
962 | mov.l &0x00000000,IFPREGS+0x8(%a6) | ||
963 | mov.l &0x00000800,IFPCREGS+0x4(%a6) | ||
964 | lea unfl_0_pc(%pc),%a0 | ||
965 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
966 | |||
967 | bsr.l chkregs | ||
968 | tst.b %d0 | ||
969 | bne.l error | ||
970 | |||
971 | bsr.l chkfpregs | ||
972 | tst.b %d0 | ||
973 | bne.l error | ||
974 | |||
975 | clr.l %d0 | ||
976 | rts | ||
977 | |||
978 | ##################################################################### | ||
979 | |||
980 | # This test will take a non-maskable underflow directly. | ||
981 | unfl_nm_str: | ||
982 | string "\tNon-maskable underflow..." | ||
983 | |||
984 | align 0x4 | ||
985 | unfl_nm_0: | ||
986 | addq.l &0x1,TESTCTR(%a6) | ||
987 | |||
988 | movm.l DEF_REGS(%pc),&0x3fff | ||
989 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
990 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
991 | |||
992 | mov.w &0x0000,ICCR(%a6) | ||
993 | movm.l &0x7fff,IREGS(%a6) | ||
994 | fmovm.x &0xff,IFPREGS(%a6) | ||
995 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
996 | |||
997 | mov.l &0x00000000,DATA+0x0(%a6) | ||
998 | mov.l &0x80000000,DATA+0x4(%a6) | ||
999 | mov.l &0x00000000,DATA+0x8(%a6) | ||
1000 | fmovm.x DATA(%a6),&0x80 | ||
1001 | |||
1002 | mov.w &0x0000,%cc | ||
1003 | unfl_nm_0_pc: | ||
1004 | fdiv.b &0x2,%fp0 | ||
1005 | |||
1006 | mov.w %cc,SCCR(%a6) | ||
1007 | movm.l &0x7fff,SREGS(%a6) | ||
1008 | fmovm.x &0xff,SFPREGS(%a6) | ||
1009 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
1010 | |||
1011 | mov.l &0x00000000,IFPREGS+0x0(%a6) | ||
1012 | mov.l &0x40000000,IFPREGS+0x4(%a6) | ||
1013 | mov.l &0x00000000,IFPREGS+0x8(%a6) | ||
1014 | mov.l &0x00000800,IFPCREGS+0x4(%a6) | ||
1015 | lea unfl_nm_0_pc(%pc),%a0 | ||
1016 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
1017 | |||
1018 | bsr.l chkregs | ||
1019 | tst.b %d0 | ||
1020 | bne.l error | ||
1021 | |||
1022 | bsr.l chkfpregs | ||
1023 | tst.b %d0 | ||
1024 | bne.l error | ||
1025 | |||
1026 | clr.l %d0 | ||
1027 | rts | ||
1028 | |||
1029 | ##################################################################### | ||
1030 | |||
1031 | inex_str: | ||
1032 | string "\tEnabled inexact..." | ||
1033 | |||
1034 | align 0x4 | ||
1035 | inex_0: | ||
1036 | addq.l &0x1,TESTCTR(%a6) | ||
1037 | |||
1038 | movm.l DEF_REGS(%pc),&0x3fff | ||
1039 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
1040 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
1041 | |||
1042 | mov.w &0x0000,ICCR(%a6) | ||
1043 | movm.l &0x7fff,IREGS(%a6) | ||
1044 | fmovm.x &0xff,IFPREGS(%a6) | ||
1045 | fmov.l &0x00000200,%fpcr # enable inexact | ||
1046 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
1047 | |||
1048 | mov.l &0x50000000,DATA+0x0(%a6) | ||
1049 | mov.l &0x80000000,DATA+0x4(%a6) | ||
1050 | mov.l &0x00000000,DATA+0x8(%a6) | ||
1051 | fmovm.x DATA(%a6),&0x80 | ||
1052 | |||
1053 | mov.w &0x0000,%cc | ||
1054 | inex_0_pc: | ||
1055 | fadd.b &0x2,%fp0 | ||
1056 | |||
1057 | mov.w %cc,SCCR(%a6) | ||
1058 | movm.l &0x7fff,SREGS(%a6) | ||
1059 | fmovm.x &0xff,SFPREGS(%a6) | ||
1060 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
1061 | |||
1062 | mov.l &0x50000000,IFPREGS+0x0(%a6) | ||
1063 | mov.l &0x80000000,IFPREGS+0x4(%a6) | ||
1064 | mov.l &0x00000000,IFPREGS+0x8(%a6) | ||
1065 | mov.l &0x00000208,IFPCREGS+0x4(%a6) | ||
1066 | lea inex_0_pc(%pc),%a0 | ||
1067 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
1068 | |||
1069 | bsr.l chkregs | ||
1070 | tst.b %d0 | ||
1071 | bne.l error | ||
1072 | |||
1073 | bsr.l chkfpregs | ||
1074 | tst.b %d0 | ||
1075 | bne.l error | ||
1076 | |||
1077 | clr.l %d0 | ||
1078 | rts | ||
1079 | |||
1080 | ##################################################################### | ||
1081 | |||
1082 | snan_str: | ||
1083 | string "\tEnabled SNAN..." | ||
1084 | |||
1085 | align 0x4 | ||
1086 | snan_0: | ||
1087 | addq.l &0x1,TESTCTR(%a6) | ||
1088 | |||
1089 | movm.l DEF_REGS(%pc),&0x3fff | ||
1090 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
1091 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
1092 | |||
1093 | mov.w &0x0000,ICCR(%a6) | ||
1094 | movm.l &0x7fff,IREGS(%a6) | ||
1095 | fmovm.x &0xff,IFPREGS(%a6) | ||
1096 | fmov.l &0x00004000,%fpcr # enable SNAN | ||
1097 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
1098 | |||
1099 | mov.l &0xffff0000,DATA+0x0(%a6) | ||
1100 | mov.l &0x00000000,DATA+0x4(%a6) | ||
1101 | mov.l &0x00000001,DATA+0x8(%a6) | ||
1102 | fmovm.x DATA(%a6),&0x80 | ||
1103 | |||
1104 | mov.w &0x0000,%cc | ||
1105 | snan_0_pc: | ||
1106 | fadd.b &0x2,%fp0 | ||
1107 | |||
1108 | mov.w %cc,SCCR(%a6) | ||
1109 | movm.l &0x7fff,SREGS(%a6) | ||
1110 | fmovm.x &0xff,SFPREGS(%a6) | ||
1111 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
1112 | |||
1113 | mov.l &0xffff0000,IFPREGS+0x0(%a6) | ||
1114 | mov.l &0x00000000,IFPREGS+0x4(%a6) | ||
1115 | mov.l &0x00000001,IFPREGS+0x8(%a6) | ||
1116 | mov.l &0x09004080,IFPCREGS+0x4(%a6) | ||
1117 | lea snan_0_pc(%pc),%a0 | ||
1118 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
1119 | |||
1120 | bsr.l chkregs | ||
1121 | tst.b %d0 | ||
1122 | bne.l error | ||
1123 | |||
1124 | bsr.l chkfpregs | ||
1125 | tst.b %d0 | ||
1126 | bne.l error | ||
1127 | |||
1128 | clr.l %d0 | ||
1129 | rts | ||
1130 | |||
1131 | ##################################################################### | ||
1132 | |||
1133 | operr_str: | ||
1134 | string "\tEnabled OPERR..." | ||
1135 | |||
1136 | align 0x4 | ||
1137 | operr_0: | ||
1138 | addq.l &0x1,TESTCTR(%a6) | ||
1139 | |||
1140 | movm.l DEF_REGS(%pc),&0x3fff | ||
1141 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
1142 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
1143 | |||
1144 | mov.w &0x0000,ICCR(%a6) | ||
1145 | movm.l &0x7fff,IREGS(%a6) | ||
1146 | fmovm.x &0xff,IFPREGS(%a6) | ||
1147 | fmov.l &0x00002000,%fpcr # enable OPERR | ||
1148 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
1149 | |||
1150 | mov.l &0xffff0000,DATA+0x0(%a6) | ||
1151 | mov.l &0x00000000,DATA+0x4(%a6) | ||
1152 | mov.l &0x00000000,DATA+0x8(%a6) | ||
1153 | fmovm.x DATA(%a6),&0x80 | ||
1154 | |||
1155 | mov.w &0x0000,%cc | ||
1156 | operr_0_pc: | ||
1157 | fadd.s &0x7f800000,%fp0 | ||
1158 | |||
1159 | mov.w %cc,SCCR(%a6) | ||
1160 | movm.l &0x7fff,SREGS(%a6) | ||
1161 | fmovm.x &0xff,SFPREGS(%a6) | ||
1162 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
1163 | |||
1164 | mov.l &0xffff0000,IFPREGS+0x0(%a6) | ||
1165 | mov.l &0x00000000,IFPREGS+0x4(%a6) | ||
1166 | mov.l &0x00000000,IFPREGS+0x8(%a6) | ||
1167 | mov.l &0x01002080,IFPCREGS+0x4(%a6) | ||
1168 | lea operr_0_pc(%pc),%a0 | ||
1169 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
1170 | |||
1171 | bsr.l chkregs | ||
1172 | tst.b %d0 | ||
1173 | bne.l error | ||
1174 | |||
1175 | bsr.l chkfpregs | ||
1176 | tst.b %d0 | ||
1177 | bne.l error | ||
1178 | |||
1179 | clr.l %d0 | ||
1180 | rts | ||
1181 | |||
1182 | ##################################################################### | ||
1183 | |||
1184 | dz_str: | ||
1185 | string "\tEnabled DZ..." | ||
1186 | |||
1187 | align 0x4 | ||
1188 | dz_0: | ||
1189 | addq.l &0x1,TESTCTR(%a6) | ||
1190 | |||
1191 | movm.l DEF_REGS(%pc),&0x3fff | ||
1192 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
1193 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
1194 | |||
1195 | mov.w &0x0000,ICCR(%a6) | ||
1196 | movm.l &0x7fff,IREGS(%a6) | ||
1197 | fmovm.x &0xff,IFPREGS(%a6) | ||
1198 | fmov.l &0x00000400,%fpcr # enable DZ | ||
1199 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
1200 | |||
1201 | mov.l &0x40000000,DATA+0x0(%a6) | ||
1202 | mov.l &0x80000000,DATA+0x4(%a6) | ||
1203 | mov.l &0x00000000,DATA+0x8(%a6) | ||
1204 | fmovm.x DATA(%a6),&0x80 | ||
1205 | |||
1206 | mov.w &0x0000,%cc | ||
1207 | dz_0_pc: | ||
1208 | fdiv.b &0x0,%fp0 | ||
1209 | |||
1210 | mov.w %cc,SCCR(%a6) | ||
1211 | movm.l &0x7fff,SREGS(%a6) | ||
1212 | fmovm.x &0xff,SFPREGS(%a6) | ||
1213 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
1214 | |||
1215 | mov.l &0x40000000,IFPREGS+0x0(%a6) | ||
1216 | mov.l &0x80000000,IFPREGS+0x4(%a6) | ||
1217 | mov.l &0x00000000,IFPREGS+0x8(%a6) | ||
1218 | mov.l &0x02000410,IFPCREGS+0x4(%a6) | ||
1219 | lea dz_0_pc(%pc),%a0 | ||
1220 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
1221 | |||
1222 | bsr.l chkregs | ||
1223 | tst.b %d0 | ||
1224 | bne.l error | ||
1225 | |||
1226 | bsr.l chkfpregs | ||
1227 | tst.b %d0 | ||
1228 | bne.l error | ||
1229 | |||
1230 | clr.l %d0 | ||
1231 | rts | ||
1232 | |||
1233 | ##################################################################### | ||
1234 | |||
1235 | unsupp_str: | ||
1236 | string "\tUnimplemented data type/format..." | ||
1237 | |||
1238 | # an unnormalized number | ||
1239 | align 0x4 | ||
1240 | unsupp_0: | ||
1241 | addq.l &0x1,TESTCTR(%a6) | ||
1242 | |||
1243 | movm.l DEF_REGS(%pc),&0x3fff | ||
1244 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
1245 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
1246 | |||
1247 | mov.w &0x0000,ICCR(%a6) | ||
1248 | movm.l &0x7fff,IREGS(%a6) | ||
1249 | fmovm.x &0xff,IFPREGS(%a6) | ||
1250 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
1251 | |||
1252 | mov.l &0xc03f0000,DATA+0x0(%a6) | ||
1253 | mov.l &0x00000000,DATA+0x4(%a6) | ||
1254 | mov.l &0x00000001,DATA+0x8(%a6) | ||
1255 | fmov.b &0x2,%fp0 | ||
1256 | mov.w &0x0000,%cc | ||
1257 | unsupp_0_pc: | ||
1258 | fmul.x DATA(%a6),%fp0 | ||
1259 | |||
1260 | mov.w %cc,SCCR(%a6) | ||
1261 | movm.l &0x7fff,SREGS(%a6) | ||
1262 | fmovm.x &0xff,SFPREGS(%a6) | ||
1263 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
1264 | |||
1265 | mov.l &0xc0010000,IFPREGS+0x0(%a6) | ||
1266 | mov.l &0x80000000,IFPREGS+0x4(%a6) | ||
1267 | mov.l &0x00000000,IFPREGS+0x8(%a6) | ||
1268 | mov.l &0x08000000,IFPCREGS+0x4(%a6) | ||
1269 | lea unsupp_0_pc(%pc),%a0 | ||
1270 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
1271 | |||
1272 | bsr.l chkregs | ||
1273 | tst.b %d0 | ||
1274 | bne.l error | ||
1275 | |||
1276 | bsr.l chkfpregs | ||
1277 | tst.b %d0 | ||
1278 | bne.l error | ||
1279 | |||
1280 | # a denormalized number | ||
1281 | unsupp_1: | ||
1282 | addq.l &0x1,TESTCTR(%a6) | ||
1283 | |||
1284 | movm.l DEF_REGS(%pc),&0x3fff | ||
1285 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
1286 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
1287 | |||
1288 | mov.w &0x0000,ICCR(%a6) | ||
1289 | movm.l &0x7fff,IREGS(%a6) | ||
1290 | fmovm.x &0xff,IFPREGS(%a6) | ||
1291 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
1292 | |||
1293 | mov.l &0x80000000,DATA+0x0(%a6) | ||
1294 | mov.l &0x01000000,DATA+0x4(%a6) | ||
1295 | mov.l &0x00000000,DATA+0x8(%a6) | ||
1296 | fmov.l &0x7fffffff,%fp0 | ||
1297 | |||
1298 | mov.w &0x0000,%cc | ||
1299 | unsupp_1_pc: | ||
1300 | fmul.x DATA(%a6),%fp0 | ||
1301 | |||
1302 | mov.w %cc,SCCR(%a6) | ||
1303 | movm.l &0x7fff,SREGS(%a6) | ||
1304 | fmovm.x &0xff,SFPREGS(%a6) | ||
1305 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
1306 | |||
1307 | mov.l &0x80170000,IFPREGS+0x0(%a6) | ||
1308 | mov.l &0xfffffffe,IFPREGS+0x4(%a6) | ||
1309 | mov.l &0x00000000,IFPREGS+0x8(%a6) | ||
1310 | mov.l &0x08000000,IFPCREGS+0x4(%a6) | ||
1311 | lea unsupp_1_pc(%pc),%a0 | ||
1312 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
1313 | |||
1314 | bsr.l chkregs | ||
1315 | tst.b %d0 | ||
1316 | bne.l error | ||
1317 | |||
1318 | bsr.l chkfpregs | ||
1319 | tst.b %d0 | ||
1320 | bne.l error | ||
1321 | |||
1322 | # packed | ||
1323 | unsupp_2: | ||
1324 | addq.l &0x1,TESTCTR(%a6) | ||
1325 | |||
1326 | movm.l DEF_REGS(%pc),&0x3fff | ||
1327 | fmovm.x DEF_FPREGS(%pc),&0xff | ||
1328 | fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar | ||
1329 | |||
1330 | mov.w &0x0000,ICCR(%a6) | ||
1331 | movm.l &0x7fff,IREGS(%a6) | ||
1332 | fmovm.x &0xff,IFPREGS(%a6) | ||
1333 | fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) | ||
1334 | |||
1335 | mov.l &0xc1230001,DATA+0x0(%a6) | ||
1336 | mov.l &0x23456789,DATA+0x4(%a6) | ||
1337 | mov.l &0x12345678,DATA+0x8(%a6) | ||
1338 | |||
1339 | mov.w &0x0000,%cc | ||
1340 | unsupp_2_pc: | ||
1341 | fabs.p DATA(%a6),%fp0 | ||
1342 | |||
1343 | mov.w %cc,SCCR(%a6) | ||
1344 | movm.l &0x7fff,SREGS(%a6) | ||
1345 | fmovm.x &0xff,SFPREGS(%a6) | ||
1346 | fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) | ||
1347 | |||
1348 | mov.l &0x3e660000,IFPREGS+0x0(%a6) | ||
1349 | mov.l &0xd0ed23e8,IFPREGS+0x4(%a6) | ||
1350 | mov.l &0xd14035bc,IFPREGS+0x8(%a6) | ||
1351 | mov.l &0x00000108,IFPCREGS+0x4(%a6) | ||
1352 | lea unsupp_2_pc(%pc),%a0 | ||
1353 | mov.l %a0,IFPCREGS+0x8(%a6) | ||
1354 | |||
1355 | bsr.l chkregs | ||
1356 | tst.b %d0 | ||
1357 | bne.l error | ||
1358 | |||
1359 | bsr.l chkfpregs | ||
1360 | tst.b %d0 | ||
1361 | bne.l error | ||
1362 | |||
1363 | clr.l %d0 | ||
1364 | rts | ||
1365 | |||
1366 | ########################################################### | ||
1367 | ########################################################### | ||
1368 | |||
1369 | chkregs: | ||
1370 | lea IREGS(%a6),%a0 | ||
1371 | lea SREGS(%a6),%a1 | ||
1372 | mov.l &14,%d0 | ||
1373 | chkregs_loop: | ||
1374 | cmp.l (%a0)+,(%a1)+ | ||
1375 | bne.l chkregs_error | ||
1376 | dbra.w %d0,chkregs_loop | ||
1377 | |||
1378 | mov.w ICCR(%a6),%d0 | ||
1379 | mov.w SCCR(%a6),%d1 | ||
1380 | cmp.w %d0,%d1 | ||
1381 | bne.l chkregs_error | ||
1382 | |||
1383 | clr.l %d0 | ||
1384 | rts | ||
1385 | |||
1386 | chkregs_error: | ||
1387 | movq.l &0x1,%d0 | ||
1388 | rts | ||
1389 | |||
1390 | error: | ||
1391 | mov.l TESTCTR(%a6),%d1 | ||
1392 | movq.l &0x1,%d0 | ||
1393 | rts | ||
1394 | |||
1395 | chkfpregs: | ||
1396 | lea IFPREGS(%a6),%a0 | ||
1397 | lea SFPREGS(%a6),%a1 | ||
1398 | mov.l &23,%d0 | ||
1399 | chkfpregs_loop: | ||
1400 | cmp.l (%a0)+,(%a1)+ | ||
1401 | bne.l chkfpregs_error | ||
1402 | dbra.w %d0,chkfpregs_loop | ||
1403 | |||
1404 | lea IFPCREGS(%a6),%a0 | ||
1405 | lea SFPCREGS(%a6),%a1 | ||
1406 | cmp.l (%a0)+,(%a1)+ | ||
1407 | bne.l chkfpregs_error | ||
1408 | cmp.l (%a0)+,(%a1)+ | ||
1409 | bne.l chkfpregs_error | ||
1410 | cmp.l (%a0)+,(%a1)+ | ||
1411 | bne.l chkfpregs_error | ||
1412 | |||
1413 | clr.l %d0 | ||
1414 | rts | ||
1415 | |||
1416 | chkfpregs_error: | ||
1417 | movq.l &0x1,%d0 | ||
1418 | rts | ||
1419 | |||
1420 | DEF_REGS: | ||
1421 | long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac | ||
1422 | long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac | ||
1423 | |||
1424 | long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac | ||
1425 | long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac | ||
1426 | |||
1427 | DEF_FPREGS: | ||
1428 | long 0x7fff0000, 0xffffffff, 0xffffffff | ||
1429 | long 0x7fff0000, 0xffffffff, 0xffffffff | ||
1430 | long 0x7fff0000, 0xffffffff, 0xffffffff | ||
1431 | long 0x7fff0000, 0xffffffff, 0xffffffff | ||
1432 | long 0x7fff0000, 0xffffffff, 0xffffffff | ||
1433 | long 0x7fff0000, 0xffffffff, 0xffffffff | ||
1434 | long 0x7fff0000, 0xffffffff, 0xffffffff | ||
1435 | long 0x7fff0000, 0xffffffff, 0xffffffff | ||
1436 | |||
1437 | DEF_FPCREGS: | ||
1438 | long 0x00000000, 0x00000000, 0x00000000 | ||
1439 | |||
1440 | ############################################################ | ||
1441 | |||
1442 | _print_str: | ||
1443 | mov.l %d0,-(%sp) | ||
1444 | mov.l (TESTTOP-0x80+0x0,%pc),%d0 | ||
1445 | pea (TESTTOP-0x80,%pc,%d0) | ||
1446 | mov.l 0x4(%sp),%d0 | ||
1447 | rtd &0x4 | ||
1448 | |||
1449 | _print_num: | ||
1450 | mov.l %d0,-(%sp) | ||
1451 | mov.l (TESTTOP-0x80+0x4,%pc),%d0 | ||
1452 | pea (TESTTOP-0x80,%pc,%d0) | ||
1453 | mov.l 0x4(%sp),%d0 | ||
1454 | rtd &0x4 | ||
1455 | |||
1456 | ############################################################ | ||