summaryrefslogtreecommitdiffstats
path: root/private/fp32/tran/mips/tanhm.s
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/fp32/tran/mips/tanhm.s
downloadNT4.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.s111
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