1*19997Sdist# double log(arg) ; natural logarithm 2*19997Sdist# double log10(arg); base 10 log 3*19997Sdist# double arg 4*19997Sdist# if(arg<=0){ errno=EDOM; return(-1.7e+38); } 5*19997Sdist# nat. log computed from Hart&Cheney LOGE 2706 D=22.1 6*19997Sdist# J F Jarvis August 3, 1978 7*19997Sdist.set EDOM,33 8*19997Sdist.globl _log 9*19997Sdist.globl _log10 10*19997Sdist.globl _errno 11*19997Sdist.text 12*19997Sdist.align 1 13*19997Sdist_log10: 14*19997Sdist .word 0x0 15*19997Sdist bispsw $0xe0 16*19997Sdist movd 4(ap),-(sp) 17*19997Sdist calls $2,_log 18*19997Sdist muld2 log10e,r0 19*19997Sdist ret 20*19997Sdist.align 1 21*19997Sdist_log: 22*19997Sdist .word 0x07c0 23*19997Sdist bispsw $0xe0 24*19997Sdist movd 4(ap),r0 25*19997Sdist jgtr range 26*19997Sdist movl $EDOM,_errno 27*19997Sdist movd $0d-1.7e+38,r0 # machine dept max neg 28*19997Sdist ret 29*19997Sdistrange: 30*19997Sdist extzv $7,$8,r0,r10 # r10 = exp(arg)+128 31*19997Sdist insv $128,$7,$8,r0 # r0,r1: 0.5<=frac(arg)<1.0 32*19997Sdist cmpd r0,sqrt2d2 33*19997Sdist jgeq comp 34*19997Sdist insv $129,$7,$8,r0 # frac *= 2 35*19997Sdist decl r10 # exp -= 1 36*19997Sdistcomp: 37*19997Sdist subl2 $128,r10 # signed exp for scaled arg 38*19997Sdist subd3 $0d1.0e+0,r0,r6 # Hart&cheney LOGE 2706 39*19997Sdist addd2 $0d1.0e+0,r0 40*19997Sdist divd2 r0,r6 # r6,r7= (frac-1)/(frac+1) 41*19997Sdist muld3 r6,r6,r8 42*19997Sdist polyd r8,$3,pcoef 43*19997Sdist muld2 r0,r6 44*19997Sdist polyd r8,$4,qcoef 45*19997Sdist divd3 r0,r6,r0 46*19997Sdist cvtld r10,r2 47*19997Sdist muld2 log2,r2 # r2,r3= loge(2**exp) 48*19997Sdist addd2 r2,r0 49*19997Sdist ret 50*19997Sdist.data 51*19997Sdist.align 2 52*19997Sdistpcoef: 53*19997Sdist .double 0d-0.24550691103445385056e+2 54*19997Sdist .double 0d0.23616053565907671809e+3 55*19997Sdist .double 0d-0.54904361859132995001e+3 56*19997Sdist .double 0d0.35621151669903912407e+3 57*19997Sdistqcoef: 58*19997Sdist .double 0d0.10e+1 59*19997Sdist .double 0d-0.35526251110400238735e+2 60*19997Sdist .double 0d0.19375591463035879517e+3 61*19997Sdist .double 0d-0.33389039541217149928e+3 62*19997Sdist .double 0d0.17810575834951956204e+3 63*19997Sdistlog10e: 64*19997Sdist .double 0d0.43429448190325182765e+0 65*19997Sdistsqrt2d2: 66*19997Sdist .double 0d0.70710678118654752440e+0 67*19997Sdistlog2: 68*19997Sdist .double 0d0.69314718055994530941e+0 69