* config/spu/spu.c (spu_expand_insv): Avoid undefined behavior.
authorUlrich Weigand <uweigand@de.ibm.com>
Mon, 21 Sep 2015 14:41:10 +0000 (14:41 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Mon, 21 Sep 2015 14:41:10 +0000 (14:41 +0000)
From-SVN: r227974

gcc/ChangeLog
gcc/config/spu/spu.c

index 9a2cf21f3279535bbca8d993e813e7cd4a055682..c25888aa09bb2c0e834c1da1f1ab9db141d41855 100644 (file)
@@ -1,3 +1,7 @@
+2015-09-21  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+
+       * config/spu/spu.c (spu_expand_insv): Avoid undefined behavior.
+
 2015-09-21  Richard Biener  <rguenther@suse.de>
 
        * passes.c (rest_of_decl_compilation): Do not call
index 05c81f5ed733b3ada37a1cf3729e5e71660155b4..482145377daf38e9e002615842335c04a572b673 100644 (file)
@@ -472,7 +472,7 @@ spu_expand_insv (rtx ops[])
 {
   HOST_WIDE_INT width = INTVAL (ops[1]);
   HOST_WIDE_INT start = INTVAL (ops[2]);
-  HOST_WIDE_INT maskbits;
+  unsigned HOST_WIDE_INT maskbits;
   machine_mode dst_mode;
   rtx dst = ops[0], src = ops[3];
   int dst_size;
@@ -527,15 +527,15 @@ spu_expand_insv (rtx ops[])
   switch (dst_size)
     {
     case 32:
-      maskbits = (-1ll << (32 - width - start));
+      maskbits = (~(unsigned HOST_WIDE_INT)0 << (32 - width - start));
       if (start)
-       maskbits += (1ll << (32 - start));
+       maskbits += ((unsigned HOST_WIDE_INT)1 << (32 - start));
       emit_move_insn (mask, GEN_INT (maskbits));
       break;
     case 64:
-      maskbits = (-1ll << (64 - width - start));
+      maskbits = (~(unsigned HOST_WIDE_INT)0 << (64 - width - start));
       if (start)
-       maskbits += (1ll << (64 - start));
+       maskbits += ((unsigned HOST_WIDE_INT)1 << (64 - start));
       emit_move_insn (mask, GEN_INT (maskbits));
       break;
     case 128: