1# 2# Copyright (c) 1980 Regents of the University of California. 3# All rights reserved. The Berkeley software License Agreement 4# specifies the terms and conditions for redistribution. 5# 6# @(#)exp.s 5.1 (Berkeley) 05/08/85 7# 8# 9# double exp(arg) 10# double arg; 0<= arg< 88 11# double exp10(arg) 12# method: range reduction to [-0.5,0.5], Hart&Chenet EXPB 1067 13# J F Jarvis, August 5, 1978 14.set ERANGE,34 15.globl _exp 16.globl _exp10 17.globl _errno 18.text 19.align 1 20_exp10: 21 .word 0x07c0 22 bispsw $0xe0 23 muld3 4(ap),loge10,r0 24 jbr argtst 25.align 1 26_exp: 27 .word 0x07c0 28 bispsw $0xe0 29 movd 4(ap),r0 30argtst: 31 jnequ smlarg 32 movd $0d1.0e+0,r0 33 ret 34smlarg: 35 cmpd r0,minarg 36 jgeq lrgarg 37 mnegd huge,r0 38 ret 39lrgarg: 40 cmpd r0,maxarg 41 jleq range 42 movl $ERANGE,_errno 43 movd huge,r0 44 ret 45range: 46 emodd log2e,log2ex,r0,r10,r6 # r10=int(arg), r6=frac(arg) 47 tstd r0 48 jgtr l1 49 addd2 $0d0.5e+0,r6 50 subw2 $1,r10 51 jbr l2 52l1: subd2 $0d0.5e+0,r6 53l2: # Hart&Cheney EXPB 1067 54 muld3 r6,r6,r8 # range [-.5,.5] D=18.1 55 polyd r8,$2,pcoef 56 muld2 r0,r6 57 polyd r8,$2,qcoef 58 subd3 r6,r0,r2 59 addd2 r6,r0 60 divd2 r2,r0 61 muld2 sqrt2,r0 62 extzv $7,$8,r0,r2 63 addl2 r2,r10 64 insv r10,$7,$8,r0 # load correct exponent 65 ret 66.data 67.align 2 68pcoef: 69 .double 0d0.23093347753750233624e-1 70 .double 0d0.20202065651286927227886e+2 71 .double 0d0.15139067990543389159e+4 72qcoef: 73 .double 0d0.1e+1 74 .double 0d0.23318421142748162379e+3 75 .double 0d0.43682116627275584985e+4 76minarg: 77 .double 0d-88.028e+0 78maxarg: 79 .double 0d88.028e+0 80huge: .double 0d1.7e+38 81loge10: 82 .double 0d2.30258509299404568401e+0 83sqrt2: 84 .double 0d1.41421356237309504880e+0 85log2e: 86 .double 0d1.44269504088896340735e+0 87log2ex: 88 .byte 0xbb 89