diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2015-09-21 14:41:10 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@gcc.gnu.org> | 2015-09-21 14:41:10 +0000 |
commit | a49448515dfcb69928dc77213a2d2f5aa43ee01c (patch) | |
tree | bb1e7bf207e138049df90e8d0f09b0c4eba48da1 | |
parent | b1e251ec9ec0260943485793446bfe249eaae290 (diff) | |
download | gcc-a49448515dfcb69928dc77213a2d2f5aa43ee01c.zip gcc-a49448515dfcb69928dc77213a2d2f5aa43ee01c.tar.gz gcc-a49448515dfcb69928dc77213a2d2f5aa43ee01c.tar.bz2 |
* config/spu/spu.c (spu_expand_insv): Avoid undefined behavior.
From-SVN: r227974
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/spu/spu.c | 10 |
2 files changed, 9 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9a2cf21..c25888a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c index 05c81f5..4821453 100644 --- a/gcc/config/spu/spu.c +++ b/gcc/config/spu/spu.c @@ -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: |