/* Disassembler code for CRIS.
- Copyright 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009
- Free Software Foundation, Inc.
+ Copyright (C) 2000-2020 Free Software Foundation, Inc.
Contributed by Axis Communications AB, Lund, Sweden.
Written by Hans-Peter Nilsson.
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include "dis-asm.h"
#include "sysdep.h"
+#include "dis-asm.h"
#include "opcode/cris.h"
#include "libiberty.h"
\f
*tp++ = 'c';
*tp++ = 'r';
break;
-
+
case '[':
case ']':
case ',':
case 'n':
{
/* Like N but pc-relative to the start of the insn. */
- unsigned long number
- = (buffer[2] + buffer[3] * 256 + buffer[4] * 65536
- + buffer[5] * 0x1000000 + addr);
+ int32_t number = (buffer[2] + buffer[3] * 256 + buffer[4] * 65536
+ + buffer[5] * 0x1000000u);
/* Finish off and output previous formatted bytes. */
*tp = 0;
(*info->fprintf_func) (info->stream, "%s", temp);
tp = temp;
- (*info->print_address_func) ((bfd_vma) number, info);
+ (*info->print_address_func) (addr + number, info);
}
break;
case 'u':
{
/* Like n but the offset is bits <3:0> in the instruction. */
- unsigned long number = (buffer[0] & 0xf) * 2 + addr;
+ unsigned int number = (buffer[0] & 0xf) * 2;
/* Finish off and output previous formatted bytes. */
*tp = 0;
(*info->fprintf_func) (info->stream, "%s", temp);
tp = temp;
- (*info->print_address_func) ((bfd_vma) number, info);
+ (*info->print_address_func) (addr + number, info);
}
break;
{
/* We're looking at [pc+], i.e. we need to output an immediate
number, where the size can depend on different things. */
- long number;
+ int32_t number;
int signedp
= ((*cs == 'z' && (insn & 0x20))
|| opcodep->match == BDAP_QUICK_OPCODE);
break;
case 4:
- number
- = buffer[2] + buffer[3] * 256 + buffer[4] * 65536
- + buffer[5] * 0x1000000;
+ number = (buffer[2] + buffer[3] * 256 + buffer[4] * 65536
+ + buffer[5] * 0x1000000u);
break;
default:
{
/* It's [pc+]. This cannot possibly be anything
but an address. */
- unsigned long number
- = prefix_buffer[2] + prefix_buffer[3] * 256
- + prefix_buffer[4] * 65536
- + prefix_buffer[5] * 0x1000000;
+ int32_t number = (prefix_buffer[2]
+ + prefix_buffer[3] * 256
+ + prefix_buffer[4] * 65536
+ + prefix_buffer[5] * 0x1000000u);
info->target = (bfd_vma) number;
if ((prefix_insn & 0x400) && (prefix_insn & 15) == 15)
{
- long number;
+ int32_t number;
unsigned int nbytes;
/* It's a value. Get its size. */
break;
case 4:
- number
- = prefix_buffer[2] + prefix_buffer[3] * 256
- + prefix_buffer[4] * 65536
- + prefix_buffer[5] * 0x1000000;
+ number = (prefix_buffer[2] + prefix_buffer[3] * 256
+ + prefix_buffer[4] * 65536
+ + prefix_buffer[5] * 0x1000000u);
break;
default: