ubsan: nios2: undefined shift
authorAlan Modra <amodra@gmail.com>
Thu, 28 May 2020 12:37:11 +0000 (22:07 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 28 May 2020 12:38:42 +0000 (22:08 +0930)
* nios2-dis.c (nios2_print_insn_arg): Avoid shift left of negative
values.

opcodes/ChangeLog
opcodes/nios2-dis.c

index 986761ed8c7cdd257e16430fa385e19156addac3..d361ea7acd4eee0db224b0b47764caf0bf89183a 100644 (file)
@@ -1,3 +1,8 @@
+2020-05-28  Alan Modra  <amodra@gmail.com>
+
+       * nios2-dis.c (nios2_print_insn_arg): Avoid shift left of negative
+       values.
+
 2020-05-28  Alan Modra  <amodra@gmail.com>
 
        * ns32k-dis.c (print_insn_arg): Handle d value of 'f' for
index e1eeaccadd55f7119f8baa9c2ba66f2da428eb9e..6de2079f687a069921084d61078f040f93314b7b 100644 (file)
@@ -276,7 +276,7 @@ nios2_print_insn_arg (const char *argptr,
 {
   unsigned long i = 0;
   long s = 0;
-  bfd_signed_vma o = 0;
+  int32_t o = 0;
   struct nios2_reg *reg_base;
 
   switch (*argptr)
@@ -677,12 +677,10 @@ nios2_print_insn_arg (const char *argptr,
       switch (op->format)
        {
        case iw_i_type:
-         o = ((int32_t) ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000)
-              - 0x8000);
+         o = ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000;
          break;
        case iw_F2I16_type:
-         o = ((int32_t) ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000)
-              - 0x8000);
+         o = ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000;
          break;
        default:
          bad_opcode (op);
@@ -696,9 +694,7 @@ nios2_print_insn_arg (const char *argptr,
       switch (op->format)
        {
        case iw_I10_type:
-         o = (((int32_t) ((GET_IW_I10_IMM10 (opcode) & 0x3ff) ^ 0x400)
-               - 0x400)
-              << 1);
+         o = (((GET_IW_I10_IMM10 (opcode) & 0x3ff) ^ 0x400) - 0x400) * 2;
          break;
        default:
          bad_opcode (op);
@@ -712,9 +708,7 @@ nios2_print_insn_arg (const char *argptr,
       switch (op->format)
        {
        case iw_T1I7_type:
-         o = (((int32_t) ((GET_IW_T1I7_IMM7 (opcode) & 0x7f) ^ 0x40)
-               - 0x40)
-              << 1);
+         o = (((GET_IW_T1I7_IMM7 (opcode) & 0x7f) ^ 0x40) - 0x40) * 2;
          break;
        default:
          bad_opcode (op);