Annotation of researchv10dc/libnm/tanh.s, revision 1.1.1.1

1.1       root        1: # double tanh(arg)
                      2: # double arg
                      3: # method: tanh(arg)=sinh(arg)/cosh(arg); if |arg|<0.5 sinh(9 is computed from
                      4: # a polynomial approx otherwise from exp().
                      5: # Only 1 call to exp() is made.
                      6: # J F Jarvis, August 17, 1978
                      7: .globl _tanh
                      8: .globl _exp
                      9: .text
                     10: .align 1
                     11: _tanh:
                     12:        .word   0x7c0
                     13:        clrl    r10     # sign bit
                     14:        movd    4(ap),r6
                     15:        jgeq    t1
                     16:        movw    $0x8000,r10
                     17:        xorw2   r10,r6  # co|arg|
                     18: t1:    cmpd    r6,$0d2.0e+1
                     19:        jleq    t2
                     20:        movd    $0d1.0e+0,r0
                     21:        xorw2   r10,r0
                     22:        ret
                     23: t2:    movd    r6,-(sp)
                     24:        calls   $2,_exp
                     25:        movd    r0,r8
                     26:        divd3   r8,$0d1.0e+0,-(sp)      # exp(-|arg|)
                     27:        cmpd    r6,$0d0.5e+0
                     28:        jgeq    t3
                     29:        muld3   r6,r6,r0        # |arg|<0.5, sinh() from poly approx
                     30:        polyd   r0,$5,pcoef
                     31:        muld2   r6,r0
                     32:        muld2   $0d2.0e+0,r0    
                     33:        jbr     t4
                     34: t3:    subd3   (sp),r8,r0
                     35: t4:                            # r0,1 = 2*sinh(|arg|)
                     36:        addd3   (sp),r8,r2      # r2,3 = cosh(|arg|);
                     37:        divd2   r2,r0   # r0,1 = tanh(|arg|)
                     38:        xorw2   r10,r0  # r0,1 = tanh(arg)
                     39:        ret
                     40: .data
                     41: .align 2
                     42: pcoef:
                     43:        .double 0d0.251726188251e-7
                     44:        .double 0d0.275569807356154e-5
                     45:        .double 0d0.1984127027907999e-3
                     46:        .double 0d0.833333333307759961e-2
                     47:        .double 0d0.16666666666667212324e+0
                     48:        .double 0d0.99999999999999998116e+0

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.