home *** CD-ROM | disk | FTP | other *** search
- .globl log, _log
- ldfps = 170100^tst
- stfps = 170200^tst
- ldexp = 176400^movif
- stexp = 175000^movfi
- /
- / log accepts its argument and returns its result
- / in fr0. The carry bit is set if the argument is
- / zero or negative.
- / The coefficients are #2705 from Hart & Cheney.
- /
- / movf arg,fr0
- / jsr pc,log
- / movf fr0,...
- /
- _log:
- mov r5,-(sp)
- mov sp,r5
- movf 4(r5),fr0
- jsr pc,log
- mov (sp)+,r5
- rts pc
-
- log:
- tstf fr0
- cfcc
- bgt 1f
- movf $bigneg,fr0 /return -(big) on error
- sec
- rts pc
- 1:
- stfps -(sp)
- ldfps $200 /di mode
- movf fr2,-(sp)
- movf fr1,-(sp)
- /
- stexp fr0,-(sp) /scale
- ldexp $0,fr0
- cmpf sqrt2o2,fr0
- cfcc
- blt 1f
- ldexp $1,fr0
- dec (sp)
- 1:
- movf fr0,fr1 /(1/2)^(1/2) < x < 2^(1/2)
- subf $one,fr0
- addf $one,fr1
- divf fr1,fr0 /z = (x-1)/(x+1)
- movf fr0,fr1
- mulf fr0,fr1 /z^2
- /
- movf p3,fr2
- mulf fr1,fr2
- addf p2,fr2
- mulf fr1,fr2
- addf p1,fr2
- mulf fr1,fr2
- addf p0,fr2
- mulf fr2,fr0 /zP(z)
- /
- movf fr1,fr2
- addf q2,fr2
- mulf fr1,fr2
- addf q1,fr2
- mulf fr1,fr2
- addf q0,fr2 /Q(z)
- /
- divf fr2,fr0 /zP(z)/Q(z)
- movif (sp)+,fr1
- mulf log2,fr1
- addf fr1,fr0
- /
- movf (sp)+,fr1
- movf (sp)+,fr2
- ldfps (sp)+
- rts pc
- /
- /
- one = 40200
- bigneg = 177777
- /
- .data
- sqrt2o2: 40065; 02363; 31771; 157145
- log2: 40061; 71027;173721;147572
- /
- p0: 141300; 16201; 02154; 10216
- p1: 41367;124211; 21611;114442
- p2: 141032; 31773; 64222; 40261
- p3: 37727;114303;110107;114145
- /
- q0: 141100; 16201; 02154; 10216
- q1: 41233;154404;136454; 22153
- q2: 141016;111747; 07541; 52530
- /
- /
- /p0 = -.24013 91795 59210 50986 8484 d2
- /p1 = .30957 29282 15376 50062 264 d2
- /p2 = -.96376 90933 68686 59324 d1
- /p3 = .42108 73712 17979 7145 d0
- /
- /q0 = -.12006 95897 79605 25471 7525 d2
- /q1 = .19480 96607 00889 73051 623 d2
- /q2 = -.89111 09027 93783 12337 d1
- /q3 = .1 d1
- /
-