diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2011-10-11 15:58:45 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2011-10-11 15:58:45 +0000 |
commit | 08b04204ba0d1a37309760e7669784f8b8f9c2f6 (patch) | |
tree | d30f2c810c4007e88adb403af5a0402af8455e3d | |
parent | 29115386566152a5abf056ed1adf8c640afd7f02 (diff) | |
download | aports-08b04204ba0d1a37309760e7669784f8b8f9c2f6.tar.bz2 aports-08b04204ba0d1a37309760e7669784f8b8f9c2f6.tar.xz |
main/libc0.9.32: add more fenv funcs for x86_64
-rw-r--r-- | main/libc0.9.32/0001-libm-x86_64-implement-fesetround.patch | 98 | ||||
-rw-r--r-- | main/libc0.9.32/0001-libm-x86_64-implement-some-fenv-functions.patch | 283 | ||||
-rw-r--r-- | main/libc0.9.32/APKBUILD | 6 |
3 files changed, 286 insertions, 101 deletions
diff --git a/main/libc0.9.32/0001-libm-x86_64-implement-fesetround.patch b/main/libc0.9.32/0001-libm-x86_64-implement-fesetround.patch deleted file mode 100644 index 84d6a2e08b..0000000000 --- a/main/libc0.9.32/0001-libm-x86_64-implement-fesetround.patch +++ /dev/null @@ -1,98 +0,0 @@ -From b58032ae6a34afc1887d9a6f3d05891d0d4fdbab Mon Sep 17 00:00:00 2001 -From: Natanael Copa <natanael.copa@gmail.com> -Date: Sun, 28 Nov 2010 12:43:33 +0000 -Subject: [PATCH] libm/x86_64: implement fesetround - -from glibc ---- - libm/x86_64/Makefile.arch | 24 +++++++++++++++++++++++ - libm/x86_64/fesetround.c | 46 +++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 70 insertions(+), 0 deletions(-) - create mode 100644 libm/x86_64/Makefile.arch - create mode 100644 libm/x86_64/fesetround.c - -diff --git a/libm/x86_64/Makefile.arch b/libm/x86_64/Makefile.arch -new file mode 100644 -index 0000000..e1be961 ---- /dev/null -+++ b/libm/x86_64/Makefile.arch -@@ -0,0 +1,24 @@ -+# Makefile for uClibc -+# -+# Copyright (C) 2000-2008 Erik Andersen <andersen@uclibc.org> -+# -+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. -+# -+# The routines included in this math library are derived from -+# glibc's libm. -+# -+ -+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/x86_64/fesetround.c b/libm/x86_64/fesetround.c -new file mode 100644 -index 0000000..3d2ef4c ---- /dev/null -+++ b/libm/x86_64/fesetround.c -@@ -0,0 +1,46 @@ -+/* Set current rounding direction. -+ Copyright (C) 2001, 2005 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include <fenv.h> -+ -+int -+fesetround (int round) -+{ -+ unsigned short int cw; -+ int mxcsr; -+ -+ if ((round & ~0xc00) != 0) -+ /* ROUND is no valid rounding mode. */ -+ return 1; -+ -+ /* First set the x87 FPU. */ -+ __asm__ ("fnstcw %0" : "=m" (*&cw)); -+ cw &= ~0xc00; -+ cw |= round; -+ __asm__ ("fldcw %0" : : "m" (*&cw)); -+ -+ /* And now the MSCSR register for SSE, the precision is at different bit -+ positions in the different units, we need to shift it 3 bits. */ -+ __asm__ ("stmxcsr %0" : "=m" (*&mxcsr)); -+ mxcsr &= ~ 0x6000; -+ mxcsr |= round << 3; -+ __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr)); -+ -+ return 0; -+} --- -1.7.3.2 - diff --git a/main/libc0.9.32/0001-libm-x86_64-implement-some-fenv-functions.patch b/main/libc0.9.32/0001-libm-x86_64-implement-some-fenv-functions.patch new file mode 100644 index 0000000000..5d42413722 --- /dev/null +++ b/main/libc0.9.32/0001-libm-x86_64-implement-some-fenv-functions.patch @@ -0,0 +1,283 @@ +From 5db70d560df0ab36751045dcb364c3f9eebdc2d1 Mon Sep 17 00:00:00 2001 +From: Natanael Copa <natanael.copa@gmail.com> +Date: Sun, 28 Nov 2010 12:43:33 +0000 +Subject: [PATCH] libm/x86_64: implement some fenv functions + +from glibc +--- + libm/x86_64/Makefile.arch | 24 ++++++++++++++++++++ + libm/x86_64/fclrexcpt.c | 52 ++++++++++++++++++++++++++++++++++++++++++++ + libm/x86_64/fegetexcept.c | 32 +++++++++++++++++++++++++++ + libm/x86_64/fesetround.c | 46 ++++++++++++++++++++++++++++++++++++++ + libm/x86_64/fgetexcptflg.c | 36 ++++++++++++++++++++++++++++++ + libm/x86_64/ftestexcept.c | 33 +++++++++++++++++++++++++++ + 6 files changed, 223 insertions(+), 0 deletions(-) + create mode 100644 libm/x86_64/Makefile.arch + create mode 100644 libm/x86_64/fclrexcpt.c + create mode 100644 libm/x86_64/fegetexcept.c + create mode 100644 libm/x86_64/fesetround.c + create mode 100644 libm/x86_64/fgetexcptflg.c + create mode 100644 libm/x86_64/ftestexcept.c + +diff --git a/libm/x86_64/Makefile.arch b/libm/x86_64/Makefile.arch +new file mode 100644 +index 0000000..e1be961 +--- /dev/null ++++ b/libm/x86_64/Makefile.arch +@@ -0,0 +1,24 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2008 Erik Andersen <andersen@uclibc.org> ++# ++# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++# ++# The routines included in this math library are derived from ++# glibc's libm. ++# ++ ++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/x86_64/fclrexcpt.c b/libm/x86_64/fclrexcpt.c +new file mode 100644 +index 0000000..4fc3bfb +--- /dev/null ++++ b/libm/x86_64/fclrexcpt.c +@@ -0,0 +1,52 @@ ++/* Clear given exceptions in current floating-point environment. ++ Copyright (C) 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <fenv.h> ++ ++int ++feclearexcept (int excepts) ++{ ++ fenv_t temp; ++ unsigned int mxcsr; ++ ++ /* Mask out unsupported bits/exceptions. */ ++ excepts &= FE_ALL_EXCEPT; ++ ++ /* Bah, we have to clear selected exceptions. Since there is no ++ `fldsw' instruction we have to do it the hard way. */ ++ __asm__ ("fnstenv %0" : "=m" (*&temp)); ++ ++ /* Clear the relevant bits. */ ++ temp.__status_word &= excepts ^ FE_ALL_EXCEPT; ++ ++ /* Put the new data in effect. */ ++ __asm__ ("fldenv %0" : : "m" (*&temp)); ++ ++ /* And the same procedure for SSE. */ ++ __asm__ ("stmxcsr %0" : "=m" (*&mxcsr)); ++ ++ /* Clear the relevant bits. */ ++ mxcsr &= ~excepts; ++ ++ /* And put them into effect. */ ++ __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr)); ++ ++ /* Success. */ ++ return 0; ++} +diff --git a/libm/x86_64/fegetexcept.c b/libm/x86_64/fegetexcept.c +new file mode 100644 +index 0000000..04df4b6 +--- /dev/null ++++ b/libm/x86_64/fegetexcept.c +@@ -0,0 +1,32 @@ ++/* Get enabled floating-point exceptions. ++ Copyright (C) 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Andreas Jaeger <aj@suse.de>, 2001. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <fenv.h> ++ ++int ++fegetexcept (void) ++{ ++ unsigned short int exc; ++ ++ /* Get the current control word. */ ++ __asm__ ("fstcw %0" : "=m" (*&exc)); ++ ++ return (~exc) & FE_ALL_EXCEPT; ++} +diff --git a/libm/x86_64/fesetround.c b/libm/x86_64/fesetround.c +new file mode 100644 +index 0000000..3d2ef4c +--- /dev/null ++++ b/libm/x86_64/fesetround.c +@@ -0,0 +1,46 @@ ++/* Set current rounding direction. ++ Copyright (C) 2001, 2005 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <fenv.h> ++ ++int ++fesetround (int round) ++{ ++ unsigned short int cw; ++ int mxcsr; ++ ++ if ((round & ~0xc00) != 0) ++ /* ROUND is no valid rounding mode. */ ++ return 1; ++ ++ /* First set the x87 FPU. */ ++ __asm__ ("fnstcw %0" : "=m" (*&cw)); ++ cw &= ~0xc00; ++ cw |= round; ++ __asm__ ("fldcw %0" : : "m" (*&cw)); ++ ++ /* And now the MSCSR register for SSE, the precision is at different bit ++ positions in the different units, we need to shift it 3 bits. */ ++ __asm__ ("stmxcsr %0" : "=m" (*&mxcsr)); ++ mxcsr &= ~ 0x6000; ++ mxcsr |= round << 3; ++ __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr)); ++ ++ return 0; ++} +diff --git a/libm/x86_64/fgetexcptflg.c b/libm/x86_64/fgetexcptflg.c +new file mode 100644 +index 0000000..f0681dc +--- /dev/null ++++ b/libm/x86_64/fgetexcptflg.c +@@ -0,0 +1,36 @@ ++/* Store current representation for exceptions. ++ Copyright (C) 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <fenv.h> ++ ++int ++fegetexceptflag (fexcept_t *flagp, int excepts) ++{ ++ fexcept_t temp; ++ unsigned int mxscr; ++ ++ /* Get the current exceptions for the x87 FPU and SSE unit. */ ++ __asm__ ("fnstsw %0\n" ++ "stmxcsr %1" : "=m" (*&temp), "=m" (*&mxscr)); ++ ++ *flagp = (temp | mxscr) & FE_ALL_EXCEPT & excepts; ++ ++ /* Success. */ ++ return 0; ++} +diff --git a/libm/x86_64/ftestexcept.c b/libm/x86_64/ftestexcept.c +new file mode 100644 +index 0000000..091c251 +--- /dev/null ++++ b/libm/x86_64/ftestexcept.c +@@ -0,0 +1,33 @@ ++/* Test exception in current environment. ++ Copyright (C) 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <fenv.h> ++ ++int ++fetestexcept (int excepts) ++{ ++ int temp; ++ unsigned int mxscr; ++ ++ /* Get current exceptions. */ ++ __asm__ ("fnstsw %0\n" ++ "stmxcsr %1" : "=m" (*&temp), "=m" (*&mxscr)); ++ ++ return (temp | mxscr) & excepts & FE_ALL_EXCEPT; ++} +-- +1.7.7 + diff --git a/main/libc0.9.32/APKBUILD b/main/libc0.9.32/APKBUILD index 13010323ca..acb107f370 100644 --- a/main/libc0.9.32/APKBUILD +++ b/main/libc0.9.32/APKBUILD @@ -4,7 +4,7 @@ pkgname=libc$_abiver _gitver= pkgver=0.9.32 _ver=${pkgver/_/-} -pkgrel=2 +pkgrel=3 pkgdesc="C library for developing embedded Linux systems" url=http://uclibc.org license="LGPL-2" @@ -23,7 +23,7 @@ source="http://uclibc.org/downloads/uClibc-${_ver}.tar.bz2 compat-stack-guard.patch uclibc-resolv-cname-fix.diff 0001-resolv-fix-resolver-to-return-TRY_AGAIN-on-timeout.patch - 0001-libm-x86_64-implement-fesetround.patch + 0001-libm-x86_64-implement-some-fenv-functions.patch 0001-ldso-limited-support-for-ORIGIN-in-rpath.patch 0002-stdlib-fix-arc4random-return-type-to-u_int32_t.patch 0003-ldso-support-RTLD_NOLOAD.patch @@ -131,7 +131,7 @@ md5sums="cfcb6c25d8ebe12817499d8749ee8ae1 uClibc-0.9.32.tar.bz2 a9bfb77ea7dc5fb9abf4d4b19201c614 compat-stack-guard.patch 5d6e3e382b66f59cfd7242a4fe453f98 uclibc-resolv-cname-fix.diff 08f31006426a0fca561f262f36bcfb01 0001-resolv-fix-resolver-to-return-TRY_AGAIN-on-timeout.patch -e0c901502602f7e9e002d910d0f32ab9 0001-libm-x86_64-implement-fesetround.patch +68913d6f096fd647e8bdb7ef182c05a4 0001-libm-x86_64-implement-some-fenv-functions.patch bc164e262c5feab55c800780704fa71c 0001-ldso-limited-support-for-ORIGIN-in-rpath.patch b4fb68ad3d0e8331b1b40c30eb21dfdc 0002-stdlib-fix-arc4random-return-type-to-u_int32_t.patch 6147efd2eee5af5e734896823c2d1a3d 0003-ldso-support-RTLD_NOLOAD.patch |