OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-6.8/] [include/] [xtensa-isa-internal.h] - Diff between revs 827 and 840

Only display areas with differences | Details | Blame | View Log

Rev 827 Rev 840
/* Internal definitions for configurable Xtensa ISA support.
/* Internal definitions for configurable Xtensa ISA support.
   Copyright 2003, 2004, 2005, 2008 Free Software Foundation, Inc.
   Copyright 2003, 2004, 2005, 2008 Free Software Foundation, Inc.
 
 
   This file is part of BFD, the Binary File Descriptor library.
   This file is part of BFD, the Binary File Descriptor library.
 
 
   This program is free software; you can redistribute it and/or modify
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
   USA.  */
   USA.  */
 
 
#ifndef XTENSA_ISA_INTERNAL_H
#ifndef XTENSA_ISA_INTERNAL_H
#define XTENSA_ISA_INTERNAL_H
#define XTENSA_ISA_INTERNAL_H
 
 
/* Flags.  */
/* Flags.  */
 
 
#define XTENSA_OPERAND_IS_REGISTER      0x00000001
#define XTENSA_OPERAND_IS_REGISTER      0x00000001
#define XTENSA_OPERAND_IS_PCRELATIVE    0x00000002
#define XTENSA_OPERAND_IS_PCRELATIVE    0x00000002
#define XTENSA_OPERAND_IS_INVISIBLE     0x00000004
#define XTENSA_OPERAND_IS_INVISIBLE     0x00000004
#define XTENSA_OPERAND_IS_UNKNOWN       0x00000008
#define XTENSA_OPERAND_IS_UNKNOWN       0x00000008
 
 
#define XTENSA_OPCODE_IS_BRANCH         0x00000001
#define XTENSA_OPCODE_IS_BRANCH         0x00000001
#define XTENSA_OPCODE_IS_JUMP           0x00000002
#define XTENSA_OPCODE_IS_JUMP           0x00000002
#define XTENSA_OPCODE_IS_LOOP           0x00000004
#define XTENSA_OPCODE_IS_LOOP           0x00000004
#define XTENSA_OPCODE_IS_CALL           0x00000008
#define XTENSA_OPCODE_IS_CALL           0x00000008
 
 
#define XTENSA_STATE_IS_EXPORTED        0x00000001
#define XTENSA_STATE_IS_EXPORTED        0x00000001
#define XTENSA_STATE_IS_SHARED_OR       0x00000002
#define XTENSA_STATE_IS_SHARED_OR       0x00000002
 
 
#define XTENSA_INTERFACE_HAS_SIDE_EFFECT 0x00000001
#define XTENSA_INTERFACE_HAS_SIDE_EFFECT 0x00000001
 
 
/* Function pointer typedefs */
/* Function pointer typedefs */
typedef void (*xtensa_format_encode_fn) (xtensa_insnbuf);
typedef void (*xtensa_format_encode_fn) (xtensa_insnbuf);
typedef void (*xtensa_get_slot_fn) (const xtensa_insnbuf, xtensa_insnbuf);
typedef void (*xtensa_get_slot_fn) (const xtensa_insnbuf, xtensa_insnbuf);
typedef void (*xtensa_set_slot_fn) (xtensa_insnbuf, const xtensa_insnbuf);
typedef void (*xtensa_set_slot_fn) (xtensa_insnbuf, const xtensa_insnbuf);
typedef int (*xtensa_opcode_decode_fn) (const xtensa_insnbuf);
typedef int (*xtensa_opcode_decode_fn) (const xtensa_insnbuf);
typedef uint32 (*xtensa_get_field_fn) (const xtensa_insnbuf);
typedef uint32 (*xtensa_get_field_fn) (const xtensa_insnbuf);
typedef void (*xtensa_set_field_fn) (xtensa_insnbuf, uint32);
typedef void (*xtensa_set_field_fn) (xtensa_insnbuf, uint32);
typedef int (*xtensa_immed_decode_fn) (uint32 *);
typedef int (*xtensa_immed_decode_fn) (uint32 *);
typedef int (*xtensa_immed_encode_fn) (uint32 *);
typedef int (*xtensa_immed_encode_fn) (uint32 *);
typedef int (*xtensa_do_reloc_fn) (uint32 *, uint32);
typedef int (*xtensa_do_reloc_fn) (uint32 *, uint32);
typedef int (*xtensa_undo_reloc_fn) (uint32 *, uint32);
typedef int (*xtensa_undo_reloc_fn) (uint32 *, uint32);
typedef void (*xtensa_opcode_encode_fn) (xtensa_insnbuf);
typedef void (*xtensa_opcode_encode_fn) (xtensa_insnbuf);
typedef int (*xtensa_format_decode_fn) (const xtensa_insnbuf);
typedef int (*xtensa_format_decode_fn) (const xtensa_insnbuf);
typedef int (*xtensa_length_decode_fn) (const unsigned char *);
typedef int (*xtensa_length_decode_fn) (const unsigned char *);
 
 
typedef struct xtensa_format_internal_struct
typedef struct xtensa_format_internal_struct
{
{
  const char *name;                     /* Instruction format name.  */
  const char *name;                     /* Instruction format name.  */
  int length;                           /* Instruction length in bytes.  */
  int length;                           /* Instruction length in bytes.  */
  xtensa_format_encode_fn encode_fn;
  xtensa_format_encode_fn encode_fn;
  int num_slots;
  int num_slots;
  int *slot_id;                         /* Array[num_slots] of slot IDs.  */
  int *slot_id;                         /* Array[num_slots] of slot IDs.  */
} xtensa_format_internal;
} xtensa_format_internal;
 
 
typedef struct xtensa_slot_internal_struct
typedef struct xtensa_slot_internal_struct
{
{
  const char *name;                     /* Not necessarily unique.  */
  const char *name;                     /* Not necessarily unique.  */
  const char *format;
  const char *format;
  int position;
  int position;
  xtensa_get_slot_fn get_fn;
  xtensa_get_slot_fn get_fn;
  xtensa_set_slot_fn set_fn;
  xtensa_set_slot_fn set_fn;
  xtensa_get_field_fn *get_field_fns;   /* Array[field_id].  */
  xtensa_get_field_fn *get_field_fns;   /* Array[field_id].  */
  xtensa_set_field_fn *set_field_fns;   /* Array[field_id].  */
  xtensa_set_field_fn *set_field_fns;   /* Array[field_id].  */
  xtensa_opcode_decode_fn opcode_decode_fn;
  xtensa_opcode_decode_fn opcode_decode_fn;
  const char *nop_name;
  const char *nop_name;
} xtensa_slot_internal;
} xtensa_slot_internal;
 
 
typedef struct xtensa_operand_internal_struct
typedef struct xtensa_operand_internal_struct
{
{
  const char *name;
  const char *name;
  int field_id;
  int field_id;
  xtensa_regfile regfile;               /* Register file.  */
  xtensa_regfile regfile;               /* Register file.  */
  int num_regs;                         /* Usually 1; 2 for reg pairs, etc.  */
  int num_regs;                         /* Usually 1; 2 for reg pairs, etc.  */
  uint32 flags;                         /* See XTENSA_OPERAND_* flags.  */
  uint32 flags;                         /* See XTENSA_OPERAND_* flags.  */
  xtensa_immed_encode_fn encode;        /* Encode the operand value.  */
  xtensa_immed_encode_fn encode;        /* Encode the operand value.  */
  xtensa_immed_decode_fn decode;        /* Decode the value from the field.  */
  xtensa_immed_decode_fn decode;        /* Decode the value from the field.  */
  xtensa_do_reloc_fn do_reloc;          /* Perform a PC-relative reloc.  */
  xtensa_do_reloc_fn do_reloc;          /* Perform a PC-relative reloc.  */
  xtensa_undo_reloc_fn undo_reloc;      /* Undo a PC-relative relocation.  */
  xtensa_undo_reloc_fn undo_reloc;      /* Undo a PC-relative relocation.  */
} xtensa_operand_internal;
} xtensa_operand_internal;
 
 
typedef struct xtensa_arg_internal_struct
typedef struct xtensa_arg_internal_struct
{
{
  union {
  union {
    int operand_id;                     /* For normal operands.  */
    int operand_id;                     /* For normal operands.  */
    xtensa_state state;                 /* For stateOperands.  */
    xtensa_state state;                 /* For stateOperands.  */
  } u;
  } u;
  char inout;                           /* Direction: 'i', 'o', or 'm'.  */
  char inout;                           /* Direction: 'i', 'o', or 'm'.  */
} xtensa_arg_internal;
} xtensa_arg_internal;
 
 
typedef struct xtensa_iclass_internal_struct
typedef struct xtensa_iclass_internal_struct
{
{
  int num_operands;                     /* Size of "operands" array.  */
  int num_operands;                     /* Size of "operands" array.  */
  xtensa_arg_internal *operands;        /* Array[num_operands].  */
  xtensa_arg_internal *operands;        /* Array[num_operands].  */
 
 
  int num_stateOperands;                /* Size of "stateOperands" array.  */
  int num_stateOperands;                /* Size of "stateOperands" array.  */
  xtensa_arg_internal *stateOperands;   /* Array[num_stateOperands].  */
  xtensa_arg_internal *stateOperands;   /* Array[num_stateOperands].  */
 
 
  int num_interfaceOperands;            /* Size of "interfaceOperands".  */
  int num_interfaceOperands;            /* Size of "interfaceOperands".  */
  xtensa_interface *interfaceOperands;  /* Array[num_interfaceOperands].  */
  xtensa_interface *interfaceOperands;  /* Array[num_interfaceOperands].  */
} xtensa_iclass_internal;
} xtensa_iclass_internal;
 
 
typedef struct xtensa_opcode_internal_struct
typedef struct xtensa_opcode_internal_struct
{
{
  const char *name;                     /* Opcode mnemonic.  */
  const char *name;                     /* Opcode mnemonic.  */
  int iclass_id;                        /* Iclass for this opcode.  */
  int iclass_id;                        /* Iclass for this opcode.  */
  uint32 flags;                         /* See XTENSA_OPCODE_* flags.  */
  uint32 flags;                         /* See XTENSA_OPCODE_* flags.  */
  xtensa_opcode_encode_fn *encode_fns;  /* Array[slot_id].  */
  xtensa_opcode_encode_fn *encode_fns;  /* Array[slot_id].  */
  int num_funcUnit_uses;                /* Number of funcUnit_use entries.  */
  int num_funcUnit_uses;                /* Number of funcUnit_use entries.  */
  xtensa_funcUnit_use *funcUnit_uses;   /* Array[num_funcUnit_uses].  */
  xtensa_funcUnit_use *funcUnit_uses;   /* Array[num_funcUnit_uses].  */
} xtensa_opcode_internal;
} xtensa_opcode_internal;
 
 
typedef struct xtensa_regfile_internal_struct
typedef struct xtensa_regfile_internal_struct
{
{
  const char *name;                     /* Full name of the regfile.  */
  const char *name;                     /* Full name of the regfile.  */
  const char *shortname;                /* Abbreviated name.  */
  const char *shortname;                /* Abbreviated name.  */
  xtensa_regfile parent;                /* View parent (or identity).  */
  xtensa_regfile parent;                /* View parent (or identity).  */
  int num_bits;                         /* Width of the registers.  */
  int num_bits;                         /* Width of the registers.  */
  int num_entries;                      /* Number of registers.  */
  int num_entries;                      /* Number of registers.  */
} xtensa_regfile_internal;
} xtensa_regfile_internal;
 
 
typedef struct xtensa_interface_internal_struct
typedef struct xtensa_interface_internal_struct
{
{
  const char *name;                     /* Interface name.  */
  const char *name;                     /* Interface name.  */
  int num_bits;                         /* Width of the interface.  */
  int num_bits;                         /* Width of the interface.  */
  uint32 flags;                         /* See XTENSA_INTERFACE_* flags.  */
  uint32 flags;                         /* See XTENSA_INTERFACE_* flags.  */
  int class_id;                         /* Class of related interfaces.  */
  int class_id;                         /* Class of related interfaces.  */
  char inout;                           /* "i" or "o".  */
  char inout;                           /* "i" or "o".  */
} xtensa_interface_internal;
} xtensa_interface_internal;
 
 
typedef struct xtensa_funcUnit_internal_struct
typedef struct xtensa_funcUnit_internal_struct
{
{
  const char *name;                     /* Functional unit name.  */
  const char *name;                     /* Functional unit name.  */
  int num_copies;                       /* Number of instances.  */
  int num_copies;                       /* Number of instances.  */
} xtensa_funcUnit_internal;
} xtensa_funcUnit_internal;
 
 
typedef struct xtensa_state_internal_struct
typedef struct xtensa_state_internal_struct
{
{
  const char *name;                     /* State name.  */
  const char *name;                     /* State name.  */
  int num_bits;                         /* Number of state bits.  */
  int num_bits;                         /* Number of state bits.  */
  uint32 flags;                         /* See XTENSA_STATE_* flags.  */
  uint32 flags;                         /* See XTENSA_STATE_* flags.  */
} xtensa_state_internal;
} xtensa_state_internal;
 
 
typedef struct xtensa_sysreg_internal_struct
typedef struct xtensa_sysreg_internal_struct
{
{
  const char *name;                     /* Register name.  */
  const char *name;                     /* Register name.  */
  int number;                           /* Register number.  */
  int number;                           /* Register number.  */
  int is_user;                          /* Non-zero if a "user register".  */
  int is_user;                          /* Non-zero if a "user register".  */
} xtensa_sysreg_internal;
} xtensa_sysreg_internal;
 
 
typedef struct xtensa_lookup_entry_struct
typedef struct xtensa_lookup_entry_struct
{
{
  const char *key;
  const char *key;
  union
  union
  {
  {
    xtensa_opcode opcode;               /* Internal opcode number.  */
    xtensa_opcode opcode;               /* Internal opcode number.  */
    xtensa_sysreg sysreg;               /* Internal sysreg number.  */
    xtensa_sysreg sysreg;               /* Internal sysreg number.  */
    xtensa_state state;                 /* Internal state number.  */
    xtensa_state state;                 /* Internal state number.  */
    xtensa_interface intf;              /* Internal interface number.  */
    xtensa_interface intf;              /* Internal interface number.  */
    xtensa_funcUnit fun;                /* Internal funcUnit number.  */
    xtensa_funcUnit fun;                /* Internal funcUnit number.  */
  } u;
  } u;
} xtensa_lookup_entry;
} xtensa_lookup_entry;
 
 
typedef struct xtensa_isa_internal_struct
typedef struct xtensa_isa_internal_struct
{
{
  int is_big_endian;                    /* Endianness.  */
  int is_big_endian;                    /* Endianness.  */
  int insn_size;                        /* Maximum length in bytes.  */
  int insn_size;                        /* Maximum length in bytes.  */
  int insnbuf_size;                     /* Number of insnbuf_words.  */
  int insnbuf_size;                     /* Number of insnbuf_words.  */
 
 
  int num_formats;
  int num_formats;
  xtensa_format_internal *formats;
  xtensa_format_internal *formats;
  xtensa_format_decode_fn format_decode_fn;
  xtensa_format_decode_fn format_decode_fn;
  xtensa_length_decode_fn length_decode_fn;
  xtensa_length_decode_fn length_decode_fn;
 
 
  int num_slots;
  int num_slots;
  xtensa_slot_internal *slots;
  xtensa_slot_internal *slots;
 
 
  int num_fields;
  int num_fields;
 
 
  int num_operands;
  int num_operands;
  xtensa_operand_internal *operands;
  xtensa_operand_internal *operands;
 
 
  int num_iclasses;
  int num_iclasses;
  xtensa_iclass_internal *iclasses;
  xtensa_iclass_internal *iclasses;
 
 
  int num_opcodes;
  int num_opcodes;
  xtensa_opcode_internal *opcodes;
  xtensa_opcode_internal *opcodes;
  xtensa_lookup_entry *opname_lookup_table;
  xtensa_lookup_entry *opname_lookup_table;
 
 
  int num_regfiles;
  int num_regfiles;
  xtensa_regfile_internal *regfiles;
  xtensa_regfile_internal *regfiles;
 
 
  int num_states;
  int num_states;
  xtensa_state_internal *states;
  xtensa_state_internal *states;
  xtensa_lookup_entry *state_lookup_table;
  xtensa_lookup_entry *state_lookup_table;
 
 
  int num_sysregs;
  int num_sysregs;
  xtensa_sysreg_internal *sysregs;
  xtensa_sysreg_internal *sysregs;
  xtensa_lookup_entry *sysreg_lookup_table;
  xtensa_lookup_entry *sysreg_lookup_table;
 
 
  /* The current Xtensa ISA only supports 256 of each kind of sysreg so
  /* The current Xtensa ISA only supports 256 of each kind of sysreg so
     we can get away with implementing lookups with tables indexed by
     we can get away with implementing lookups with tables indexed by
     the register numbers.  If we ever allow larger sysreg numbers, this
     the register numbers.  If we ever allow larger sysreg numbers, this
     may have to be reimplemented.  The first entry in the following
     may have to be reimplemented.  The first entry in the following
     arrays corresponds to "special" registers and the second to "user"
     arrays corresponds to "special" registers and the second to "user"
     registers.  */
     registers.  */
  int max_sysreg_num[2];
  int max_sysreg_num[2];
  xtensa_sysreg *sysreg_table[2];
  xtensa_sysreg *sysreg_table[2];
 
 
  int num_interfaces;
  int num_interfaces;
  xtensa_interface_internal *interfaces;
  xtensa_interface_internal *interfaces;
  xtensa_lookup_entry *interface_lookup_table;
  xtensa_lookup_entry *interface_lookup_table;
 
 
  int num_funcUnits;
  int num_funcUnits;
  xtensa_funcUnit_internal *funcUnits;
  xtensa_funcUnit_internal *funcUnits;
  xtensa_lookup_entry *funcUnit_lookup_table;
  xtensa_lookup_entry *funcUnit_lookup_table;
 
 
} xtensa_isa_internal;
} xtensa_isa_internal;
 
 
extern int xtensa_isa_name_compare (const void *, const void *);
extern int xtensa_isa_name_compare (const void *, const void *);
 
 
extern xtensa_isa_status xtisa_errno;
extern xtensa_isa_status xtisa_errno;
extern char xtisa_error_msg[];
extern char xtisa_error_msg[];
 
 
#endif /* !XTENSA_ISA_INTERNAL_H */
#endif /* !XTENSA_ISA_INTERNAL_H */
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.