Annotation of coherent/b/lib/libm/i387/tanh87.s, revision 1.1

1.1     ! root        1: //////////
        !             2: / /usr/src/libm/i387/tanh87.s
        !             3: / i387 mathematics library
        !             4: / tanh(d)
        !             5: //////////
        !             6: 
        !             7: RASIZE =       4
        !             8: 
        !             9:        .globl  tanh
        !            10:        .globl  _exp
        !            11:        .globl  _tstcc
        !            12: 
        !            13: //////////
        !            14: / double
        !            15: / tanh(d)
        !            16: / double d;
        !            17: /
        !            18: / tanh(d) = (exp(d) - exp(-d)) / (exp(d) + exp(-d))
        !            19: /        = (1 - exp(-2 * d)) / (1 + exp(-2 * d))       (used for d > 0)
        !            20: /        = - (1 - exp(2 * d)) / (1 + exp(2 * d))       (used for d < 0)
        !            21: //////////
        !            22: 
        !            23: d      =       RASIZE          / arg offset
        !            24: 
        !            25: tanh:
        !            26:        fldl    d(%esp)         / Load argument d.
        !            27: 
        !            28:        call    _tstcc          / Check sign of d.
        !            29:        je      ?1              / d is zero, just return it.
        !            30:        jb      ?0              / Jump if negative.
        !            31:        fchs                    / Change positive to negative.
        !            32: 
        !            33: ?0:
        !            34:        pushf                   / Save the flags.
        !            35:        fadd    %st, %st        / 2 * d
        !            36:        call    _exp            / exp(2 * d)
        !            37:        fld1                    / 1, exp(2 * d)
        !            38:        fsub    %st, %st(1)     / 1 - exp(2 * d), exp(2 * d)
        !            39:        fld1                    / 1, 1 - exp(2 * d), exp(2 * d)
        !            40:        faddp   %st(2), %st     / 1 - exp(2 * d), 1 + exp(2 * d)
        !            41:        fdiv                    / (1 -  exp(2 * d)) / (1 + exp(2 * d))
        !            42:        popf                    / Restore the flags.
        !            43:        ja      ?1              / d was positive, done.
        !            44:        fchs                    / d was negative, flip result sign.
        !            45: 
        !            46: ?1:
        !            47:        ret
        !            48: 
        !            49: / end of tanh87.s

unix.superglobalmegacorp.com

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