aboutsummaryrefslogtreecommitdiff
path: root/opcodes/bfin-dis.c
diff options
context:
space:
mode:
Diffstat (limited to 'opcodes/bfin-dis.c')
-rw-r--r--opcodes/bfin-dis.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/opcodes/bfin-dis.c b/opcodes/bfin-dis.c
index 811509f..711f7e1 100644
--- a/opcodes/bfin-dis.c
+++ b/opcodes/bfin-dis.c
@@ -33,10 +33,9 @@
typedef long TIword;
-#define HOST_LONG_WORD_SIZE (sizeof (long) * 8)
-#define XFIELD(w,p,s) (((w) & ((1 << (s)) - 1) << (p)) >> (p))
-#define SIGNEXTEND(v, n) ((v << (HOST_LONG_WORD_SIZE - (n))) >> (HOST_LONG_WORD_SIZE - (n)))
-#define MASKBITS(val, bits) (val & ((1 << bits) - 1))
+#define SIGNBIT(bits) (1ul << ((bits) - 1))
+#define MASKBITS(val, bits) ((val) & ((1ul << (bits)) - 1))
+#define SIGNEXTEND(v, n) ((MASKBITS (v, n) ^ SIGNBIT (n)) - SIGNBIT (n))
#include "disassemble.h"
@@ -125,8 +124,11 @@ fmtconst (const_forms_t cf, TIword x, bfd_vma pc, disassemble_info *outf)
if (constant_formats[cf].reloc)
{
- bfd_vma ea = (((constant_formats[cf].pcrel ? SIGNEXTEND (x, constant_formats[cf].nbits)
- : x) + constant_formats[cf].offset) << constant_formats[cf].scale);
+ bfd_vma ea;
+
+ if (constant_formats[cf].pcrel)
+ x = SIGNEXTEND (x, constant_formats[cf].nbits);
+ ea = (x + constant_formats[cf].offset) << constant_formats[cf].scale;
if (constant_formats[cf].pcrel)
ea += pc;
@@ -153,8 +155,8 @@ fmtconst (const_forms_t cf, TIword x, bfd_vma pc, disassemble_info *outf)
x = x | (1 << constant_formats[cf].nbits);
x = SIGNEXTEND (x, nb);
}
- else
- x = constant_formats[cf].issigned ? SIGNEXTEND (x, constant_formats[cf].nbits) : x;
+ else if (constant_formats[cf].issigned)
+ x = SIGNEXTEND (x, constant_formats[cf].nbits);
if (constant_formats[cf].offset)
x += constant_formats[cf].offset;
@@ -180,10 +182,11 @@ fmtconst_val (const_forms_t cf, unsigned int x, unsigned int pc)
{
if (0 && constant_formats[cf].reloc)
{
- bu32 ea = (((constant_formats[cf].pcrel
- ? SIGNEXTEND (x, constant_formats[cf].nbits)
- : x) + constant_formats[cf].offset)
- << constant_formats[cf].scale);
+ bu32 ea;
+
+ if (constant_formats[cf].pcrel)
+ x = SIGNEXTEND (x, constant_formats[cf].nbits);
+ ea = (x + constant_formats[cf].offset) << constant_formats[cf].scale;
if (constant_formats[cf].pcrel)
ea += pc;
@@ -194,7 +197,7 @@ fmtconst_val (const_forms_t cf, unsigned int x, unsigned int pc)
if (constant_formats[cf].negative)
{
int nb = constant_formats[cf].nbits + 1;
- x = x | (1 << constant_formats[cf].nbits);
+ x = x | (1u << constant_formats[cf].nbits);
x = SIGNEXTEND (x, nb);
}
else if (constant_formats[cf].issigned)