summaryrefslogtreecommitdiff
path: root/libm/sh
diff options
context:
space:
mode:
authorCarmelo Amoroso <carmelo.amoroso@st.com>2011-01-03 14:37:49 +0100
committerCarmelo Amoroso <carmelo.amoroso@st.com>2011-01-03 14:44:33 +0100
commit8100a075b7dd7471562decb1860571a335d68b0d (patch)
tree331eebca0cbafd27aa691da4bc5fa281abb61d3d /libm/sh
parente018b8ba1a0110120429de34366459af0771abe2 (diff)
parent4ac7ad3543dd6d7780e71af80fa5c45414451719 (diff)
Merge commit 'origin/master' into prelink
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Diffstat (limited to 'libm/sh')
-rw-r--r--libm/sh/Makefile.arch21
-rw-r--r--libm/sh/sh4/Makefile.arch24
-rw-r--r--libm/sh/sh4/feholdexcpt.c (renamed from libm/sh/feholdexcpt.c)0
-rw-r--r--libm/sh/sh4/fesetenv.c (renamed from libm/sh/fesetenv.c)0
-rw-r--r--libm/sh/sh4/s_lrintf.S52
-rw-r--r--libm/sh/sh4/s_lroundf.S39
6 files changed, 115 insertions, 21 deletions
diff --git a/libm/sh/Makefile.arch b/libm/sh/Makefile.arch
deleted file mode 100644
index 6425b3ede..000000000
--- a/libm/sh/Makefile.arch
+++ /dev/null
@@ -1,21 +0,0 @@
-# Makefile for uClibc
-#
-# Copyright (c) 2007 STMicroelectronics Ltd
-#
-# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
-#
-
-ifeq ($(UCLIBC_HAS_FENV),y)
-libm_ARCH_SRC:=$(wildcard $(libm_ARCH_DIR)/*.c)
-libm_ARCH_OBJ:=$(patsubst $(libm_ARCH_DIR)/%.c,$(libm_ARCH_OUT)/%.o,$(libm_ARCH_SRC))
-endif
-
-libm_ARCH_OBJS:=$(libm_ARCH_OBJ)
-
-ifeq ($(DOPIC),y)
-libm-a-y+=$(libm_ARCH_OBJS:.o=.os)
-else
-libm-a-y+=$(libm_ARCH_OBJS)
-endif
-libm-so-y+=$(libm_ARCH_OBJS:.o=.os)
-
diff --git a/libm/sh/sh4/Makefile.arch b/libm/sh/sh4/Makefile.arch
new file mode 100644
index 000000000..e38e99c15
--- /dev/null
+++ b/libm/sh/sh4/Makefile.arch
@@ -0,0 +1,24 @@
+# Makefile for uClibc
+#
+# Copyright (c) 2007, 2010 STMicroelectronics Ltd
+#
+# Author(s): Carmelo Amoroso <carmelo.amoroso@st.com>
+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+#
+
+ifeq ($(UCLIBC_HAS_FENV),y)
+libm_ARCH_CSRC:=$(wildcard $(libm_SUBARCH_DIR)/*.c)
+libm_ARCH_COBJ:=$(patsubst $(libm_SUBARCH_DIR)/%.c,$(libm_SUBARCH_OUT)/%.o,$(libm_ARCH_SRC))
+libm_ARCH_SSRC:=$(wildcard $(libm_SUBARCH_DIR)/*.S)
+libm_ARCH_SOBJ:=$(patsubst $(libm_SUBARCH_DIR)/%.S,$(libm_SUBARCH_OUT)/%.o,$(libm_ARCH_SSRC))
+endif
+
+libm_ARCH_OBJS:=$(libm_ARCH_COBJ) $(libm_ARCH_SOBJ)
+
+ifeq ($(DOPIC),y)
+libm-a-y+=$(libm_ARCH_OBJS:.o=.os)
+else
+libm-a-y+=$(libm_ARCH_OBJS)
+endif
+libm-so-y+=$(libm_ARCH_OBJS:.o=.os)
+
diff --git a/libm/sh/feholdexcpt.c b/libm/sh/sh4/feholdexcpt.c
index 70b51e8dd..70b51e8dd 100644
--- a/libm/sh/feholdexcpt.c
+++ b/libm/sh/sh4/feholdexcpt.c
diff --git a/libm/sh/fesetenv.c b/libm/sh/sh4/fesetenv.c
index c5cfc1d51..c5cfc1d51 100644
--- a/libm/sh/fesetenv.c
+++ b/libm/sh/sh4/fesetenv.c
diff --git a/libm/sh/sh4/s_lrintf.S b/libm/sh/sh4/s_lrintf.S
new file mode 100644
index 000000000..d8cec329c
--- /dev/null
+++ b/libm/sh/sh4/s_lrintf.S
@@ -0,0 +1,52 @@
+/* Round argument to nearest integer value. SH4 version.
+ * According to ISO/IEC 9899:1999. This version doesn't handle range error.
+ * If arg is not finite or if the result cannot be represented into a long,
+ * return an unspecified value. No exception raised.
+ *
+ * Copyright (C) 2010 STMicroelectronics Ltd.
+ *
+ * Author: Christian Bruel <christian.bruel@st.com>
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+#include <sysdep.h>
+
+ENTRY(lrintf)
+ mov #0,r0
+ sts fpscr,r3
+ lds r0,fpscr
+ flds fr5,fpul
+ mov.l LOCAL(mask),r1
+ sts fpul,r2
+ and r2,r1
+ mov.l LOCAL(midway),r2
+ or r1,r2
+ lds r2,fpul
+ fsts fpul,fr2
+ fadd fr2,fr5
+ ftrc fr5,fpul
+ sts fpul,r0
+ float fpul,fr2
+ fcmp/eq fr5,fr2
+ bf/s 0f
+ mov #1,r2
+ tst r1,r1
+ and r0,r2
+ movt r1
+ shal r1
+ tst r2,r2
+ add #-1,r1
+ bt 0f
+ sub r1,r0
+0:
+ rts
+ lds r3,fpscr
+
+ .align 2
+LOCAL(mask):
+ .long 0x80000000
+LOCAL(midway):
+ .long 1056964608
+
+END(lrintf)
diff --git a/libm/sh/sh4/s_lroundf.S b/libm/sh/sh4/s_lroundf.S
new file mode 100644
index 000000000..fda3a4b91
--- /dev/null
+++ b/libm/sh/sh4/s_lroundf.S
@@ -0,0 +1,39 @@
+/* Round argument toward 0. SH4 version.
+ * According to ISO/IEC 9899:1999. This version doesn't handle range error.
+ * If arg is not finite or if the result cannot be represented into a long,
+ * return an unspecified value. No exception raised.
+ *
+ * Copyright (C) 2010 STMicroelectronics Ltd.
+ *
+ * Author: Christian Bruel <christian.bruel@st.com>
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+#include <sysdep.h>
+
+ENTRY(lroundf)
+ mov #0,r0
+ sts fpscr,r3
+ lds r0,fpscr
+ flds fr5,fpul
+ mov.l LOCAL(mask),r1
+ sts fpul,r2
+ and r2,r1
+ mov.l LOCAL(midway),r2
+ or r1,r2
+ lds r2,fpul
+ fsts fpul,fr2
+ fadd fr2,fr5
+ ftrc fr5,fpul
+ sts fpul,r0
+ rts
+ lds r3,fpscr
+
+ .align 2
+LOCAL(mask):
+ .long 0x80000000
+LOCAL(midway):
+ .long 1056964608
+
+END(lroundf)