|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.