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