]>
Commit | Line | Data |
---|---|---|
88da6820 NC |
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 */ |