summaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/generic/bits/errno.h1
-rw-r--r--sysdeps/generic/setenv.c9
-rw-r--r--sysdeps/i386/i586/memcpy.S108
-rw-r--r--sysdeps/i386/i586/mempcpy.S4
-rw-r--r--sysdeps/i386/i586/memset.S2
-rw-r--r--sysdeps/libm-ieee754/e_asin.c21
-rw-r--r--sysdeps/libm-ieee754/e_asinf.c17
-rw-r--r--sysdeps/libm-ieee754/e_atan2l.c4
-rw-r--r--sysdeps/libm-ieee754/e_remainderl.c4
-rw-r--r--sysdeps/libm-ieee754/s_ceill.c4
-rw-r--r--sysdeps/libm-ieee754/s_floorl.c3
-rw-r--r--sysdeps/libm-ieee754/s_llrint.c14
-rw-r--r--sysdeps/libm-ieee754/s_llrintf.c2
-rw-r--r--sysdeps/libm-ieee754/s_llrintl.c4
-rw-r--r--sysdeps/libm-ieee754/s_llround.c9
-rw-r--r--sysdeps/libm-ieee754/s_llroundf.c4
-rw-r--r--sysdeps/libm-ieee754/s_llroundl.c9
-rw-r--r--sysdeps/libm-ieee754/s_lrint.c4
-rw-r--r--sysdeps/libm-ieee754/s_lrintf.c2
-rw-r--r--sysdeps/libm-ieee754/s_lrintl.c2
-rw-r--r--sysdeps/libm-ieee754/s_lround.c2
-rw-r--r--sysdeps/libm-ieee754/s_lroundf.c2
-rw-r--r--sysdeps/libm-ieee754/s_lroundl.c2
-rw-r--r--sysdeps/libm-ieee754/s_scalblnl.c2
-rw-r--r--sysdeps/libm-ieee754/s_scalbnl.c2
-rw-r--r--sysdeps/libm-ieee754/s_sincosl.c2
-rw-r--r--sysdeps/libm-ieee754/s_tanl.c2
-rw-r--r--sysdeps/m68k/fpu/s_llrint.c48
-rw-r--r--sysdeps/m68k/fpu/s_llrintf.c66
-rw-r--r--sysdeps/m68k/fpu/s_llrintl.c65
-rw-r--r--sysdeps/mach/hurd/bits/errno.h23
-rw-r--r--sysdeps/posix/getcwd.c9
-rw-r--r--sysdeps/posix/system.c1
-rw-r--r--sysdeps/standalone/bits/errno.h2
-rw-r--r--sysdeps/unix/sysv/i386/i686/time.S27
-rw-r--r--sysdeps/unix/sysv/linux/Dist1
-rw-r--r--sysdeps/unix/sysv/linux/Makefile2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/xstatconv.c2
-rw-r--r--sysdeps/unix/sysv/linux/bits/errno.h3
-rw-r--r--sysdeps/unix/sysv/linux/xstatconv.c2
-rw-r--r--sysdeps/wordsize-32/inttypes.h56
-rw-r--r--sysdeps/wordsize-64/inttypes.h54
42 files changed, 481 insertions, 121 deletions
diff --git a/sysdeps/generic/bits/errno.h b/sysdeps/generic/bits/errno.h
index 622c2c9de4..d1cb464b41 100644
--- a/sysdeps/generic/bits/errno.h
+++ b/sysdeps/generic/bits/errno.h
@@ -23,6 +23,7 @@
#define __Emath_defined 1
# define EDOM XXX <--- fill in what is actually needed
+# define EILSEQ XXX <--- fill in what is actually needed
# define ERANGE XXX <--- fill in what is actually needed
#endif
diff --git a/sysdeps/generic/setenv.c b/sysdeps/generic/setenv.c
index f58c65b7f6..d4c5c87b15 100644
--- a/sysdeps/generic/setenv.c
+++ b/sysdeps/generic/setenv.c
@@ -91,7 +91,6 @@ setenv (name, value, replace)
if (__environ == NULL || *ep == NULL)
{
char **new_environ;
- char *tmp;
if (__environ == last_environ && __environ != NULL)
/* We allocated this space; we can extend it. */
@@ -120,9 +119,11 @@ setenv (name, value, replace)
size * sizeof (char *));
#ifdef _LIBC
- tmp = __mempcpy (new_environ[size], name, namelen);
- *tmp++ = '=';
- __mempcpy (tmp, value, vallen);
+ {
+ char *tmp = __mempcpy (new_environ[size], name, namelen);
+ *tmp++ = '=';
+ __mempcpy (tmp, value, vallen);
+ }
#else
memcpy (new_environ[size], name, namelen);
new_environ[size][namelen] = '=';
diff --git a/sysdeps/i386/i586/memcpy.S b/sysdeps/i386/i586/memcpy.S
new file mode 100644
index 0000000000..9116c8d741
--- /dev/null
+++ b/sysdeps/i386/i586/memcpy.S
@@ -0,0 +1,108 @@
+/* Highly optimized version for i586.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <sysdep.h>
+#include "asm-syntax.h"
+
+/*
+ INPUT PARAMETERS:
+ dst (sp + 4)
+ src (sp + 8)
+ len (sp + 12)
+*/
+
+
+ .text
+ENTRY (memcpy)
+ pushl %edi
+ pushl %esi
+
+ movl 12(%esp), %edi /* dst */
+ movl 16(%esp), %esi /* src */
+ movl 20(%esp), %ecx /* len */
+ movl %edi, %eax
+
+ /* We need this in any case. */
+ cld
+
+ /* Cutoff for the big loop is a size of 32 bytes since otherwise
+ the loop will never be entered. */
+ cmpl $32, %ecx
+ jbe L(1)
+
+ negl %eax
+ andl $3, %eax
+ subl %eax, %ecx
+ xchgl %eax, %ecx
+
+ rep; movsb
+
+ movl %eax, %ecx
+ subl $32, %ecx
+ js L(2)
+
+ /* Read ahead to make sure we write in the cache since the stupid
+ i586 designers haven't implemented read-on-write-miss. */
+ movl (%edi), %eax
+L(3): movl 28(%edi), %edx
+
+ /* Now correct the loop counter. Please note that in the following
+ code the flags are not changed anymore. */
+ subl $32, %ecx
+
+ movl (%esi), %eax
+ movl 4(%esi), %edx
+ movl %eax, (%edi)
+ movl %edx, 4(%edi)
+ movl 8(%esi), %eax
+ movl 12(%esi), %edx
+ movl %eax, 8(%edi)
+ movl %edx, 12(%edi)
+ movl 16(%esi), %eax
+ movl 20(%esi), %edx
+ movl %eax, 16(%edi)
+ movl %edx, 20(%edi)
+ movl 24(%esi), %eax
+ movl 28(%esi), %edx
+ movl %eax, 24(%edi)
+ movl %edx, 28(%edi)
+
+ leal 32(%esi), %esi
+ leal 32(%edi), %edi
+
+ jns L(3)
+
+ /* Correct extra loop counter modification. */
+L(2): addl $32, %ecx
+#ifndef memcpy
+ movl 12(%esp), %eax /* dst */
+#endif
+
+L(1): rep; movsb
+
+#ifdef memcpy
+ movl %edi, %eax
+#endif
+
+ popl %esi
+ popl %edi
+
+ ret
+END (memcpy)
diff --git a/sysdeps/i386/i586/mempcpy.S b/sysdeps/i386/i586/mempcpy.S
new file mode 100644
index 0000000000..03dc0789da
--- /dev/null
+++ b/sysdeps/i386/i586/mempcpy.S
@@ -0,0 +1,4 @@
+#define memcpy __mempcpy
+#include <sysdeps/i386/i586/memcpy.S>
+
+weak_alias (__mempcpy, mempcpy)
diff --git a/sysdeps/i386/i586/memset.S b/sysdeps/i386/i586/memset.S
index fb96a369b9..01bed35534 100644
--- a/sysdeps/i386/i586/memset.S
+++ b/sysdeps/i386/i586/memset.S
@@ -1,5 +1,5 @@
/* memset/bzero -- set memory area to CH/0
- Highly optimized version for ix85, x>=5.
+ Highly optimized version for ix86, x>=5.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Torbjorn Granlund, <tege@matematik.su.se>
diff --git a/sysdeps/libm-ieee754/e_asin.c b/sysdeps/libm-ieee754/e_asin.c
index b62a1c9914..09d06a9158 100644
--- a/sysdeps/libm-ieee754/e_asin.c
+++ b/sysdeps/libm-ieee754/e_asin.c
@@ -5,7 +5,7 @@
*
* Developed at SunPro, a Sun Microsystems, Inc. business.
* Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
+ * software is freely granted, provided that this notice
* is preserved.
* ====================================================
*/
@@ -15,12 +15,12 @@ static char rcsid[] = "$NetBSD: e_asin.c,v 1.9 1995/05/12 04:57:22 jtc Exp $";
#endif
/* __ieee754_asin(x)
- * Method :
+ * Method :
* Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ...
* we approximate asin(x) on [0,0.5] by
* asin(x) = x + x*x^2*R(x^2)
* where
- * R(x^2) is a rational approximation of (asin(x)-x)/x^3
+ * R(x^2) is a rational approximation of (asin(x)-x)/x^3
* and its remez error is bounded by
* |(asin(x)-x)/x^3 - R(x^2)| < 2^(-58.75)
*
@@ -49,9 +49,9 @@ static char rcsid[] = "$NetBSD: e_asin.c,v 1.9 1995/05/12 04:57:22 jtc Exp $";
#include "math_private.h"
#ifdef __STDC__
-static const double
+static const double
#else
-static double
+static double
#endif
one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
huge = 1.000e+300,
@@ -86,17 +86,18 @@ qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */
GET_LOW_WORD(lx,x);
if(((ix-0x3ff00000)|lx)==0)
/* asin(1)=+-pi/2 with inexact */
- return x*pio2_hi+x*pio2_lo;
- return (x-x)/(x-x); /* asin(|x|>1) is NaN */
+ return x*pio2_hi+x*pio2_lo;
+ return (x-x)/(x-x); /* asin(|x|>1) is NaN */
} else if (ix<0x3fe00000) { /* |x|<0.5 */
if(ix<0x3e400000) { /* if |x| < 2**-27 */
if(huge+x>one) return x;/* return x with inexact if x!=0*/
- } else
+ } else {
t = x*x;
p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5)))));
q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4)));
w = p/q;
return x+x*w;
+ }
}
/* 1> |x|>= 0.5 */
w = one-fabs(x);
@@ -115,6 +116,6 @@ qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */
p = 2.0*s*r-(pio2_lo-2.0*c);
q = pio4_hi-2.0*w;
t = pio4_hi-(p-q);
- }
- if(hx>0) return t; else return -t;
+ }
+ if(hx>0) return t; else return -t;
}
diff --git a/sysdeps/libm-ieee754/e_asinf.c b/sysdeps/libm-ieee754/e_asinf.c
index 21157d84e1..5270f31144 100644
--- a/sysdeps/libm-ieee754/e_asinf.c
+++ b/sysdeps/libm-ieee754/e_asinf.c
@@ -8,7 +8,7 @@
*
* Developed at SunPro, a Sun Microsystems, Inc. business.
* Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
+ * software is freely granted, provided that this notice
* is preserved.
* ====================================================
*/
@@ -21,9 +21,9 @@ static char rcsid[] = "$NetBSD: e_asinf.c,v 1.5 1995/05/12 04:57:25 jtc Exp $";
#include "math_private.h"
#ifdef __STDC__
-static const float
+static const float
#else
-static float
+static float
#endif
one = 1.0000000000e+00, /* 0x3F800000 */
huge = 1.000e+30,
@@ -55,18 +55,19 @@ qS4 = 7.7038154006e-02; /* 0x3d9dc62e */
ix = hx&0x7fffffff;
if(ix==0x3f800000) {
/* asin(1)=+-pi/2 with inexact */
- return x*pio2_hi+x*pio2_lo;
+ return x*pio2_hi+x*pio2_lo;
} else if(ix> 0x3f800000) { /* |x|>= 1 */
- return (x-x)/(x-x); /* asin(|x|>1) is NaN */
+ return (x-x)/(x-x); /* asin(|x|>1) is NaN */
} else if (ix<0x3f000000) { /* |x|<0.5 */
if(ix<0x32000000) { /* if |x| < 2**-27 */
if(huge+x>one) return x;/* return x with inexact if x!=0*/
- } else
+ } else {
t = x*x;
p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5)))));
q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4)));
w = p/q;
return x+x*w;
+ }
}
/* 1> |x|>= 0.5 */
w = one-fabsf(x);
@@ -87,6 +88,6 @@ qS4 = 7.7038154006e-02; /* 0x3d9dc62e */
p = (float)2.0*s*r-(pio2_lo-(float)2.0*c);
q = pio4_hi-(float)2.0*w;
t = pio4_hi-(p-q);
- }
- if(hx>0) return t; else return -t;
+ }
+ if(hx>0) return t; else return -t;
}
diff --git a/sysdeps/libm-ieee754/e_atan2l.c b/sysdeps/libm-ieee754/e_atan2l.c
index 72d3eac172..aff7a3d976 100644
--- a/sysdeps/libm-ieee754/e_atan2l.c
+++ b/sysdeps/libm-ieee754/e_atan2l.c
@@ -71,10 +71,10 @@ pi_lo = -5.01655761266833202345176e-20L;/* 0xBFBE, 0xECE675D1, 0xFC8F8CBB */
int32_t k,m,hx,hy,ix,iy;
u_int32_t sx,sy,lx,ly;
- EXTRACT_LDOUBLE_WORDS(sx,hx,lx,x);
+ GET_LDOUBLE_WORDS(sx,hx,lx,x);
ix = sx&0x7fff;
lx |= hx & 0x7fffffff;
- EXTRACT_LDOUBLE_WORDS(sy,hy,ly,y);
+ GET_LDOUBLE_WORDS(sy,hy,ly,y);
iy = sy&0x7fff;
ly |= hy & 0x7fffffff;
if(((2*ix|((lx|-lx)>>31))>0xfffe)||
diff --git a/sysdeps/libm-ieee754/e_remainderl.c b/sysdeps/libm-ieee754/e_remainderl.c
index 3b2cd7c5e5..e721a6e8cd 100644
--- a/sysdeps/libm-ieee754/e_remainderl.c
+++ b/sysdeps/libm-ieee754/e_remainderl.c
@@ -47,8 +47,8 @@ static long double zero = 0.0;
u_int32_t sx,sex,sep,x0,x1,p0,p1;
long double p_half;
- EXTRACT_LDOUBLE_WORDS(sex,x0,x1,x);
- EXTRACT_LDOUBLE_WORDS(sep,p0,p1,p);
+ GET_LDOUBLE_WORDS(sex,x0,x1,x);
+ GET_LDOUBLE_WORDS(sep,p0,p1,p);
sx = sex&0x8000;
sep &= 0x7fff;
sex &= 0x7fff;
diff --git a/sysdeps/libm-ieee754/s_ceill.c b/sysdeps/libm-ieee754/s_ceill.c
index 773be32995..d53f3954ba 100644
--- a/sysdeps/libm-ieee754/s_ceill.c
+++ b/sysdeps/libm-ieee754/s_ceill.c
@@ -51,8 +51,8 @@ static long double huge = 1.0e4930;
if(j0<31) {
if(j0<0) { /* raise inexact if x != 0 */
if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
- if(sx) {es=0x8000;i0=0;i1=0;}
- else if((i0|i1)!=0) { es=0x3fff;i0=0;i1=0;}
+ if(sx) {se=0x8000;i0=0;i1=0;}
+ else if((i0|i1)!=0) { se=0x3fff;i0=0;i1=0;}
}
} else {
i = (0x7fffffff)>>j0;
diff --git a/sysdeps/libm-ieee754/s_floorl.c b/sysdeps/libm-ieee754/s_floorl.c
index 0eb0bec9b8..fb0c37e801 100644
--- a/sysdeps/libm-ieee754/s_floorl.c
+++ b/sysdeps/libm-ieee754/s_floorl.c
@@ -53,7 +53,7 @@ static long double huge = 1.0e4930;
if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
if(sx==0) {se=0;i0=i1=0;}
else if(((se&0x7fff)|i0|i1)!=0)
- { se=0xbfff;i0;i1=0;}
+ { se=0xbfff;i0=i1=0;}
}
} else {
i = (0x7fffffff)>>j0;
@@ -62,6 +62,7 @@ static long double huge = 1.0e4930;
if(sx) {
if (j0>0) i0 += (0x80000000)>>j0;
else ++se;
+ }
i0 &= (~i); i1=0;
}
}
diff --git a/sysdeps/libm-ieee754/s_llrint.c b/sysdeps/libm-ieee754/s_llrint.c
index a50ba96952..8e70bcff36 100644
--- a/sysdeps/libm-ieee754/s_llrint.c
+++ b/sysdeps/libm-ieee754/s_llrint.c
@@ -55,27 +55,27 @@ __llrint (double x)
w = two52[sx] + x;
t = w - two52[sx];
EXTRACT_WORDS (i0, i1, t);
- i0 = i & 0xfffff;
- i0 |= 0x100000;
j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+ i0 &= 0xfffff;
+ i0 |= 0x100000;
result = i0 >> (20 - j0);
}
}
- else if (j0 < (int32_t) (8 * sizeof (long long int)))
+ else if (j0 < (int32_t) (8 * sizeof (long long int)) - 1)
{
if (j0 >= 52)
- result = ((long long int) i0 << (j0 - 20)) | (i1 << (j0 - 52));
+ result = (((long long int) i0 << 32) | i1) << (j0 - 52);
else
{
w = two52[sx] + x;
t = w - two52[sx];
EXTRACT_WORDS (i0, i1, t);
- i0 = i & 0xfffff;
- i0 |= 0x100000;
j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+ i0 &= 0xfffff;
+ i0 |= 0x100000;
- result = ((long long int) i0 << (j0 - 20)) | (j >> (52 - j0));
+ result = ((long long int) i0 << (j0 - 20)) | (i1 >> (52 - j0));
}
}
else
diff --git a/sysdeps/libm-ieee754/s_llrintf.c b/sysdeps/libm-ieee754/s_llrintf.c
index f73afd0fd2..83cb7fdd37 100644
--- a/sysdeps/libm-ieee754/s_llrintf.c
+++ b/sysdeps/libm-ieee754/s_llrintf.c
@@ -47,7 +47,7 @@ __llrintf (float x)
i0 = i & 0x7fffff;
i0 |= 0x800000;
- if (j0 < (int32_t) (sizeof (long long int) * 8))
+ if (j0 < (int32_t) (sizeof (long long int) * 8) - 1)
{
if (j0 < -1)
return 0;
diff --git a/sysdeps/libm-ieee754/s_llrintl.c b/sysdeps/libm-ieee754/s_llrintl.c
index d3b9b12d76..2aeaa1e102 100644
--- a/sysdeps/libm-ieee754/s_llrintl.c
+++ b/sysdeps/libm-ieee754/s_llrintl.c
@@ -45,12 +45,12 @@ __llrintl (long double x)
sx = (se >> 15) & 1;
j0 = (se & 0x7fff) - 0x3fff;
- if (j0 < (int32_t) (8 * sizeof (long long int)))
+ if (j0 < (int32_t) (8 * sizeof (long long int)) - 1)
{
if (j0 < -1)
return 0;
else if (j0 >= 63)
- result = ((long long int) i0 << (j0 - 31)) | (i1 << (j0 - 63));
+ result = (((long long int) i0 << 32) | i1) << (j0 - 63);
else
{
w = two63[sx] + x;
diff --git a/sysdeps/libm-ieee754/s_llround.c b/sysdeps/libm-ieee754/s_llround.c
index 1deb630e96..92ce10fc42 100644
--- a/sysdeps/libm-ieee754/s_llround.c
+++ b/sysdeps/libm-ieee754/s_llround.c
@@ -48,17 +48,20 @@ __llround (double x)
result = i0 >> (20 - j0);
}
}
- else if (j0 < (int32_t) (8 * sizeof (long long int)))
+ else if (j0 < (int32_t) (8 * sizeof (long long int)) - 1)
{
if (j0 >= 52)
- result = ((long long int) i0 << (j0 - 20)) | (i1 << (j0 - 52));
+ result = (((long long int) i0 << 32) | i1) << (j0 - 52);
else
{
u_int32_t j = i1 + (0x80000000 >> (j0 - 20));
if (j < i1)
++i0;
- result = ((long long int) i0 << (j0 - 20)) | (j >> (52 - j0));
+ if (j0 == 20)
+ result = (long long int) i0;
+ else
+ result = ((long long int) i0 << (j0 - 20)) | (j >> (52 - j0));
}
}
else
diff --git a/sysdeps/libm-ieee754/s_llroundf.c b/sysdeps/libm-ieee754/s_llroundf.c
index 87ed1a3117..9aad81fd45 100644
--- a/sysdeps/libm-ieee754/s_llroundf.c
+++ b/sysdeps/libm-ieee754/s_llroundf.c
@@ -37,12 +37,12 @@ __llroundf (float x)
i &= 0x7fffff;
i |= 0x800000;
- if (j0 < (int32_t) (8 * sizeof (long long int)))
+ if (j0 < (int32_t) (8 * sizeof (long long int)) - 1)
{
if (j0 < 0)
return j0 < -1 ? 0 : sign;
else if (j0 >= 23)
- result = (long int) i << (j0 - 23);
+ result = (long long int) i << (j0 - 23);
else
{
i += 0x400000 >> j0;
diff --git a/sysdeps/libm-ieee754/s_llroundl.c b/sysdeps/libm-ieee754/s_llroundl.c
index 959b1e3fe9..4a537c871e 100644
--- a/sysdeps/libm-ieee754/s_llroundl.c
+++ b/sysdeps/libm-ieee754/s_llroundl.c
@@ -52,17 +52,20 @@ __llroundl (long double x)
result = j >> (31 - j0);
}
}
- else if (j0 < (int32_t) (8 * sizeof (long long int)))
+ else if (j0 < (int32_t) (8 * sizeof (long long int)) - 1)
{
if (j0 >= 63)
- result = ((long long int) i0 << (j0 - 31)) | (i1 << (j0 - 63));
+ result = (((long long int) i0 << 32) | i1) << (j0 - 63);
else
{
u_int32_t j = i1 + (0x80000000 >> (j0 - 31));
if (j < i1)
++i0;
- result = ((long long int) i0 << (j0 - 31)) | (j >> (63 - j0));
+ if (j0 == 31)
+ result = (long long int) i0;
+ else
+ result = ((long long int) i0 << (j0 - 31)) | (j >> (63 - j0));
}
}
else
diff --git a/sysdeps/libm-ieee754/s_lrint.c b/sysdeps/libm-ieee754/s_lrint.c
index 0ccd06a061..8fe7d24e14 100644
--- a/sysdeps/libm-ieee754/s_lrint.c
+++ b/sysdeps/libm-ieee754/s_lrint.c
@@ -62,7 +62,7 @@ __lrint (double x)
result = i0 >> (20 - j0);
}
}
- else if (j0 < (int32_t) (8 * sizeof (long int)))
+ else if (j0 < (int32_t) (8 * sizeof (long int)) - 1)
{
if (j0 >= 52)
result = ((long int) i0 << (j0 - 20)) | (i1 << (j0 - 52));
@@ -75,7 +75,7 @@ __lrint (double x)
i0 |= 0x100000;
j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
- result = ((long int) i0 << (j0 - 20)) | (j >> (52 - j0));
+ result = ((long int) i0 << (j0 - 20)) | (i1 >> (52 - j0));
}
}
else
diff --git a/sysdeps/libm-ieee754/s_lrintf.c b/sysdeps/libm-ieee754/s_lrintf.c
index 6d74b362f5..d80d81a718 100644
--- a/sysdeps/libm-ieee754/s_lrintf.c
+++ b/sysdeps/libm-ieee754/s_lrintf.c
@@ -47,7 +47,7 @@ __lrintf (float x)
i0 = i & 0x7fffff;
i0 |= 0x800000;
- if (j0 < (int32_t) (sizeof (long int) * 8))
+ if (j0 < (int32_t) (sizeof (long int) * 8) - 1)
{
if (j0 < -1)
return 0;
diff --git a/sysdeps/libm-ieee754/s_lrintl.c b/sysdeps/libm-ieee754/s_lrintl.c
index 5a41427f72..673cf3d9db 100644
--- a/sysdeps/libm-ieee754/s_lrintl.c
+++ b/sysdeps/libm-ieee754/s_lrintl.c
@@ -59,7 +59,7 @@ __lrintl (long double x)
result = i0 >> (31 - j0);
}
}
- else if (j0 < (int32_t) (8 * sizeof (long int)))
+ else if (j0 < (int32_t) (8 * sizeof (long int)) - 1)
{
if (j0 >= 63)
result = ((long int) i0 << (j0 - 31)) | (i1 << (j0 - 63));
diff --git a/sysdeps/libm-ieee754/s_lround.c b/sysdeps/libm-ieee754/s_lround.c
index a6468ba78a..49be12f03b 100644
--- a/sysdeps/libm-ieee754/s_lround.c
+++ b/sysdeps/libm-ieee754/s_lround.c
@@ -48,7 +48,7 @@ __lround (double x)
result = i0 >> (20 - j0);
}
}
- else if (j0 < (int32_t) (8 * sizeof (long int)))
+ else if (j0 < (int32_t) (8 * sizeof (long int)) - 1)
{
if (j0 >= 52)
result = ((long int) i0 << (j0 - 20)) | (i1 << (j0 - 52));
diff --git a/sysdeps/libm-ieee754/s_lroundf.c b/sysdeps/libm-ieee754/s_lroundf.c
index 0d3889c24a..df1d242e2a 100644
--- a/sysdeps/libm-ieee754/s_lroundf.c
+++ b/sysdeps/libm-ieee754/s_lroundf.c
@@ -37,7 +37,7 @@ __lroundf (float x)
i &= 0x7fffff;
i |= 0x800000;
- if (j0 < (int32_t) (8 * sizeof (long int)))
+ if (j0 < (int32_t) (8 * sizeof (long int)) - 1)
{
if (j0 < 0)
return j0 < -1 ? 0 : sign;
diff --git a/sysdeps/libm-ieee754/s_lroundl.c b/sysdeps/libm-ieee754/s_lroundl.c
index d8b7db4b5c..3bdac830b4 100644
--- a/sysdeps/libm-ieee754/s_lroundl.c
+++ b/sysdeps/libm-ieee754/s_lroundl.c
@@ -52,7 +52,7 @@ __lroundl (long double x)
result = j >> (31 - j0);
}
}
- else if (j0 < (int32_t) (8 * sizeof (long int)))
+ else if (j0 < (int32_t) (8 * sizeof (long int)) - 1)
{
if (j0 >= 63)
result = ((long int) i0 << (j0 - 31)) | (i1 << (j0 - 63));
diff --git a/sysdeps/libm-ieee754/s_scalblnl.c b/sysdeps/libm-ieee754/s_scalblnl.c
index aafb73e688..b885fbcadb 100644
--- a/sysdeps/libm-ieee754/s_scalblnl.c
+++ b/sysdeps/libm-ieee754/s_scalblnl.c
@@ -34,7 +34,7 @@ static const long double
static long double
#endif
two63 = 4.50359962737049600000e+15,
-twom63 = 1.08420217248550443400e-19;
+twom63 = 1.08420217248550443400e-19,
huge = 1.0e+4900L,
tiny = 1.0e-4900L;
diff --git a/sysdeps/libm-ieee754/s_scalbnl.c b/sysdeps/libm-ieee754/s_scalbnl.c
index 4e1d08ef90..32e4fb8cea 100644
--- a/sysdeps/libm-ieee754/s_scalbnl.c
+++ b/sysdeps/libm-ieee754/s_scalbnl.c
@@ -34,7 +34,7 @@ static const long double
static long double
#endif
two63 = 4.50359962737049600000e+15,
-twom63 = 1.08420217248550443400e-19;
+twom63 = 1.08420217248550443400e-19,
huge = 1.0e+4900L,
tiny = 1.0e-4900L;
diff --git a/sysdeps/libm-ieee754/s_sincosl.c b/sysdeps/libm-ieee754/s_sincosl.c
index 7cadf88a40..78c78d5619 100644
--- a/sysdeps/libm-ieee754/s_sincosl.c
+++ b/sysdeps/libm-ieee754/s_sincosl.c
@@ -38,7 +38,7 @@ __sincosl (long double x, long double *sinx, long double *cosx)
*sinx = __kernel_sinl (x, 0.0, 0);
*cosx = __kernel_cosl (x, 0.0);
}
- else if (ix == 0x7fff)
+ else if (se == 0x7fff)
{
/* sin(Inf or NaN) is NaN */
*sinx = *cosx = x - x;
diff --git a/sysdeps/libm-ieee754/s_tanl.c b/sysdeps/libm-ieee754/s_tanl.c
index bce6d07f3d..97a0b27f32 100644
--- a/sysdeps/libm-ieee754/s_tanl.c
+++ b/sysdeps/libm-ieee754/s_tanl.c
@@ -66,7 +66,7 @@ static char rcsid[] = "$NetBSD: $";
/* |x| ~< pi/4 */
se &= 0x7fff;
- if(ix <= 0x3ffe) return __kernel_tanl(x,z,1);
+ if(se <= 0x3ffe) return __kernel_tanl(x,z,1);
/* tan(Inf or NaN) is NaN */
else if (se==0x7fff) return x-x; /* NaN */
diff --git a/sysdeps/m68k/fpu/s_llrint.c b/sysdeps/m68k/fpu/s_llrint.c
index f5d0d51122..9dfee644ed 100644
--- a/sysdeps/m68k/fpu/s_llrint.c
+++ b/sysdeps/m68k/fpu/s_llrint.c
@@ -24,36 +24,50 @@
#include "math_private.h"
long long int
-__llrint (long double x)
+__llrint (double x)
{
- int32_t se, sx;
- u_int32_t h, l;
+ int32_t e;
+ u_int32_t h, l, s;
long long int result;
- x = __m81_u(__rintl) (x);
+ x = __m81_u(__rint) (x);
/* We could use __fixxfdi from libgcc, but here we can take advantage of
the known floating point format. */
- GET_LDOUBLE_WORDS (se, h, l, x);
+ EXTRACT_WORDS (h, l, x);
- sx = se & (1 << 15);
- se = (se ^ sx) - 0x3fff;
+ e = ((h >> 20) & 0x7ff) - 0x3ff;
+ if (e < 0)
+ return 0;
+ s = h;
+ h &= 0xfffff;
+ h |= 0x100000;
- if (se < 64)
+ if (e < 63)
{
- if (se > 31)
- result = (((long long int) (h >> (63 - se)) << 32)
- | (l >> (63 - se)) | (h << (se - 31)));
+ if (e > 52)
+ {
+ h <<= e - 52;
+ h |= l >> (84 - e);
+ l <<= e - 52;
+ result = ((long long int) h << 32) | l;
+ }
+ else if (e > 20)
+ {
+ l >>= 52 - e;
+ l |= h << (e - 20);
+ h >>= 52 - e;
+ result = ((long long int) h << 32) | l;
+ }
else
- result = h >> (31 - se);
- if (sx)
+ result = h >> (20 - e);
+ if (s & 0x80000000)
result = -result;
}
else
- /* Too large. The number is either +-inf or NaN or it is too
- large to be effected by rounding. The standard leaves it
- undefined what to return when the number is too large to fit in
- a `long long int'. */
+ /* The number is too large or not finite. The standard leaves it
+ undefined what to return when the number is too large to fit in a
+ `long long int'. */
result = -1LL;
return result;
diff --git a/sysdeps/m68k/fpu/s_llrintf.c b/sysdeps/m68k/fpu/s_llrintf.c
new file mode 100644
index 0000000000..3c8528c4e8
--- /dev/null
+++ b/sysdeps/m68k/fpu/s_llrintf.c
@@ -0,0 +1,66 @@
+/* Round argument to nearest integral value according to current rounding
+ direction.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#define __LIBC_M81_MATH_INLINES
+#include <math.h>
+#include "math_private.h"
+
+long long int
+__llrintf (float x)
+{
+ int32_t e;
+ u_int32_t i, s;
+ long long int result;
+
+ x = __m81_u(__rintf) (x);
+
+ GET_FLOAT_WORD (i, x);
+
+ e = ((i >> 23) & 0xff) - 0x7f;
+ if (e < 0)
+ return 0;
+ s = i;
+ i &= 0x7fffff;
+ i |= 0x800000;
+
+ if (e < 63)
+ {
+ if (e > 55)
+ result = (long long int) (i << (e - 55)) << 32;
+ else if (e > 31)
+ result = (((long long int) (i >> (55 - e)) << 32) | (i << (e - 23)));
+ else if (e > 23)
+ result = i << (e - 23);
+ else
+ result = i >> (23 - e);
+ if (s & 0x80000000)
+ result = -result;
+ }
+ else
+ /* The number is too large or not finite. The standard leaves it
+ undefined what to return when the number is too large to fit in a
+ `long long int'. */
+ result = -1LL;
+
+ return result;
+}
+
+weak_alias (__llrintf, llrintf)
diff --git a/sysdeps/m68k/fpu/s_llrintl.c b/sysdeps/m68k/fpu/s_llrintl.c
new file mode 100644
index 0000000000..55190b9eb3
--- /dev/null
+++ b/sysdeps/m68k/fpu/s_llrintl.c
@@ -0,0 +1,65 @@
+/* Round argument to nearest integral value according to current rounding
+ direction.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#define __LIBC_M81_MATH_INLINES
+#include <math.h>
+#include "math_private.h"
+
+long long int
+__llrintl (long double x)
+{
+ int32_t e, s;
+ u_int32_t h, l;
+ long long int result;
+
+ x = __m81_u(__rintl) (x);
+
+ GET_LDOUBLE_WORDS (e, h, l, x);
+
+ s = e;
+ e = (e & 0x7fff) - 0x3fff;
+ if (e < 0)
+ return 0;
+
+ if (e < 63)
+ {
+ if (e > 31)
+ {
+ l >>= 63 - e;
+ l |= h << (e - 31);
+ h >>= 63 - e;
+ result = ((long long int) h << 32) | l;
+ }
+ else
+ result = h >> (31 - e);
+ if (s & 0x8000)
+ result = -result;
+ }
+ else
+ /* The number is too large or not finite. The standard leaves it
+ undefined what to return when the number is too large to fit in a
+ `long long int'. */
+ result = -1LL;
+
+ return result;
+}
+
+weak_alias (__llrintl, llrintl)
diff --git a/sysdeps/mach/hurd/bits/errno.h b/sysdeps/mach/hurd/bits/errno.h
index beb35ecd9a..c17130d6fd 100644
--- a/sysdeps/mach/hurd/bits/errno.h
+++ b/sysdeps/mach/hurd/bits/errno.h
@@ -2,7 +2,7 @@
/* The Hurd uses Mach error system 0x10, currently only subsystem 0. */
#ifndef _HURD_ERRNO
-#define _HURD_ERRNO(n) ((0x10 << 26) | ((n) & 0x3fff))
+# define _HURD_ERRNO(n) ((0x10 << 26) | ((n) & 0x3fff))
#endif
#ifdef _ERRNO_H
@@ -293,24 +293,25 @@ enum __error_t_codes
};
-#define _HURD_ERRNOS 118
+# define _HURD_ERRNOS 118
/* User-visible type of error codes. It is ok to use `int' or
`kern_return_t' for these, but with `error_t' the debugger prints
symbolic values. */
-#ifdef __USE_GNU
+# ifdef __USE_GNU
typedef enum __error_t_codes error_t;
-#define __error_t_defined 1
-#endif
+# define __error_t_defined 1
+# endif
/* errno is a per-thread variable. */
-#include <hurd/threadvar.h>
-#define errno (*__hurd_errno_location ())
-#define __set_errno(val) errno = (val)
+# include <hurd/threadvar.h>
+# define errno (*__hurd_errno_location ())
+# define __set_errno(val) errno = (val)
#endif /* <errno.h> included. */
-#if !defined (_ERRNO_H) && defined (__need_Emath)
-#define EDOM _HURD_ERRNO (33)/* Numerical argument out of domain */
-#define ERANGE _HURD_ERRNO (34)/* Numerical result out of range */
+#if !defined _ERRNO_H && defined __need_Emath
+# define EDOM _HURD_ERRNO (33)/* Numerical argument out of domain */
+# define EILSEQ _HURD_ERRNO (106)/* Invalid or incomplete multibyte or wide character */
+# define ERANGE _HURD_ERRNO (34)/* Numerical result out of range */
#endif /* <errno.h> not included and need math error codes. */
diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c
index 01f86ef47f..2ae3c1e897 100644
--- a/sysdeps/posix/getcwd.c
+++ b/sysdeps/posix/getcwd.c
@@ -135,6 +135,11 @@ extern void free ();
# define memmove memcpy
#endif /* Not ANSI_STRING. */
+#ifdef _LIBC
+# define mempcpy __mempcpy
+# define HAVE_MEMPCPY 1
+#endif
+
#if !defined __alloca && !defined __GNU_LIBRARY__
# ifdef __GNUC__
@@ -277,10 +282,10 @@ __getcwd (buf, size)
dotp = &new[dotsize];
}
#ifdef HAVE_MEMPCPY
- *((char *) mempcpy (dotp, new, dotsize)) = '\0';
+ *((char *) mempcpy ((char *) dotp, new, dotsize)) = '\0';
dotsize *= 2;
#else
- memcpy (dotp, new, dotsize);
+ memcpy ((char *) dotp, new, dotsize);
dotsize *= 2;
new[dotsize] = '\0';
#endif
diff --git a/sysdeps/posix/system.c b/sysdeps/posix/system.c
index 2b8f9cb590..1111646bbd 100644
--- a/sysdeps/posix/system.c
+++ b/sysdeps/posix/system.c
@@ -44,6 +44,7 @@ __libc_system (const char *line)
#endif
if (line == NULL)
+ /* This signals that we have a command processor available. */
return 1;
sa.sa_handler = SIG_IGN;
diff --git a/sysdeps/standalone/bits/errno.h b/sysdeps/standalone/bits/errno.h
index 30eec4308d..d4030b7f44 100644
--- a/sysdeps/standalone/bits/errno.h
+++ b/sysdeps/standalone/bits/errno.h
@@ -23,6 +23,7 @@
#define __Emath_defined 1
# define EDOM 1
+# define EILSEQ 17
# define ERANGE 2
#endif
@@ -41,7 +42,6 @@
# define ENOMSG 14
# define E2BIG 15
# define EINTR 16
-# define EILSEQ 17
# define ENOEXEC 18
# define ENOENT 19
# define EPROTOTYPE 20
diff --git a/sysdeps/unix/sysv/i386/i686/time.S b/sysdeps/unix/sysv/i386/i686/time.S
deleted file mode 100644
index c5d27635c9..0000000000
--- a/sysdeps/unix/sysv/i386/i686/time.S
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright (C) 1991, 1992, 1996, 1997 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 Library General Public License as
- published by the Free Software Foundation; either version 2 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <sysdep.h>
-#include <asm-syntax.h>
-
-SYSCALL (time, 1)
- movl 4(%esp), %edx /* Put passed pointer in %edx. */
- testl %edx, %edx /* Is it non-nil? */
- cmovnel %eax, (%edx) /* Yes; store the time there. */
- ret
-PSEUDO_END (time)
diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist
index cfe5202ba1..2896953cb7 100644
--- a/sysdeps/unix/sysv/linux/Dist
+++ b/sysdeps/unix/sysv/linux/Dist
@@ -38,6 +38,7 @@ sys/klog.h
sys/module.h
sys/mount.h
sys/mtio.h
+sys/prctl.h
sys/procfs.h
sys/quota.h
sys/socketvar.h
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 8db8094dc1..005278068a 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -13,7 +13,7 @@ sysdep_routines += sysctl clone llseek
sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h sys/mtio.h \
sys/module.h sys/io.h sys/klog.h sys/kdaemon.h \
- sys/user.h sys/sysmacros.h sys/procfs.h \
+ sys/user.h sys/sysmacros.h sys/procfs.h sys/prctl.h \
sys/debugreg.h sys/kd.h sys/soundcard.h sys/vt.h \
sys/quota.h sys/fsuid.h bits/mman.h \
scsi/sg.h
diff --git a/sysdeps/unix/sysv/linux/alpha/xstatconv.c b/sysdeps/unix/sysv/linux/alpha/xstatconv.c
index d1005e7302..cb0269b8af 100644
--- a/sysdeps/unix/sysv/linux/alpha/xstatconv.c
+++ b/sysdeps/unix/sysv/linux/alpha/xstatconv.c
@@ -29,7 +29,7 @@ xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
/* Nothing to do. The struct is in the form the kernel expects.
We should have short-circuted before we got here, but for
completeness... */
- memcpy ((struct kernel_stat *) ubuf, kbuf, sizeof (*kbuf));
+ *(struct kernel_stat *) ubuf = *kbuf;
break;
case _STAT_VER_GLIBC2:
diff --git a/sysdeps/unix/sysv/linux/bits/errno.h b/sysdeps/unix/sysv/linux/bits/errno.h
index f676d35e49..abcbd9b801 100644
--- a/sysdeps/unix/sysv/linux/bits/errno.h
+++ b/sysdeps/unix/sysv/linux/bits/errno.h
@@ -50,10 +50,11 @@ __set_errno (int __err)
# endif /* !__ASSEMBLER__ */
#endif /* _ERRNO_H */
-#if !defined (_ERRNO_H) && defined (__need_Emath)
+#if !defined _ERRNO_H && defined __need_Emath
/* This is ugly but the kernel header is not clean enough. We must
define only the values EDOM and ERANGE in case __need_Emath is
defined. The value is the same for all Linux ports. */
# define EDOM 33 /* Math argument out of domain of function. */
+# define EILSEQ 84 /* Illegal byte sequence. */
# define ERANGE 34 /* Math result not representable. */
#endif /* !_ERRNO_H && __need_Emath */
diff --git a/sysdeps/unix/sysv/linux/xstatconv.c b/sysdeps/unix/sysv/linux/xstatconv.c
index 06a28cce30..fcf2f3b9f6 100644
--- a/sysdeps/unix/sysv/linux/xstatconv.c
+++ b/sysdeps/unix/sysv/linux/xstatconv.c
@@ -29,7 +29,7 @@ xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
/* Nothing to do. The struct is in the form the kernel expects.
We should have short-circuted before we got here, but for
completeness... */
- memcpy ((struct kernel_stat *) ubuf, kbuf, sizeof (*kbuf));
+ *(struct kernel_stat *) ubuf = *kbuf;
break;
case _STAT_VER_LINUX:
diff --git a/sysdeps/wordsize-32/inttypes.h b/sysdeps/wordsize-32/inttypes.h
index c0582c1876..7bb8cbd5bc 100644
--- a/sysdeps/wordsize-32/inttypes.h
+++ b/sysdeps/wordsize-32/inttypes.h
@@ -25,6 +25,9 @@
#define _INTTYPES_H 1
#include <features.h>
+#define __need_wchar_t
+#include <stddef.h>
+
/* Exact integral types. */
/* Signed. */
@@ -342,6 +345,31 @@ typedef unsigned long long int uint_fast64_t;
#define SCNxPTR "x"
+/* Limits of other integer types. */
+
+/* Limits of `ptrdiff_t' type. */
+#define PTRDIFF_MIN (-2147483647-1)
+#define PTRDIFF_MAX (2147483647)
+
+/* Limits of `sig_atomic_t'. */
+#define SIG_ATOMIC_MIN (-2147483647-1)
+#define SIG_ATOMIC_MAX (-2147483647-1)
+
+/* Limit of `size_t' type. */
+#define SIZE_MAX (4294967295U)
+
+/* Limits of `wchar_t'. */
+#ifndef WCHAR_MIN
+/* These constants might also be defined in <wchar.h>. */
+# define WCHAR_MIN (-2147483647-1)
+# define WCHAR_MAX (2147483647)
+#endif
+
+/* Limits of `wint_t'. */
+#define WINT_MIN (0)
+#define WINT_MAX (4294967295U)
+
+
/* Macros for string conversion. */
/* Like `strtol' but convert to `intmax_t'. */
@@ -370,4 +398,32 @@ extern unsigned long long int __strtoull_internal __P ((__const char *
# define __strtoull_internal_defined 1
#endif
+
+/* Like `wcstol' but convert to `intmax_t'. */
+#define wcstoimax(nptr, endptr, base) \
+ __wcstoll_internal (nptr, endptr, base, 0)
+
+#ifndef __wcstoll_internal_defined
+extern long long int __wcstoll_internal __P ((__const wchar_t *
+ __restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base, int __group));
+# define __wcstoll_internal_defined 1
+#endif
+
+
+/* Like `wcstoul' but convert to `uintmax_t'. */
+#define wcstoumax(nptr, endptr, base) \
+ __wcstoull_internal (nptr, endptr, base, 0)
+
+#ifndef __wcstoull_internal_defined
+extern unsigned long long int __wcstoull_internal __P ((__const wchar_t *
+ __restrict __nptr,
+ wchar_t **
+ __restrict __endptr,
+ int __base,
+ int __group));
+# define __wcstoull_internal_defined 1
+#endif
+
#endif /* inttypes.h */
diff --git a/sysdeps/wordsize-64/inttypes.h b/sysdeps/wordsize-64/inttypes.h
index 2a2628428d..9967fc0844 100644
--- a/sysdeps/wordsize-64/inttypes.h
+++ b/sysdeps/wordsize-64/inttypes.h
@@ -25,6 +25,9 @@
#define _INTTYPES_H 1
#include <features.h>
+#define __need_wchar_t
+#include <stddef.h>
+
/* Exact integral types. */
/* Signed. */
@@ -342,6 +345,31 @@ typedef unsigned long int uint_fast64_t;
#define SCNxPTR "lx"
+/* Limits of other integer types. */
+
+/* Limits of `ptrdiff_t' type. */
+#define PTRDIFF_MIN (-9223372036854775807L-1)
+#define PTRDIFF_MAX (9223372036854775807L)
+
+/* Limits of `sig_atomic_t'. */
+#define SIG_ATOMIC_MIN (-2147483647-1)
+#define SIG_ATOMIC_MAX (-2147483647-1)
+
+/* Limit of `size_t' type. */
+#define SIZE_MAX (18446744073709551615uL)
+
+/* Limits of `wchar_t'. */
+#ifndef WCHAR_MIN
+/* These constants might also be defined in <wchar.h>. */
+# define WCHAR_MIN (-2147483647-1)
+# define WCHAR_MAX (2147483647)
+#endif
+
+/* Limits of `wint_t'. */
+#define WINT_MIN (0)
+#define WINT_MAX (4294967295U)
+
+
/* Macros for string conversion. */
/* Like `strtol' but convert to `intmax_t'. */
@@ -368,4 +396,30 @@ extern unsigned long int __strtoul_internal __P ((__const char *
# define __strtoul_internal_defined 1
#endif
+
+/* Like `wcstol' but convert to `intmax_t'. */
+#define wcstoimax(nptr, endptr, base) \
+ __wcstol_internal (nptr, endptr, base, 0)
+
+#ifndef __wcstol_internal_defined
+extern long int __wcstol_internal __P ((__const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base, int __group));
+# define __wcstol_internal_defined 1
+#endif
+
+
+/* Like `wcstoul' but convert to `uintmax_t'. */
+#define wcstoumax(nptr, endptr, base) \
+ __wcstoul_internal (nptr, endptr, base, 0)
+
+#ifndef __wcstoul_internal_defined
+extern unsigned long int __wcstoul_internal __P ((__const wchar_t *
+ __restrict __nptr,
+ wchar_t **
+ __restrict __endptr,
+ int __base, int __group));
+# define __wcstoul_internal_defined 1
+#endif
+
#endif /* inttypes.h */