📄 fplsp.s
字号:
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 _L3_2d bsr.l slognp1 # operand is a NORM bra.b _L3_6d_L3_2d: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L3_3d # no bsr.l src_zero # yes bra.b _L3_6d_L3_3d: cmpi.b %d1,&INF # is operand an INF? bne.b _L3_4d # no bsr.l sopr_inf # yes bra.b _L3_6d_L3_4d: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L3_5d # no bsr.l src_qnan # yes bra.b _L3_6d_L3_5d: bsr.l slognp1d # operand is a DENORM_L3_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 _flognp1x__flognp1x_: 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 _L3_2x bsr.l slognp1 # operand is a NORM bra.b _L3_6x_L3_2x: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L3_3x # no bsr.l src_zero # yes bra.b _L3_6x_L3_3x: cmpi.b %d1,&INF # is operand an INF? bne.b _L3_4x # no bsr.l sopr_inf # yes bra.b _L3_6x_L3_4x: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L3_5x # no bsr.l src_qnan # yes bra.b _L3_6x_L3_5x: bsr.l slognp1d # operand is a DENORM_L3_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 _fetoxm1s__fetoxm1s_: 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 _L4_2s bsr.l setoxm1 # operand is a NORM bra.b _L4_6s_L4_2s: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L4_3s # no bsr.l src_zero # yes bra.b _L4_6s_L4_3s: cmpi.b %d1,&INF # is operand an INF? bne.b _L4_4s # no bsr.l setoxm1i # yes bra.b _L4_6s_L4_4s: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L4_5s # no bsr.l src_qnan # yes bra.b _L4_6s_L4_5s: bsr.l setoxm1d # operand is a DENORM_L4_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 _fetoxm1d__fetoxm1d_: 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 _L4_2d bsr.l setoxm1 # operand is a NORM bra.b _L4_6d_L4_2d: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L4_3d # no bsr.l src_zero # yes bra.b _L4_6d_L4_3d: cmpi.b %d1,&INF # is operand an INF? bne.b _L4_4d # no bsr.l setoxm1i # yes bra.b _L4_6d_L4_4d: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L4_5d # no bsr.l src_qnan # yes bra.b _L4_6d_L4_5d: bsr.l setoxm1d # operand is a DENORM_L4_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 _fetoxm1x__fetoxm1x_: 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 _L4_2x bsr.l setoxm1 # operand is a NORM bra.b _L4_6x_L4_2x: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L4_3x # no bsr.l src_zero # yes bra.b _L4_6x_L4_3x: cmpi.b %d1,&INF # is operand an INF? bne.b _L4_4x # no bsr.l setoxm1i # yes bra.b _L4_6x_L4_4x: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L4_5x # no bsr.l src_qnan # yes bra.b _L4_6x_L4_5x: bsr.l setoxm1d # operand is a DENORM_L4_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 _ftanhs__ftanhs_: 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 _L5_2s bsr.l stanh # operand is a NORM bra.b _L5_6s_L5_2s: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L5_3s # no bsr.l src_zero # yes bra.b _L5_6s_L5_3s: cmpi.b %d1,&INF # is operand an INF? bne.b _L5_4s # no bsr.l src_one # yes bra.b _L5_6s_L5_4s: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L5_5s # no bsr.l src_qnan # yes bra.b _L5_6s_L5_5s: bsr.l stanhd # operand is a DENORM_L5_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 _ftanhd__ftanhd_: 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 _L5_2d bsr.l stanh # operand is a NORM bra.b _L5_6d_L5_2d: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L5_3d # no bsr.l src_zero # yes bra.b _L5_6d_L5_3d: cmpi.b %d1,&INF # is operand an INF? bne.b _L5_4d # no bsr.l src_one # yes bra.b _L5_6d_L5_4d: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L5_5d # no bsr.l src_qnan # yes bra.b _L5_6d_L5_5d: bsr.l stanhd # operand is a DENORM_L5_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 _ftanhx__ftanhx_: 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 _L5_2x bsr.l stanh # operand is a NORM bra.b _L5_6x_L5_2x: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L5_3x # no bsr.l src_zero # yes bra.b _L5_6x_L5_3x: cmpi.b %d1,&INF # is operand an INF? bne.b _L5_4x # no bsr.l src_one # yes bra.b _L5_6x_L5_4x: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L5_5x # no bsr.l src_qnan # yes bra.b _L5_6x_L5_5x: bsr.l stanhd # operand is a DENORM_L5_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 _fatans__fatans_: 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 _L6_2s bsr.l satan # operand is a NORM bra.b _L6_6s_L6_2s: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L6_3s # no bsr.l src_zero # yes bra.b _L6_6s_L6_3s: cmpi.b %d1,&INF # is operand an INF? bne.b _L6_4s # no bsr.l spi_2 # yes bra.b _L6_6s_L6_4s: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L6_5s # no bsr.l src_qnan # yes bra.b _L6_6s_L6_5s: bsr.l satand # operand is a DENORM_L6_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 _fatand__fatand_: 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 _L6_2d bsr.l satan # operand is a NORM bra.b _L6_6d_L6_2d: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L6_3d # no bsr.l src_zero # yes bra.b _L6_6d_L6_3d: cmpi.b %d1,&INF # is operand an INF? bne.b _L6_4d # no bsr.l spi_2 # yes bra.b _L6_6d_L6_4d: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L6_5d # no bsr.l src_qnan # yes bra.b _L6_6d_L6_5d: bsr.l satand # operand is a DENORM_L6_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 _fatanx__fatanx_: 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -