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