/* Configurable Xtensa ISA support.
- Copyright 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2003-2020 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
/* Inward conversion from byte stream to xtensa_insnbuf. See
xtensa_insnbuf_to_chars for a discussion of why this is complicated
by endianness. */
-
+
void
xtensa_insnbuf_from_chars (xtensa_isa isa,
xtensa_insnbuf insn,
int word_inx = byte_to_word_index (i);
int bit_inx = byte_to_bit_index (i);
- insn[word_inx] |= (*cp & 0xff) << bit_inx;
+ insn[word_inx] |= (unsigned) (*cp & 0xff) << bit_inx;
}
}
xtensa_sysreg_internal *sreg = &isa->sysregs[n];
is_user = sreg->is_user;
- isa->sysreg_table[is_user][sreg->number] = n;
+ if (sreg->number >= 0)
+ isa->sysreg_table[is_user][sreg->number] = n;
}
/* Set up the interface lookup table. */
- isa->interface_lookup_table =
+ isa->interface_lookup_table =
bfd_malloc (isa->num_interfaces * sizeof (xtensa_lookup_entry));
CHECK_ALLOC_FOR_INIT (isa->interface_lookup_table, NULL, errno_p,
error_msg_p);
sizeof (xtensa_lookup_entry), xtensa_isa_name_compare);
/* Set up the funcUnit lookup table. */
- isa->funcUnit_lookup_table =
+ isa->funcUnit_lookup_table =
bfd_malloc (isa->num_funcUnits * sizeof (xtensa_lookup_entry));
CHECK_ALLOC_FOR_INIT (isa->funcUnit_lookup_table, NULL, errno_p,
error_msg_p);
the memory allocated by xtensa_isa_init and restore the xtensa_isa
structure to its initial state. */
- if (intisa->opname_lookup_table)
- {
- free (intisa->opname_lookup_table);
- intisa->opname_lookup_table = 0;
- }
+ free (intisa->opname_lookup_table);
+ intisa->opname_lookup_table = 0;
- if (intisa->state_lookup_table)
- {
- free (intisa->state_lookup_table);
- intisa->state_lookup_table = 0;
- }
+ free (intisa->state_lookup_table);
+ intisa->state_lookup_table = 0;
+
+ free (intisa->sysreg_lookup_table);
+ intisa->sysreg_lookup_table = 0;
- if (intisa->sysreg_lookup_table)
- {
- free (intisa->sysreg_lookup_table);
- intisa->sysreg_lookup_table = 0;
- }
for (n = 0; n < 2; n++)
{
- if (intisa->sysreg_table[n])
- {
- free (intisa->sysreg_table[n]);
- intisa->sysreg_table[n] = 0;
- }
+ free (intisa->sysreg_table[n]);
+ intisa->sysreg_table[n] = 0;
}
- if (intisa->interface_lookup_table)
- {
- free (intisa->interface_lookup_table);
- intisa->interface_lookup_table = 0;
- }
+ free (intisa->interface_lookup_table);
+ intisa->interface_lookup_table = 0;
- if (intisa->funcUnit_lookup_table)
- {
- free (intisa->funcUnit_lookup_table);
- intisa->funcUnit_lookup_table = 0;
- }
+ free (intisa->funcUnit_lookup_table);
+ intisa->funcUnit_lookup_table = 0;
}
int
-xtensa_isa_num_pipe_stages (xtensa_isa isa)
+xtensa_isa_num_pipe_stages (xtensa_isa isa)
{
xtensa_opcode opcode;
xtensa_funcUnit_use *use;
if (strcasecmp (fmtname, intisa->formats[fmt].name) == 0)
return fmt;
}
-
+
xtisa_errno = xtensa_isa_bad_format;
sprintf (xtisa_error_msg, "format \"%s\" not recognized", fmtname);
return XTENSA_UNDEFINED;
/* The expected number of regfiles is small; use a linear search. */
for (n = 0; n < intisa->num_regfiles; n++)
{
- if (!strcmp (intisa->regfiles[n].name, name))
+ if (!filename_cmp (intisa->regfiles[n].name, name))
return n;
}
as their parents. */
if (intisa->regfiles[n].parent != n)
continue;
- if (!strcmp (intisa->regfiles[n].shortname, shortname))
+ if (!filename_cmp (intisa->regfiles[n].shortname, shortname))
return n;
}