📄 fplsp.s
字号:
# MONADIC TEMPLATE ########################################################################## global _fetoxs__fetoxs_: 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 _L10_2s bsr.l setox # operand is a NORM bra.b _L10_6s_L10_2s: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L10_3s # no bsr.l ld_pone # yes bra.b _L10_6s_L10_3s: cmpi.b %d1,&INF # is operand an INF? bne.b _L10_4s # no bsr.l szr_inf # yes bra.b _L10_6s_L10_4s: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L10_5s # no bsr.l src_qnan # yes bra.b _L10_6s_L10_5s: bsr.l setoxd # operand is a DENORM_L10_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 _fetoxd__fetoxd_: 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 _L10_2d bsr.l setox # operand is a NORM bra.b _L10_6d_L10_2d: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L10_3d # no bsr.l ld_pone # yes bra.b _L10_6d_L10_3d: cmpi.b %d1,&INF # is operand an INF? bne.b _L10_4d # no bsr.l szr_inf # yes bra.b _L10_6d_L10_4d: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L10_5d # no bsr.l src_qnan # yes bra.b _L10_6d_L10_5d: bsr.l setoxd # operand is a DENORM_L10_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 _fetoxx__fetoxx_: 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 _L10_2x bsr.l setox # operand is a NORM bra.b _L10_6x_L10_2x: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L10_3x # no bsr.l ld_pone # yes bra.b _L10_6x_L10_3x: cmpi.b %d1,&INF # is operand an INF? bne.b _L10_4x # no bsr.l szr_inf # yes bra.b _L10_6x_L10_4x: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L10_5x # no bsr.l src_qnan # yes bra.b _L10_6x_L10_5x: bsr.l setoxd # operand is a DENORM_L10_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 _ftwotoxs__ftwotoxs_: 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 _L11_2s bsr.l stwotox # operand is a NORM bra.b _L11_6s_L11_2s: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L11_3s # no bsr.l ld_pone # yes bra.b _L11_6s_L11_3s: cmpi.b %d1,&INF # is operand an INF? bne.b _L11_4s # no bsr.l szr_inf # yes bra.b _L11_6s_L11_4s: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L11_5s # no bsr.l src_qnan # yes bra.b _L11_6s_L11_5s: bsr.l stwotoxd # operand is a DENORM_L11_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 _ftwotoxd__ftwotoxd_: 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 _L11_2d bsr.l stwotox # operand is a NORM bra.b _L11_6d_L11_2d: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L11_3d # no bsr.l ld_pone # yes bra.b _L11_6d_L11_3d: cmpi.b %d1,&INF # is operand an INF? bne.b _L11_4d # no bsr.l szr_inf # yes bra.b _L11_6d_L11_4d: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L11_5d # no bsr.l src_qnan # yes bra.b _L11_6d_L11_5d: bsr.l stwotoxd # operand is a DENORM_L11_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 _ftwotoxx__ftwotoxx_: 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 _L11_2x bsr.l stwotox # operand is a NORM bra.b _L11_6x_L11_2x: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L11_3x # no bsr.l ld_pone # yes bra.b _L11_6x_L11_3x: cmpi.b %d1,&INF # is operand an INF? bne.b _L11_4x # no bsr.l szr_inf # yes bra.b _L11_6x_L11_4x: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L11_5x # no bsr.l src_qnan # yes bra.b _L11_6x_L11_5x: bsr.l stwotoxd # operand is a DENORM_L11_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 _ftentoxs__ftentoxs_: 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 _L12_2s bsr.l stentox # operand is a NORM bra.b _L12_6s_L12_2s: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L12_3s # no bsr.l ld_pone # yes bra.b _L12_6s_L12_3s: cmpi.b %d1,&INF # is operand an INF? bne.b _L12_4s # no bsr.l szr_inf # yes bra.b _L12_6s_L12_4s: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L12_5s # no bsr.l src_qnan # yes bra.b _L12_6s_L12_5s: bsr.l stentoxd # operand is a DENORM_L12_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 _ftentoxd__ftentoxd_: 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 _L12_2d bsr.l stentox # operand is a NORM bra.b _L12_6d_L12_2d: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L12_3d # no bsr.l ld_pone # yes bra.b _L12_6d_L12_3d: cmpi.b %d1,&INF # is operand an INF? bne.b _L12_4d # no bsr.l szr_inf # yes bra.b _L12_6d_L12_4d: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L12_5d # no bsr.l src_qnan # yes bra.b _L12_6d_L12_5d: bsr.l stentoxd # operand is a DENORM_L12_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 _ftentoxx__ftentoxx_: 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 _L12_2x bsr.l stentox # operand is a NORM bra.b _L12_6x_L12_2x: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L12_3x # no bsr.l ld_pone # yes bra.b _L12_6x_L12_3x: cmpi.b %d1,&INF # is operand an INF? bne.b _L12_4x # no bsr.l szr_inf # yes bra.b _L12_6x_L12_4x: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L12_5x # no bsr.l src_qnan # yes bra.b _L12_6x_L12_5x: bsr.l stentoxd # operand is a DENORM_L12_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 _flogns__flogns_: 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 _L13_2s bsr.l slogn # operand is a NORM bra.b _L13_6s_L13_2s: cmpi.b %d1,&ZERO # is operand a ZERO? bne.b _L13_3s # no bsr.l t_dz2 # yes bra.b _L13_6s_L13_3s: cmpi.b %d1,&INF # is operand an INF? bne.b _L13_4s # no bsr.l sopr_inf # yes bra.b _L13_6s_L13_4s: cmpi.b %d1,&QNAN # is operand a QNAN? bne.b _L13_5s # no bsr.l src_qnan # yes bra.b _L13_6s_L13_5s:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -