~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP M68000 Hi-Performance Microprocessor Division M68060 Software Package Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. To the maximum extent permitted by applicable law, IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE. Motorola assumes no responsibility for the maintenance and support of the SOFTWARE. You are hereby granted a copyright license to use, modify, and distribute the SOFTWARE so long as this entire notice is retained without alteration in any modified and/or redistributed versions, and that such modified versions are clearly identified as such. No licenses are granted by implication, estoppel or otherwise under any patents or trademarks of Motorola, Inc. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ############################################# set SREGS, -64 set IREGS, -128 set IFPREGS, -224 set SFPREGS, -320 set IFPCREGS, -332 set SFPCREGS, -344 set ICCR, -346 set SCCR, -348 set TESTCTR, -352 set DATA, -384 ############################################# TESTTOP: bra.l _060TESTS_ short 0x0000 bra.l _060TESTS_unimp short 0x0000 bra.l _060TESTS_enable short 0x0000 start_str: string "Testing 68060 FPSP started:\n" start_str_unimp: string "Testing 68060 FPSP unimplemented instruction started:\n" start_str_enable: string "Testing 68060 FPSP exception enabled started:\n" pass_str: string "passed\n" fail_str: string " failed\n" align 0x4 chk_test: tst.l %d0 bne.b test_fail test_pass: pea pass_str(%pc) bsr.l _print_str addq.l &0x4,%sp rts test_fail: mov.l %d1,-(%sp) bsr.l _print_num addq.l &0x4,%sp pea fail_str(%pc) bsr.l _print_str addq.l &0x4,%sp rts ############################################# _060TESTS_: link %a6,&-384 movm.l &0x3f3c,-(%sp) fmovm.x &0xff,-(%sp) pea start_str(%pc) bsr.l _print_str addq.l &0x4,%sp ### effadd clr.l TESTCTR(%a6) pea effadd_str(%pc) bsr.l _print_str addq.l &0x4,%sp bsr.l effadd_0 bsr.l chk_test ### unsupp clr.l TESTCTR(%a6) pea unsupp_str(%pc) bsr.l _print_str addq.l &0x4,%sp bsr.l unsupp_0 bsr.l chk_test ### ovfl non-maskable clr.l TESTCTR(%a6) pea ovfl_nm_str(%pc) bsr.l _print_str bsr.l ovfl_nm_0 bsr.l chk_test ### unfl non-maskable clr.l TESTCTR(%a6) pea unfl_nm_str(%pc) bsr.l _print_str bsr.l unfl_nm_0 bsr.l chk_test movm.l (%sp)+,&0x3cfc fmovm.x (%sp)+,&0xff unlk %a6 rts _060TESTS_unimp: link %a6,&-384 movm.l &0x3f3c,-(%sp) fmovm.x &0xff,-(%sp) pea start_str_unimp(%pc) bsr.l _print_str addq.l &0x4,%sp ### unimp clr.l TESTCTR(%a6) pea unimp_str(%pc) bsr.l _print_str addq.l &0x4,%sp bsr.l unimp_0 bsr.l chk_test movm.l (%sp)+,&0x3cfc fmovm.x (%sp)+,&0xff unlk %a6 rts _060TESTS_enable: link %a6,&-384 movm.l &0x3f3c,-(%sp) fmovm.x &0xff,-(%sp) pea start_str_enable(%pc) bsr.l _print_str addq.l &0x4,%sp ### snan clr.l TESTCTR(%a6) pea snan_str(%pc) bsr.l _print_str bsr.l snan_0 bsr.l chk_test ### operr clr.l TESTCTR(%a6) pea operr_str(%pc) bsr.l _print_str bsr.l operr_0 bsr.l chk_test ### ovfl clr.l TESTCTR(%a6) pea ovfl_str(%pc) bsr.l _print_str bsr.l ovfl_0 bsr.l chk_test ### unfl clr.l TESTCTR(%a6) pea unfl_str(%pc) bsr.l _print_str bsr.l unfl_0 bsr.l chk_test ### dz clr.l TESTCTR(%a6) pea dz_str(%pc) bsr.l _print_str bsr.l dz_0 bsr.l chk_test ### inexact clr.l TESTCTR(%a6) pea inex_str(%pc) bsr.l _print_str bsr.l inex_0 bsr.l chk_test movm.l (%sp)+,&0x3cfc fmovm.x (%sp)+,&0xff unlk %a6 rts ############################################# ############################################# unimp_str: string "\tUnimplemented FP instructions..." align 0x4 unimp_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.l &0x40000000,DATA+0x0(%a6) mov.l &0xc90fdaa2,DATA+0x4(%a6) mov.l &0x2168c235,DATA+0x8(%a6) mov.w &0x0000,%cc unimp_0_pc: fsin.x DATA(%a6),%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0xbfbf0000,IFPREGS+0x0(%a6) mov.l &0x80000000,IFPREGS+0x4(%a6) mov.l &0x00000000,IFPREGS+0x8(%a6) mov.l &0x08000208,IFPCREGS+0x4(%a6) lea unimp_0_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error unimp_1: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.l &0x3ffe0000,DATA+0x0(%a6) mov.l &0xc90fdaa2,DATA+0x4(%a6) mov.l &0x2168c235,DATA+0x8(%a6) mov.w &0x0000,%cc unimp_1_pc: ftan.x DATA(%a6),%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x3fff0000,IFPREGS+0x0(%a6) mov.l &0x80000000,IFPREGS+0x4(%a6) mov.l &0x00000000,IFPREGS+0x8(%a6) mov.l &0x00000208,IFPCREGS+0x4(%a6) lea unimp_1_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error # fmovecr unimp_2: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.w &0x0000,%cc unimp_2_pc: fmovcr.x &0x31,%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x40000000,IFPREGS+0x0(%a6) mov.l &0x935d8ddd,IFPREGS+0x4(%a6) mov.l &0xaaa8ac17,IFPREGS+0x8(%a6) mov.l &0x00000208,IFPCREGS+0x4(%a6) lea unimp_2_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error # fscc unimp_3: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar fmov.l &0x0f000000,%fpsr mov.l &0x00,%d7 mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.w &0x0000,%cc unimp_3_pc: fsgt %d7 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x0f008080,IFPCREGS+0x4(%a6) lea unimp_3_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error # fdbcc unimp_4: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar fmov.l &0x0f000000,%fpsr mov.l &0x2,%d7 mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.w &0x0000,%cc unimp_4_pc: fdbgt.w %d7,unimp_4_pc mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.w &0xffff,IREGS+28+2(%a6) mov.l &0x0f008080,IFPCREGS+0x4(%a6) lea unimp_4_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error # ftrapcc unimp_5: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar fmov.l &0x0f000000,%fpsr mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.w &0x0000,%cc unimp_5_pc: ftpgt.l &0xabcdef01 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x0f008080,IFPCREGS+0x4(%a6) lea unimp_5_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error clr.l %d0 rts ############################################# effadd_str: string "\tUnimplemented ..." align 0x4 effadd_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) fmov.b &0x2,%fp0 mov.w &0x0000,%cc effadd_0_pc: fmul.x &0xc00000008000000000000000,%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0xc0010000,IFPREGS+0x0(%a6) mov.l &0x80000000,IFPREGS+0x4(%a6) mov.l &0x00000000,IFPREGS+0x8(%a6) mov.l &0x08000000,IFPCREGS+0x4(%a6) lea effadd_0_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error effadd_1: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.w &0x0000,%cc effadd_1_pc: fabs.p &0xc12300012345678912345678,%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x3e660000,IFPREGS+0x0(%a6) mov.l &0xd0ed23e8,IFPREGS+0x4(%a6) mov.l &0xd14035bc,IFPREGS+0x8(%a6) mov.l &0x00000108,IFPCREGS+0x4(%a6) lea effadd_1_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error fmovml_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) mov.w &0x0000,%cc movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) fmovm.l &0xffffffffffffffff,%fpcr,%fpsr mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x0000fff0,IFPCREGS+0x0(%a6) mov.l &0x0ffffff8,IFPCREGS+0x4(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error fmovml_1: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) mov.w &0x0000,%cc movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) fmovm.l &0xffffffffffffffff,%fpcr,%fpiar mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x0000fff0,IFPCREGS+0x0(%a6) mov.l &0xffffffff,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error fmovml_2: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) mov.w &0x0000,%cc movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) fmovm.l &0xffffffffffffffff,%fpsr,%fpiar mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x0ffffff8,IFPCREGS+0x4(%a6) mov.l &0xffffffff,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error fmovml_3: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) mov.w &0x0000,%cc movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) fmovm.l &0xffffffffffffffffffffffff,%fpcr,%fpsr,%fpiar mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x0000fff0,IFPCREGS+0x0(%a6) mov.l &0x0ffffff8,IFPCREGS+0x4(%a6) mov.l &0xffffffff,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error # fmovmx dynamic fmovmx_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar fmov.b &0x1,%fp0 fmov.b &0x2,%fp1 fmov.b &0x3,%fp2 fmov.b &0x4,%fp3 fmov.b &0x5,%fp4 fmov.b &0x6,%fp5 fmov.b &0x7,%fp6 fmov.b &0x8,%fp7 fmov.l &0x0,%fpiar mov.l &0xffffffaa,%d0 mov.w &0x0000,ICCR(%a6) movm.l &0xffff,IREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) mov.w &0x0000,%cc fmovm.x %d0,-(%sp) mov.w %cc,SCCR(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) fmov.s &0x7f800000,%fp1 fmov.s &0x7f800000,%fp3 fmov.s &0x7f800000,%fp5 fmov.s &0x7f800000,%fp7 fmov.x (%sp)+,%fp1 fmov.x (%sp)+,%fp3 fmov.x (%sp)+,%fp5 fmov.x (%sp)+,%fp7 movm.l &0xffff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error fmovmx_1: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar fmov.b &0x1,%fp0 fmov.b &0x2,%fp1 fmov.b &0x3,%fp2 fmov.b &0x4,%fp3 fmov.b &0x5,%fp4 fmov.b &0x6,%fp5 fmov.b &0x7,%fp6 fmov.b &0x8,%fp7 fmov.x %fp6,-(%sp) fmov.x %fp4,-(%sp) fmov.x %fp2,-(%sp) fmov.x %fp0,-(%sp) fmovm.x &0xff,IFPREGS(%a6) fmov.s &0x7f800000,%fp6 fmov.s &0x7f800000,%fp4 fmov.s &0x7f800000,%fp2 fmov.s &0x7f800000,%fp0 fmov.l &0x0,%fpiar fmov.l &0x0,%fpsr mov.l &0xffffffaa,%d0 mov.w &0x0000,ICCR(%a6) movm.l &0xffff,IREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.w &0x0000,%cc fmovm.x (%sp)+,%d0 mov.w %cc,SCCR(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) movm.l &0xffff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error fmovmx_2: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar fmov.b &0x1,%fp0 fmov.b &0x2,%fp1 fmov.b &0x3,%fp2 fmov.b &0x4,%fp3 fmov.b &0x5,%fp4 fmov.b &0x6,%fp5 fmov.b &0x7,%fp6 fmov.b &0x8,%fp7 fmov.l &0x0,%fpiar mov.l &0xffffff00,%d0 mov.w &0x0000,ICCR(%a6) movm.l &0xffff,IREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) mov.w &0x0000,%cc fmovm.x %d0,-(%sp) mov.w %cc,SCCR(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) movm.l &0xffff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error clr.l %d0 rts ########################################################### # This test will take a non-maskable overflow directly. ovfl_nm_str: string "\tNon-maskable overflow..." align 0x4 ovfl_nm_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) fmov.b &0x2,%fp0 mov.l &0x7ffe0000,DATA+0x0(%a6) mov.l &0x80000000,DATA+0x4(%a6) mov.l &0x00000000,DATA+0x8(%a6) mov.w &0x0000,%cc ovfl_nm_0_pc: fmul.x DATA(%a6),%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x7fff0000,IFPREGS+0x0(%a6) mov.l &0x00000000,IFPREGS+0x4(%a6) mov.l &0x00000000,IFPREGS+0x8(%a6) mov.l &0x02001048,IFPCREGS+0x4(%a6) lea ovfl_nm_0_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error clr.l %d0 rts ########################################################### # This test will take an overflow directly. ovfl_str: string "\tEnabled overflow..." align 0x4 ovfl_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmov.l &0x00001000,%fpcr fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) fmov.b &0x2,%fp0 mov.l &0x7ffe0000,DATA+0x0(%a6) mov.l &0x80000000,DATA+0x4(%a6) mov.l &0x00000000,DATA+0x8(%a6) mov.w &0x0000,%cc ovfl_0_pc: fmul.x DATA(%a6),%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x7fff0000,IFPREGS+0x0(%a6) mov.l &0x00000000,IFPREGS+0x4(%a6) mov.l &0x00000000,IFPREGS+0x8(%a6) mov.l &0x02001048,IFPCREGS+0x4(%a6) lea ovfl_0_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error clr.l %d0 rts ##################################################################### # This test will take an underflow directly. unfl_str: string "\tEnabled underflow..." align 0x4 unfl_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmov.l &0x00000800,%fpcr fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.l &0x00000000,DATA+0x0(%a6) mov.l &0x80000000,DATA+0x4(%a6) mov.l &0x00000000,DATA+0x8(%a6) fmovm.x DATA(%a6),&0x80 mov.w &0x0000,%cc unfl_0_pc: fdiv.b &0x2,%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x00000000,IFPREGS+0x0(%a6) mov.l &0x40000000,IFPREGS+0x4(%a6) mov.l &0x00000000,IFPREGS+0x8(%a6) mov.l &0x00000800,IFPCREGS+0x4(%a6) lea unfl_0_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error clr.l %d0 rts ##################################################################### # This test will take a non-maskable underflow directly. unfl_nm_str: string "\tNon-maskable underflow..." align 0x4 unfl_nm_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.l &0x00000000,DATA+0x0(%a6) mov.l &0x80000000,DATA+0x4(%a6) mov.l &0x00000000,DATA+0x8(%a6) fmovm.x DATA(%a6),&0x80 mov.w &0x0000,%cc unfl_nm_0_pc: fdiv.b &0x2,%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x00000000,IFPREGS+0x0(%a6) mov.l &0x40000000,IFPREGS+0x4(%a6) mov.l &0x00000000,IFPREGS+0x8(%a6) mov.l &0x00000800,IFPCREGS+0x4(%a6) lea unfl_nm_0_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error clr.l %d0 rts ##################################################################### inex_str: string "\tEnabled inexact..." align 0x4 inex_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmov.l &0x00000200,%fpcr # enable inexact fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.l &0x50000000,DATA+0x0(%a6) mov.l &0x80000000,DATA+0x4(%a6) mov.l &0x00000000,DATA+0x8(%a6) fmovm.x DATA(%a6),&0x80 mov.w &0x0000,%cc inex_0_pc: fadd.b &0x2,%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x50000000,IFPREGS+0x0(%a6) mov.l &0x80000000,IFPREGS+0x4(%a6) mov.l &0x00000000,IFPREGS+0x8(%a6) mov.l &0x00000208,IFPCREGS+0x4(%a6) lea inex_0_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error clr.l %d0 rts ##################################################################### snan_str: string "\tEnabled SNAN..." align 0x4 snan_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmov.l &0x00004000,%fpcr # enable SNAN fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.l &0xffff0000,DATA+0x0(%a6) mov.l &0x00000000,DATA+0x4(%a6) mov.l &0x00000001,DATA+0x8(%a6) fmovm.x DATA(%a6),&0x80 mov.w &0x0000,%cc snan_0_pc: fadd.b &0x2,%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0xffff0000,IFPREGS+0x0(%a6) mov.l &0x00000000,IFPREGS+0x4(%a6) mov.l &0x00000001,IFPREGS+0x8(%a6) mov.l &0x09004080,IFPCREGS+0x4(%a6) lea snan_0_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error clr.l %d0 rts ##################################################################### operr_str: string "\tEnabled OPERR..." align 0x4 operr_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmov.l &0x00002000,%fpcr # enable OPERR fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.l &0xffff0000,DATA+0x0(%a6) mov.l &0x00000000,DATA+0x4(%a6) mov.l &0x00000000,DATA+0x8(%a6) fmovm.x DATA(%a6),&0x80 mov.w &0x0000,%cc operr_0_pc: fadd.s &0x7f800000,%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0xffff0000,IFPREGS+0x0(%a6) mov.l &0x00000000,IFPREGS+0x4(%a6) mov.l &0x00000000,IFPREGS+0x8(%a6) mov.l &0x01002080,IFPCREGS+0x4(%a6) lea operr_0_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error clr.l %d0 rts ##################################################################### dz_str: string "\tEnabled DZ..." align 0x4 dz_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmov.l &0x00000400,%fpcr # enable DZ fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.l &0x40000000,DATA+0x0(%a6) mov.l &0x80000000,DATA+0x4(%a6) mov.l &0x00000000,DATA+0x8(%a6) fmovm.x DATA(%a6),&0x80 mov.w &0x0000,%cc dz_0_pc: fdiv.b &0x0,%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x40000000,IFPREGS+0x0(%a6) mov.l &0x80000000,IFPREGS+0x4(%a6) mov.l &0x00000000,IFPREGS+0x8(%a6) mov.l &0x02000410,IFPCREGS+0x4(%a6) lea dz_0_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error clr.l %d0 rts ##################################################################### unsupp_str: string "\tUnimplemented data type/format..." # an unnormalized number align 0x4 unsupp_0: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.l &0xc03f0000,DATA+0x0(%a6) mov.l &0x00000000,DATA+0x4(%a6) mov.l &0x00000001,DATA+0x8(%a6) fmov.b &0x2,%fp0 mov.w &0x0000,%cc unsupp_0_pc: fmul.x DATA(%a6),%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0xc0010000,IFPREGS+0x0(%a6) mov.l &0x80000000,IFPREGS+0x4(%a6) mov.l &0x00000000,IFPREGS+0x8(%a6) mov.l &0x08000000,IFPCREGS+0x4(%a6) lea unsupp_0_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error # a denormalized number unsupp_1: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.l &0x80000000,DATA+0x0(%a6) mov.l &0x01000000,DATA+0x4(%a6) mov.l &0x00000000,DATA+0x8(%a6) fmov.l &0x7fffffff,%fp0 mov.w &0x0000,%cc unsupp_1_pc: fmul.x DATA(%a6),%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x80170000,IFPREGS+0x0(%a6) mov.l &0xfffffffe,IFPREGS+0x4(%a6) mov.l &0x00000000,IFPREGS+0x8(%a6) mov.l &0x08000000,IFPCREGS+0x4(%a6) lea unsupp_1_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error # packed unsupp_2: addq.l &0x1,TESTCTR(%a6) movm.l DEF_REGS(%pc),&0x3fff fmovm.x DEF_FPREGS(%pc),&0xff fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar mov.w &0x0000,ICCR(%a6) movm.l &0x7fff,IREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) mov.l &0xc1230001,DATA+0x0(%a6) mov.l &0x23456789,DATA+0x4(%a6) mov.l &0x12345678,DATA+0x8(%a6) mov.w &0x0000,%cc unsupp_2_pc: fabs.p DATA(%a6),%fp0 mov.w %cc,SCCR(%a6) movm.l &0x7fff,SREGS(%a6) fmovm.x &0xff,SFPREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6) mov.l &0x3e660000,IFPREGS+0x0(%a6) mov.l &0xd0ed23e8,IFPREGS+0x4(%a6) mov.l &0xd14035bc,IFPREGS+0x8(%a6) mov.l &0x00000108,IFPCREGS+0x4(%a6) lea unsupp_2_pc(%pc),%a0 mov.l %a0,IFPCREGS+0x8(%a6) bsr.l chkregs tst.b %d0 bne.l error bsr.l chkfpregs tst.b %d0 bne.l error clr.l %d0 rts ########################################################### ########################################################### chkregs: lea IREGS(%a6),%a0 lea SREGS(%a6),%a1 mov.l &14,%d0 chkregs_loop: cmp.l (%a0)+,(%a1)+ bne.l chkregs_error dbra.w %d0,chkregs_loop mov.w ICCR(%a6),%d0 mov.w SCCR(%a6),%d1 cmp.w %d0,%d1 bne.l chkregs_error clr.l %d0 rts chkregs_error: movq.l &0x1,%d0 rts error: mov.l TESTCTR(%a6),%d1 movq.l &0x1,%d0 rts chkfpregs: lea IFPREGS(%a6),%a0 lea SFPREGS(%a6),%a1 mov.l &23,%d0 chkfpregs_loop: cmp.l (%a0)+,(%a1)+ bne.l chkfpregs_error dbra.w %d0,chkfpregs_loop lea IFPCREGS(%a6),%a0 lea SFPCREGS(%a6),%a1 cmp.l (%a0)+,(%a1)+ bne.l chkfpregs_error cmp.l (%a0)+,(%a1)+ bne.l chkfpregs_error cmp.l (%a0)+,(%a1)+ bne.l chkfpregs_error clr.l %d0 rts chkfpregs_error: movq.l &0x1,%d0 rts DEF_REGS: long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac DEF_FPREGS: long 0x7fff0000, 0xffffffff, 0xffffffff long 0x7fff0000, 0xffffffff, 0xffffffff long 0x7fff0000, 0xffffffff, 0xffffffff long 0x7fff0000, 0xffffffff, 0xffffffff long 0x7fff0000, 0xffffffff, 0xffffffff long 0x7fff0000, 0xffffffff, 0xffffffff long 0x7fff0000, 0xffffffff, 0xffffffff long 0x7fff0000, 0xffffffff, 0xffffffff DEF_FPCREGS: long 0x00000000, 0x00000000, 0x00000000 ############################################################ _print_str: mov.l %d0,-(%sp) mov.l (TESTTOP-0x80+0x0,%pc),%d0 pea (TESTTOP-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 _print_num: mov.l %d0,-(%sp) mov.l (TESTTOP-0x80+0x4,%pc),%d0 pea (TESTTOP-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 ############################################################