Annotation of coherent/b/lib/libm/i387/tanh87.s, revision 1.1.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.