184865Sobrien/* ia64.h -- Header file for ia64 opcode table
2218822Sdim   Copyright (C) 1998, 1999, 2000, 2002, 2005, 2006
3218822Sdim   Free Software Foundation, Inc.
4218822Sdim   Contributed by David Mosberger-Tang <davidm@hpl.hp.com> */
584865Sobrien
684865Sobrien#ifndef opcode_ia64_h
784865Sobrien#define opcode_ia64_h
884865Sobrien
984865Sobrien#include <sys/types.h>
1084865Sobrien
11104834Sobrien#include "bfd.h"
1284865Sobrien
1384865Sobrien
1484865Sobrientypedef BFD_HOST_U_64_BIT ia64_insn;
1584865Sobrien
1684865Sobrienenum ia64_insn_type
1784865Sobrien  {
1884865Sobrien    IA64_TYPE_NIL = 0,	/* illegal type */
1984865Sobrien    IA64_TYPE_A,	/* integer alu (I- or M-unit) */
2084865Sobrien    IA64_TYPE_I,	/* non-alu integer (I-unit) */
2184865Sobrien    IA64_TYPE_M,	/* memory (M-unit) */
2284865Sobrien    IA64_TYPE_B,	/* branch (B-unit) */
2384865Sobrien    IA64_TYPE_F,	/* floating-point (F-unit) */
2484865Sobrien    IA64_TYPE_X,	/* long encoding (X-unit) */
2584865Sobrien    IA64_TYPE_DYN,	/* Dynamic opcode */
2684865Sobrien    IA64_NUM_TYPES
2784865Sobrien  };
2884865Sobrien
2984865Sobrienenum ia64_unit
3084865Sobrien  {
3184865Sobrien    IA64_UNIT_NIL = 0,	/* illegal unit */
3284865Sobrien    IA64_UNIT_I,	/* integer unit */
3384865Sobrien    IA64_UNIT_M,	/* memory unit */
3484865Sobrien    IA64_UNIT_B,	/* branching unit */
3584865Sobrien    IA64_UNIT_F,	/* floating-point unit */
3684865Sobrien    IA64_UNIT_L,	/* long "unit" */
3784865Sobrien    IA64_UNIT_X,	/* may be integer or branch unit */
3884865Sobrien    IA64_NUM_UNITS
3984865Sobrien  };
4084865Sobrien
4184865Sobrien/* Changes to this enumeration must be propagated to the operand table in
42130561Sobrien   bfd/cpu-ia64-opc.c
43130561Sobrien */
4484865Sobrienenum ia64_opnd
4584865Sobrien  {
4684865Sobrien    IA64_OPND_NIL,	/* no operand---MUST BE FIRST!*/
4784865Sobrien
4884865Sobrien    /* constants */
49130561Sobrien    IA64_OPND_AR_CSD,	/* application register csd (ar.csd) */
5084865Sobrien    IA64_OPND_AR_CCV,	/* application register ccv (ar.ccv) */
5184865Sobrien    IA64_OPND_AR_PFS,	/* application register pfs (ar.pfs) */
5284865Sobrien    IA64_OPND_C1,	/* the constant 1 */
5384865Sobrien    IA64_OPND_C8,	/* the constant 8 */
5484865Sobrien    IA64_OPND_C16,	/* the constant 16 */
5584865Sobrien    IA64_OPND_GR0,	/* gr0 */
5684865Sobrien    IA64_OPND_IP,	/* instruction pointer (ip) */
5784865Sobrien    IA64_OPND_PR,	/* predicate register (pr) */
5884865Sobrien    IA64_OPND_PR_ROT,	/* rotating predicate register (pr.rot) */
5984865Sobrien    IA64_OPND_PSR,	/* processor status register (psr) */
6084865Sobrien    IA64_OPND_PSR_L,	/* processor status register L (psr.l) */
6184865Sobrien    IA64_OPND_PSR_UM,	/* processor status register UM (psr.um) */
6284865Sobrien
6384865Sobrien    /* register operands: */
6484865Sobrien    IA64_OPND_AR3,	/* third application register # (bits 20-26) */
6584865Sobrien    IA64_OPND_B1,	/* branch register # (bits 6-8) */
6684865Sobrien    IA64_OPND_B2,	/* branch register # (bits 13-15) */
6784865Sobrien    IA64_OPND_CR3,	/* third control register # (bits 20-26) */
6884865Sobrien    IA64_OPND_F1,	/* first floating-point register # */
6984865Sobrien    IA64_OPND_F2,	/* second floating-point register # */
7084865Sobrien    IA64_OPND_F3,	/* third floating-point register # */
7184865Sobrien    IA64_OPND_F4,	/* fourth floating-point register # */
7284865Sobrien    IA64_OPND_P1,	/* first predicate # */
7384865Sobrien    IA64_OPND_P2,	/* second predicate # */
7484865Sobrien    IA64_OPND_R1,	/* first register # */
7584865Sobrien    IA64_OPND_R2,	/* second register # */
7684865Sobrien    IA64_OPND_R3,	/* third register # */
7784865Sobrien    IA64_OPND_R3_2,	/* third register # (limited to gr0-gr3) */
7884865Sobrien
79218822Sdim    /* memory operands: */
80218822Sdim    IA64_OPND_MR3,	/* memory at addr of third register # */
81218822Sdim
8284865Sobrien    /* indirect operands: */
8384865Sobrien    IA64_OPND_CPUID_R3,	/* cpuid[reg] */
8484865Sobrien    IA64_OPND_DBR_R3,	/* dbr[reg] */
8584865Sobrien    IA64_OPND_DTR_R3,	/* dtr[reg] */
8684865Sobrien    IA64_OPND_ITR_R3,	/* itr[reg] */
8784865Sobrien    IA64_OPND_IBR_R3,	/* ibr[reg] */
8884865Sobrien    IA64_OPND_MSR_R3,	/* msr[reg] */
8984865Sobrien    IA64_OPND_PKR_R3,	/* pkr[reg] */
9084865Sobrien    IA64_OPND_PMC_R3,	/* pmc[reg] */
9184865Sobrien    IA64_OPND_PMD_R3,	/* pmd[reg] */
9284865Sobrien    IA64_OPND_RR_R3,	/* rr[reg] */
9384865Sobrien
9484865Sobrien    /* immediate operands: */
9584865Sobrien    IA64_OPND_CCNT5,	/* 5-bit count (31 - bits 20-24) */
9684865Sobrien    IA64_OPND_CNT2a,	/* 2-bit count (1 + bits 27-28) */
9784865Sobrien    IA64_OPND_CNT2b,	/* 2-bit count (bits 27-28): 1, 2, 3 */
9884865Sobrien    IA64_OPND_CNT2c,	/* 2-bit count (bits 30-31): 0, 7, 15, or 16 */
9984865Sobrien    IA64_OPND_CNT5,	/* 5-bit count (bits 14-18) */
10084865Sobrien    IA64_OPND_CNT6,	/* 6-bit count (bits 27-32) */
10184865Sobrien    IA64_OPND_CPOS6a,	/* 6-bit count (63 - bits 20-25) */
10284865Sobrien    IA64_OPND_CPOS6b,	/* 6-bit count (63 - bits 14-19) */
10384865Sobrien    IA64_OPND_CPOS6c,	/* 6-bit count (63 - bits 31-36) */
10484865Sobrien    IA64_OPND_IMM1,	/* signed 1-bit immediate (bit 36) */
10584865Sobrien    IA64_OPND_IMMU2,	/* unsigned 2-bit immediate (bits 13-14) */
106218822Sdim    IA64_OPND_IMMU5b,	/* unsigned 5-bit immediate (32 + bits 14-18) */
10784865Sobrien    IA64_OPND_IMMU7a,	/* unsigned 7-bit immediate (bits 13-19) */
10884865Sobrien    IA64_OPND_IMMU7b,	/* unsigned 7-bit immediate (bits 20-26) */
10984865Sobrien    IA64_OPND_SOF,	/* 8-bit stack frame size */
11084865Sobrien    IA64_OPND_SOL,	/* 8-bit size of locals */
11184865Sobrien    IA64_OPND_SOR,	/* 6-bit number of rotating registers (scaled by 8) */
11284865Sobrien    IA64_OPND_IMM8,	/* signed 8-bit immediate (bits 13-19 & 36) */
11384865Sobrien    IA64_OPND_IMM8U4,	/* cmp4*u signed 8-bit immediate (bits 13-19 & 36) */
11484865Sobrien    IA64_OPND_IMM8M1,	/* signed 8-bit immediate -1 (bits 13-19 & 36) */
11584865Sobrien    IA64_OPND_IMM8M1U4,	/* cmp4*u signed 8-bit immediate -1 (bits 13-19 & 36)*/
11684865Sobrien    IA64_OPND_IMM8M1U8,	/* cmp*u signed 8-bit immediate -1 (bits 13-19 & 36) */
11784865Sobrien    IA64_OPND_IMMU9,	/* unsigned 9-bit immediate (bits 33-34, 20-26) */
11884865Sobrien    IA64_OPND_IMM9a,	/* signed 9-bit immediate (bits 6-12, 27, 36) */
11984865Sobrien    IA64_OPND_IMM9b,	/* signed 9-bit immediate (bits 13-19, 27, 36) */
12084865Sobrien    IA64_OPND_IMM14,	/* signed 14-bit immediate (bits 13-19, 27-32, 36) */
12184865Sobrien    IA64_OPND_IMM17,	/* signed 17-bit immediate (2*bits 6-12, 24-31, 36) */
12284865Sobrien    IA64_OPND_IMMU21,	/* unsigned 21-bit immediate (bits 6-25, 36) */
12384865Sobrien    IA64_OPND_IMM22,	/* signed 22-bit immediate (bits 13-19, 22-36) */
12484865Sobrien    IA64_OPND_IMMU24,	/* unsigned 24-bit immediate (bits 6-26, 31-32, 36) */
12584865Sobrien    IA64_OPND_IMM44,	/* signed 44-bit immediate (2^16*bits 6-32, 36) */
12684865Sobrien    IA64_OPND_IMMU62,	/* unsigned 62-bit immediate */
12784865Sobrien    IA64_OPND_IMMU64,	/* unsigned 64-bit immediate (lotsa bits...) */
12884865Sobrien    IA64_OPND_INC3,	/* signed 3-bit (bits 13-15): +/-1, 4, 8, 16 */
12984865Sobrien    IA64_OPND_LEN4,	/* 4-bit count (bits 27-30 + 1) */
13084865Sobrien    IA64_OPND_LEN6,	/* 6-bit count (bits 27-32 + 1) */
13184865Sobrien    IA64_OPND_MBTYPE4,	/* 4-bit mux type (bits 20-23) */
13284865Sobrien    IA64_OPND_MHTYPE8,	/* 8-bit mux type (bits 20-27) */
13384865Sobrien    IA64_OPND_POS6,	/* 6-bit count (bits 14-19) */
13484865Sobrien    IA64_OPND_TAG13,	/* signed 13-bit tag (ip + 16*bits 6-12, 33-34) */
13584865Sobrien    IA64_OPND_TAG13b,	/* signed 13-bit tag (ip + 16*bits 24-32) */
13684865Sobrien    IA64_OPND_TGT25,	/* signed 25-bit (ip + 16*bits 6-25, 36) */
13784865Sobrien    IA64_OPND_TGT25b,	/* signed 25-bit (ip + 16*bits 6-12, 20-32, 36) */
13884865Sobrien    IA64_OPND_TGT25c,	/* signed 25-bit (ip + 16*bits 13-32, 36) */
13984865Sobrien    IA64_OPND_TGT64,    /* 64-bit (ip + 16*bits 13-32, 36, 2-40(L)) */
140130561Sobrien    IA64_OPND_LDXMOV,	/* any symbol, generates R_IA64_LDXMOV.  */
14184865Sobrien
14284865Sobrien    IA64_OPND_COUNT	/* # of operand types (MUST BE LAST!) */
14384865Sobrien  };
14484865Sobrien
14584865Sobrienenum ia64_dependency_mode
14684865Sobrien{
14784865Sobrien  IA64_DV_RAW,
14884865Sobrien  IA64_DV_WAW,
14984865Sobrien  IA64_DV_WAR,
15084865Sobrien};
15184865Sobrien
15284865Sobrienenum ia64_dependency_semantics
15384865Sobrien{
15484865Sobrien  IA64_DVS_NONE,
15584865Sobrien  IA64_DVS_IMPLIED,
15684865Sobrien  IA64_DVS_IMPLIEDF,
15784865Sobrien  IA64_DVS_DATA,
15884865Sobrien  IA64_DVS_INSTR,
15984865Sobrien  IA64_DVS_SPECIFIC,
16084865Sobrien  IA64_DVS_STOP,
16184865Sobrien  IA64_DVS_OTHER,
16284865Sobrien};
16384865Sobrien
16484865Sobrienenum ia64_resource_specifier
16584865Sobrien{
16684865Sobrien  IA64_RS_ANY,
16784865Sobrien  IA64_RS_AR_K,
16884865Sobrien  IA64_RS_AR_UNAT,
16984865Sobrien  IA64_RS_AR, /* 8-15, 20, 22-23, 31, 33-35, 37-39, 41-43, 45-47, 67-111 */
17084865Sobrien  IA64_RS_ARb, /* 48-63, 112-127 */
17184865Sobrien  IA64_RS_BR,
17284865Sobrien  IA64_RS_CFM,
17384865Sobrien  IA64_RS_CPUID,
17484865Sobrien  IA64_RS_CR_IRR,
17584865Sobrien  IA64_RS_CR_LRR,
17684865Sobrien  IA64_RS_CR, /* 3-7,10-15,18,26-63,75-79,82-127 */
17784865Sobrien  IA64_RS_DBR,
17884865Sobrien  IA64_RS_FR,
17984865Sobrien  IA64_RS_FRb,
18084865Sobrien  IA64_RS_GR0,
18184865Sobrien  IA64_RS_GR,
18284865Sobrien  IA64_RS_IBR,
18384865Sobrien  IA64_RS_INSERVICE, /* CR[EOI] or CR[IVR] */
18484865Sobrien  IA64_RS_MSR,
18584865Sobrien  IA64_RS_PKR,
18684865Sobrien  IA64_RS_PMC,
18784865Sobrien  IA64_RS_PMD,
18884865Sobrien  IA64_RS_PR,  /* non-rotating, 1-15 */
18984865Sobrien  IA64_RS_PRr, /* rotating, 16-62 */
19084865Sobrien  IA64_RS_PR63,
19184865Sobrien  IA64_RS_RR,
19284865Sobrien
19384865Sobrien  IA64_RS_ARX, /* ARs not in RS_AR or RS_ARb */
19484865Sobrien  IA64_RS_CRX, /* CRs not in RS_CR */
19584865Sobrien  IA64_RS_PSR, /* PSR bits */
19684865Sobrien  IA64_RS_RSE, /* implementation-specific RSE resources */
19784865Sobrien  IA64_RS_AR_FPSR,
19884865Sobrien};
19984865Sobrien
20084865Sobrienenum ia64_rse_resource
20184865Sobrien{
20284865Sobrien  IA64_RSE_N_STACKED_PHYS,
20384865Sobrien  IA64_RSE_BOF,
20484865Sobrien  IA64_RSE_STORE_REG,
20584865Sobrien  IA64_RSE_LOAD_REG,
20684865Sobrien  IA64_RSE_BSPLOAD,
20784865Sobrien  IA64_RSE_RNATBITINDEX,
20884865Sobrien  IA64_RSE_CFLE,
20984865Sobrien  IA64_RSE_NDIRTY,
21084865Sobrien};
21184865Sobrien
21284865Sobrien/* Information about a given resource dependency */
21384865Sobrienstruct ia64_dependency
21484865Sobrien{
21584865Sobrien  /* Name of the resource */
21684865Sobrien  const char *name;
21784865Sobrien  /* Does this dependency need further specification? */
21884865Sobrien  enum ia64_resource_specifier specifier;
21984865Sobrien  /* Mode of dependency */
22084865Sobrien  enum ia64_dependency_mode mode;
22184865Sobrien  /* Dependency semantics */
22284865Sobrien  enum ia64_dependency_semantics semantics;
22384865Sobrien  /* Register index, if applicable (distinguishes AR, CR, and PSR deps) */
22484865Sobrien#define REG_NONE (-1)
22584865Sobrien  int regindex;
22684865Sobrien  /* Special info on semantics */
22784865Sobrien  const char *info;
22884865Sobrien};
22984865Sobrien
23084865Sobrien/* Two arrays of indexes into the ia64_dependency table.
23184865Sobrien   chks are dependencies to check for conflicts when an opcode is
23284865Sobrien   encountered; regs are dependencies to register (mark as used) when an
23384865Sobrien   opcode is used.  chks correspond to readers (RAW) or writers (WAW or
23484865Sobrien   WAR) of a resource, while regs correspond to writers (RAW or WAW) and
23584865Sobrien   readers (WAR) of a resource.  */
23684865Sobrienstruct ia64_opcode_dependency
23784865Sobrien{
23884865Sobrien  int nchks;
23984865Sobrien  const unsigned short *chks;
24084865Sobrien  int nregs;
24184865Sobrien  const unsigned short *regs;
24284865Sobrien};
24384865Sobrien
24484865Sobrien/* encode/extract the note/index for a dependency */
24584865Sobrien#define RDEP(N,X) (((N)<<11)|(X))
24684865Sobrien#define NOTE(X) (((X)>>11)&0x1F)
24784865Sobrien#define DEP(X) ((X)&0x7FF)
24884865Sobrien
24984865Sobrien/* A template descriptor describes the execution units that are active
25084865Sobrien   for each of the three slots.  It also specifies the location of
25184865Sobrien   instruction group boundaries that may be present between two slots.  */
25284865Sobrienstruct ia64_templ_desc
25384865Sobrien  {
25484865Sobrien    int group_boundary;	/* 0=no boundary, 1=between slot 0 & 1, etc. */
25584865Sobrien    enum ia64_unit exec_unit[3];
25684865Sobrien    const char *name;
25784865Sobrien  };
25884865Sobrien
25984865Sobrien/* The opcode table is an array of struct ia64_opcode.  */
26084865Sobrien
26184865Sobrienstruct ia64_opcode
26284865Sobrien  {
26384865Sobrien    /* The opcode name.  */
26484865Sobrien    const char *name;
26584865Sobrien
26684865Sobrien    /* The type of the instruction: */
26784865Sobrien    enum ia64_insn_type type;
26884865Sobrien
26984865Sobrien    /* Number of output operands: */
27084865Sobrien    int num_outputs;
27184865Sobrien
27284865Sobrien    /* The opcode itself.  Those bits which will be filled in with
27384865Sobrien       operands are zeroes.  */
27484865Sobrien    ia64_insn opcode;
27584865Sobrien
27684865Sobrien    /* The opcode mask.  This is used by the disassembler.  This is a
27784865Sobrien       mask containing ones indicating those bits which must match the
27884865Sobrien       opcode field, and zeroes indicating those bits which need not
27984865Sobrien       match (and are presumably filled in by operands).  */
28084865Sobrien    ia64_insn mask;
28184865Sobrien
28284865Sobrien    /* An array of operand codes.  Each code is an index into the
28384865Sobrien       operand table.  They appear in the order which the operands must
28484865Sobrien       appear in assembly code, and are terminated by a zero.  */
28584865Sobrien    enum ia64_opnd operands[5];
28684865Sobrien
28784865Sobrien    /* One bit flags for the opcode.  These are primarily used to
28884865Sobrien       indicate specific processors and environments support the
28984865Sobrien       instructions.  The defined values are listed below. */
29084865Sobrien    unsigned int flags;
29184865Sobrien
29284865Sobrien    /* Used by ia64_find_next_opcode (). */
29384865Sobrien    short ent_index;
29484865Sobrien
295130561Sobrien    /* Opcode dependencies. */
29684865Sobrien    const struct ia64_opcode_dependency *dependencies;
29784865Sobrien  };
29884865Sobrien
29984865Sobrien/* Values defined for the flags field of a struct ia64_opcode.  */
30084865Sobrien
30184865Sobrien#define IA64_OPCODE_FIRST	(1<<0)	/* must be first in an insn group */
30284865Sobrien#define IA64_OPCODE_X_IN_MLX	(1<<1)	/* insn is allowed in X slot of MLX */
30384865Sobrien#define IA64_OPCODE_LAST	(1<<2)	/* must be last in an insn group */
30484865Sobrien#define IA64_OPCODE_PRIV	(1<<3)	/* privileged instruct */
30584865Sobrien#define IA64_OPCODE_SLOT2	(1<<4)	/* insn allowed in slot 2 only */
30684865Sobrien#define IA64_OPCODE_NO_PRED	(1<<5)	/* insn cannot be predicated */
30784865Sobrien#define IA64_OPCODE_PSEUDO	(1<<6)	/* insn is a pseudo-op */
30884865Sobrien#define IA64_OPCODE_F2_EQ_F3	(1<<7)	/* constraint: F2 == F3 */
30984865Sobrien#define IA64_OPCODE_LEN_EQ_64MCNT	(1<<8)	/* constraint: LEN == 64-CNT */
31084865Sobrien#define IA64_OPCODE_MOD_RRBS    (1<<9)	/* modifies all rrbs in CFM */
31184865Sobrien#define IA64_OPCODE_POSTINC	(1<<10)	/* postincrement MR3 operand */
31284865Sobrien
31384865Sobrien/* A macro to extract the major opcode from an instruction.  */
31484865Sobrien#define IA64_OP(i)	(((i) >> 37) & 0xf)
31584865Sobrien
31684865Sobrienenum ia64_operand_class
31784865Sobrien  {
31884865Sobrien    IA64_OPND_CLASS_CST,	/* constant */
31984865Sobrien    IA64_OPND_CLASS_REG,	/* register */
32084865Sobrien    IA64_OPND_CLASS_IND,	/* indirect register */
32184865Sobrien    IA64_OPND_CLASS_ABS,	/* absolute value */
32284865Sobrien    IA64_OPND_CLASS_REL,	/* IP-relative value */
32384865Sobrien  };
32484865Sobrien
32584865Sobrien/* The operands table is an array of struct ia64_operand.  */
32684865Sobrien
32784865Sobrienstruct ia64_operand
32884865Sobrien{
32984865Sobrien  enum ia64_operand_class class;
33084865Sobrien
33184865Sobrien  /* Set VALUE as the operand bits for the operand of type SELF in the
33284865Sobrien     instruction pointed to by CODE.  If an error occurs, *CODE is not
33384865Sobrien     modified and the returned string describes the cause of the
33484865Sobrien     error.  If no error occurs, NULL is returned.  */
33584865Sobrien  const char *(*insert) (const struct ia64_operand *self, ia64_insn value,
33684865Sobrien			 ia64_insn *code);
33784865Sobrien
33884865Sobrien  /* Extract the operand bits for an operand of type SELF from
33984865Sobrien     instruction CODE store them in *VALUE.  If an error occurs, the
34084865Sobrien     cause of the error is described by the string returned.  If no
34184865Sobrien     error occurs, NULL is returned.  */
34284865Sobrien  const char *(*extract) (const struct ia64_operand *self, ia64_insn code,
34384865Sobrien			  ia64_insn *value);
34484865Sobrien
34584865Sobrien  /* A string whose meaning depends on the operand class.  */
34684865Sobrien
34784865Sobrien  const char *str;
34884865Sobrien
34984865Sobrien  struct bit_field
35084865Sobrien    {
35184865Sobrien      /* The number of bits in the operand.  */
35284865Sobrien      int bits;
35384865Sobrien
35484865Sobrien      /* How far the operand is left shifted in the instruction.  */
35584865Sobrien      int shift;
35684865Sobrien    }
35784865Sobrien  field[4];		/* no operand has more than this many bit-fields */
35884865Sobrien
35984865Sobrien  unsigned int flags;
36084865Sobrien
36184865Sobrien  const char *desc;	/* brief description */
36284865Sobrien};
36384865Sobrien
36484865Sobrien/* Values defined for the flags field of a struct ia64_operand.  */
36584865Sobrien
36684865Sobrien/* Disassemble as signed decimal (instead of hex): */
36784865Sobrien#define IA64_OPND_FLAG_DECIMAL_SIGNED	(1<<0)
36884865Sobrien/* Disassemble as unsigned decimal (instead of hex): */
36984865Sobrien#define IA64_OPND_FLAG_DECIMAL_UNSIGNED	(1<<1)
37084865Sobrien
37184865Sobrienextern const struct ia64_templ_desc ia64_templ_desc[16];
37284865Sobrien
37384865Sobrien/* The tables are sorted by major opcode number and are otherwise in
37484865Sobrien   the order in which the disassembler should consider instructions.  */
37584865Sobrienextern struct ia64_opcode ia64_opcodes_a[];
37684865Sobrienextern struct ia64_opcode ia64_opcodes_i[];
37784865Sobrienextern struct ia64_opcode ia64_opcodes_m[];
37884865Sobrienextern struct ia64_opcode ia64_opcodes_b[];
37984865Sobrienextern struct ia64_opcode ia64_opcodes_f[];
38084865Sobrienextern struct ia64_opcode ia64_opcodes_d[];
38184865Sobrien
38284865Sobrien
38384865Sobrienextern struct ia64_opcode *ia64_find_opcode (const char *name);
38484865Sobrienextern struct ia64_opcode *ia64_find_next_opcode (struct ia64_opcode *ent);
38584865Sobrien
38684865Sobrienextern struct ia64_opcode *ia64_dis_opcode (ia64_insn insn,
38784865Sobrien					    enum ia64_insn_type type);
38884865Sobrien
38984865Sobrienextern void ia64_free_opcode (struct ia64_opcode *ent);
39084865Sobrienextern const struct ia64_dependency *ia64_find_dependency (int index);
39184865Sobrien
39284865Sobrien/* To avoid circular library dependencies, this array is implemented
39384865Sobrien   in bfd/cpu-ia64-opc.c: */
39484865Sobrienextern const struct ia64_operand elf64_ia64_operands[IA64_OPND_COUNT];
39584865Sobrien
39684865Sobrien#endif /* opcode_ia64_h */
397