|
|
1.1 ! root 1: # double exp(arg) ! 2: # double arg; 0<= arg< 88 ! 3: # double exp10(arg) ! 4: # method: range reduction to [-0.5,0.5], Hart&Chenet EXPB 1067 ! 5: # J F Jarvis, August 5, 1978 ! 6: .set ERANGE,34 ! 7: .globl _exp ! 8: .globl _exp10 ! 9: .globl _errno ! 10: .text ! 11: .align 1 ! 12: _exp10: ! 13: .word 0x07c0 ! 14: muld3 4(ap),loge10,r0 ! 15: jbr argtst ! 16: .align 1 ! 17: _exp: ! 18: .word 0x07c0 ! 19: movd 4(ap),r0 ! 20: argtst: ! 21: jnequ smlarg ! 22: movd $0d1.0e+0,r0 ! 23: ret ! 24: smlarg: ! 25: cmpd r0,minarg ! 26: jgeq lrgarg ! 27: mnegd huge,r0 ! 28: ret ! 29: lrgarg: ! 30: cmpd r0,maxarg ! 31: jleq range ! 32: movl $ERANGE,_errno ! 33: movd huge,r0 ! 34: ret ! 35: range: ! 36: emodd log2e,log2ex,r0,r10,r6 # r10=int(arg), r6=frac(arg) ! 37: tstd r0 ! 38: jgtr l1 ! 39: addd2 $0d0.5e+0,r6 ! 40: subw2 $1,r10 ! 41: jbr l2 ! 42: l1: subd2 $0d0.5e+0,r6 ! 43: l2: # Hart&Cheney EXPB 1067 ! 44: muld3 r6,r6,r8 # range [-.5,.5] D=18.1 ! 45: polyd r8,$2,pcoef ! 46: muld2 r0,r6 ! 47: polyd r8,$2,qcoef ! 48: subd3 r6,r0,r2 ! 49: addd2 r6,r0 ! 50: divd2 r2,r0 ! 51: muld2 sqrt2,r0 ! 52: extzv $7,$8,r0,r2 ! 53: addl2 r2,r10 ! 54: insv r10,$7,$8,r0 # load correct exponent ! 55: ret ! 56: .data ! 57: .align 2 ! 58: pcoef: ! 59: .double 0d0.23093347753750233624e-1 ! 60: .double 0d0.20202065651286927227886e+2 ! 61: .double 0d0.15139067990543389159e+4 ! 62: qcoef: ! 63: .double 0d0.1e+1 ! 64: .double 0d0.23318421142748162379e+3 ! 65: .double 0d0.43682116627275584985e+4 ! 66: minarg: ! 67: .double 0d-88.028e+0 ! 68: maxarg: ! 69: .double 0d88.028e+0 ! 70: huge: .double 0d1.7e+38 ! 71: loge10: ! 72: .double 0d2.30258509299404568401e+0 ! 73: sqrt2: ! 74: .double 0d1.41421356237309504880e+0 ! 75: log2e: ! 76: .double 0d1.44269504088896340735e+0 ! 77: log2ex: ! 78: .byte 0xbb
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.