]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 | ||
96de0e25 | 7 | M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. |
1da177e4 LT |
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 | ############################################################ |