aboutsummaryrefslogtreecommitdiffstats
path: root/toolchain/uClibc/patches-0.9.33/450-powerpc_copysignl.patch
diff options
context:
space:
mode:
authorImre Kaloz <kaloz@openwrt.org>2012-02-08 15:45:44 +0000
committerImre Kaloz <kaloz@openwrt.org>2012-02-08 15:45:44 +0000
commit9bf867b53132f595cae90cc201798bd1f77dfb64 (patch)
treeb291164d46227f77bcabe857e50f92a27f34e4b7 /toolchain/uClibc/patches-0.9.33/450-powerpc_copysignl.patch
parent75a929c65e7573f3c193f8f93937115cc707ccb6 (diff)
downloadupstream-9bf867b53132f595cae90cc201798bd1f77dfb64.tar.gz
upstream-9bf867b53132f595cae90cc201798bd1f77dfb64.tar.bz2
upstream-9bf867b53132f595cae90cc201798bd1f77dfb64.zip
add 0.9.33
SVN-Revision: 30374
Diffstat (limited to 'toolchain/uClibc/patches-0.9.33/450-powerpc_copysignl.patch')
-rw-r--r--toolchain/uClibc/patches-0.9.33/450-powerpc_copysignl.patch103
1 files changed, 103 insertions, 0 deletions
diff --git a/toolchain/uClibc/patches-0.9.33/450-powerpc_copysignl.patch b/toolchain/uClibc/patches-0.9.33/450-powerpc_copysignl.patch
new file mode 100644
index 0000000000..ad8d6824bb
--- /dev/null
+++ b/toolchain/uClibc/patches-0.9.33/450-powerpc_copysignl.patch
@@ -0,0 +1,103 @@
+--- a/libc/sysdeps/linux/powerpc/Makefile.arch
++++ b/libc/sysdeps/linux/powerpc/Makefile.arch
+@@ -5,7 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := __syscall_error.c pread_write.c ioctl.c
++CSRC := __syscall_error.c pread_write.c ioctl.c copysignl.c
+
+ ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),y)
+ CSRC += posix_fadvise.c posix_fadvise64.c
+--- /dev/null
++++ b/libc/sysdeps/linux/powerpc/copysignl.c
+@@ -0,0 +1,89 @@
++/* s_copysignl.c -- long double version of s_copysign.c.
++ * Conversion to long double by Ulrich Drepper,
++ * Cygnus Support, drepper@cygnus.com.
++ */
++
++/*
++ * ====================================================
++ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
++ *
++ * Developed at SunPro, a Sun Microsystems, Inc. business.
++ * Permission to use, copy, modify, and distribute this
++ * software is freely granted, provided that this notice
++ * is preserved.
++ * ====================================================
++ */
++
++/*
++ * copysignl(long double x, long double y)
++ * copysignl(x,y) returns a value with the magnitude of x and
++ * with the sign bit of y.
++ */
++
++#include <endian.h>
++#include <stdint.h>
++
++#if __FLOAT_WORD_ORDER == BIG_ENDIAN
++
++typedef union
++{
++ long double value;
++ struct
++ {
++ int sign_exponent:16;
++ unsigned int empty:16;
++ uint32_t msw;
++ uint32_t lsw;
++ } parts;
++} ieee_long_double_shape_type;
++
++#endif
++
++#if __FLOAT_WORD_ORDER == LITTLE_ENDIAN
++
++typedef union
++{
++ long double value;
++ struct
++ {
++ uint32_t lsw;
++ uint32_t msw;
++ int sign_exponent:16;
++ unsigned int empty:16;
++ } parts;
++} ieee_long_double_shape_type;
++
++#endif
++
++/* Get int from the exponent of a long double. */
++
++#define GET_LDOUBLE_EXP(exp,d) \
++do { \
++ ieee_long_double_shape_type ge_u; \
++ ge_u.value = (d); \
++ (exp) = ge_u.parts.sign_exponent; \
++} while (0)
++
++/* Set exponent of a long double from an int. */
++
++#define SET_LDOUBLE_EXP(d,exp) \
++do { \
++ ieee_long_double_shape_type se_u; \
++ se_u.value = (d); \
++ se_u.parts.sign_exponent = (exp); \
++ (d) = se_u.value; \
++} while (0)
++
++long double copysignl(long double x, long double y);
++libc_hidden_proto(copysignl);
++
++long double copysignl(long double x, long double y)
++{
++ uint32_t es1,es2;
++ GET_LDOUBLE_EXP(es1,x);
++ GET_LDOUBLE_EXP(es2,y);
++ SET_LDOUBLE_EXP(x,(es1&0x7fff)|(es2&0x8000));
++ return x;
++}
++
++libc_hidden_def(copysignl);