?? l_entry.s
字號:
| Customizations:| 1. Remove the moveml at the entry and exit of| each routine if your compiler treats those| registers as scratch./* | 2. Likewise, don't save FP0/FP1 if they are scratch */| registers.| 3. Delete handling of the fpsr if you only care about| the result.| 4. Some (most?) C compilers convert all float arguments| to double, and provide no support at all for extended| precision so remove the __l_fcoshs and __l_fcoshx entry points.| 5. Move the result to d0/d1 if the compiler is that old.| Copyright (C) Motorola, Inc. 1991| All Rights Reserved|| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA| The copyright notice above does not evidence any| actual or intended publication of such source code.| xref __l_tag| xref __l_scosh| xref __l_ld_pone| xref __l_ld_pinf| xref __l_mon_nan| xref __l_scoshd .globl __l_fcoshs__l_fcoshs: link a6,#-LOCAL_SIZE moveml d0-d1/a0-a1,a6@(USER_DA) fmovemx fp0-fp3,a6@(USER_FP0) fmovel fpsr,a6@(USER_FPSR) fmovel fpcr,a6@(USER_FPCR) fmovel fpcr,d1 /* | user's rounding mode/precision */ fmovel #0,fpcr | force rounding mode/prec to extended,rn|| copy, convert and tag input argument| fmoves a6@(8),fp0 fmovex fp0,a6@(ETEMP) lea a6@(ETEMP),a0 bsrl __l_tag moveb d0,a6@(STAG) tstb d0 jne L_1062 bsrl __l_scosh | normalized (regular) number jra L_1066L_1062: cmpb #0x20,d0 | zero? jne L_1063 bsrl __l_ld_pone jra L_1066L_1063: cmpb #0x40,d0 | infinity? jne L_1064 bsrl __l_ld_pinf jra L_1066L_1064: cmpb #0x60,d0 | NaN? jne L_1065 bsrl __l_mon_nan jra L_1066L_1065: bsrl __l_scoshd | assuming a denorm...L_1066: fmovel fpsr,d0 | update status register orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions fmovel d0,fpsr|| Result is now in FP0| moveml a6@(USER_DA),d0-d1/a0-a1 fmovemx a6@(USER_FP1),fp1-fp3 | note: fp0 not restored fmovel a6@(USER_FPCR),fpcr | fpcr restored unlk a6 rts .globl __l_fcoshd__l_fcoshd: link a6,#-LOCAL_SIZE moveml d0-d1/a0-a1,a6@(USER_DA) fmovemx fp0-fp3,a6@(USER_FP0) fmovel fpsr,a6@(USER_FPSR) fmovel fpcr,a6@(USER_FPCR) fmovel fpcr,d1 /* | user's rounding mode/precision */ fmovel #0,fpcr | force rounding mode/prec to extended,rn|| copy, convert and tag input argument| fmoved a6@(8),fp0 fmovex fp0,a6@(ETEMP) lea a6@(ETEMP),a0 bsrl __l_tag moveb d0,a6@(STAG) tstb d0 jne L_1067 bsrl __l_scosh | normalized (regular) number jra L_106BL_1067: cmpb #0x20,d0 | zero? jne L_1068 bsrl __l_ld_pone jra L_106BL_1068: cmpb #0x40,d0 | infinity? jne L_1069 bsrl __l_ld_pinf jra L_106BL_1069: cmpb #0x60,d0 | NaN? jne L_106A bsrl __l_mon_nan jra L_106BL_106A: bsrl __l_scoshd | assuming a denorm...L_106B: fmovel fpsr,d0 | update status register orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions fmovel d0,fpsr|| Result is now in FP0| moveml a6@(USER_DA),d0-d1/a0-a1 fmovemx a6@(USER_FP1),fp1-fp3 | note: fp0 not restored fmovel a6@(USER_FPCR),fpcr | fpcr restored unlk a6 rts .globl __l_fcoshx__l_fcoshx: link a6,#-LOCAL_SIZE moveml d0-d1/a0-a1,a6@(USER_DA) fmovemx fp0-fp3,a6@(USER_FP0) fmovel fpsr,a6@(USER_FPSR) fmovel fpcr,a6@(USER_FPCR) fmovel fpcr,d1 /* | user's rounding mode/precision */ fmovel #0,fpcr | force rounding mode/prec to extended,rn|| copy, convert and tag input argument| fmovex a6@(8),fp0 fmovex fp0,a6@(ETEMP) lea a6@(ETEMP),a0 bsrl __l_tag moveb d0,a6@(STAG) tstb d0 jne L_106C bsrl __l_scosh | normalized (regular) number jra L_106GL_106C: cmpb #0x20,d0 | zero? jne L_106D bsrl __l_ld_pone jra L_106GL_106D: cmpb #0x40,d0 | infinity? jne L_106E bsrl __l_ld_pinf jra L_106GL_106E: cmpb #0x60,d0 | NaN? jne L_106F bsrl __l_mon_nan jra L_106GL_106F: bsrl __l_scoshd | assuming a denorm...L_106G: fmovel fpsr,d0 | update status register orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions fmovel d0,fpsr|| Result is now in FP0| moveml a6@(USER_DA),d0-d1/a0-a1 fmovemx a6@(USER_FP1),fp1-fp3 | note: fp0 not restored fmovel a6@(USER_FPCR),fpcr | fpcr restored unlk a6 rts|| MONADIC.GEN 1.3 4/30/91|| MONADIC.GEN --- generic MONADIC template|| This version saves all registers that will be used by the emulation| routines and restores all but FP0 on exit. The FPSR is| updated to reflect the result of the operation. Return value| is placed in FP0 for single, double and extended results.|| The package subroutines expect the incoming fpcr to be zeroed| since they need extended precision to work properly. The/* | 'final' fpcr is expected in d1 so that the calculated result */| can be properly sized and rounded. Also, if the incoming fpcr| has enabled any exceptions, the exception will be taken on the| final fmovem in this template.|| Customizations:| 1. Remove the moveml at the entry and exit of| each routine if your compiler treats those| registers as scratch./* | 2. Likewise, don't save FP0/FP1 if they are scratch */| registers.| 3. Delete handling of the fpsr if you only care about| the result.| 4. Some (most?) C compilers convert all float arguments| to double, and provide no support at all for extended| precision so remove the __l_fetoxs and __l_fetoxx entry points.| 5. Move the result to d0/d1 if the compiler is that old.| Copyright (C) Motorola, Inc. 1991| All Rights Reserved|| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA| The copyright notice above does not evidence any| actual or intended publication of such source code.| xref __l_tag| xref __l_setox| xref __l_ld_pone| xref __l_szr_inf| xref __l_mon_nan| xref __l_setoxd .globl __l_fetoxs__l_fetoxs: link a6,#-LOCAL_SIZE moveml d0-d1/a0-a1,a6@(USER_DA) fmovemx fp0-fp3,a6@(USER_FP0) fmovel fpsr,a6@(USER_FPSR) fmovel fpcr,a6@(USER_FPCR) fmovel fpcr,d1 /* | user's rounding mode/precision */ fmovel #0,fpcr | force rounding mode/prec to extended,rn|| copy, convert and tag input argument| fmoves a6@(8),fp0 fmovex fp0,a6@(ETEMP) lea a6@(ETEMP),a0 bsrl __l_tag moveb d0,a6@(STAG) tstb d0 jne L_1072 bsrl __l_setox | normalized (regular) number jra L_1076L_1072: cmpb #0x20,d0 | zero? jne L_1073 bsrl __l_ld_pone jra L_1076L_1073: cmpb #0x40,d0 | infinity? jne L_1074 bsrl __l_szr_inf jra L_1076L_1074: cmpb #0x60,d0 | NaN? jne L_1075 bsrl __l_mon_nan jra L_1076L_1075: bsrl __l_setoxd | assuming a denorm...L_1076: fmovel fpsr,d0 | update status register orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions fmovel d0,fpsr|| Result is now in FP0| moveml a6@(USER_DA),d0-d1/a0-a1 fmovemx a6@(USER_FP1),fp1-fp3 | note: fp0 not restored fmovel a6@(USER_FPCR),fpcr | fpcr restored unlk a6 rts .globl __l_fetoxd__l_fetoxd: link a6,#-LOCAL_SIZE moveml d0-d1/a0-a1,a6@(USER_DA) fmovemx fp0-fp3,a6@(USER_FP0) fmovel fpsr,a6@(USER_FPSR) fmovel fpcr,a6@(USER_FPCR) fmovel fpcr,d1 /* | user's rounding mode/precision */ fmovel #0,fpcr | force rounding mode/prec to extended,rn|| copy, convert and tag input argument| fmoved a6@(8),fp0 fmovex fp0,a6@(ETEMP) lea a6@(ETEMP),a0 bsrl __l_tag moveb d0,a6@(STAG) tstb d0 jne L_1077 bsrl __l_setox | normalized (regular) number jra L_107BL_1077: cmpb #0x20,d0 | zero? jne L_1078 bsrl __l_ld_pone jra L_107BL_1078: cmpb #0x40,d0 | infinity? jne L_1079 bsrl __l_szr_inf jra L_107BL_1079: cmpb #0x60,d0 | NaN? jne L_107A bsrl __l_mon_nan jra L_107BL_107A: bsrl __l_setoxd | assuming a denorm...L_107B: fmovel fpsr,d0 | update status register orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions fmovel d0,fpsr|| Result is now in FP0| moveml a6@(USER_DA),d0-d1/a0-a1 fmovemx a6@(USER_FP1),fp1-fp3 | note: fp0 not restored fmovel a6@(USER_FPCR),fpcr | fpcr restored unlk a6 rts .globl __l_fetoxx__l_fetoxx: link a6,#-LOCAL_SIZE moveml d0-d1/a0-a1,a6@(USER_DA) fmovemx fp0-fp3,a6@(USER_FP0) fmovel fpsr,a6@(USER_FPSR) fmovel fpcr,a6@(USER_FPCR) fmovel fpcr,d1 /* | user's rounding mode/precision */ fmovel #0,fpcr | force rounding mode/prec to extended,rn|| copy, convert and tag input argument| fmovex a6@(8),fp0 fmovex fp0,a6@(ETEMP) lea a6@(ETEMP),a0 bsrl __l_tag moveb d0,a6@(STAG) tstb d0 jne L_107C bsrl __l_setox | normalized (regular) number jra L_107GL_107C: cmpb #0x20,d0 | zero? jne L_107D bsrl __l_ld_pone jra L_107GL_107D: cmpb #0x40,d0 | infinity? jne L_107E bsrl __l_szr_inf jra L_107GL_107E: cmpb #0x60,d0 | NaN? jne L_107F bsrl __l_mon_nan jra L_107GL_107F: bsrl __l_setoxd | assuming a denorm...L_107G: fmovel fpsr,d0 | update status register orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions fmovel d0,fpsr|| Result is now in FP0| moveml a6@(USER_DA),d0-d1/a0-a1 fmovemx a6@(USER_FP1),fp1-fp3 | note: fp0 not restored fmovel a6@(USER_FPCR),fpcr | fpcr restored unlk a6 rts|| MONADIC.GEN 1.3 4/30/91|| MONADIC.GEN --- generic MONADIC template|| This version saves all registers that will be used by the emulation| routines and restores all but FP0 on exit. The FPSR is| updated to reflect the result of the operation. Return value| is placed in FP0 for single, double and extended results.|| The package subroutines expect the incoming fpcr to be zeroed| since they need extended precision to work properly. The/* | 'final' fpcr is expected in d1 so that the calculated result */| can be properly sized and rounded. Also, if the incoming fpcr| has enabled any exceptions, the exception will be taken on the| final fmovem in this template.|| Customizations:| 1. Remove the moveml at the entry and exit of| each routine if your compiler treats those| registers as scratch./* | 2. Likewise, don't save FP0/FP1 if they are scratch */| registers.| 3. Delete handling of the fpsr if you only care about| the result.| 4. Some (most?) C compilers convert all float arguments| to double, and provide no support at all for extended| precision so remove the __l_fetoxm1s and __l_fetoxm1x entry points.| 5. Move the result to d0/d1 if the compiler is that old.| Copyright (C) Motorola, Inc. 1991| All Rights Reserved|| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA| The copyright notice above does not evidence any| actual or intended publication of such source code.| xref __l_tag| xref __l_setoxm1| xref __l_szero| xref __l_setoxm1i| xref __l_mon_nan| xref __l_setoxm1d .globl __l_fetoxm1s__l_fetoxm1s: link a6,#-LOCAL_SIZE moveml d0-d1/a0-a1,a6@(USER_DA) fmovemx fp0-fp3,a6@(USER_FP0) fmovel fpsr,a6@(USER_FPSR) fmovel fpcr,a6@(USER_FPCR) fmovel fpcr,d1 /* | user's rounding mode/precision */ fmovel #0,fpcr | force rounding mode/prec to extended,rn|| copy, convert and tag input argument| fmoves a6@(8),fp0 fmovex fp0,a6@(ETEMP) lea a6@(ETEMP),a0 bsrl __l_tag moveb d0,a6@(STAG) tstb d0 jne L_1082 bsrl __l_setoxm1 | normalized (regular) number jra L_1086L_1082: cmpb #0x20,d0 | zero? jne L_1083 bsrl __l_szero jra L_1086L_1083: cmpb #0x40,d0 | infinity? jne L_1084 bsrl __l_setoxm1i jra L_1086L_1084: cmpb #0x60,d0 | NaN? jne L_1085 bsrl __l_mon_nan jra L_1086L_1085: bsrl __l_setoxm1d | assuming a denorm...L_1086: fmovel fpsr,d0 | update status register orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions fmovel d0,fpsr|| Result is now in FP0| moveml a6@(USER_DA),d0-d1/a0-a1 fmovemx a6@(USER_FP1),fp1-fp3 | note: fp0 not restored fmovel a6@(USER_FPCR),fpcr | fpcr restored unlk a6 rts .globl __l_fetoxm1d__l_fetoxm1d: link a6,#-LOCAL_SIZE moveml d0-d1/a0-a1,a6@(USER_DA) fmovemx fp0-fp3,a6@(USER_FP0) fmovel fpsr,a6@(USER_FPSR) fmovel fpcr,a6@(USER_FPCR) fmovel fpcr,d1 /* | user's rounding mode/precision */ fmovel #0,fpcr | force rounding mode/prec to extended,rn|| copy, convert and tag input argument| fmoved a6@(8),fp0 fmovex fp0,a6@(ETEMP) lea a6@(ETEMP),a0 bsrl __l_tag moveb d0,a6@(STAG) tstb d0 jne L_1087 bsrl __l_setoxm1 | normalized (regular) number jra L_108BL_1087: cmpb #0x20,d0 | zero? jne L_1088 bsrl __l_szero jra L_108BL_1088: cmpb #0x40,d0 | infinity? jne L_1089 bsrl __l_setoxm1i jra L_108BL_1089: cmpb #0x60,d0 | NaN? jne L_108A bsrl __l_mon_nan jra L_108BL_108A: bsrl __l_setoxm1d | assuming a denorm...L_108B: fmovel fpsr,d0 | update status register orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions fmovel d0,fpsr|| Result is now in FP0| moveml a6@(USER_DA),d0-d1/a0-a1 fmovemx a6@(USER_FP1),fp1-fp3 | note: fp0 not restored fmovel a6@(USER_FPCR),fpcr | fpcr restored unlk a6 rts .globl __l_fetoxm1x__l_fetoxm1x: link a6,#-LOCAL_SIZE moveml d0-d1/a0-a1,a6@(USER_DA) fmovemx fp0-fp3,a6@(USER_FP0) fmovel fpsr,a6@(USER_FPSR)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -