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