mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-10 07:10:06 +00:00
Fix m68k bits/mathinline.h attributes (bug 22631).
m68k bits/mathinline.h declares various functions with const attributes. These are inappropriate for functions that have results depending on the rounding mode; the machine-independent bits/mathcalls.h only uses const attributes for a very few functions with no rounding mode dependence, and the m68k header should do likewise. GCC uses pure for such functions with -frounding-math, resulting in GCC mainline warning for conflicts with between the header and the built-in attributes and glibc failing to build for m68k with GCC mainline. This patch fixes the attributes to avoid using const except when bits/mathcalls.h does so. (There are a few functions where maybe bits/mathcalls.h could do so but doesn't, but keeping the headers in sync in this regard seems to be the safe approach.) Tested compilation with build-many-glibcs.py with GCC mainline. [BZ #22631] * sysdeps/m68k/m680x0/fpu/bits/mathinline.h (__m81_defun): Add argument for attrubutes. All callers changed. (__inline_mathop1): Likewise. All callers changed. (__inline_mathop): Likewise. All callers changed. [__USE_MISC] (scalbn): Use __inline_forward instead of __inline_forward_c. [__USE_ISOC99] (scalbln): Likewise. [__USE_ISOC99] (nearbyint): Likewise. [__USE_ISOC99] (lrint): Likewise. [__USE_MISC] (scalbnf): Likewise. [__USE_ISOC99] (scalblnf): Likewise. [__USE_ISOC99] (nearbyintf): Likewise. [__USE_ISOC99] (lrintf): Likewise. [__USE_MISC] (scalbnl): Likewise. [__USE_ISOC99] (scalblnl): Likewise. [__USE_ISOC99] (nearbyintl): Likewise. [__USE_ISOC99] (lrintl): Likewise. * sysdeps/m68k/m680x0/fpu/mathimpl.h: All callers of __inline_mathop and __m81_defun changed.
This commit is contained in:
parent
8e52f573a1
commit
6642518592
21
ChangeLog
21
ChangeLog
@ -1,5 +1,26 @@
|
||||
2017-12-19 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
[BZ #22631]
|
||||
* sysdeps/m68k/m680x0/fpu/bits/mathinline.h (__m81_defun): Add
|
||||
argument for attrubutes. All callers changed.
|
||||
(__inline_mathop1): Likewise. All callers changed.
|
||||
(__inline_mathop): Likewise. All callers changed.
|
||||
[__USE_MISC] (scalbn): Use __inline_forward instead of
|
||||
__inline_forward_c.
|
||||
[__USE_ISOC99] (scalbln): Likewise.
|
||||
[__USE_ISOC99] (nearbyint): Likewise.
|
||||
[__USE_ISOC99] (lrint): Likewise.
|
||||
[__USE_MISC] (scalbnf): Likewise.
|
||||
[__USE_ISOC99] (scalblnf): Likewise.
|
||||
[__USE_ISOC99] (nearbyintf): Likewise.
|
||||
[__USE_ISOC99] (lrintf): Likewise.
|
||||
[__USE_MISC] (scalbnl): Likewise.
|
||||
[__USE_ISOC99] (scalblnl): Likewise.
|
||||
[__USE_ISOC99] (nearbyintl): Likewise.
|
||||
[__USE_ISOC99] (lrintl): Likewise.
|
||||
* sysdeps/m68k/m680x0/fpu/mathimpl.h: All callers of
|
||||
__inline_mathop and __m81_defun changed.
|
||||
|
||||
* scripts/build-many-glibcs.py (Context.add_all_configs): Specify
|
||||
CPU or FPU for ARM hard-float configurations.
|
||||
|
||||
|
@ -46,9 +46,9 @@
|
||||
# define __M81_MATH_INLINES 1
|
||||
#endif
|
||||
|
||||
/* Define a const math function. */
|
||||
#define __m81_defun(rettype, func, args) \
|
||||
__m81_inline rettype __attribute__((__const__)) \
|
||||
/* Define a math function. */
|
||||
#define __m81_defun(rettype, func, args, attrs) \
|
||||
__m81_inline rettype attrs \
|
||||
__m81_nth (__m81_u(func) args)
|
||||
|
||||
/* Define the three variants of a math function that has a direct
|
||||
@ -57,17 +57,17 @@
|
||||
is the name of the fpu operation (without leading f). */
|
||||
|
||||
#ifdef __USE_ISOC99
|
||||
# define __inline_mathop(func, op) \
|
||||
__inline_mathop1(double, func, op) \
|
||||
__inline_mathop1(float, __CONCAT(func,f), op) \
|
||||
__inline_mathop1(long double, __CONCAT(func,l), op)
|
||||
# define __inline_mathop(func, op, attrs) \
|
||||
__inline_mathop1(double, func, op, attrs) \
|
||||
__inline_mathop1(float, __CONCAT(func,f), op, attrs) \
|
||||
__inline_mathop1(long double, __CONCAT(func,l), op, attrs)
|
||||
#else
|
||||
# define __inline_mathop(func, op) \
|
||||
__inline_mathop1(double, func, op)
|
||||
# define __inline_mathop(func, op, attrs) \
|
||||
__inline_mathop1(double, func, op, attrs)
|
||||
#endif
|
||||
|
||||
#define __inline_mathop1(float_type,func, op) \
|
||||
__m81_defun (float_type, func, (float_type __mathop_x)) \
|
||||
#define __inline_mathop1(float_type,func, op, attrs) \
|
||||
__m81_defun (float_type, func, (float_type __mathop_x), attrs) \
|
||||
{ \
|
||||
float_type __result; \
|
||||
__asm __volatile__ ("f" __STRING(op) "%.x %1, %0" \
|
||||
@ -75,43 +75,43 @@
|
||||
return __result; \
|
||||
}
|
||||
|
||||
__inline_mathop(__atan, atan)
|
||||
__inline_mathop(__cos, cos)
|
||||
__inline_mathop(__sin, sin)
|
||||
__inline_mathop(__tan, tan)
|
||||
__inline_mathop(__tanh, tanh)
|
||||
__inline_mathop(__fabs, abs)
|
||||
__inline_mathop(__atan, atan,)
|
||||
__inline_mathop(__cos, cos,)
|
||||
__inline_mathop(__sin, sin,)
|
||||
__inline_mathop(__tan, tan,)
|
||||
__inline_mathop(__tanh, tanh,)
|
||||
__inline_mathop(__fabs, abs, __attribute__ ((__const__)))
|
||||
|
||||
#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
|
||||
__inline_mathop(__rint, int)
|
||||
__inline_mathop(__expm1, etoxm1)
|
||||
__inline_mathop(__log1p, lognp1)
|
||||
__inline_mathop(__rint, int,)
|
||||
__inline_mathop(__expm1, etoxm1,)
|
||||
__inline_mathop(__log1p, lognp1,)
|
||||
#endif
|
||||
|
||||
#ifdef __USE_MISC
|
||||
__inline_mathop(__significand, getman)
|
||||
__inline_mathop(__significand, getman,)
|
||||
#endif
|
||||
|
||||
#ifdef __USE_ISOC99
|
||||
__inline_mathop(__trunc, intrz)
|
||||
__inline_mathop(__trunc, intrz, __attribute__ ((__const__)))
|
||||
#endif
|
||||
|
||||
#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
|
||||
|
||||
__inline_mathop(atan, atan)
|
||||
__inline_mathop(tanh, tanh)
|
||||
__inline_mathop(atan, atan,)
|
||||
__inline_mathop(tanh, tanh,)
|
||||
|
||||
# if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
|
||||
__inline_mathop(rint, int)
|
||||
__inline_mathop(log1p, lognp1)
|
||||
__inline_mathop(rint, int,)
|
||||
__inline_mathop(log1p, lognp1,)
|
||||
# endif
|
||||
|
||||
# ifdef __USE_MISC
|
||||
__inline_mathop(significand, getman)
|
||||
__inline_mathop(significand, getman,)
|
||||
# endif
|
||||
|
||||
# ifdef __USE_ISOC99
|
||||
__inline_mathop(trunc, intrz)
|
||||
__inline_mathop(trunc, intrz, __attribute__ ((__const__)))
|
||||
# endif
|
||||
|
||||
#endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */
|
||||
@ -121,7 +121,8 @@ __inline_mathop(trunc, intrz)
|
||||
that adds the suffix for the function names. */
|
||||
|
||||
#define __inline_functions(float_type, m) \
|
||||
__m81_defun (float_type, m(__floor), (float_type __x)) \
|
||||
__m81_defun (float_type, m(__floor), (float_type __x), \
|
||||
__attribute__ ((__const__))) \
|
||||
{ \
|
||||
float_type __result; \
|
||||
unsigned long int __ctrl_reg; \
|
||||
@ -137,7 +138,8 @@ __m81_defun (float_type, m(__floor), (float_type __x)) \
|
||||
return __result; \
|
||||
} \
|
||||
\
|
||||
__m81_defun (float_type, m(__ceil), (float_type __x)) \
|
||||
__m81_defun (float_type, m(__ceil), (float_type __x), \
|
||||
__attribute__ ((__const__))) \
|
||||
{ \
|
||||
float_type __result; \
|
||||
unsigned long int __ctrl_reg; \
|
||||
@ -166,7 +168,8 @@ __inline_functions(long double, __CONCAT_l)
|
||||
#ifdef __USE_MISC
|
||||
|
||||
# define __inline_functions(float_type, m) \
|
||||
__m81_defun (int, m(__isinf), (float_type __value)) \
|
||||
__m81_defun (int, m(__isinf), (float_type __value), \
|
||||
__attribute__ ((__const__))) \
|
||||
{ \
|
||||
/* There is no branch-condition for infinity, \
|
||||
so we must extract and examine the condition codes manually. */ \
|
||||
@ -176,7 +179,8 @@ __m81_defun (int, m(__isinf), (float_type __value)) \
|
||||
return (__fpsr & (2 << 24)) ? (__fpsr & (8 << 24) ? -1 : 1) : 0; \
|
||||
} \
|
||||
\
|
||||
__m81_defun (int, m(__finite), (float_type __value)) \
|
||||
__m81_defun (int, m(__finite), (float_type __value), \
|
||||
__attribute__ ((__const__))) \
|
||||
{ \
|
||||
/* There is no branch-condition for infinity, so we must extract and \
|
||||
examine the condition codes manually. */ \
|
||||
@ -187,7 +191,7 @@ __m81_defun (int, m(__finite), (float_type __value)) \
|
||||
} \
|
||||
\
|
||||
__m81_defun (float_type, m(__scalbn), \
|
||||
(float_type __x, int __n)) \
|
||||
(float_type __x, int __n),) \
|
||||
{ \
|
||||
float_type __result; \
|
||||
__asm __volatile__ ("fscale%.l %1, %0" : "=f" (__result) \
|
||||
@ -205,7 +209,8 @@ __inline_functions(long double, __CONCAT_l)
|
||||
#if defined __USE_MISC || defined __USE_XOPEN
|
||||
|
||||
# define __inline_functions(float_type, m) \
|
||||
__m81_defun (int, m(__isnan), (float_type __value)) \
|
||||
__m81_defun (int, m(__isnan), (float_type __value), \
|
||||
__attribute__ ((__const__))) \
|
||||
{ \
|
||||
char __result; \
|
||||
__asm ("ftst%.x %1\n" \
|
||||
@ -226,12 +231,12 @@ __inline_functions(long double, __CONCAT_l)
|
||||
|
||||
# define __inline_functions(float_type, m) \
|
||||
__m81_defun (float_type, m(__scalbln), \
|
||||
(float_type __x, long int __n)) \
|
||||
(float_type __x, long int __n),) \
|
||||
{ \
|
||||
return m(__scalbn) (__x, __n); \
|
||||
} \
|
||||
\
|
||||
__m81_defun (float_type, m(__nearbyint), (float_type __x)) \
|
||||
__m81_defun (float_type, m(__nearbyint), (float_type __x),) \
|
||||
{ \
|
||||
float_type __result; \
|
||||
unsigned long int __ctrl_reg; \
|
||||
@ -245,7 +250,7 @@ __m81_defun (float_type, m(__nearbyint), (float_type __x)) \
|
||||
return __result; \
|
||||
} \
|
||||
\
|
||||
__m81_defun (long int, m(__lrint), (float_type __x)) \
|
||||
__m81_defun (long int, m(__lrint), (float_type __x),) \
|
||||
{ \
|
||||
long int __result; \
|
||||
__asm __volatile__ ("fmove%.l %1, %0" : "=dm" (__result) : "f" (__x)); \
|
||||
@ -305,7 +310,7 @@ __inline_forward_c(double,ceil, (double __x), (__x))
|
||||
__inline_forward_c(int,isinf, (double __value), (__value))
|
||||
# endif
|
||||
__inline_forward_c(int,finite, (double __value), (__value))
|
||||
__inline_forward_c(double,scalbn, (double __x, int __n), (__x, __n))
|
||||
__inline_forward(double,scalbn, (double __x, int __n), (__x, __n))
|
||||
# endif
|
||||
# if defined __USE_MISC || defined __USE_XOPEN
|
||||
# ifndef __USE_ISOC99 /* Conflict with macro of same name. */
|
||||
@ -313,9 +318,9 @@ __inline_forward_c(int,isnan, (double __value), (__value))
|
||||
# endif
|
||||
# endif
|
||||
# ifdef __USE_ISOC99
|
||||
__inline_forward_c(double,scalbln, (double __x, long int __n), (__x, __n))
|
||||
__inline_forward_c(double,nearbyint, (double __value), (__value))
|
||||
__inline_forward_c(long int,lrint, (double __value), (__value))
|
||||
__inline_forward(double,scalbln, (double __x, long int __n), (__x, __n))
|
||||
__inline_forward(double,nearbyint, (double __value), (__value))
|
||||
__inline_forward(long int,lrint, (double __value), (__value))
|
||||
# endif
|
||||
# ifdef __USE_GNU
|
||||
__inline_forward(void,sincos, (double __x, double *__sinx, double *__cosx),
|
||||
@ -329,13 +334,13 @@ __inline_forward_c(float,ceilf, (float __x), (__x))
|
||||
# ifdef __USE_MISC
|
||||
__inline_forward_c(int,isinff, (float __value), (__value))
|
||||
__inline_forward_c(int,finitef, (float __value), (__value))
|
||||
__inline_forward_c(float,scalbnf, (float __x, int __n), (__x, __n))
|
||||
__inline_forward(float,scalbnf, (float __x, int __n), (__x, __n))
|
||||
__inline_forward_c(int,isnanf, (float __value), (__value))
|
||||
# endif
|
||||
# ifdef __USE_ISOC99
|
||||
__inline_forward_c(float,scalblnf, (float __x, long int __n), (__x, __n))
|
||||
__inline_forward_c(float,nearbyintf, (float __value), (__value))
|
||||
__inline_forward_c(long int,lrintf, (float __value), (__value))
|
||||
__inline_forward(float,scalblnf, (float __x, long int __n), (__x, __n))
|
||||
__inline_forward(float,nearbyintf, (float __value), (__value))
|
||||
__inline_forward(long int,lrintf, (float __value), (__value))
|
||||
# endif
|
||||
# ifdef __USE_GNU
|
||||
__inline_forward(void,sincosf, (float __x, float *__sinx, float *__cosx),
|
||||
@ -347,14 +352,14 @@ __inline_forward_c(long double,ceill, (long double __x), (__x))
|
||||
# ifdef __USE_MISC
|
||||
__inline_forward_c(int,isinfl, (long double __value), (__value))
|
||||
__inline_forward_c(int,finitel, (long double __value), (__value))
|
||||
__inline_forward_c(long double,scalbnl, (long double __x, int __n), (__x, __n))
|
||||
__inline_forward(long double,scalbnl, (long double __x, int __n), (__x, __n))
|
||||
__inline_forward_c(int,isnanl, (long double __value), (__value))
|
||||
# endif
|
||||
# ifdef __USE_ISOC99
|
||||
__inline_forward_c(long double,scalblnl, (long double __x, long int __n),
|
||||
(__x, __n))
|
||||
__inline_forward_c(long double,nearbyintl, (long double __value), (__value))
|
||||
__inline_forward_c(long int,lrintl, (long double __value), (__value))
|
||||
__inline_forward(long double,scalblnl, (long double __x, long int __n),
|
||||
(__x, __n))
|
||||
__inline_forward(long double,nearbyintl, (long double __value), (__value))
|
||||
__inline_forward(long int,lrintl, (long double __value), (__value))
|
||||
# endif
|
||||
# ifdef __USE_GNU
|
||||
__inline_forward(void,sincosl,
|
||||
|
@ -20,27 +20,27 @@
|
||||
/* This file contains the definitions of the inline math functions that
|
||||
are only used internally inside libm, not visible to the user. */
|
||||
|
||||
__inline_mathop (__ieee754_acos, acos)
|
||||
__inline_mathop (__ieee754_asin, asin)
|
||||
__inline_mathop (__ieee754_cosh, cosh)
|
||||
__inline_mathop (__ieee754_sinh, sinh)
|
||||
__inline_mathop (__ieee754_exp, etox)
|
||||
__inline_mathop (__ieee754_exp2, twotox)
|
||||
__inline_mathop (__ieee754_exp10, tentox)
|
||||
__inline_mathop (__ieee754_log10, log10)
|
||||
__inline_mathop (__ieee754_log2, log2)
|
||||
__inline_mathop (__ieee754_log, logn)
|
||||
__inline_mathop (__ieee754_sqrt, sqrt)
|
||||
__inline_mathop (__ieee754_atanh, atanh)
|
||||
__inline_mathop (__ieee754_acos, acos,)
|
||||
__inline_mathop (__ieee754_asin, asin,)
|
||||
__inline_mathop (__ieee754_cosh, cosh,)
|
||||
__inline_mathop (__ieee754_sinh, sinh,)
|
||||
__inline_mathop (__ieee754_exp, etox,)
|
||||
__inline_mathop (__ieee754_exp2, twotox,)
|
||||
__inline_mathop (__ieee754_exp10, tentox,)
|
||||
__inline_mathop (__ieee754_log10, log10,)
|
||||
__inline_mathop (__ieee754_log2, log2,)
|
||||
__inline_mathop (__ieee754_log, logn,)
|
||||
__inline_mathop (__ieee754_sqrt, sqrt,)
|
||||
__inline_mathop (__ieee754_atanh, atanh,)
|
||||
|
||||
__m81_defun (double, __ieee754_remainder, (double __x, double __y))
|
||||
__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 (float, __ieee754_remainderf, (float __x, float __y))
|
||||
__m81_defun (float, __ieee754_remainderf, (float __x, float __y),)
|
||||
{
|
||||
float __result;
|
||||
__asm ("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
|
||||
@ -48,21 +48,21 @@ __m81_defun (float, __ieee754_remainderf, (float __x, float __y))
|
||||
}
|
||||
|
||||
__m81_defun (long double,
|
||||
__ieee754_remainderl, (long double __x, long double __y))
|
||||
__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 (double, __ieee754_fmod, (double __x, double __y))
|
||||
__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_defun (float, __ieee754_fmodf, (float __x, float __y))
|
||||
__m81_defun (float, __ieee754_fmodf, (float __x, float __y),)
|
||||
{
|
||||
float __result;
|
||||
__asm ("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
|
||||
@ -70,7 +70,7 @@ __m81_defun (float, __ieee754_fmodf, (float __x, float __y))
|
||||
}
|
||||
|
||||
__m81_defun (long double,
|
||||
__ieee754_fmodl, (long double __x, long double __y))
|
||||
__ieee754_fmodl, (long double __x, long double __y),)
|
||||
{
|
||||
long double __result;
|
||||
__asm ("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
|
||||
|
Loading…
Reference in New Issue
Block a user