about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/libm-ieee754/e_acoshl.c8
-rw-r--r--sysdeps/libm-ieee754/s_cbrtl.c1
-rw-r--r--sysdeps/m68k/fpu/__math.h775
-rw-r--r--sysdeps/m68k/fpu/s_ldexp.c39
-rw-r--r--sysdeps/m68k/fpu/s_ldexpf.c5
-rw-r--r--sysdeps/m68k/fpu/s_ldexpl.c5
-rw-r--r--sysdeps/m68k/fpu/s_scalbn.c38
-rw-r--r--sysdeps/m68k/fpu/s_scalbnf.c4
-rw-r--r--sysdeps/m68k/fpu/s_scalbnl.c4
-rw-r--r--sysdeps/posix/cuserid.c13
-rw-r--r--sysdeps/posix/gettimeofday.c2
-rw-r--r--sysdeps/stub/fpu_control.h2
-rw-r--r--sysdeps/unix/sysv/linux/i386/sysdep.S12
-rw-r--r--sysdeps/unix/sysv/linux/i386/sysdep.h5
-rw-r--r--sysdeps/unix/sysv/linux/m68k/sysdep.S2
15 files changed, 297 insertions, 618 deletions
diff --git a/sysdeps/libm-ieee754/e_acoshl.c b/sysdeps/libm-ieee754/e_acoshl.c
index 8af7c27aa7..7b7bea7054 100644
--- a/sysdeps/libm-ieee754/e_acoshl.c
+++ b/sysdeps/libm-ieee754/e_acoshl.c
@@ -52,17 +52,17 @@ ln2	= 6.931471805599453094287e-01L; /* 0x3FFE, 0xB17217F7, 0xD1CF79AC */
 {
 	long double t;
 	u_int32_t se,i0,i1;
-	EXTRACT_LDOUBLE_WORDS(se,i0,i1,x);
+	GET_LDOUBLE_WORDS(se,i0,i1,x);
 	if(se<0x3fff) {			/* x < 1 */
 	    return (x-x)/(x-x);
-	} else if(hx >=0x401b) {	/* x > 2**28 */
-	    if(hx >=0x7fff) {		/* x is inf of NaN */
+	} else if(se >=0x401b) {	/* x > 2**28 */
+	    if(se >=0x7fff) {		/* x is inf of NaN */
 	        return x+x;
 	    } else
 		return __ieee754_logl(x)+ln2;	/* acoshl(huge)=logl(2x) */
 	} else if(((se-0x3fff)|i0|i1)==0) {
 	    return 0.0;			/* acosh(1) = 0 */
-	} else if (hx > 0x4000) {	/* 2**28 > x > 2 */
+	} else if (se > 0x4000) {	/* 2**28 > x > 2 */
 	    t=x*x;
 	    return __ieee754_logl(2.0*x-one/(x+__ieee754_sqrtl(t-one)));
 	} else {			/* 1<x<2 */
diff --git a/sysdeps/libm-ieee754/s_cbrtl.c b/sysdeps/libm-ieee754/s_cbrtl.c
index 03ebfe7eb8..9f45faa00c 100644
--- a/sysdeps/libm-ieee754/s_cbrtl.c
+++ b/sysdeps/libm-ieee754/s_cbrtl.c
@@ -53,7 +53,6 @@ G =  3.57142857142857150787e-01L; /* 5/14 */
 	long double x;
 #endif
 {
-	int32_t	hx;
 	long double r,s,t=0.0,w;
 	u_int32_t sign, se, x0, x1;
 
diff --git a/sysdeps/m68k/fpu/__math.h b/sysdeps/m68k/fpu/__math.h
index 4992aea561..0e3e2a3d8c 100644
--- a/sysdeps/m68k/fpu/__math.h
+++ b/sysdeps/m68k/fpu/__math.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 94, 96 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
@@ -39,30 +39,30 @@ Cambridge, MA 02139, USA.  */
   __m81_inline rettype							      \
   __m81_u(func) args
 
+/* Define the three variants of a math function that has a direct
+   implementation in the m68k fpu.  FUNC is the name for C (which will be
+   suffixed with f and l for the float and long double version, resp).  OP
+   is the name of the fpu operation (without leading f).  */
 #define	__inline_mathop(func, op)					      \
   __m81_defun (double, func, (double __mathop_x))			      \
   {									      \
     double __result;							      \
     __asm("f" __STRING(op) "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x));\
     return __result;							      \
-  }
-
-#define __inline_mathopf(func, op)					      \
-  __m81_defun (float, func, (float __mathop_x))				      \
+  }									      \
+  __m81_defun (float, func##f, (float __mathop_x))			      \
   {									      \
     float __result;							      \
     __asm("f" __STRING(op) "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x));\
     return __result;							      \
-  }
-
-#define __inline_mathopl(func, op)					      \
-  __m81_defun (long double, func, (long double __mathop_x))		      \
+  }									      \
+  __m81_defun (long double, func##l, (long double __mathop_x))		      \
   {									      \
     long double __result;						      \
     __asm("f" __STRING(op) "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x));\
     return __result;							      \
   }
-  
+
 /* ieee style elementary functions */
 __inline_mathop(__ieee754_acos, acos)
 __inline_mathop(__ieee754_asin, asin)
@@ -74,28 +74,6 @@ __inline_mathop(__ieee754_log, logn)
 __inline_mathop(__ieee754_sqrt, sqrt)
 __inline_mathop(__ieee754_atanh, atanh)
 
-/* ieee style elementary float functions */
-__inline_mathopf(__ieee754_acosf, acos)
-__inline_mathopf(__ieee754_asinf, asin)
-__inline_mathopf(__ieee754_coshf, cosh)
-__inline_mathopf(__ieee754_sinhf, sinh)
-__inline_mathopf(__ieee754_expf, etox)
-__inline_mathopf(__ieee754_log10f, log10)
-__inline_mathopf(__ieee754_logf, logn)
-__inline_mathopf(__ieee754_sqrtf, sqrt)
-__inline_mathopf(__ieee754_atanhf, atan)
-
-/* ieee style elementary long double functions */
-__inline_mathopl(__ieee754_acosl, acos)
-__inline_mathopl(__ieee754_asinl, asin)
-__inline_mathopl(__ieee754_coshl, cosh)
-__inline_mathopl(__ieee754_sinhl, sinh)
-__inline_mathopl(__ieee754_expl, etox)
-__inline_mathopl(__ieee754_log10l, log10)
-__inline_mathopl(__ieee754_logl, logn)
-__inline_mathopl(__ieee754_sqrtl, sqrt)
-__inline_mathopl(__ieee754_atanhl, atan)
-
 __inline_mathop(__atan, atan)
 __inline_mathop(__cos, cos)
 __inline_mathop(__sin, sin)
@@ -110,517 +88,226 @@ __inline_mathop(__log1p, lognp1)
 __inline_mathop(__logb, log2)
 __inline_mathop(__significand, getman)
 
-__inline_mathopf(__atanf, atan)
-__inline_mathopf(__cosf, cos)
-__inline_mathopf(__sinf, sin)
-__inline_mathopf(__tanf, tan)
-__inline_mathopf(__tanhf, tanh)
-__inline_mathopf(__fabsf, abs)
-__inline_mathopf(__sqrtf, sqrt)
-
-__inline_mathopf(__rintf, int)
-__inline_mathopf(__expm1f, etoxm1)
-__inline_mathopf(__log1pf, lognp1)
-__inline_mathopf(__logbf, log2)
-__inline_mathopf(__significandf, getman)
-
-__inline_mathopl(__atanl, atan)
-__inline_mathopl(__cosl, cos)
-__inline_mathopl(__sinl, sin)
-__inline_mathopl(__tanl, tan)
-__inline_mathopl(__tanhl, tanh)
-__inline_mathopl(__fabsl, abs)
-__inline_mathopl(__sqrtl, sqrt)
-
-__inline_mathopl(__rintl, int)
-__inline_mathopl(__expm1l, etoxm1)
-__inline_mathopl(__log1pl, lognp1)
-__inline_mathopl(__logbl, log2)
-__inline_mathopl(__significandl, getman)
-
-__m81_defun (double, __ieee754_remainder, (double __x, double __y))
-{
-  double __result;
-  __asm("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
-  return __result;
-}
-
-__m81_defun (double, __ldexp, (double __x, int __e))
-{
-  double __result;
-  double __double_e = (double) __e;
-  __asm("fscale%.x %1, %0" : "=f" (__result) : "f" (__double_e), "0" (__x));
-  return __result;
-}
-
-__m81_defun (double, __ieee754_fmod, (double __x, double __y))
-{
-  double __result;
-  __asm("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
-  return __result;
-}
-
-__m81_inline double
-__m81_u(__frexp)(double __value, int *__expptr)
-{
-  double __mantissa, __exponent;
-  __asm("fgetexp%.x %1, %0" : "=f" (__exponent) : "f" (__value));
-  __asm("fgetman%.x %1, %0" : "=f" (__mantissa) : "f" (__value));
-  *__expptr = (int) __exponent;
-  return __mantissa;
-}
-
-__m81_defun (double, __floor, (double __x))
-{
-  double __result;
-  unsigned long int __ctrl_reg;
-  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));
-  /* Set rounding towards negative infinity.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */ 
-		      : "dmi" ((__ctrl_reg & ~0x10) | 0x20));
-  /* Convert X to an integer, using -Inf rounding.  */
-  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));
-  /* Restore the previous rounding mode.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg));
-  return __result;
-}
-
-__m81_defun (double, __ieee754_pow, (double __x, double __y))
-{
-  double __result;
-  if (__x == 0.0)
-    {
-      if (__y <= 0.0)
-	__result = 0.0 / 0.0;
-      else
-	__result = 0.0;
-    }
-  else if (__y == 0.0 || __x == 1.0)
-    __result = 1.0;
-  else if (__y == 1.0)
-    __result = __x;
-  else if (__y == 2.0)
-    __result = __x * __x;
-  else if (__x == 10.0)
-    __asm("ftentox%.x %1, %0" : "=f" (__result) : "f" (__y));
-  else if (__x == 2.0)
-    __asm("ftwotox%.x %1, %0" : "=f" (__result) : "f" (__y));
-  else if (__x < 0.0)
-    {
-      double __temp = __m81_u (__rint) (__y);
-      if (__y == __temp)
-	{
-	  int i = (int) __y;
-	  __result = __m81_u(__ieee754_exp)(__y * __m81_u(__ieee754_log)(-__x));
-	  if (i & 1)
-	    __result = -__result;
-	}
-      else
-	__result = 0.0 / 0.0;
-    }
-  else
-    __result = __m81_u(__ieee754_exp)(__y * __m81_u(__ieee754_log)(__x));
-  return __result;
-}
-
-__m81_defun (double, __ceil, (double __x))
-{
-  double __result;
-  unsigned long int __ctrl_reg;
-  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));
-  /* Set rounding towards positive infinity.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg | 0x30));
-  /* Convert X to an integer, using +Inf rounding.  */
-  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));
-  /* Restore the previous rounding mode.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg));
-  return __result;
-}
-
-__m81_inline double
-__m81_u(__modf)(double __value, double *__iptr)
-{
-  double __modf_int;
-  __asm ("fintrz%.x %1, %0" : "=f" (__modf_int) : "f" (__value));
-  *__iptr = __modf_int;
-  return __value - __modf_int;
-}
-
-__m81_defun (int, __isinf, (double __value))
-{
-  /* There is no branch-condition for infinity,
-     so we must extract and examine the condition codes manually.  */
-  unsigned long int __fpsr;
-  __asm("ftst%.x %1\n"
-	"fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));
-  return (__fpsr & (2 << 24)) ? (__fpsr & (8 << 24) ? -1 : 1) : 0;
-}
-
-__m81_defun (int, __isnan, (double __value))
-{
-  char __result;
-  __asm("ftst%.x %1\n"
-	"fsun %0" : "=dm" (__result) : "f" (__value));
-  return __result;
-}
-
-__m81_defun (int, __finite, (double __value))
-{
-  /* There is no branch-condition for infinity, so we must extract and
-     examine the condition codes manually.  */
-  unsigned long int __fpsr;
-  __asm ("ftst%.x %1\n"
-	 "fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));
-  return (__fpsr & (3 << 24)) == 0;
-}
-
-__m81_defun (int, __ilogb, (double __x))
-{
-  double __result;
-  __asm("fgetexp%.x %1, %0" : "=f" (__result) : "f" (__x));
-  return (int) __result;
-}
-
-__m81_defun (double, __ieee754_scalb, (double __x, double __n))
-{
-  double __result;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__n), "0" (__x));
-  return __result;
-}
-
-__m81_defun (double, __scalbn, (double __x, int __n))
-{
-  double __result;
-  double __double_n = (double) __n;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__double_n), "0" (__x));
-  return __result;
-}
-
-__m81_defun (float, __ieee754_remainderf, (float __x, float __y))
-{
-  float __result;
-  __asm("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
-  return __result;
-}
-
-__m81_defun (float, __ldexpf, (float __x, int __e))
-{
-  float __result;
-  float __float_e = (float) __e;
-  __asm("fscale%.x %1, %0" : "=f" (__result) : "f" (__float_e), "0" (__x));
-  return __result;
-}
-
-__m81_defun (float, __ieee754_fmodf, (float __x, float __y))
-{
-  float __result;
-  __asm("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
-  return __result;
-}
-
-__m81_inline float
-__m81_u(__frexpf)(float __value, int *__expptr)
-{
-  float __mantissa, __exponent;
-  __asm("fgetexp%.x %1, %0" : "=f" (__exponent) : "f" (__value));
-  __asm("fgetman%.x %1, %0" : "=f" (__mantissa) : "f" (__value));
-  *__expptr = (int) __exponent;
-  return __mantissa;
-}
-
-__m81_defun (float, __floorf, (float __x))
-{
-  float __result;
-  unsigned long int __ctrl_reg;
-  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));
-  /* Set rounding towards negative infinity.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */ 
-		      : "dmi" ((__ctrl_reg & ~0x10) | 0x20));
-  /* Convert X to an integer, using -Inf rounding.  */
-  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));
-  /* Restore the previous rounding mode.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg));
-  return __result;
-}
-
-__m81_defun (float, __ieee754_powf, (float __x, float __y))
-{
-  float __result;
-  if (__x == 0.0f)
-    {
-      if (__y <= 0.0f)
-	__result = 0.0f / 0.0f;
-      else
-	__result = 0.0f;
-    }
-  else if (__y == 0.0f || __x == 1.0f)
-    __result = 1.0;
-  else if (__y == 1.0f)
-    __result = __x;
-  else if (__y == 2.0f)
-    __result = __x * __x;
-  else if (__x == 10.0f)
-    __asm("ftentox%.x %1, %0" : "=f" (__result) : "f" (__y));
-  else if (__x == 2.0f)
-    __asm("ftwotox%.x %1, %0" : "=f" (__result) : "f" (__y));
-  else if (__x < 0.0f)
-    {
-      float __temp = __m81_u(__rintf)(__y);
-      if (__y == __temp)
-	{
-	  int i = (int) __y;
-	  __result = __m81_u(__ieee754_expf)(__y * __m81_u(__ieee754_logf)(-__x));
-	  if (i & 1)
-	    __result = -__result;
-	}
-      else
-	__result = 0.0f / 0.0f;
-    }
-  else
-    __result = __m81_u(__ieee754_expf)(__y * __m81_u(__ieee754_logf)(__x));
-  return __result;
-}
-
-__m81_defun (float, __ceilf, (float __x))
-{
-  float __result;
-  unsigned long int __ctrl_reg;
-  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));
-  /* Set rounding towards positive infinity.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg | 0x30));
-  /* Convert X to an integer, using +Inf rounding.  */
-  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));
-  /* Restore the previous rounding mode.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg));
-  return __result;
-}
-
-__m81_inline float
-__m81_u(__modff)(float __value, float *__iptr)
-{
-  float __modf_int;
-  __asm ("fintrz%.x %1, %0" : "=f" (__modf_int) : "f" (__value));
-  *__iptr = __modf_int;
-  return __value - __modf_int;
-}
-
-__m81_defun (int, __isinff, (float __value))
-{
-  /* There is no branch-condition for infinity,
-     so we must extract and examine the condition codes manually.  */
-  unsigned long int __fpsr;
-  __asm("ftst%.x %1\n"
-	"fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));
-  return (__fpsr & (2 << 24)) ? (__fpsr & (8 << 24) ? -1 : 1) : 0;
-}
-
-__m81_defun (int, __isnanf, (float __value))
-{
-  char __result;
-  __asm("ftst%.x %1\n"
-	"fsun %0" : "=dm" (__result) : "f" (__value));
-  return __result;
-}
-
-__m81_defun (int, __finitef, (float __value))
-{
-  /* There is no branch-condition for infinity, so we must extract and
-     examine the condition codes manually.  */
-  unsigned long int __fpsr;
-  __asm ("ftst%.x %1\n"
-	 "fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));
-  return (__fpsr & (3 << 24)) == 0;
-}
-
-__m81_defun (int, __ilogbf, (float __x))
-{
-  float __result;
-  __asm("fgetexp%.x %1, %0" : "=f" (__result) : "f" (__x));
-  return (int) __result;
-}
-
-__m81_defun (float, __ieee754_scalbf, (float __x, float __n))
-{
-  float __result;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__n), "0" (__x));
-  return __result;
-}
-
-__m81_defun (float, __scalbnf, (float __x, int __n))
-{
-  float __result;
-  float __float_n = (float) __n;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__float_n), "0" (__x));
-  return __result;
-}
-
-__m81_defun (long double, __ieee754_remainderl, (long double __x,
-						 long double __y))
-{
-  long double __result;
-  __asm ("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
-  return __result;
-}
-
-__m81_defun (long double, __ldexpl, (long double __x, int __e))
-{
-  long double __result;
-  long double __float_e = (long double) __e;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__float_e), "0" (__x));
-  return __result;
-}
-
-__m81_defun (long double, __ieee754_fmodl, (long double __x, long double __y))
-{
-  long double __result;
-  __asm("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
-  return __result;
-}
-
-__m81_inline long double
-__m81_u(__frexpl)(long double __value, int *__expptr)
-{
-  long double __mantissa, __exponent;
-  __asm("fgetexp%.x %1, %0" : "=f" (__exponent) : "f" (__value));
-  __asm("fgetman%.x %1, %0" : "=f" (__mantissa) : "f" (__value));
-  *__expptr = (int) __exponent;
-  return __mantissa;
-}
-
-__m81_defun (long double, __floorl, (long double __x))
-{
-  long double __result;
-  unsigned long int __ctrl_reg;
-  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));
-  /* Set rounding towards negative infinity.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */ 
-		      : "dmi" ((__ctrl_reg & ~0x10) | 0x20));
-  /* Convert X to an integer, using -Inf rounding.  */
-  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));
-  /* Restore the previous rounding mode.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg));
-  return __result;
-}
-
-__m81_defun (long double, __ieee754_powl, (long double __x, long double __y))
-{
-  long double __result;
-  if (__x == 0.0l)
-    {
-      if (__y <= 0.0l)
-	__result = 0.0l / 0.0l;
-      else
-	__result = 0.0l;
-    }
-  else if (__y == 0.0l || __x == 1.0l)
-    __result = 1.0;
-  else if (__y == 1.0l)
-    __result = __x;
-  else if (__y == 2.0l)
-    __result = __x * __x;
-  else if (__x == 10.0l)
-    __asm("ftentox%.x %1, %0" : "=f" (__result) : "f" (__y));
-  else if (__x == 2.0l)
-    __asm("ftwotox%.x %1, %0" : "=f" (__result) : "f" (__y));
-  else if (__x < 0.0l)
-    {
-      long double __temp = __m81_u(__rintl)(__y);
-      if (__y == __temp)
-	{
-	  int i = (int) __y;
-	  __result
-	    = __m81_u(__ieee754_expl)(__y * __m81_u(__ieee754_logl)(-__x));
-	  if (i & 1)
-	    __result = -__result;
-	}
-      else
-	__result = 0.0l / 0.0l;
-    }
-  else
-    __result = __m81_u(__ieee754_expl)(__y * __m81_u(__ieee754_logl)(__x));
-  return __result;
-}
-
-__m81_defun (long double, __ceill, (long double __x))
-{
-  long double __result;
-  unsigned long int __ctrl_reg;
-  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));
-  /* Set rounding towards positive infinity.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg | 0x30));
-  /* Convert X to an integer, using +Inf rounding.  */
-  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));
-  /* Restore the previous rounding mode.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg));
-  return __result;
-}
-
-__m81_inline long double
-__m81_u(__modfl)(long double __value, long double *__iptr)
-{
-  long double __modf_int;
-  __asm ("fintrz%.x %1, %0" : "=f" (__modf_int) : "f" (__value));
-  *__iptr = __modf_int;
-  return __value - __modf_int;
-}
-
-__m81_defun (int, __isinfl, (long double __value))
-{
-  /* There is no branch-condition for infinity,
-     so we must extract and examine the condition codes manually.  */
-  unsigned long int __fpsr;
-  __asm("ftst%.x %1\n"
-	"fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));
-  return (__fpsr & (2 << 24)) ? (__fpsr & (8 << 24) ? -1 : 1) : 0;
-}
-
-__m81_defun (int, __isnanl, (long double __value))
-{
-  char __result;
-  __asm("ftst%.x %1\n"
-	"fsun %0" : "=dm" (__result) : "f" (__value));
-  return __result;
-}
-
-__m81_defun (int, __finitel, (long double __value))
-{
-  /* There is no branch-condition for infinity, so we must extract and
-     examine the condition codes manually.  */
-  unsigned long int __fpsr;
-  __asm ("ftst%.x %1\n"
-	 "fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));
-  return (__fpsr & (3 << 24)) == 0;
-}
-
-__m81_defun (int, __ilogbl, (long double __x))
-{
-  long double __result;
-  __asm("fgetexp%.x %1, %0" : "=f" (__result) : "f" (__x));
-  return (int) __result;
-}
-
-__m81_defun (long double, __ieee754_scalbl, (long double __x, long double __n))
-{
-  long double __result;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__n), "0" (__x));
-  return __result;
-}
-
-__m81_defun (long double, __scalbnl, (long double __x, int __n))
-{
-  long double __result;
-  long double __float_n = (long double) __n;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__float_n), "0" (__x));
-  return __result;
-}
+/* This macro contains the definition for the rest of the inline
+   functions, using __FLOAT_TYPE as the domain type and __S as the suffix
+   for the function names.  */
+
+#define __inline_functions(__float_type, __s)				     \
+__m81_defun (__float_type,						     \
+	     __ieee754_remainder##__s, (__float_type __x, __float_type __y)) \
+{									     \
+  __float_type __result;						     \
+  __asm("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));	     \
+  return __result;							     \
+}									     \
+									     \
+__m81_defun (__float_type,						     \
+	     __ieee754_fmod##__s, (__float_type __x, __float_type __y))	     \
+{									     \
+  __float_type __result;						     \
+  __asm("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));	     \
+  return __result;							     \
+}									     \
+									     \
+__m81_defun (__float_type,						     \
+	     __ieee754_atan2##__s, (__float_type __y, __float_type __x))     \
+{									     \
+  __float_type __pi, __pi_2;						     \
+									     \
+  __asm ("fmovecr%.x %#0, %0" : "=f" (__pi));				     \
+  __asm ("fscale%.w %#-1, %0" : "=f" (__pi_2) : "0" (__pi));		     \
+  if (__x > 0)								     \
+    {									     \
+      if (__y > 0)							     \
+	{								     \
+	  if (__x > __y)						     \
+	    return __m81_u(__atan##__s) (__y / __x);			     \
+	  else								     \
+	    return __pi_2 - __m81_u(__atan##__s) (__x / __y);		     \
+	}								     \
+      else								     \
+	{								     \
+	  if (__x > -__y)						     \
+	    return __m81_u(__atan##__s) (__y / __x);			     \
+	  else								     \
+	    return -__pi_2 - __m81_u(__atan##__s) (__x / __y);		     \
+	}								     \
+    }									     \
+  else									     \
+    {									     \
+      if (__y > 0)							     \
+	{								     \
+	  if (-__x < __y)						     \
+	    return __pi + __m81_u(__atan##__s) (__y / __x);		     \
+	  else								     \
+	    return __pi_2 - __m81_u(__atan##__s) (__x / __y);		     \
+	}								     \
+      else								     \
+	{								     \
+	  if (-__x > -__y)						     \
+	    return -__pi + __m81_u(__atan##__s) (__y / __x);		     \
+	  else								     \
+	    return -__pi_2 - __m81_u(__atan##__s) (__x / __y);		     \
+	}								     \
+    }									     \
+}									     \
+									     \
+__m81_inline __float_type						     \
+__m81_u(__frexp##__s)(__float_type __value, int *__expptr)		     \
+{									     \
+  __float_type __mantissa, __exponent;					     \
+  int __iexponent;							     \
+  if (__value == 0.0)							     \
+    {									     \
+      *__expptr = 0;							     \
+      return __value;							     \
+    }									     \
+  __asm("fgetexp%.x %1, %0" : "=f" (__exponent) : "f" (__value));	     \
+  __iexponent = (int) __exponent + 1;					     \
+  *__expptr = __iexponent;						     \
+  __asm("fscale%.l %2, %0" : "=f" (__mantissa)				     \
+	: "0" (__value), "dmi" (-__iexponent));				     \
+  return __mantissa;							     \
+}									     \
+									     \
+__m81_defun (__float_type, __floor##__s, (__float_type __x))		     \
+{									     \
+  __float_type __result;						     \
+  unsigned long int __ctrl_reg;						     \
+  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));		     \
+  /* Set rounding towards negative infinity.  */			     \
+  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */ 		     \
+		      : "dmi" ((__ctrl_reg & ~0x10) | 0x20));		     \
+  /* Convert X to an integer, using -Inf rounding.  */			     \
+  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));	     \
+  /* Restore the previous rounding mode.  */				     \
+  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */		     \
+		      : "dmi" (__ctrl_reg));				     \
+  return __result;							     \
+}									     \
+									     \
+__m81_defun (__float_type,						     \
+	     __ieee754_pow##__s, (__float_type __x, __float_type __y))	     \
+{									     \
+  __float_type __result;						     \
+  if (__x == 0.0)							     \
+    {									     \
+      if (__y <= 0.0)							     \
+	__result = 0.0 / 0.0;						     \
+      else								     \
+	__result = 0.0;							     \
+    }									     \
+  else if (__y == 0.0 || __x == 1.0)					     \
+    __result = 1.0;							     \
+  else if (__y == 1.0)							     \
+    __result = __x;							     \
+  else if (__y == 2.0)							     \
+    __result = __x * __x;						     \
+  else if (__x == 10.0)							     \
+    __asm("ftentox%.x %1, %0" : "=f" (__result) : "f" (__y));		     \
+  else if (__x == 2.0)							     \
+    __asm("ftwotox%.x %1, %0" : "=f" (__result) : "f" (__y));		     \
+  else if (__x < 0.0)							     \
+    {									     \
+      __float_type __temp = __m81_u (__rint##__s) (__y);		     \
+      if (__y == __temp)						     \
+	{								     \
+	  int __i = (int) __y;						     \
+	  __result = (__m81_u(__ieee754_exp##__s)			     \
+		      (__y * __m81_u(__ieee754_log##__s) (-__x)));	     \
+	  if (__i & 1)							     \
+	    __result = -__result;					     \
+	}								     \
+      else								     \
+	__result = 0.0 / 0.0;						     \
+    }									     \
+  else									     \
+    __result = (__m81_u(__ieee754_exp##__s)				     \
+		(__y * __m81_u(__ieee754_log##__s) (__x)));		     \
+  return __result;							     \
+}									     \
+									     \
+__m81_defun (__float_type, __ceil##__s, (__float_type __x))		     \
+{									     \
+  __float_type __result;						     \
+  unsigned long int __ctrl_reg;						     \
+  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));		     \
+  /* Set rounding towards positive infinity.  */			     \
+  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */		     \
+		      : "dmi" (__ctrl_reg | 0x30));			     \
+  /* Convert X to an integer, using +Inf rounding.  */			     \
+  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));	     \
+  /* Restore the previous rounding mode.  */				     \
+  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */		     \
+		      : "dmi" (__ctrl_reg));				     \
+  return __result;							     \
+}									     \
+									     \
+__m81_inline __float_type						     \
+__m81_u(__modf##__s)(__float_type __value, __float_type *__iptr)	     \
+{									     \
+  __float_type __modf_int;						     \
+  __asm ("fintrz%.x %1, %0" : "=f" (__modf_int) : "f" (__value));	     \
+  *__iptr = __modf_int;							     \
+  return __value - __modf_int;						     \
+}									     \
+									     \
+__m81_defun (int, __isinf##__s, (__float_type __value))			     \
+{									     \
+  /* There is no branch-condition for infinity,				     \
+     so we must extract and examine the condition codes manually.  */	     \
+  unsigned long int __fpsr;						     \
+  __asm("ftst%.x %1\n"							     \
+	"fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));	     \
+  return (__fpsr & (2 << 24)) ? (__fpsr & (8 << 24) ? -1 : 1) : 0;	     \
+}									     \
+									     \
+__m81_defun (int, __isnan##__s, (__float_type __value))			     \
+{									     \
+  char __result;							     \
+  __asm("ftst%.x %1\n"							     \
+	"fsun %0" : "=dm" (__result) : "f" (__value));			     \
+  return __result;							     \
+}									     \
+									     \
+__m81_defun (int, __finite##__s, (__float_type __value))		     \
+{									     \
+  /* There is no branch-condition for infinity, so we must extract and	     \
+     examine the condition codes manually.  */				     \
+  unsigned long int __fpsr;						     \
+  __asm ("ftst%.x %1\n"							     \
+	 "fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));	     \
+  return (__fpsr & (3 << 24)) == 0;					     \
+}									     \
+									     \
+__m81_defun (int, __ilogb##__s, (__float_type __x))			     \
+{									     \
+  __float_type __result;						     \
+  if (__x == 0.0)							     \
+    return 0x80000001;							     \
+  __asm("fgetexp%.x %1, %0" : "=f" (__result) : "f" (__x));		     \
+  return (int) __result;						     \
+}									     \
+									     \
+__m81_defun (__float_type,						     \
+	     __ieee754_scalb##__s, (__float_type __x, __float_type __n))     \
+{									     \
+  __float_type __result;						     \
+  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__n), "0" (__x));	     \
+  return __result;							     \
+}									     \
+									     \
+__m81_defun (__float_type, __scalbn##__s, (__float_type __x, int __n))	     \
+{									     \
+  __float_type __result;						     \
+  __asm ("fscale%.l %1, %0" : "=f" (__result) : "dmi" (__n), "0" (__x));     \
+  return __result;							     \
+}
+
+/* This defines the three variants of the inline functions.  */
+__inline_functions (double, )
+__inline_functions (float, f)
+__inline_functions (long double, l)
+#undef __inline_functions
 
 #endif	/* GCC.  */
diff --git a/sysdeps/m68k/fpu/s_ldexp.c b/sysdeps/m68k/fpu/s_ldexp.c
deleted file mode 100644
index 18f4d43c37..0000000000
--- a/sysdeps/m68k/fpu/s_ldexp.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright (C) 1996 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#define __NO_M81_MATH_INLINES
-#include <math.h>
-
-#ifndef FUNC
-#define FUNC ldexp
-#endif
-#ifndef float_type
-#define float_type double
-#endif
-
-#define __CONCATX(a,b) __CONCAT(a,b)
-
-float_type
-DEFUN(__CONCATX(__,FUNC), (x, exp), float_type x AND int exp)
-{
-  return __m81_u(__CONCATX(__,FUNC))(x, exp);
-}
-
-#define weak_aliasx(a,b) weak_alias(a,b)
-weak_aliasx (__CONCATX(__,FUNC), FUNC)
diff --git a/sysdeps/m68k/fpu/s_ldexpf.c b/sysdeps/m68k/fpu/s_ldexpf.c
deleted file mode 100644
index 81a6b28acc..0000000000
--- a/sysdeps/m68k/fpu/s_ldexpf.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifndef FUNC
-#define FUNC ldexpf
-#endif
-#define float_type float
-#include <s_ldexp.c>
diff --git a/sysdeps/m68k/fpu/s_ldexpl.c b/sysdeps/m68k/fpu/s_ldexpl.c
deleted file mode 100644
index 25796b75f4..0000000000
--- a/sysdeps/m68k/fpu/s_ldexpl.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifndef FUNC
-#define FUNC ldexpl
-#endif
-#define float_type long double
-#include <s_ldexp.c>
diff --git a/sysdeps/m68k/fpu/s_scalbn.c b/sysdeps/m68k/fpu/s_scalbn.c
index 433aa757d2..4039bba652 100644
--- a/sysdeps/m68k/fpu/s_scalbn.c
+++ b/sysdeps/m68k/fpu/s_scalbn.c
@@ -1,2 +1,40 @@
+/* Copyright (C) 1996 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., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#define __NO_M81_MATH_INLINES
+#include <math.h>
+
+#ifndef FUNC
 #define FUNC scalbn
 #include <s_ldexp.c>
+#endif
+#ifndef float_type
+#define float_type double
+#endif
+
+#define __CONCATX(a,b) __CONCAT(a,b)
+
+float_type
+DEFUN(__CONCATX(__,FUNC), (x, exp), float_type x AND int exp)
+{
+  return __m81_u(__CONCATX(__,FUNC))(x, exp);
+}
+
+#define weak_aliasx(a,b) weak_alias(a,b)
+weak_aliasx (__CONCATX(__,FUNC), FUNC)
diff --git a/sysdeps/m68k/fpu/s_scalbnf.c b/sysdeps/m68k/fpu/s_scalbnf.c
index 00461dc30c..55d64fd502 100644
--- a/sysdeps/m68k/fpu/s_scalbnf.c
+++ b/sysdeps/m68k/fpu/s_scalbnf.c
@@ -1,2 +1,6 @@
+#ifndef FUNC
 #define FUNC scalbnf
 #include <s_ldexpf.c>
+#endif
+#define float_type float
+#include <s_scalbn.c>
diff --git a/sysdeps/m68k/fpu/s_scalbnl.c b/sysdeps/m68k/fpu/s_scalbnl.c
index 83e8bfefc1..84849921dc 100644
--- a/sysdeps/m68k/fpu/s_scalbnl.c
+++ b/sysdeps/m68k/fpu/s_scalbnl.c
@@ -1,2 +1,6 @@
+#ifndef FUNC
 #define FUNC scalbnl
 #include <s_ldexpl.c>
+#endif
+#define float_type long double
+#include <s_scalbn.c>
diff --git a/sysdeps/posix/cuserid.c b/sysdeps/posix/cuserid.c
index b874e909ce..2fe535ea1d 100644
--- a/sysdeps/posix/cuserid.c
+++ b/sysdeps/posix/cuserid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1996 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
@@ -16,22 +16,19 @@ License along with the GNU C Library; see the file COPYING.LIB.  If
 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
-#include <ansidecl.h>
 #include <stdio.h>
 #include <string.h>
 #include <pwd.h>
 
-extern int EXFUN(geteuid, (NOARGS));
-
-
 /* Return the username of the caller.
    If S is not NULL, it points to a buffer of at least L_cuserid bytes
    into which the name is copied; otherwise, a static buffer is used.  */
 char *
-DEFUN(cuserid, (s), char *s)
+cuserid (s)
+     char *s;
 {
   static char name[L_cuserid];
-  struct passwd *pwent = getpwuid(geteuid());
+  struct passwd *pwent = getpwuid (geteuid ());
 
   if (pwent == NULL)
     {
@@ -42,5 +39,5 @@ DEFUN(cuserid, (s), char *s)
 
   if (s == NULL)
     s = name;
-  return strcpy(s, pwent->pw_name);
+  return strcpy (s, pwent->pw_name);
 }
diff --git a/sysdeps/posix/gettimeofday.c b/sysdeps/posix/gettimeofday.c
index c3b8108258..3c079a5af2 100644
--- a/sysdeps/posix/gettimeofday.c
+++ b/sysdeps/posix/gettimeofday.c
@@ -56,7 +56,7 @@ __gettimeofday (tv, tz)
       save_tzname[0] = __tzname[0];
       save_tzname[1] = __tzname[1];
 
-      tmp = localtime (&timer, &tm);
+      tmp = localtime_r (&timer, &tm);
 
       tz->tz_minuteswest = __timezone / 60;
       tz->tz_dsttime = __daylight;
diff --git a/sysdeps/stub/fpu_control.h b/sysdeps/stub/fpu_control.h
index 65f58824ae..832c15aac9 100644
--- a/sysdeps/stub/fpu_control.h
+++ b/sysdeps/stub/fpu_control.h
@@ -43,4 +43,4 @@ extern void __setfpucw __P ((fpu_control_t));
 
 __END_DECLS
 
-#endif /* _M68K_FPU_CONTROL_H */
+#endif /* _FPU_CONTROL_H */
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.S b/sysdeps/unix/sysv/linux/i386/sysdep.S
index 7d5444d6a6..0f3e31dbce 100644
--- a/sysdeps/unix/sysv/linux/i386/sysdep.S
+++ b/sysdeps/unix/sysv/linux/i386/sysdep.S
@@ -16,6 +16,8 @@ License along with the GNU C Library; see the file COPYING.LIB.  If
 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
+#include <sysdep.h>
+
 /* Because the Linux version is in fact i386/ELF and the start.? file
    for this system (sysdeps/i386/elf/start.S) is also used by The Hurd
    and therefore this files must not contain the definition of the
@@ -43,9 +45,7 @@ _errno = errno	/* This name is expected by hj libc.so.5 startup code.  */
    The code for Linux is almost identical to the canonical Unix/i386
    code, except that the error number in %eax is negated.  */
 
-	.globl	__syscall_error
-	.type	__syscall_error,@function
-__syscall_error:
+ENTRY (__syscall_error)
 	negl %eax
 
 #define __syscall_error __syscall_error_1
@@ -54,10 +54,7 @@ __syscall_error:
 #endif	/* !PIC */
 
 
-#ifdef	_LIBC_REENTRANT
-	.globl	__errno_location
-	.type	__errno_location,@function
-__errno_location:
+ENTRY (__errno_location)
 #ifdef PIC
 	call .L2
 .L2:	popl %ecx
@@ -69,4 +66,3 @@ __errno_location:
 	ret
 .Lfe1:
 	.size	__errno_location, .Lfe1-__errno_location
-#endif
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h
index 96470a19b9..cbd7b5553b 100644
--- a/sysdeps/unix/sysv/linux/i386/sysdep.h
+++ b/sysdeps/unix/sysv/linux/i386/sysdep.h
@@ -17,6 +17,9 @@ License along with the GNU C Library; see the file COPYING.LIB.  If
 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
+#ifndef _LINUX_I386_SYSDEP_H
+#define _LINUX_I386_SYSDEP_H 1
+
 /* There is some commonality.  */
 #include <sysdeps/unix/i386/sysdep.h>
 
@@ -179,3 +182,5 @@ syscall_error:								      \
 #define _POPARGS_5	_POPARGS_4; popl %edi
 
 #endif	/* ASSEMBLER */
+
+#endif /* linux/i386/sysdep.h */
diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep.S b/sysdeps/unix/sysv/linux/m68k/sysdep.S
index 674715f824..b47e167159 100644
--- a/sysdeps/unix/sysv/linux/m68k/sysdep.S
+++ b/sysdeps/unix/sysv/linux/m68k/sysdep.S
@@ -62,7 +62,6 @@ __syscall_error:
 	.size	__syscall_error, . - __syscall_error
 #endif /* PIC */
 
-#ifdef	_LIBC_REENTRANT
 	.globl	__errno_location
 	.type	__errno_location, @function
 __errno_location:
@@ -73,4 +72,3 @@ __errno_location:
 #endif
 	rts
 	.size	__errno_location, . - __errno_location
-#endif