Add original unix v6
This commit is contained in:
+105
@@ -0,0 +1,105 @@
|
||||
.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
|
||||
/
|
||||
Reference in New Issue
Block a user