Annotation of researchv10dc/libnm/tanh.s, revision 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.