home *** CD-ROM | disk | FTP | other *** search
-
- * Maxon C++ Library:
- * Modul "math_fpu"
- * Transzendete Math-Funktionen für FPU
- * Jens Gelhar 02.03.95
-
- xdef _sin__r,_cos__r,_tan__r,_sinh__r,_cosh__r,_tanh__r
- xdef _asin__r,_acos__r,_atan__r,_exp__r,_log__r,_log10__r
- xdef _sqrt__r,_pow__r,_atan2__r,_modf__r,_frexp__r,_ldexp__r,_fmod__r
- xdef _fabs__r,_floor__r,_ceil__r
-
- mc68881
-
- SECTION "Transcen",CODE
-
- _sin__r:
- fsin.d 4(a7),fp0
- rts
-
- _cos__r:
- fcos.d 4(a7),fp0
- rts
-
- _tan__r:
- ftan.d 4(a7),fp0
- rts
-
- _asin__r:
- fasin.d 4(a7),fp0
- rts
-
- _acos__r:
- facos.d 4(a7),fp0
- rts
-
- _atan__r:
- fatan.d 4(a7),fp0
- rts
-
- _sinh__r:
- fsinh.d 4(a7),fp0
- rts
-
- _cosh__r:
- fcosh.d 4(a7),fp0
- rts
-
- _tanh__r:
- ftanh.d 4(a7),fp0
- rts
-
- _exp__r:
- fetox.d 4(a7),fp0
- rts
-
- _log__r:
- flogn.d 4(a7),fp0
- rts
-
- _log10__r:
- flog10.d 4(a7),fp0
- rts
-
- _sqrt__r:
- fsqrt.d 4(a7),fp0
- rts
-
- _pow__r:
- flogn.d 4(a7),fp0
- fmul.d 12(a7),fp0
- fetox.x fp0
- rts
-
- SECTION "Misc",CODE
-
- _modf__r:
- ; Stack-Parameter: double, double*
- fmove.d 4(a7),fp1
- fintrz.x fp1,fp0 ; Vorkommateil nach fp0
- fsub.x fp0,fp1 ; Nachkommateil...
- move.l 12(a7),a0
- cmp.w #0,a0
- beq.b .0
- fmove.d fp1,(a0)
- .0 rts
-
-
- _atan2__r:
- fmove.d 4(a7),fp0
- fmove.d 12(a7),fp1
- ftst.x fp1
- fbne .0
- ; Division durch Null umgehen:
- fmove.d #1.570796327,fp0 ; = pi/2
- bra.b .1
- .0 fdiv.x fp1,fp0
- .1 ftst.d 4(a7) ; x < 0 ?
- fboge .3 ; dann Korrektur-Rechnung
- fmove.d #3.14159265435897932384626433827950288,fp1
- ftst.x fp0
- fbolt .2
- fsub.x fp1,fp0 ; x = x'-pi
- bra.b .3
- .2 fadd.x fp1,fp0 ; x = x'+pi
- .3 fatan.x fp0
- rts
-
-
- _frexp__r:
- ; Parameter: double, int*
- fmove.d 4(a7),fp0
- fgetexp.x fp0,fp1
- fgetman.x fp0
- move.l 12(a7),a0
- cmp.w #0,a0
- beq.b .0
- fmove.d fp1,(a0)
- .0 rts
-
-
- _ldexp__r:
- ; Parameter: double, int
- move.w 4(a7),d0
- beq.b .zero
- move.l 12(a7),d1
- bclr #15,d0
- lsr.w #4,d0
- ext.l d0
- add.l d1,d0
- cmp.l #$7FF,d0
- bhi.b .overflow
- swap d0
- asl.l #4,d0
- and.l #$800FFFFF,4(a7)
- or.l 4(a7),d0
- fmove.d 4(a7),fp0
- rts
- .overflow:
- .zero: fmove.x #0.0,fp0
- rts
-
- SECTION "Round",CODE
-
- _fmod__r:
- fmove.d 4(a7),fp0
- frem.d 12(a7),fp0
- rts
-
- _fabs__r:
- fabs.d 4(a7),fp0
- rts
-
- _floor__r:
- fmove.l FPCR,d0
- fmove.l #%10100000,FPCR
- fint.d 4(a7),fp0
- fmove.l d0,FPCR
- rts
-
- _ceil__r:
- fmove.l FPCR,d0
- fmove.l #%10110000,FPCR
- fint.d 4(a7),fp0
- fmove.l d0,FPCR
- rts
-
-
- SECTION "atof",CODE
-
- xref atof__PCc
- xdef _atof__r
- xdef atof__r_PCc
-
- _atof__r:
- atof__r_PCc:
- move.l 4(a7),-(a7)
- jsr atof__PCc
- addq.l #4,a7
- movem.l d0/d1,-(a7)
- fmove.d (a7)+,fp0
- rts
-
-
- SECTION "strtod",CODE
-
- xref strtod__PCcPPc
- xdef _strtod__r
- xdef strtod__r_PCcPPc
- _strtod__r:
- strtod__r_PCcPPc:
- move.l 8(a7),-(a7)
- move.l 8(a7),-(a7)
- jsr strtod__PCcPPc
- addq.l #8,a7
- movem.l d0/d1,-(a7)
- fmove.d (a7)+,fp0
- rts
-
-
- SECTION "Random",CODE
-
- xref Random_
- xdef Random__r
- Random__r:
- jsr Random_
- movem.l d0/d1,-(a7)
- fmove.d (a7)+,fp0
- rts
-
-
- SECTION "difftime",CODE
-
- xref difftime__UiUi
- xdef _difftime__r
- xdef difftime__r_UiUi
- _difftime__r:
- difftime__r_UiUi:
- move.l 8(a7),-(a7)
- move.l 8(a7),-(a7)
- jsr difftime__UiUi
- addq.l #8,a7
- movem.l d0/d1,-(a7)
- fmove.d (a7)+,fp0
- rts
-
- end
-
-