a1cca2ea702ba1c7a69bcbab66d3bb707b3d72a5
[external/binutils.git] / gas / config / xtensa-istack.h
1 /* Declarations for stacks of tokenized Xtensa instructions.
2    Copyright (C) 2003 Free Software Foundation, Inc.
3
4    This file is part of GAS, the GNU Assembler.
5
6    GAS is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2, or (at your option)
9    any later version.
10
11    GAS is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with GAS; see the file COPYING.  If not, write to the Free
18    Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19    02111-1307, USA.  */
20
21 #ifndef XTENSA_ISTACK_H
22 #define XTENSA_ISTACK_H
23
24 #include "xtensa-isa.h"
25
26 #define MAX_ISTACK 12
27 #define MAX_INSN_ARGS 6
28
29 enum itype_enum
30 {
31   ITYPE_INSN,
32   ITYPE_LITERAL,
33   ITYPE_LABEL
34 };
35
36
37 /* Literals have 1 token and no opcode.
38    Labels have 1 token and no opcode.  */
39
40 typedef struct tinsn_struct
41 {
42   enum itype_enum insn_type;
43   
44   bfd_boolean is_specific_opcode; 
45   xtensa_opcode opcode; /* Literals have an invalid opcode.  */
46   int ntok;
47   expressionS tok[MAX_INSN_ARGS];
48 } TInsn;
49
50
51 /* tinsn_stack:  This is a stack of instructions to  be placed.  */
52
53 typedef struct tinsn_stack
54 {
55   int ninsn;
56   TInsn insn[MAX_ISTACK];
57 } IStack;
58
59
60 void         istack_init        PARAMS ((IStack *));
61 bfd_boolean  istack_empty       PARAMS ((IStack *));
62 bfd_boolean  istack_full        PARAMS ((IStack *));
63 TInsn *      istack_top         PARAMS ((IStack *));
64 void         istack_push        PARAMS ((IStack *, TInsn *));
65 TInsn *      istack_push_space  PARAMS ((IStack *)); 
66 void         istack_pop         PARAMS ((IStack *));
67
68 /* TInsn utilities.  */
69 void         tinsn_init         PARAMS ((TInsn *));
70 void         tinsn_copy         PARAMS ((TInsn *, const TInsn *));
71 expressionS *tinsn_get_tok      PARAMS ((TInsn *, int));
72
73 #endif /* !XTENSA_ISTACK_H */