|
|
1.1 ! root 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: # @(#)tanh.s 5.1 (Berkeley) 5/8/85 ! 7: # ! 8: # ! 9: # double tanh(arg) ! 10: # double arg ! 11: # method: tanh(arg)=sinh(arg)/cosh(arg); if |arg|<0.5 sinh(9 is computed from ! 12: # a polynomial approx otherwise from exp(). ! 13: # Only 1 call to exp() is made. ! 14: # J F Jarvis, August 17, 1978 ! 15: .globl _tanh ! 16: .globl _exp ! 17: .text ! 18: .align 1 ! 19: _tanh: ! 20: .word 0x07c0 ! 21: bispsw $0xe0 ! 22: clrl r10 # sign bit ! 23: movd 4(ap),r6 ! 24: jgeq t1 ! 25: movw $0x8000,r10 ! 26: xorw2 r10,r6 # co|arg| ! 27: t1: cmpd r6,$0d2.0e+1 ! 28: jleq t2 ! 29: movd $0d1.0e+0,r0 ! 30: xorw2 r10,r0 ! 31: ret ! 32: t2: movd r6,-(sp) ! 33: calls $2,_exp ! 34: movd r0,r8 ! 35: divd3 r8,$0d1.0e+0,-(sp) # exp(-|arg|) ! 36: cmpd r6,$0d0.5e+0 ! 37: jgeq t3 ! 38: muld3 r6,r6,r0 # |arg|<0.5, sinh() from poly approx ! 39: polyd r0,$5,pcoef ! 40: muld2 r6,r0 ! 41: muld2 $0d2.0e+0,r0 ! 42: jbr t4 ! 43: t3: subd3 (sp),r8,r0 ! 44: t4: # r0,1 = 2*sinh(|arg|) ! 45: addd3 (sp),r8,r2 # r2,3 = cosh(|arg|); ! 46: divd2 r2,r0 # r0,1 = tanh(|arg|) ! 47: xorw2 r10,r0 # r0,1 = tanh(arg) ! 48: ret ! 49: .data ! 50: .align 2 ! 51: pcoef: ! 52: .double 0d0.251726188251e-7 ! 53: .double 0d0.275569807356154e-5 ! 54: .double 0d0.1984127027907999e-3 ! 55: .double 0d0.833333333307759961e-2 ! 56: .double 0d0.16666666666667212324e+0 ! 57: .double 0d0.99999999999999998116e+0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.