/* Interface definition for configurable Xtensa ISA support.
- Copyright 2003, 2004 Free Software Foundation, Inc.
+ Copyright 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
#ifndef XTENSA_LIBISA_H
#define XTENSA_LIBISA_H
extern "C" {
#endif
-/* Use the statically-linked version for the GNU tools. */
-#define STATIC_LIBISA 1
-
/* Version number: This is intended to help support code that works with
versions of this library from multiple Xtensa releases. */
typedef struct xtensa_isa_opaque { int unused; } *xtensa_isa;
-/* Opcodes, formats, regfiles, states, sysregs, ctypes, and protos are
+/* Most of the Xtensa ISA entities (e.g., opcodes, regfiles, etc.) are
represented here using sequential integers beginning with 0. The
specific values are only fixed for a particular instantiation of an
xtensa_isa structure, so these values should only be used
retrieved with the "errno" function. For any result other than
xtensa_isa_ok, an error message containing additional information
about the problem can be retrieved using the "error_msg" function.
- The error messages are stored in an internal buffer, which should not
- should be freed and may be overwritten by subsequent operations. */
+ The error messages are stored in an internal buffer, which should
+ not be freed and may be overwritten by subsequent operations. */
typedef enum xtensa_isa_status_enum
{
extern char *
xtensa_isa_error_msg (xtensa_isa isa);
+
\f
/* Instruction buffers. */
extern int
xtensa_insnbuf_to_chars (xtensa_isa isa, const xtensa_insnbuf insn,
- char *cp, int num_chars);
+ unsigned char *cp, int num_chars);
extern void
xtensa_insnbuf_from_chars (xtensa_isa isa, xtensa_insnbuf insn,
- const char *cp, int num_chars);
+ const unsigned char *cp, int num_chars);
+
\f
/* ISA information. */
XTENSA_UNDEFINED on error. */
extern int
-xtensa_isa_length_from_chars (xtensa_isa isa, const char *cp);
+xtensa_isa_length_from_chars (xtensa_isa isa, const unsigned char *cp);
/* Get the number of stages in the processor's pipeline. The pipeline
extern int
xtensa_isa_num_funcUnits (xtensa_isa isa);
+
\f
/* Instruction formats. */
xtensa_format_set_slot (xtensa_isa isa, xtensa_format fmt, int slot,
xtensa_insnbuf insn, const xtensa_insnbuf slotbuf);
+
\f
/* Opcode information. */
extern int
xtensa_opcode_num_operands (xtensa_isa isa, xtensa_opcode opc);
-
extern int
xtensa_opcode_num_stateOperands (xtensa_isa isa, xtensa_opcode opc);
extern xtensa_funcUnit_use *
xtensa_opcode_funcUnit_use (xtensa_isa isa, xtensa_opcode opc, int u);
+
\f
/* Operand information. */
xtensa_operand_undo_reloc (xtensa_isa isa, xtensa_opcode opc, int opnd,
uint32 *valp, uint32 pc);
+
\f
/* State Operands. */
extern char
xtensa_stateOperand_inout (xtensa_isa isa, xtensa_opcode opc, int stOp);
+
\f
/* Interface Operands. */
xtensa_interfaceOperand_interface (xtensa_isa isa, xtensa_opcode opc,
int ifOp);
+
\f
/* Register Files. */
extern int
xtensa_regfile_num_entries (xtensa_isa isa, xtensa_regfile rf);
+
\f
/* Processor States. */
extern int
xtensa_state_is_exported (xtensa_isa isa, xtensa_state st);
+
+/* Check for a "shared_or" state. Returns 0 if the condition is false,
+ 1 if the condition is true, and XTENSA_UNDEFINED on error. */
+
+extern int
+xtensa_state_is_shared_or (xtensa_isa isa, xtensa_state st);
+
+
\f
/* Sysregs ("special registers" and "user registers"). */
extern int
xtensa_sysreg_is_user (xtensa_isa isa, xtensa_sysreg sysreg);
+
\f
/* Interfaces. */
extern int
xtensa_interface_class_id (xtensa_isa isa, xtensa_interface intf);
+
\f
/* Functional Units. */