📄 ftest.s
字号:
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 errorfmovmx_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 0x4ovfl_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,%ccovfl_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 0x4ovfl_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,%ccovfl_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 0x4unfl_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,%ccunfl_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 0x4unfl_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,%ccunfl_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 0x4inex_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,%ccinex_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 0x4snan_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,%ccsnan_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 0x4operr_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,%ccoperr_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 0x4dz_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,%ccdz_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 0x4unsupp_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,%ccunsupp_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 numberunsupp_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,%ccunsupp_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# packedunsupp_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,%ccunsupp_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,%d0chkregs_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 rtschkregs_error: movq.l &0x1,%d0 rtserror: mov.l TESTCTR(%a6),%d1 movq.l &0x1,%d0 rtschkfpregs: lea IFPREGS(%a6),%a0 lea SFPREGS(%a6),%a1 mov.l &23,%d0chkfpregs_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 rtschkfpregs_error: movq.l &0x1,%d0 rtsDEF_REGS: long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacacDEF_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, 0xffffffffDEF_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############################################################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -