* dwarf2.c: Convert to C90, remove unneeded casts and prototypes.
[deliverable/binutils-gdb.git] / gas / config / m68k-parse.h
1 /* m68k-parse.h -- header file for m68k assembler
2 Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000,
3 2003 Free Software Foundation, Inc.
4
5 This file is part of GAS, the GNU Assembler.
6
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GAS is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
21
22 #ifndef M68K_PARSE_H
23 #define M68K_PARSE_H
24
25 /* This header file defines things which are shared between the
26 operand parser in m68k.y and the m68k assembler proper in
27 tc-m68k.c. */
28
29 /* The various m68k registers. */
30
31 /* DATA and ADDR have to be contiguous, so that reg-DATA gives
32 0-7==data reg, 8-15==addr reg for operands that take both types.
33
34 We don't use forms like "ADDR0 = ADDR" here because this file is
35 likely to be used on an Apollo, and the broken Apollo compiler
36 gives an `undefined variable' error if we do that, according to
37 troy@cbme.unsw.edu.au. */
38
39 #define DATA DATA0
40 #define ADDR ADDR0
41 #define SP ADDR7
42 #define BAD BAD0
43 #define BAC BAC0
44
45 enum m68k_register
46 {
47 DATA0 = 1, /* 1- 8 == data registers 0-7 */
48 DATA1,
49 DATA2,
50 DATA3,
51 DATA4,
52 DATA5,
53 DATA6,
54 DATA7,
55
56 ADDR0,
57 ADDR1,
58 ADDR2,
59 ADDR3,
60 ADDR4,
61 ADDR5,
62 ADDR6,
63 ADDR7,
64
65 FP0, /* Eight FP registers */
66 FP1,
67 FP2,
68 FP3,
69 FP4,
70 FP5,
71 FP6,
72 FP7,
73
74 COP0, /* Co-processor #0-#7 */
75 COP1,
76 COP2,
77 COP3,
78 COP4,
79 COP5,
80 COP6,
81 COP7,
82
83 PC, /* Program counter */
84 ZPC, /* Hack for Program space, but 0 addressing */
85 SR, /* Status Reg */
86 CCR, /* Condition code Reg */
87 ACC, /* Accumulator Reg */
88 MACSR, /* MAC Status Reg */
89 MASK, /* Modulus Reg */
90
91 /* These have to be grouped together for the movec instruction to work. */
92 USP, /* User Stack Pointer */
93 ISP, /* Interrupt stack pointer */
94 SFC,
95 DFC,
96 CACR,
97 VBR,
98 CAAR,
99 MSP,
100 ITT0,
101 ITT1,
102 DTT0,
103 DTT1,
104 MMUSR,
105 TC,
106 SRP,
107 URP,
108 BUSCR, /* 68060 added these. */
109 PCR,
110 ROMBAR, /* mcf5200 added these. */
111 RAMBAR0,
112 RAMBAR1,
113 MMUBAR, /* mcfv4e added these. */
114 ROMBAR1, /* mcfv4e added these. */
115 MPCR, EDRAMBAR, SECMBAR, /* mcfv4e added these. */
116 PCR1U0, PCR1L0, PCR1U1, PCR1L1,/* mcfv4e added these. */
117 PCR2U0, PCR2L0, PCR2U1, PCR2L1,/* mcfv4e added these. */
118 PCR3U0, PCR3L0, PCR3U1, PCR3L1,/* mcfv4e added these. */
119 MBAR0, MBAR1, /* mcfv4e added these. */
120 ACR0, ACR1, ACR2, ACR3, /* mcf5200 added these. */
121 FLASHBAR, RAMBAR, /* mcf528x added these. */
122 MBAR,
123 #define last_movec_reg MBAR
124 /* End of movec ordering constraints. */
125
126 FPI,
127 FPS,
128 FPC,
129
130 DRP, /* 68851 or 68030 MMU regs */
131 CRP,
132 CAL,
133 VAL,
134 SCC,
135 AC,
136 BAD0,
137 BAD1,
138 BAD2,
139 BAD3,
140 BAD4,
141 BAD5,
142 BAD6,
143 BAD7,
144 BAC0,
145 BAC1,
146 BAC2,
147 BAC3,
148 BAC4,
149 BAC5,
150 BAC6,
151 BAC7,
152 PSR, /* aka MMUSR on 68030 (but not MMUSR on 68040)
153 and ACUSR on 68ec030 */
154 PCSR,
155
156 IC, /* instruction cache token */
157 DC, /* data cache token */
158 NC, /* no cache token */
159 BC, /* both caches token */
160
161 TT0, /* 68030 access control unit regs */
162 TT1,
163
164 ZDATA0, /* suppressed data registers. */
165 ZDATA1,
166 ZDATA2,
167 ZDATA3,
168 ZDATA4,
169 ZDATA5,
170 ZDATA6,
171 ZDATA7,
172
173 ZADDR0, /* suppressed address registers. */
174 ZADDR1,
175 ZADDR2,
176 ZADDR3,
177 ZADDR4,
178 ZADDR5,
179 ZADDR6,
180 ZADDR7,
181
182 /* Upper and lower half of data and address registers. Order *must*
183 be DATAxL, ADDRxL, DATAxU, ADDRxU. */
184 DATA0L, /* lower half of data registers */
185 DATA1L,
186 DATA2L,
187 DATA3L,
188 DATA4L,
189 DATA5L,
190 DATA6L,
191 DATA7L,
192
193 ADDR0L, /* lower half of address registers */
194 ADDR1L,
195 ADDR2L,
196 ADDR3L,
197 ADDR4L,
198 ADDR5L,
199 ADDR6L,
200 ADDR7L,
201
202 DATA0U, /* upper half of data registers */
203 DATA1U,
204 DATA2U,
205 DATA3U,
206 DATA4U,
207 DATA5U,
208 DATA6U,
209 DATA7U,
210
211 ADDR0U, /* upper half of address registers */
212 ADDR1U,
213 ADDR2U,
214 ADDR3U,
215 ADDR4U,
216 ADDR5U,
217 ADDR6U,
218 ADDR7U,
219 };
220
221 /* Size information. */
222
223 enum m68k_size
224 {
225 /* Unspecified. */
226 SIZE_UNSPEC,
227
228 /* Byte. */
229 SIZE_BYTE,
230
231 /* Word (2 bytes). */
232 SIZE_WORD,
233
234 /* Longword (4 bytes). */
235 SIZE_LONG
236 };
237
238 /* The structure used to hold information about an index register. */
239
240 struct m68k_indexreg
241 {
242 /* The index register itself. */
243 enum m68k_register reg;
244
245 /* The size to use. */
246 enum m68k_size size;
247
248 /* The value to scale by. */
249 int scale;
250 };
251
252 #ifdef OBJ_ELF
253 /* The type of a PIC expression. */
254
255 enum pic_relocation
256 {
257 pic_none, /* not pic */
258 pic_plt_pcrel, /* @PLTPC */
259 pic_got_pcrel, /* @GOTPC */
260 pic_plt_off, /* @PLT */
261 pic_got_off /* @GOT */
262 };
263 #endif
264
265 /* The structure used to hold information about an expression. */
266
267 struct m68k_exp
268 {
269 /* The size to use. */
270 enum m68k_size size;
271
272 #ifdef OBJ_ELF
273 /* The type of pic relocation if any. */
274 enum pic_relocation pic_reloc;
275 #endif
276
277 /* The expression itself. */
278 expressionS exp;
279 };
280
281 /* The operand modes. */
282
283 enum m68k_operand_type
284 {
285 IMMED = 1,
286 ABSL,
287 DREG,
288 AREG,
289 FPREG,
290 CONTROL,
291 AINDR,
292 AINC,
293 ADEC,
294 DISP,
295 BASE,
296 POST,
297 PRE,
298 REGLST
299 };
300
301 /* The structure used to hold a parsed operand. */
302
303 struct m68k_op
304 {
305 /* The type of operand. */
306 enum m68k_operand_type mode;
307
308 /* The main register. */
309 enum m68k_register reg;
310
311 /* The register mask for mode REGLST. */
312 unsigned long mask;
313
314 /* An error message. */
315 const char *error;
316
317 /* The index register. */
318 struct m68k_indexreg index;
319
320 /* The displacement. */
321 struct m68k_exp disp;
322
323 /* The outer displacement. */
324 struct m68k_exp odisp;
325 };
326
327 #endif /* ! defined (M68K_PARSE_H) */
328
329 /* The parsing function. */
330
331 extern int m68k_ip_op PARAMS ((char *, struct m68k_op *));
332
333 /* Whether register prefixes are optional. */
334 extern int flag_reg_prefix_optional;
This page took 0.036736 seconds and 4 git commands to generate.