aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--opcodes/ChangeLog4
-rw-r--r--opcodes/arm-dis.c6
2 files changed, 7 insertions, 3 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 979ca97..bdbb5f7 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,7 @@
+2019-12-24 Alan Modra <amodra@gmail.com>
+
+ * arm-dis.c (print_insn_arm): Don't shift by 32 on unsigned int var.
+
2019-12-23 Jan Beulich <jbeulich@suse.com>
* ppc-dis.c (print_insn_powerpc): Rename local variable "spaces"
diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c
index 12eae61..d7e21f9 100644
--- a/opcodes/arm-dis.c
+++ b/opcodes/arm-dis.c
@@ -9927,12 +9927,12 @@ print_insn_arm (bfd_vma pc, struct disassemble_info *info, long given)
unsigned int immed = (given & 0xff);
unsigned int a, i;
- a = (((immed << (32 - rotate))
- | (immed >> rotate)) & 0xffffffff);
+ a = (immed << ((32 - rotate) & 31)
+ | immed >> rotate) & 0xffffffff;
/* If there is another encoding with smaller rotate,
the rotate should be specified directly. */
for (i = 0; i < 32; i += 2)
- if ((a << i | a >> (32 - i)) <= 0xff)
+ if ((a << i | a >> ((32 - i) & 31)) <= 0xff)
break;
if (i != rotate)