1*20008Sdist# 2*20008Sdist# Copyright (c) 1980 Regents of the University of California. 3*20008Sdist# All rights reserved. The Berkeley software License Agreement 4*20008Sdist# specifies the terms and conditions for redistribution. 5*20008Sdist# 6*20008Sdist# @(#)exp.s 5.1 (Berkeley) 05/08/85 7*20008Sdist# 8*20008Sdist# 919996Sdist# double exp(arg) 1019996Sdist# double arg; 0<= arg< 88 1119996Sdist# double exp10(arg) 1219996Sdist# method: range reduction to [-0.5,0.5], Hart&Chenet EXPB 1067 1319996Sdist# J F Jarvis, August 5, 1978 1419996Sdist.set ERANGE,34 1519996Sdist.globl _exp 1619996Sdist.globl _exp10 1719996Sdist.globl _errno 1819996Sdist.text 1919996Sdist.align 1 2019996Sdist_exp10: 2119996Sdist .word 0x07c0 2219996Sdist bispsw $0xe0 2319996Sdist muld3 4(ap),loge10,r0 2419996Sdist jbr argtst 2519996Sdist.align 1 2619996Sdist_exp: 2719996Sdist .word 0x07c0 2819996Sdist bispsw $0xe0 2919996Sdist movd 4(ap),r0 3019996Sdistargtst: 3119996Sdist jnequ smlarg 3219996Sdist movd $0d1.0e+0,r0 3319996Sdist ret 3419996Sdistsmlarg: 3519996Sdist cmpd r0,minarg 3619996Sdist jgeq lrgarg 3719996Sdist mnegd huge,r0 3819996Sdist ret 3919996Sdistlrgarg: 4019996Sdist cmpd r0,maxarg 4119996Sdist jleq range 4219996Sdist movl $ERANGE,_errno 4319996Sdist movd huge,r0 4419996Sdist ret 4519996Sdistrange: 4619996Sdist emodd log2e,log2ex,r0,r10,r6 # r10=int(arg), r6=frac(arg) 4719996Sdist tstd r0 4819996Sdist jgtr l1 4919996Sdist addd2 $0d0.5e+0,r6 5019996Sdist subw2 $1,r10 5119996Sdist jbr l2 5219996Sdistl1: subd2 $0d0.5e+0,r6 5319996Sdistl2: # Hart&Cheney EXPB 1067 5419996Sdist muld3 r6,r6,r8 # range [-.5,.5] D=18.1 5519996Sdist polyd r8,$2,pcoef 5619996Sdist muld2 r0,r6 5719996Sdist polyd r8,$2,qcoef 5819996Sdist subd3 r6,r0,r2 5919996Sdist addd2 r6,r0 6019996Sdist divd2 r2,r0 6119996Sdist muld2 sqrt2,r0 6219996Sdist extzv $7,$8,r0,r2 6319996Sdist addl2 r2,r10 6419996Sdist insv r10,$7,$8,r0 # load correct exponent 6519996Sdist ret 6619996Sdist.data 6719996Sdist.align 2 6819996Sdistpcoef: 6919996Sdist .double 0d0.23093347753750233624e-1 7019996Sdist .double 0d0.20202065651286927227886e+2 7119996Sdist .double 0d0.15139067990543389159e+4 7219996Sdistqcoef: 7319996Sdist .double 0d0.1e+1 7419996Sdist .double 0d0.23318421142748162379e+3 7519996Sdist .double 0d0.43682116627275584985e+4 7619996Sdistminarg: 7719996Sdist .double 0d-88.028e+0 7819996Sdistmaxarg: 7919996Sdist .double 0d88.028e+0 8019996Sdisthuge: .double 0d1.7e+38 8119996Sdistloge10: 8219996Sdist .double 0d2.30258509299404568401e+0 8319996Sdistsqrt2: 8419996Sdist .double 0d1.41421356237309504880e+0 8519996Sdistlog2e: 8619996Sdist .double 0d1.44269504088896340735e+0 8719996Sdistlog2ex: 8819996Sdist .byte 0xbb 89