aboutsummaryrefslogtreecommitdiffstats
path: root/main/libc0.9.32/0005-libm-x86_64-implement-some-fenv-functions.patch
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2011-12-23 16:30:18 +0100
committerNatanael Copa <ncopa@alpinelinux.org>2011-12-23 16:33:50 +0100
commit293f29e8c45ca0fcb064107e275a477ad1913106 (patch)
treea79d2b2b93af581c861488f2bca773e4751288f0 /main/libc0.9.32/0005-libm-x86_64-implement-some-fenv-functions.patch
parent453d9efbeb9055b3762960fb09894a04ded1495f (diff)
downloadaports-293f29e8c45ca0fcb064107e275a477ad1913106.tar.bz2
aports-293f29e8c45ca0fcb064107e275a477ad1913106.tar.xz
main/libc0.9.32: reorganize patches
We keep track of our patches in git now: http://git.alpinelinux.org/cgit/uClibc-alpine This is so its easier to keep track of upstream and make sure that our patches are upstreamed. we also bump pkgrel so we make sure we get the patches tested properly
Diffstat (limited to 'main/libc0.9.32/0005-libm-x86_64-implement-some-fenv-functions.patch')
-rw-r--r--main/libc0.9.32/0005-libm-x86_64-implement-some-fenv-functions.patch288
1 files changed, 288 insertions, 0 deletions
diff --git a/main/libc0.9.32/0005-libm-x86_64-implement-some-fenv-functions.patch b/main/libc0.9.32/0005-libm-x86_64-implement-some-fenv-functions.patch
new file mode 100644
index 0000000000..9a47267b8e
--- /dev/null
+++ b/main/libc0.9.32/0005-libm-x86_64-implement-some-fenv-functions.patch
@@ -0,0 +1,288 @@
+From 6864dfeef979985f9f173b842034183476b95583 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
+
+Posted to uclibc:
+http://lists.busybox.net/pipermail/uclibc/2010-December/044523.html
+
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+---
+ 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.8
+