📄 fplsp.s
字号:
clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # pass rnd mode,prec tst.b %d1 bne.b _L0_2s bsr.l ssin # operand is a NORM bra.b _L0_6s_L0_2s: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L0_3s # no bsr.l src_zero # yes bra.b _L0_6s_L0_3s: cmpi.b %d1,&INF # is operand an INF? bne.b _L0_4s # no bsr.l t_operr # yes bra.b _L0_6s_L0_4s: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L0_5s # no bsr.l src_qnan # yes bra.b _L0_6s_L0_5s: bsr.l ssind # operand is a DENORM_L0_6s:## Result is now in FP0# movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr # restore ctrl regs fmovm.x EXC_FP1(%a6),&0x40 # restore fp1 unlk %a6 rts global _fsind__fsind_: link %a6,&-LOCAL_SIZE movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,USER_FPCR(%a6) # save ctrl regs fmovm.x &0xc0,EXC_FP0(%a6) # save fp0/fp1 fmov.l &0x0,%fpcr # zero FPCR## copy, convert, and tag input argument# fmov.d 0x8(%a6),%fp0 # load dbl input fmov.x %fp0,FP_SRC(%a6) lea FP_SRC(%a6),%a0 bsr.l tag # fetch operand type mov.b %d0,STAG(%a6) mov.b %d0,%d1 andi.l &0x00ff00ff,USER_FPSR(%a6) clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # pass rnd mode,prec mov.b %d1,STAG(%a6) tst.b %d1 bne.b _L0_2d bsr.l ssin # operand is a NORM bra.b _L0_6d_L0_2d: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L0_3d # no bsr.l src_zero # yes bra.b _L0_6d_L0_3d: cmpi.b %d1,&INF # is operand an INF? bne.b _L0_4d # no bsr.l t_operr # yes bra.b _L0_6d_L0_4d: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L0_5d # no bsr.l src_qnan # yes bra.b _L0_6d_L0_5d: bsr.l ssind # operand is a DENORM_L0_6d:## Result is now in FP0# movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr # restore ctrl regs fmovm.x EXC_FP1(%a6),&0x40 # restore fp1 unlk %a6 rts global _fsinx__fsinx_: link %a6,&-LOCAL_SIZE movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,USER_FPCR(%a6) # save ctrl regs fmovm.x &0xc0,EXC_FP0(%a6) # save fp0/fp1 fmov.l &0x0,%fpcr # zero FPCR## copy, convert, and tag input argument# lea FP_SRC(%a6),%a0 mov.l 0x8+0x0(%a6),0x0(%a0) # load ext input mov.l 0x8+0x4(%a6),0x4(%a0) mov.l 0x8+0x8(%a6),0x8(%a0) bsr.l tag # fetch operand type mov.b %d0,STAG(%a6) mov.b %d0,%d1 andi.l &0x00ff00ff,USER_FPSR(%a6) clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # pass rnd mode,prec tst.b %d1 bne.b _L0_2x bsr.l ssin # operand is a NORM bra.b _L0_6x_L0_2x: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L0_3x # no bsr.l src_zero # yes bra.b _L0_6x_L0_3x: cmpi.b %d1,&INF # is operand an INF? bne.b _L0_4x # no bsr.l t_operr # yes bra.b _L0_6x_L0_4x: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L0_5x # no bsr.l src_qnan # yes bra.b _L0_6x_L0_5x: bsr.l ssind # operand is a DENORM_L0_6x:## Result is now in FP0# movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr # restore ctrl regs fmovm.x EXC_FP1(%a6),&0x40 # restore fp1 unlk %a6 rts########################################################################## MONADIC TEMPLATE ########################################################################## global _fcoss__fcoss_: link %a6,&-LOCAL_SIZE movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,USER_FPCR(%a6) # save ctrl regs fmovm.x &0xc0,EXC_FP0(%a6) # save fp0/fp1 fmov.l &0x0,%fpcr # zero FPCR## copy, convert, and tag input argument# fmov.s 0x8(%a6),%fp0 # load sgl input fmov.x %fp0,FP_SRC(%a6) lea FP_SRC(%a6),%a0 bsr.l tag # fetch operand type mov.b %d0,STAG(%a6) mov.b %d0,%d1 andi.l &0x00ff00ff,USER_FPSR(%a6) clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # pass rnd mode,prec tst.b %d1 bne.b _L1_2s bsr.l scos # operand is a NORM bra.b _L1_6s_L1_2s: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L1_3s # no bsr.l ld_pone # yes bra.b _L1_6s_L1_3s: cmpi.b %d1,&INF # is operand an INF? bne.b _L1_4s # no bsr.l t_operr # yes bra.b _L1_6s_L1_4s: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L1_5s # no bsr.l src_qnan # yes bra.b _L1_6s_L1_5s: bsr.l scosd # operand is a DENORM_L1_6s:## Result is now in FP0# movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr # restore ctrl regs fmovm.x EXC_FP1(%a6),&0x40 # restore fp1 unlk %a6 rts global _fcosd__fcosd_: link %a6,&-LOCAL_SIZE movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,USER_FPCR(%a6) # save ctrl regs fmovm.x &0xc0,EXC_FP0(%a6) # save fp0/fp1 fmov.l &0x0,%fpcr # zero FPCR## copy, convert, and tag input argument# fmov.d 0x8(%a6),%fp0 # load dbl input fmov.x %fp0,FP_SRC(%a6) lea FP_SRC(%a6),%a0 bsr.l tag # fetch operand type mov.b %d0,STAG(%a6) mov.b %d0,%d1 andi.l &0x00ff00ff,USER_FPSR(%a6) clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # pass rnd mode,prec mov.b %d1,STAG(%a6) tst.b %d1 bne.b _L1_2d bsr.l scos # operand is a NORM bra.b _L1_6d_L1_2d: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L1_3d # no bsr.l ld_pone # yes bra.b _L1_6d_L1_3d: cmpi.b %d1,&INF # is operand an INF? bne.b _L1_4d # no bsr.l t_operr # yes bra.b _L1_6d_L1_4d: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L1_5d # no bsr.l src_qnan # yes bra.b _L1_6d_L1_5d: bsr.l scosd # operand is a DENORM_L1_6d:## Result is now in FP0# movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr # restore ctrl regs fmovm.x EXC_FP1(%a6),&0x40 # restore fp1 unlk %a6 rts global _fcosx__fcosx_: link %a6,&-LOCAL_SIZE movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,USER_FPCR(%a6) # save ctrl regs fmovm.x &0xc0,EXC_FP0(%a6) # save fp0/fp1 fmov.l &0x0,%fpcr # zero FPCR## copy, convert, and tag input argument# lea FP_SRC(%a6),%a0 mov.l 0x8+0x0(%a6),0x0(%a0) # load ext input mov.l 0x8+0x4(%a6),0x4(%a0) mov.l 0x8+0x8(%a6),0x8(%a0) bsr.l tag # fetch operand type mov.b %d0,STAG(%a6) mov.b %d0,%d1 andi.l &0x00ff00ff,USER_FPSR(%a6) clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # pass rnd mode,prec tst.b %d1 bne.b _L1_2x bsr.l scos # operand is a NORM bra.b _L1_6x_L1_2x: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L1_3x # no bsr.l ld_pone # yes bra.b _L1_6x_L1_3x: cmpi.b %d1,&INF # is operand an INF? bne.b _L1_4x # no bsr.l t_operr # yes bra.b _L1_6x_L1_4x: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L1_5x # no bsr.l src_qnan # yes bra.b _L1_6x_L1_5x: bsr.l scosd # operand is a DENORM_L1_6x:## Result is now in FP0# movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr # restore ctrl regs fmovm.x EXC_FP1(%a6),&0x40 # restore fp1 unlk %a6 rts########################################################################## MONADIC TEMPLATE ########################################################################## global _fsinhs__fsinhs_: link %a6,&-LOCAL_SIZE movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,USER_FPCR(%a6) # save ctrl regs fmovm.x &0xc0,EXC_FP0(%a6) # save fp0/fp1 fmov.l &0x0,%fpcr # zero FPCR## copy, convert, and tag input argument# fmov.s 0x8(%a6),%fp0 # load sgl input fmov.x %fp0,FP_SRC(%a6) lea FP_SRC(%a6),%a0 bsr.l tag # fetch operand type mov.b %d0,STAG(%a6) mov.b %d0,%d1 andi.l &0x00ff00ff,USER_FPSR(%a6) clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # pass rnd mode,prec tst.b %d1 bne.b _L2_2s bsr.l ssinh # operand is a NORM bra.b _L2_6s_L2_2s: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L2_3s # no bsr.l src_zero # yes bra.b _L2_6s_L2_3s: cmpi.b %d1,&INF # is operand an INF? bne.b _L2_4s # no bsr.l src_inf # yes bra.b _L2_6s_L2_4s: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L2_5s # no bsr.l src_qnan # yes bra.b _L2_6s_L2_5s: bsr.l ssinhd # operand is a DENORM_L2_6s:## Result is now in FP0# movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr # restore ctrl regs fmovm.x EXC_FP1(%a6),&0x40 # restore fp1 unlk %a6 rts global _fsinhd__fsinhd_: link %a6,&-LOCAL_SIZE movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,USER_FPCR(%a6) # save ctrl regs fmovm.x &0xc0,EXC_FP0(%a6) # save fp0/fp1 fmov.l &0x0,%fpcr # zero FPCR## copy, convert, and tag input argument# fmov.d 0x8(%a6),%fp0 # load dbl input fmov.x %fp0,FP_SRC(%a6) lea FP_SRC(%a6),%a0 bsr.l tag # fetch operand type mov.b %d0,STAG(%a6) mov.b %d0,%d1 andi.l &0x00ff00ff,USER_FPSR(%a6) clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # pass rnd mode,prec mov.b %d1,STAG(%a6) tst.b %d1 bne.b _L2_2d bsr.l ssinh # operand is a NORM bra.b _L2_6d_L2_2d: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L2_3d # no bsr.l src_zero # yes bra.b _L2_6d_L2_3d: cmpi.b %d1,&INF # is operand an INF? bne.b _L2_4d # no bsr.l src_inf # yes bra.b _L2_6d_L2_4d: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L2_5d # no bsr.l src_qnan # yes bra.b _L2_6d_L2_5d: bsr.l ssinhd # operand is a DENORM_L2_6d:## Result is now in FP0# movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr # restore ctrl regs fmovm.x EXC_FP1(%a6),&0x40 # restore fp1 unlk %a6 rts global _fsinhx__fsinhx_: link %a6,&-LOCAL_SIZE movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,USER_FPCR(%a6) # save ctrl regs fmovm.x &0xc0,EXC_FP0(%a6) # save fp0/fp1 fmov.l &0x0,%fpcr # zero FPCR## copy, convert, and tag input argument# lea FP_SRC(%a6),%a0 mov.l 0x8+0x0(%a6),0x0(%a0) # load ext input mov.l 0x8+0x4(%a6),0x4(%a0) mov.l 0x8+0x8(%a6),0x8(%a0) bsr.l tag # fetch operand type mov.b %d0,STAG(%a6) mov.b %d0,%d1 andi.l &0x00ff00ff,USER_FPSR(%a6) clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # pass rnd mode,prec tst.b %d1 bne.b _L2_2x bsr.l ssinh # operand is a NORM bra.b _L2_6x_L2_2x: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L2_3x # no bsr.l src_zero # yes bra.b _L2_6x_L2_3x: cmpi.b %d1,&INF # is operand an INF? bne.b _L2_4x # no bsr.l src_inf # yes bra.b _L2_6x_L2_4x: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L2_5x # no bsr.l src_qnan # yes bra.b _L2_6x_L2_5x: bsr.l ssinhd # operand is a DENORM_L2_6x:## Result is now in FP0# movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr # restore ctrl regs fmovm.x EXC_FP1(%a6),&0x40 # restore fp1 unlk %a6 rts########################################################################## MONADIC TEMPLATE ########################################################################## global _flognp1s__flognp1s_: link %a6,&-LOCAL_SIZE movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,USER_FPCR(%a6) # save ctrl regs fmovm.x &0xc0,EXC_FP0(%a6) # save fp0/fp1 fmov.l &0x0,%fpcr # zero FPCR## copy, convert, and tag input argument# fmov.s 0x8(%a6),%fp0 # load sgl input fmov.x %fp0,FP_SRC(%a6) lea FP_SRC(%a6),%a0 bsr.l tag # fetch operand type mov.b %d0,STAG(%a6) mov.b %d0,%d1 andi.l &0x00ff00ff,USER_FPSR(%a6) clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # pass rnd mode,prec tst.b %d1 bne.b _L3_2s bsr.l slognp1 # operand is a NORM bra.b _L3_6s_L3_2s: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L3_3s # no bsr.l src_zero # yes bra.b _L3_6s_L3_3s: cmpi.b %d1,&INF # is operand an INF? bne.b _L3_4s # no bsr.l sopr_inf # yes bra.b _L3_6s_L3_4s: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L3_5s # no bsr.l src_qnan # yes bra.b _L3_6s_L3_5s: bsr.l slognp1d # operand is a DENORM_L3_6s:## Result is now in FP0# movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr # restore ctrl regs fmovm.x EXC_FP1(%a6),&0x40 # restore fp1 unlk %a6 rts global _flognp1d__flognp1d_: link %a6,&-LOCAL_SIZE movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,USER_FPCR(%a6) # save ctrl regs fmovm.x &0xc0,EXC_FP0(%a6) # save fp0/fp1 fmov.l &0x0,%fpcr # zero FPCR## copy, convert, and tag input argument# fmov.d 0x8(%a6),%fp0 # load dbl input fmov.x %fp0,FP_SRC(%a6) lea FP_SRC(%a6),%a0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -