|
|
1.1 ! root 1: ////////// ! 2: / libm 8087 ! 3: / tanh(d) ! 4: ////////// ! 5: ! 6: #include "larges.h" ! 7: #include "ifno8087.h" ! 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: ifno8087(_tanh_) ! 27: mov bx, sp ! 28: fdld Pss d(bx) / Load argument d. ! 29: ! 30: Gcall tstcc / Check sign of d. ! 31: je 1f / d is zero, just return it. ! 32: jb 0f / Jump if negative. ! 33: fchs / Change positive to negative. ! 34: ! 35: 0: pushf / Save the flags. ! 36: fadd st, st / 2 * d ! 37: Gcall exp / exp(2 * d) ! 38: fld1 / 1, exp(2 * d) ! 39: fsub st, st1 / 1 - exp(2 * d), exp(2 * d) ! 40: fld1 / 1, 1 - exp(2 * d), exp(2 * d) ! 41: faddp st2, st / 1 - exp(2 * d), 1 + exp(2 * d) ! 42: fdivr / (1 - exp(2 * d)) / (1 + exp(2 * d)) ! 43: popf / Restore the flags. ! 44: ja 1f / d was positive, done. ! 45: fchs / d was negative, flip result sign. ! 46: ! 47: 1: Gret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.