2002-11-12 Klee Dienes <kdienes@apple.com>
* avr-dis.c: Include libiberty.h (for xmalloc). (struct avr_opcodes_s): Remove 'bin_mask' field (it's automatically computed in the init routine). (AVR_INSN): No longer provide bin_mask field in initializer. (avr_opcodes_s): Declare as const. (print_insn_avr): Store the bin_mask field in a separate table (allocated with xmalloc); iterate through it at the same time as we iterate through the opcodes.
This commit is contained in:
parent
a3e64b75ca
commit
11041102f2
2 changed files with 34 additions and 11 deletions
|
@ -1,3 +1,14 @@
|
|||
2002-11-18 Klee Dienes <kdienes@apple.com>
|
||||
|
||||
* avr-dis.c: Include libiberty.h (for xmalloc).
|
||||
(struct avr_opcodes_s): Remove 'bin_mask' field (it's
|
||||
automatically computed in the init routine).
|
||||
(AVR_INSN): No longer provide bin_mask field in initializer.
|
||||
(avr_opcodes_s): Declare as const.
|
||||
(print_insn_avr): Store the bin_mask field in a separate table
|
||||
(allocated with xmalloc); iterate through it at the same time as
|
||||
we iterate through the opcodes.
|
||||
|
||||
2002-11-18 Klee Dienes <kdienes@apple.com>
|
||||
|
||||
* h8300-dis.c: Include libiberty.h (for xmalloc).
|
||||
|
|
|
@ -21,7 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||
#include "sysdep.h"
|
||||
#include "dis-asm.h"
|
||||
#include "opintl.h"
|
||||
|
||||
#include "libiberty.h"
|
||||
|
||||
struct avr_opcodes_s
|
||||
{
|
||||
|
@ -31,16 +31,15 @@ struct avr_opcodes_s
|
|||
int insn_size; /* in words */
|
||||
int isa;
|
||||
unsigned int bin_opcode;
|
||||
unsigned int bin_mask;
|
||||
};
|
||||
|
||||
#define AVR_INSN(NAME, CONSTR, OPCODE, SIZE, ISA, BIN) \
|
||||
{#NAME, CONSTR, OPCODE, SIZE, ISA, BIN, 0},
|
||||
{#NAME, CONSTR, OPCODE, SIZE, ISA, BIN},
|
||||
|
||||
struct avr_opcodes_s avr_opcodes[] =
|
||||
const struct avr_opcodes_s avr_opcodes[] =
|
||||
{
|
||||
#include "opcode/avr.h"
|
||||
{NULL, NULL, NULL, 0, 0, 0, 0}
|
||||
{NULL, NULL, NULL, 0, 0, 0}
|
||||
};
|
||||
|
||||
static int avr_operand PARAMS ((unsigned int, unsigned int,
|
||||
|
@ -257,9 +256,11 @@ print_insn_avr(addr, info)
|
|||
disassemble_info *info;
|
||||
{
|
||||
unsigned int insn, insn2;
|
||||
struct avr_opcodes_s *opcode;
|
||||
const struct avr_opcodes_s *opcode;
|
||||
static unsigned int *maskptr;
|
||||
void *stream = info->stream;
|
||||
fprintf_ftype prin = info->fprintf_func;
|
||||
static unsigned int *avr_bin_masks;
|
||||
static int initialized;
|
||||
int cmd_len = 2;
|
||||
int ok = 0;
|
||||
|
@ -267,9 +268,16 @@ print_insn_avr(addr, info)
|
|||
|
||||
if (!initialized)
|
||||
{
|
||||
initialized = 1;
|
||||
unsigned int nopcodes;
|
||||
|
||||
for (opcode = avr_opcodes; opcode->name; opcode++)
|
||||
nopcodes = sizeof (avr_opcodes) / sizeof (struct avr_opcodes_s);
|
||||
|
||||
avr_bin_masks = (unsigned int *)
|
||||
xmalloc (nopcodes * sizeof (unsigned int));
|
||||
|
||||
for (opcode = avr_opcodes, maskptr = avr_bin_masks;
|
||||
opcode->name;
|
||||
opcode++, maskptr++)
|
||||
{
|
||||
char * s;
|
||||
unsigned int bin = 0;
|
||||
|
@ -284,15 +292,19 @@ print_insn_avr(addr, info)
|
|||
}
|
||||
assert (s - opcode->opcode == 16);
|
||||
assert (opcode->bin_opcode == bin);
|
||||
opcode->bin_mask = mask;
|
||||
*maskptr = mask;
|
||||
}
|
||||
|
||||
initialized = 1;
|
||||
}
|
||||
|
||||
insn = avrdis_opcode (addr, info);
|
||||
|
||||
for (opcode = avr_opcodes; opcode->name; opcode++)
|
||||
for (opcode = avr_opcodes, maskptr = avr_bin_masks;
|
||||
opcode->name;
|
||||
opcode++, maskptr++)
|
||||
{
|
||||
if ((insn & opcode->bin_mask) == opcode->bin_opcode)
|
||||
if ((insn & *maskptr) == opcode->bin_opcode)
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue