diff options
Diffstat (limited to 'soft-fp')
-rw-r--r-- | soft-fp/op-1.h | 2 | ||||
-rw-r--r-- | soft-fp/op-2.h | 3 | ||||
-rw-r--r-- | soft-fp/op-common.h | 8 | ||||
-rw-r--r-- | soft-fp/soft-fp.h | 11 |
4 files changed, 18 insertions, 6 deletions
diff --git a/soft-fp/op-1.h b/soft-fp/op-1.h index 34c84d0..bc9e33b 100644 --- a/soft-fp/op-1.h +++ b/soft-fp/op-1.h @@ -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) diff --git a/soft-fp/op-2.h b/soft-fp/op-2.h index 94a1c71..26bdfc0 100644 --- a/soft-fp/op-2.h +++ b/soft-fp/op-2.h @@ -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) diff --git a/soft-fp/op-common.h b/soft-fp/op-common.h index 14fd6cd..ee41476 100644 --- a/soft-fp/op-common.h +++ b/soft-fp/op-common.h @@ -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. */ diff --git a/soft-fp/soft-fp.h b/soft-fp/soft-fp.h index 1eafcb4..f93a941 100644 --- a/soft-fp/soft-fp.h +++ b/soft-fp/soft-fp.h @@ -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) |