Index: opcodes/arc-dis.c |
diff --git a/opcodes/arc-dis.c b/opcodes/arc-dis.c |
index b4cc241615fc939860212db1e49857a9845e5b3f..0e16cde239d78ede81a8d09eb39c3581957aefb4 100644 |
--- a/opcodes/arc-dis.c |
+++ b/opcodes/arc-dis.c |
@@ -1,6 +1,6 @@ |
/* Instruction printing code for the ARC. |
- Copyright 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2005, 2007, 2009, 2010 |
- Free Software Foundation, Inc. |
+ Copyright 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2005, 2007, 2009, |
+ 2010, 2012 Free Software Foundation, Inc. |
Contributed by Doug Evans (dje@cygnus.com). |
This file is part of libopcodes. |
@@ -20,13 +20,12 @@ |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, |
MA 02110-1301, USA. */ |
-#include "ansidecl.h" |
+#include "sysdep.h" |
#include "libiberty.h" |
#include "dis-asm.h" |
#include "opcode/arc.h" |
#include "elf-bfd.h" |
#include "elf/arc.h" |
-#include <string.h> |
#include "opintl.h" |
#include <stdarg.h> |
@@ -60,15 +59,14 @@ typedef enum |
} a4_decoding_class; |
#define BIT(word,n) ((word) & (1 << n)) |
-#define BITS(word,s,e) (((word) << (31 - e)) >> (s + (31 - e))) |
+#define BITS(word,s,e) (((word) >> s) & ((1 << (e + 1 - s)) - 1)) |
#define OPCODE(word) (BITS ((word), 27, 31)) |
#define FIELDA(word) (BITS ((word), 21, 26)) |
#define FIELDB(word) (BITS ((word), 15, 20)) |
#define FIELDC(word) (BITS ((word), 9, 14)) |
-/* FIELD D is signed in all of its uses, so we make sure argument is |
- treated as signed for bit shifting purposes: */ |
-#define FIELDD(word) (BITS (((signed int)word), 0, 8)) |
+/* FIELD D is signed. */ |
+#define FIELDD(word) ((BITS ((word), 0, 8) ^ 0x100) - 0x100) |
#define PUT_NEXT_WORD_IN(a) \ |
do \ |