summaryrefslogtreecommitdiff
path: root/lib/libm
diff options
context:
space:
mode:
authordrochner <drochner@NetBSD.org>2004-07-01 17:30:48 +0000
committerdrochner <drochner@NetBSD.org>2004-07-01 17:30:48 +0000
commitaf7cf00a5a3fef576bacfeaa85b215fd6d67447c (patch)
tree1156f34c198f2c74d3e718f5f0682092022eb9d1 /lib/libm
parent9768ef916da1c584ceb6e9e0d7b81c64cdcc49ec (diff)
provide an assembler implementation of lrint() for i386 and amd64
Diffstat (limited to 'lib/libm')
-rw-r--r--lib/libm/arch/i387/Makefile5
-rw-r--r--lib/libm/arch/i387/lrint.S18
2 files changed, 21 insertions, 2 deletions
diff --git a/lib/libm/arch/i387/Makefile b/lib/libm/arch/i387/Makefile
index 9068bcd197b..93aaebad906 100644
--- a/lib/libm/arch/i387/Makefile
+++ b/lib/libm/arch/i387/Makefile
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.4 2002/08/19 14:55:16 lukem Exp $
+# $NetBSD: Makefile,v 1.5 2004/07/01 17:30:48 drochner Exp $
#
NOLINT= # defined
@@ -13,6 +13,7 @@ SRCS=e_acos.S e_asin.S e_atan2.S e_exp.S e_expf.S e_fmod.S e_log.S \
s_finite.S s_finitef.S s_floor.S s_floorf.S s_ilogb.S s_ilogbf.S \
s_log1p.S s_log1pf.S s_logb.S s_logbf.S s_rint.S s_rintf.S \
s_scalbn.S s_scalbnf.S s_significand.S s_significandf.S s_sin.S \
- s_sinf.S s_tan.S s_tanf.S
+ s_sinf.S s_tan.S s_tanf.S \
+ lrint.S
.include <bsd.lib.mk>
diff --git a/lib/libm/arch/i387/lrint.S b/lib/libm/arch/i387/lrint.S
new file mode 100644
index 00000000000..9f3ba1d50fa
--- /dev/null
+++ b/lib/libm/arch/i387/lrint.S
@@ -0,0 +1,18 @@
+/* $NetBSD: lrint.S,v 1.1 2004/07/01 17:30:48 drochner Exp $ */
+
+#include <machine/asm.h>
+
+ENTRY(lrint)
+#ifdef __i386__
+ pushl %ebp
+ movl %esp,%ebp
+ subl $4,%esp
+ fldl 8(%ebp)
+ fistpl (%esp)
+ movl (%esp),%eax
+ leave
+ ret
+#else
+ cvtsd2siq %xmm0,%rax
+ ret
+#endif