Fwd: [PATCH, libgcc]: Avoid "left shift count >= width of type" warnings in soft-fp code
Uros Bizjak
ubizjak@gmail.com
Tue Nov 26 18:11:00 GMT 2013
[Forwarded from gcc-patches@... mailing list, where the patch was
bootstrapped and regression tested. Please note that I have no means
of properly testing the patch as required by glibc rules.]
Hello!
Attached patch removes "left shift count >= width of type" warnings in
soft-fp code. The patch implements the same approach - checking of
rsize against _FP_W_TYPE_SIZE - as is implemented in corresponding
FP_FRAC_DISASSEMBLE_{2,4} macros a couple of lines below.
This patch removes all remaining soft-fp warnings from the build.
2013-11-25 Uros Bizjak <ubizjak@gmail.com>
* soft-fp/op-2.h (_FP_FRAC_ASSEMBLE_2): Check rsize against
_FP_W_TYPE_SIZE to avoid "left shift count >= width of type" warning.
* soft-fp/op-4.h (_FP_FRAC_ASSEMBLE_4): Ditto.
Bootstrapped and regression tested on x86_64-pc-linux-gnu {,-m32}.
OK for mainline?
Uros.
-------------- next part --------------
Index: soft-fp/op-2.h
===================================================================
--- soft-fp/op-2.h (revision 205357)
+++ soft-fp/op-2.h (working copy)
@@ -627,13 +627,13 @@
* No shifting or overflow handled here.
*/
-#define _FP_FRAC_ASSEMBLE_2(r, X, rsize) \
- (void) ((rsize <= _FP_W_TYPE_SIZE) \
- ? ({ r = X##_f0; }) \
- : ({ \
- r = X##_f1; \
- r <<= _FP_W_TYPE_SIZE; \
- r += X##_f0; \
+#define _FP_FRAC_ASSEMBLE_2(r, X, rsize) \
+ (void) ((rsize <= _FP_W_TYPE_SIZE) \
+ ? ({ r = X##_f0; }) \
+ : ({ \
+ r = X##_f1; \
+ r = (rsize <= _FP_W_TYPE_SIZE ? 0 : r << _FP_W_TYPE_SIZE); \
+ r += X##_f0; \
}))
#define _FP_FRAC_DISASSEMBLE_2(X, r, rsize) \
Index: soft-fp/op-4.h
===================================================================
--- soft-fp/op-4.h (revision 205357)
+++ soft-fp/op-4.h (working copy)
@@ -709,7 +709,7 @@
else if (rsize <= 2*_FP_W_TYPE_SIZE) \
{ \
r = X##_f[1]; \
- r <<= _FP_W_TYPE_SIZE; \
+ r = (rsize <= _FP_W_TYPE_SIZE ? 0 : r << _FP_W_TYPE_SIZE); \
r += X##_f[0]; \
} \
else \
@@ -717,11 +717,11 @@
/* I'm feeling lazy so we deal with int == 3words (implausible)*/ \
/* and int == 4words as a single case. */ \
r = X##_f[3]; \
- r <<= _FP_W_TYPE_SIZE; \
+ r = (rsize <= _FP_W_TYPE_SIZE ? 0 : r << _FP_W_TYPE_SIZE); \
r += X##_f[2]; \
- r <<= _FP_W_TYPE_SIZE; \
+ r = (rsize <= _FP_W_TYPE_SIZE ? 0 : r << _FP_W_TYPE_SIZE); \
r += X##_f[1]; \
- r <<= _FP_W_TYPE_SIZE; \
+ r = (rsize <= _FP_W_TYPE_SIZE ? 0 : r << _FP_W_TYPE_SIZE); \
r += X##_f[0]; \
} \
} \
More information about the Libc-alpha
mailing list