mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
soft-fp: Support conditional zero-initialization in declarations.
In the Linux kernel, some architectures have a single function that uses different kinds of unpacking and packing depending on the instruction being emulated, meaning it is not readily visible to the compiler that variables from _FP_DECL and _FP_FRAC_DECL_* macros are only used in cases where they were initialized. The existing copy of soft-fp in the Linux kernel uses zero-initialization to avoid warnings in this case, so while frowned upon as a warning suppression mechanism in code built for glibc it seems appropriate to have such zero-initialization conditional on __KERNEL__. This patch duly adds it, via a macro _FP_ZERO_INIT that expands to empty for non-kernel compilations. Tested for powerpc-nofpu that installed stripped shared libraries are unchanged by this patch. * soft-fp/soft-fp.h (_FP_ZERO_INIT): New macro. Define depending on [__KERNEL__]. * soft-fp/op-1.h (_FP_FRAC_DECL_1): Use _FP_ZERO_INIT. * soft-fp/op-2.h (_FP_FRAC_DECL_2): Likewise. * soft-fp/op-common.h (_FP_DECL): Likewise.
This commit is contained in:
parent
e0ed2fb40a
commit
b838844bc5
@ -1,3 +1,11 @@
|
||||
2015-03-07 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* soft-fp/soft-fp.h (_FP_ZERO_INIT): New macro. Define depending
|
||||
on [__KERNEL__].
|
||||
* soft-fp/op-1.h (_FP_FRAC_DECL_1): Use _FP_ZERO_INIT.
|
||||
* soft-fp/op-2.h (_FP_FRAC_DECL_2): Likewise.
|
||||
* soft-fp/op-common.h (_FP_DECL): Likewise.
|
||||
|
||||
2015-03-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elf/ifuncdep2.c (global): Replace
|
||||
|
@ -30,7 +30,7 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#define _FP_FRAC_DECL_1(X) _FP_W_TYPE X##_f
|
||||
#define _FP_FRAC_DECL_1(X) _FP_W_TYPE X##_f _FP_ZERO_INIT
|
||||
#define _FP_FRAC_COPY_1(D, S) (D##_f = S##_f)
|
||||
#define _FP_FRAC_SET_1(X, I) (X##_f = I)
|
||||
#define _FP_FRAC_HIGH_1(X) (X##_f)
|
||||
|
@ -30,7 +30,8 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#define _FP_FRAC_DECL_2(X) _FP_W_TYPE X##_f0, X##_f1
|
||||
#define _FP_FRAC_DECL_2(X) \
|
||||
_FP_W_TYPE X##_f0 _FP_ZERO_INIT, X##_f1 _FP_ZERO_INIT
|
||||
#define _FP_FRAC_COPY_2(D, S) (D##_f0 = S##_f0, D##_f1 = S##_f1)
|
||||
#define _FP_FRAC_SET_2(X, I) __FP_FRAC_SET_2 (X, I)
|
||||
#define _FP_FRAC_HIGH_2(X) (X##_f1)
|
||||
|
@ -29,10 +29,10 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#define _FP_DECL(wc, X) \
|
||||
_FP_I_TYPE X##_c __attribute__ ((unused)); \
|
||||
_FP_I_TYPE X##_s __attribute__ ((unused)); \
|
||||
_FP_I_TYPE X##_e __attribute__ ((unused)); \
|
||||
#define _FP_DECL(wc, X) \
|
||||
_FP_I_TYPE X##_c __attribute__ ((unused)) _FP_ZERO_INIT; \
|
||||
_FP_I_TYPE X##_s __attribute__ ((unused)) _FP_ZERO_INIT; \
|
||||
_FP_I_TYPE X##_e __attribute__ ((unused)) _FP_ZERO_INIT; \
|
||||
_FP_FRAC_DECL_##wc (X)
|
||||
|
||||
/* Test whether the qNaN bit denotes a signaling NaN. */
|
||||
|
@ -51,6 +51,17 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* In the Linux kernel, some architectures have a single function that
|
||||
uses different kinds of unpacking and packing depending on the
|
||||
instruction being emulated, meaning it is not readily visible to
|
||||
the compiler that variables from _FP_DECL and _FP_FRAC_DECL_*
|
||||
macros are only used in cases where they were initialized. */
|
||||
#ifdef __KERNEL__
|
||||
# define _FP_ZERO_INIT = 0
|
||||
#else
|
||||
# define _FP_ZERO_INIT
|
||||
#endif
|
||||
|
||||
#define _FP_WORKBITS 3
|
||||
#define _FP_WORK_LSB ((_FP_W_TYPE) 1 << 3)
|
||||
#define _FP_WORK_ROUND ((_FP_W_TYPE) 1 << 2)
|
||||
|
Loading…
Reference in New Issue
Block a user