~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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
clr.l TESTCTR(%a6)
pea effadd_str(%pc)
bsr.l _print_str
addq.l &0x4,%sp
bsr.l effadd_0
bsr.l chk_test
clr.l TESTCTR(%a6)
pea unsupp_str(%pc)
bsr.l _print_str
addq.l &0x4,%sp
bsr.l unsupp_0
bsr.l chk_test
clr.l TESTCTR(%a6)
pea ovfl_nm_str(%pc)
bsr.l _print_str
bsr.l ovfl_nm_0
bsr.l chk_test
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
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
clr.l TESTCTR(%a6)
pea snan_str(%pc)
bsr.l _print_str
bsr.l snan_0
bsr.l chk_test
clr.l TESTCTR(%a6)
pea operr_str(%pc)
bsr.l _print_str
bsr.l operr_0
bsr.l chk_test
clr.l TESTCTR(%a6)
pea ovfl_str(%pc)
bsr.l _print_str
bsr.l ovfl_0
bsr.l chk_test
clr.l TESTCTR(%a6)
pea unfl_str(%pc)
bsr.l _print_str
bsr.l unfl_0
bsr.l chk_test
clr.l TESTCTR(%a6)
pea dz_str(%pc)
bsr.l _print_str
bsr.l dz_0
bsr.l chk_test
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
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
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
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
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 <ea>..."
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_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
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
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
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
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
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
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
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
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..."
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
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
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