/* Internal definitions for configurable Xtensa ISA support.
   Copyright (C) 2003-2021 Free Software Foundation, Inc.

   This file is part of BFD, the Binary File Descriptor library.

   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
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
   USA.  */

#ifndef XTENSA_ISA_INTERNAL_H
#define XTENSA_ISA_INTERNAL_H

/* Flags.  */

#define XTENSA_OPERAND_IS_REGISTER	0x00000001
#define XTENSA_OPERAND_IS_PCRELATIVE	0x00000002
#define XTENSA_OPERAND_IS_INVISIBLE	0x00000004
#define XTENSA_OPERAND_IS_UNKNOWN	0x00000008

#define XTENSA_OPCODE_IS_BRANCH		0x00000001
#define XTENSA_OPCODE_IS_JUMP		0x00000002
#define XTENSA_OPCODE_IS_LOOP		0x00000004
#define XTENSA_OPCODE_IS_CALL		0x00000008

#define XTENSA_STATE_IS_EXPORTED	0x00000001
#define XTENSA_STATE_IS_SHARED_OR	0x00000002

#define XTENSA_INTERFACE_HAS_SIDE_EFFECT 0x00000001

/* Function pointer typedefs */
typedef void (*xtensa_format_encode_fn) (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 int (*xtensa_opcode_decode_fn) (const xtensa_insnbuf);
typedef uint32 (*xtensa_get_field_fn) (const xtensa_insnbuf);
typedef void (*xtensa_set_field_fn) (xtensa_insnbuf, uint32);
typedef int (*xtensa_immed_decode_fn) (uint32 *);
typedef int (*xtensa_immed_encode_fn) (uint32 *);
typedef int (*xtensa_do_reloc_fn) (uint32 *, uint32);
typedef int (*xtensa_undo_reloc_fn) (uint32 *, uint32);
typedef void (*xtensa_opcode_encode_fn) (xtensa_insnbuf);
typedef int (*xtensa_format_decode_fn) (const xtensa_insnbuf);
typedef int (*xtensa_length_decode_fn) (const unsigned char *);

typedef const struct xtensa_format_internal_struct
{
  const char *name;			/* Instruction format name.  */
  int length;				/* Instruction length in bytes.  */
  xtensa_format_encode_fn encode_fn;
  int num_slots;
  const int *slot_id;			/* Array[num_slots] of slot IDs.  */
} xtensa_format_internal;

typedef const struct xtensa_slot_internal_struct
{
  const char *name;			/* Not necessarily unique.  */
  const char *format;
  int position;
  xtensa_get_slot_fn get_fn;
  xtensa_set_slot_fn set_fn;
  const xtensa_get_field_fn *get_field_fns; /* Array[field_id].  */
  const xtensa_set_field_fn *set_field_fns; /* Array[field_id].  */
  xtensa_opcode_decode_fn opcode_decode_fn;
  const char *nop_name;
} xtensa_slot_internal;

typedef const struct xtensa_operand_internal_struct
{
  const char *name;
  int field_id;
  xtensa_regfile regfile;		/* Register file.  */
  int num_regs;				/* Usually 1; 2 for reg pairs, etc.  */
  uint32 flags;				/* See XTENSA_OPERAND_* flags.  */
  xtensa_immed_encode_fn encode;	/* Encode the operand value.  */
  xtensa_immed_decode_fn decode;	/* Decode the value from the field.  */
  xtensa_do_reloc_fn do_reloc;		/* Perform a PC-relative reloc.  */
  xtensa_undo_reloc_fn undo_reloc;	/* Undo a PC-relative relocation.  */
} xtensa_operand_internal;

typedef const struct xtensa_arg_internal_struct
{
  union {
    int operand_id;			/* For normal operands.  */
    xtensa_state state;			/* For stateOperands.  */
  } u;
  char inout;				/* Direction: 'i', 'o', or 'm'.  */
} xtensa_arg_internal;

typedef const struct xtensa_iclass_internal_struct
{
  int num_operands;			/* Size of "operands" array.  */
  xtensa_arg_internal *operands;	/* Array[num_operands].  */

  int num_stateOperands;		/* Size of "stateOperands" array.  */
  xtensa_arg_internal *stateOperands;	/* Array[num_stateOperands].  */

  int num_interfaceOperands;		/* Size of "interfaceOperands".  */
  xtensa_interface *interfaceOperands;	/* Array[num_interfaceOperands].  */
} xtensa_iclass_internal;

typedef const struct xtensa_opcode_internal_struct
{
  const char *name;			/* Opcode mnemonic.  */
  int iclass_id;			/* Iclass for this opcode.  */
  uint32 flags;				/* See XTENSA_OPCODE_* flags.  */
  const xtensa_opcode_encode_fn *encode_fns; /* Array[slot_id].  */
  int num_funcUnit_uses;		/* Number of funcUnit_use entries.  */
  xtensa_funcUnit_use *funcUnit_uses;	/* Array[num_funcUnit_uses].  */
} xtensa_opcode_internal;

typedef const struct xtensa_regfile_internal_struct
{
  const char *name;			/* Full name of the regfile.  */
  const char *shortname;		/* Abbreviated name.  */
  xtensa_regfile parent;		/* View parent (or identity).  */
  int num_bits;				/* Width of the registers.  */
  int num_entries;			/* Number of registers.  */
} xtensa_regfile_internal;

typedef const struct xtensa_interface_internal_struct
{
  const char *name;			/* Interface name.  */
  int num_bits;				/* Width of the interface.  */
  uint32 flags;				/* See XTENSA_INTERFACE_* flags.  */
  int class_id;				/* Class of related interfaces.  */
  char inout;				/* "i" or "o".  */
} xtensa_interface_internal;

typedef const struct xtensa_funcUnit_internal_struct
{
  const char *name;			/* Functional unit name.  */
  int num_copies;			/* Number of instances.  */
} xtensa_funcUnit_internal;

typedef const struct xtensa_state_internal_struct
{
  const char *name;			/* State name.  */
  int num_bits;				/* Number of state bits.  */
  uint32 flags;				/* See XTENSA_STATE_* flags.  */
} xtensa_state_internal;

typedef const struct xtensa_sysreg_internal_struct
{
  const char *name;			/* Register name.  */
  int number;				/* Register number.  */
  int is_user;				/* Non-zero if a "user register".  */
} xtensa_sysreg_internal;

typedef struct xtensa_lookup_entry_struct
{
  const char *key;
  union
  {
    xtensa_opcode opcode;		/* Internal opcode number.  */
    xtensa_sysreg sysreg;		/* Internal sysreg number.  */
    xtensa_state state;			/* Internal state number.  */
    xtensa_interface intf;		/* Internal interface number.  */
    xtensa_funcUnit fun;		/* Internal funcUnit number.  */
  } u;
} xtensa_lookup_entry;

typedef struct xtensa_isa_internal_struct
{
  int is_big_endian;			/* Endianness.  */
  int insn_size;			/* Maximum length in bytes.  */
  int insnbuf_size;			/* Number of insnbuf_words.  */

  int num_formats;
  xtensa_format_internal *formats;
  xtensa_format_decode_fn format_decode_fn;
  xtensa_length_decode_fn length_decode_fn;

  int num_slots;
  xtensa_slot_internal *slots;

  int num_fields;

  int num_operands;
  xtensa_operand_internal *operands;

  int num_iclasses;
  xtensa_iclass_internal *iclasses;

  int num_opcodes;
  xtensa_opcode_internal *opcodes;
  xtensa_lookup_entry *opname_lookup_table;

  int num_regfiles;
  xtensa_regfile_internal *regfiles;

  int num_states;
  xtensa_state_internal *states;
  xtensa_lookup_entry *state_lookup_table;

  int num_sysregs;
  xtensa_sysreg_internal *sysregs;
  xtensa_lookup_entry *sysreg_lookup_table;

  /* The current Xtensa ISA only supports 256 of each kind of sysreg so
     we can get away with implementing lookups with tables indexed by
     the register numbers.  If we ever allow larger sysreg numbers, this
     may have to be reimplemented.  The first entry in the following
     arrays corresponds to "special" registers and the second to "user"
     registers.  */
  int max_sysreg_num[2];
  xtensa_sysreg *sysreg_table[2];

  int num_interfaces;
  xtensa_interface_internal *interfaces;
  xtensa_lookup_entry *interface_lookup_table;

  int num_funcUnits;
  xtensa_funcUnit_internal *funcUnits;
  xtensa_lookup_entry *funcUnit_lookup_table;

} xtensa_isa_internal;

extern int xtensa_isa_name_compare (const void *, const void *);

#endif /* !XTENSA_ISA_INTERNAL_H */
