ubsan: nios2: undefined shift

Message ID 20200528124018.GE5475@bubble.grove.modra.org
State New
Headers show
Series
  • ubsan: nios2: undefined shift
Related show

Commit Message

* nios2-dis.c (nios2_print_insn_arg): Avoid shift left of negative
	values.


-- 
Alan Modra
Australia Development Lab, IBM

Patch

diff --git a/opcodes/nios2-dis.c b/opcodes/nios2-dis.c
index e1eeaccadd..6de2079f68 100644
--- a/opcodes/nios2-dis.c
+++ b/opcodes/nios2-dis.c
@@ -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);