diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/fp32/tran/mips/tanhm.s | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/fp32/tran/mips/tanhm.s')
-rw-r--r-- | private/fp32/tran/mips/tanhm.s | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/private/fp32/tran/mips/tanhm.s b/private/fp32/tran/mips/tanhm.s new file mode 100644 index 000000000..0b961b88c --- /dev/null +++ b/private/fp32/tran/mips/tanhm.s @@ -0,0 +1,111 @@ +/* + * |-----------------------------------------------------------| + * | Copyright (c) 1991, 1990 MIPS Computer Systems, Inc. | + * | All Rights Reserved | + * |-----------------------------------------------------------| + * | Restricted Rights Legend | + * | Use, duplication, or disclosure by the Government is | + * | subject to restrictions as set forth in | + * | subparagraph (c)(1)(ii) of the Rights in Technical | + * | Data and Computer Software Clause of DFARS 252.227-7013. | + * | MIPS Computer Systems, Inc. | + * | 950 DeGuigne Avenue | + * | Sunnyvale, California 94088-3650, USA | + * |-----------------------------------------------------------| + */ +/* $Header: tanh.s,v 3000.5.1.3 92/02/03 16:50:49 zaineb Exp $ */ +/* Algorithm from Cody and Waite. */ + +#include <kxmips.h> + +#define ln3o2 0.54930614433405484570 +#define eps 3.72529029846191406250e-9 +#define p2 -0.96437492777225469787e+0 +#define p1 -0.99225929672236083313e+2 +#define p0 -0.16134119023996228053e+4 +#define q2 +0.11274474380534949335e+3 +#define q1 +0.22337720718962312926e+4 +#define q0 +0.48402357071988688686e+4 +#define xbig 19.061547465398498 +#define FSIZE 16 + +.text + +.globl tanh +.ent tanh +tanh: + .frame sp, FSIZE, ra + subu sp, FSIZE + sw ra, FSIZE-4(sp) + .prologue 1 + li.d $f8, ln3o2 + abs.d $f0, $f12 + c.olt.d $f8, $f0 + li.d $f8, eps + bc1t calltanh2 + c.ult.d $f0, $f8 + bc1t tanh1 + mul.d $f2, $f0, $f0 + li.d $f10, p2 + li.d $f8, q2 + mul.d $f4, $f2, $f10 + add.d $f6, $f2, $f8 + li.d $f10, p1 + mul.d $f6, $f2 + add.d $f4, $f10 + li.d $f8, q1 + mul.d $f4, $f2 + add.d $f6, $f8 + li.d $f10, p0 + mul.d $f6, $f2 + add.d $f4, $f10 + li.d $f8, q0 + mul.d $f4, $f2 + add.d $f6, $f8 + div.d $f4, $f6 + mul.d $f4, $f12 + add.d $f0, $f4, $f12 + j ret + +tanh1: + mov.d $f0, $f12 + j ret +calltanh2: + jal tanh2 + j ret +.end tanh + +.ent tanh2 +tanh2: + .frame sp, FSIZE, ra + subu sp, FSIZE + sw ra, FSIZE-4(sp) + .prologue 1 + li.d $f10, xbig + swc1 $f13, 20(sp) + c.ole.d $f0, $f10 + add.d $f12, $f0, $f0 + bc1f tanh4 + jal exp + li.d $f10, 1.0 + li.d $f8, 2.0 + add.d $f0, $f10 + div.d $f0, $f8, $f0 + lw t0, 20(sp) + bltz t0, 1f + sub.d $f0, $f10, $f0 + j ret +1: sub.d $f0, $f0, $f10 + j ret + +tanh4: + lw t0, 20(sp) + li.d $f0, 1.0 + bltz t0, 1f + j ret1 +1: neg.d $f0 + j ret1 +ret: lw ra, FSIZE-4(sp) +ret1: addu sp, FSIZE + j ra +.end tanh2 |