projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
x86: correct MPX insn w/o base or index encoding in 16-bit mode
[deliverable/binutils-gdb.git]
/
opcodes
/
mcore-dis.c
diff --git
a/opcodes/mcore-dis.c
b/opcodes/mcore-dis.c
index d3deb3541d5d0644a461a63b18964baeae67cac9..584e38787cf713011b27949e13044c910bc5aefa 100644
(file)
--- a/
opcodes/mcore-dis.c
+++ b/
opcodes/mcore-dis.c
@@
-1,5
+1,5
@@
/* Disassemble Motorola M*Core instructions.
/* Disassemble Motorola M*Core instructions.
- Copyright (C) 1993-20
16
Free Software Foundation, Inc.
+ Copyright (C) 1993-20
20
Free Software Foundation, Inc.
This file is part of the GNU opcodes library.
This file is part of the GNU opcodes library.
@@
-20,11
+20,12
@@
#include "sysdep.h"
#include <stdio.h>
#include "sysdep.h"
#include <stdio.h>
+#include "libiberty.h"
#define STATIC_TABLE
#define DEFINE_TABLE
#include "mcore-opc.h"
#define STATIC_TABLE
#define DEFINE_TABLE
#include "mcore-opc.h"
-#include "dis
-asm
.h"
+#include "dis
assemble
.h"
/* Mask for each mcore_opclass: */
static const unsigned short imsk[] = {
/* Mask for each mcore_opclass: */
static const unsigned short imsk[] = {
@@
-95,7
+96,7
@@
print_insn_mcore (bfd_vma memaddr,
fprintf_ftype print_func = info->fprintf_func;
void *stream = info->stream;
unsigned short inst;
fprintf_ftype print_func = info->fprintf_func;
void *stream = info->stream;
unsigned short inst;
-
const mcore_opcode_info *op
;
+
unsigned int i
;
int status;
info->bytes_per_chunk = 2;
int status;
info->bytes_per_chunk = 2;
@@
-116,19
+117,19
@@
print_insn_mcore (bfd_vma memaddr,
abort ();
/* Just a linear search of the table. */
abort ();
/* Just a linear search of the table. */
- for (
op = mcore_table; op->name != 0; op
++)
- if (
op->inst == (inst & imsk[op->
opclass]))
+ for (
i = 0; i < ARRAY_SIZE (mcore_table); i
++)
+ if (
mcore_table[i].inst == (inst & imsk[mcore_table[i].
opclass]))
break;
break;
- if (
op->name == 0
)
+ if (
i == ARRAY_SIZE (mcore_table)
)
(*print_func) (stream, ".short 0x%04x", inst);
else
{
const char *name = grname[inst & 0x0F];
(*print_func) (stream, ".short 0x%04x", inst);
else
{
const char *name = grname[inst & 0x0F];
- (*print_func) (stream, "%s",
op->
name);
+ (*print_func) (stream, "%s",
mcore_table[i].
name);
- switch (
op->
opclass)
+ switch (
mcore_table[i].
opclass)
{
case O0:
break;
{
case O0:
break;
@@
-195,18
+196,14
@@
print_insn_mcore (bfd_vma memaddr,
case BR:
{
case BR:
{
-
long val = inst & 0x3FF
;
+
uint32_t val = ((inst & 0x3FF) ^ 0x400) - 0x400
;
- if (inst & 0x400)
-
val |= 0xFFFFFC00
;
+ val = memaddr + 2 + (val << 1);
+
(*print_func) (stream, "\t0x%x", val)
;
- (*print_func) (stream, "\t0x%lx", (long)(memaddr + 2 + (val << 1)));
-
- if (strcmp (op->name, "bsr") == 0)
+ if (strcmp (mcore_table[i].name, "bsr") == 0)
{
/* For bsr, we'll try to get a symbol for the target. */
{
/* For bsr, we'll try to get a symbol for the target. */
- val = memaddr + 2 + (val << 1);
-
if (info->print_address_func && val != 0)
{
(*print_func) (stream, "\t// ");
if (info->print_address_func && val != 0)
{
(*print_func) (stream, "\t// ");
@@
-218,19
+215,18
@@
print_insn_mcore (bfd_vma memaddr,
case BL:
{
case BL:
{
- long val;
- val = (inst & 0x000F);
- (*print_func) (stream, "\t%s, 0x%lx",
+ uint32_t val = inst & 0x000F;
+ (*print_func) (stream, "\t%s, 0x%x",
grname[(inst >> 4) & 0xF],
grname[(inst >> 4) & 0xF],
- (
long
) (memaddr - (val << 1)));
+ (
uint32_t
) (memaddr - (val << 1)));
}
break;
case LR:
{
}
break;
case LR:
{
- u
nsigned long
val;
+ u
int32_t
val;
- val = (memaddr + 2 + ((inst & 0xFF) << 2)) &
0xFFFFFFFC
;
+ val = (memaddr + 2 + ((inst & 0xFF) << 2)) &
~3
;
/* We are not reading an instruction, so allow
reads to extend beyond the next symbol. */
/* We are not reading an instruction, so allow
reads to extend beyond the next symbol. */
@@
-243,27
+239,27
@@
print_insn_mcore (bfd_vma memaddr,
}
if (info->endian == BFD_ENDIAN_LITTLE)
}
if (info->endian == BFD_ENDIAN_LITTLE)
- val = (ibytes[3] << 24) | (ibytes[2] << 16)
-
| (ibytes[1] << 8) | (ibytes[0]
);
+ val = (
((unsigned)
ibytes[3] << 24) | (ibytes[2] << 16)
+
| (ibytes[1] << 8) | (ibytes[0])
);
else
else
- val = (ibytes[0] << 24) | (ibytes[1] << 16)
-
| (ibytes[2] << 8) | (ibytes[3]
);
+ val = (
((unsigned)
ibytes[0] << 24) | (ibytes[1] << 16)
+
| (ibytes[2] << 8) | (ibytes[3])
);
/* Removed [] around literal value to match ABI syntax 12/95. */
/* Removed [] around literal value to match ABI syntax 12/95. */
- (*print_func) (stream, "\t%s, 0x%
l
X", grname[(inst >> 8) & 0xF], val);
+ (*print_func) (stream, "\t%s, 0x%X", grname[(inst >> 8) & 0xF], val);
if (val == 0)
if (val == 0)
- (*print_func) (stream, "\t// from address pool at 0x%
l
x",
- (
long
) (memaddr + 2
-
+ ((inst & 0xFF) << 2)) & 0xFFFFFFFC
);
+ (*print_func) (stream, "\t// from address pool at 0x%x",
+ (
uint32_t
) (memaddr + 2
+
+ ((inst & 0xFF) << 2)) & ~3
);
}
break;
case LJ:
{
}
break;
case LJ:
{
- u
nsigned long
val;
+ u
int32_t
val;
- val = (memaddr + 2 + ((inst & 0xFF) << 2)) &
0xFFFFFFFC
;
+ val = (memaddr + 2 + ((inst & 0xFF) << 2)) &
~3
;
/* We are not reading an instruction, so allow
reads to extend beyond the next symbol. */
/* We are not reading an instruction, so allow
reads to extend beyond the next symbol. */
@@
-276,14
+272,14
@@
print_insn_mcore (bfd_vma memaddr,
}
if (info->endian == BFD_ENDIAN_LITTLE)
}
if (info->endian == BFD_ENDIAN_LITTLE)
- val = (ibytes[3] << 24) | (ibytes[2] << 16)
-
| (ibytes[1] << 8) | (ibytes[0]
);
+ val = (
((unsigned)
ibytes[3] << 24) | (ibytes[2] << 16)
+
| (ibytes[1] << 8) | (ibytes[0])
);
else
else
- val = (ibytes[0] << 24) | (ibytes[1] << 16)
-
| (ibytes[2] << 8) | (ibytes[3]
);
+ val = (
((unsigned)
ibytes[0] << 24) | (ibytes[1] << 16)
+
| (ibytes[2] << 8) | (ibytes[3])
);
/* Removed [] around literal value to match ABI syntax 12/95. */
/* Removed [] around literal value to match ABI syntax 12/95. */
- (*print_func) (stream, "\t0x%
l
X", val);
+ (*print_func) (stream, "\t0x%X", val);
/* For jmpi/jsri, we'll try to get a symbol for the target. */
if (info->print_address_func && val != 0)
{
/* For jmpi/jsri, we'll try to get a symbol for the target. */
if (info->print_address_func && val != 0)
{
@@
-292,9
+288,9
@@
print_insn_mcore (bfd_vma memaddr,
}
else
{
}
else
{
- (*print_func) (stream, "\t// from address pool at 0x%
l
x",
- (
long
) (memaddr + 2
-
+ ((inst & 0xFF) << 2)) & 0xFFFFFFFC
);
+ (*print_func) (stream, "\t// from address pool at 0x%x",
+ (
uint32_t
) (memaddr + 2
+
+ ((inst & 0xFF) << 2)) & ~3
);
}
}
break;
}
}
break;
This page took
0.027648 seconds
and
4
git commands to generate.