#ifndef XTENSA_ISTACK_H
#define XTENSA_ISTACK_H
#include "dwarf2dbg.h"
#include "xtensa-isa.h"
#define MAX_ISTACK 12
#define MAX_INSN_ARGS 10
enum itype_enum
{
ITYPE_INSN,
ITYPE_LITERAL,
ITYPE_LABEL
};
typedef struct tinsn_struct
{
enum itype_enum insn_type;
xtensa_opcode opcode;
bfd_boolean is_specific_opcode;
bfd_boolean keep_wide;
int ntok;
expressionS tok[MAX_INSN_ARGS];
struct dwarf2_line_info loc;
struct fixP *fixup;
bfd_boolean record_fix;
enum xtensa_relax_statesE subtype;
int literal_space;
symbolS *symbol;
symbolS *sub_symbol;
offsetT offset;
fragS *literal_frag;
} TInsn;
typedef struct tinsn_stack
{
int ninsn;
TInsn insn[MAX_ISTACK];
} IStack;
void istack_init (IStack *);
bfd_boolean istack_empty (IStack *);
bfd_boolean istack_full (IStack *);
TInsn *istack_top (IStack *);
void istack_push (IStack *, TInsn *);
TInsn *istack_push_space (IStack *);
void istack_pop (IStack *);
void tinsn_init (TInsn *);
expressionS *tinsn_get_tok (TInsn *, int);
typedef struct vliw_insn
{
xtensa_format format;
xtensa_insnbuf insnbuf;
int num_slots;
unsigned int inside_bundle;
TInsn slots[MAX_SLOTS];
xtensa_insnbuf slotbuf[MAX_SLOTS];
} vliw_insn;
#endif