1 /* m68k-parse.h -- header file for m68k assembler
2 Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000,
3 2003, 2004 Free Software Foundation, Inc.
5 This file is part of GAS, the GNU Assembler.
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)
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.
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
25 /* This header file defines things which are shared between the
26 operand parser in m68k.y and the m68k assembler proper in
29 /* The various m68k registers. */
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.
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. */
47 DATA0 = 1, /* 1- 8 == data registers 0-7 */
65 FP0, /* Eight FP registers */
74 COP0, /* Co-processor #0-#7 */
83 PC, /* Program counter */
84 ZPC, /* Hack for Program space, but 0 addressing */
86 CCR, /* Condition code Reg */
87 ACC, /* Accumulator Reg0 (EMAC or ACC on MAC). */
88 ACC1, /* Accumulator Reg 1 (EMAC). */
89 ACC2, /* Accumulator Reg 2 (EMAC). */
90 ACC3, /* Accumulator Reg 3 (EMAC). */
91 ACCEXT01, /* Accumulator extension 0&1 (EMAC). */
92 ACCEXT23, /* Accumulator extension 2&3 (EMAC). */
93 MACSR, /* MAC Status Reg */
94 MASK, /* Modulus Reg */
96 /* These have to be grouped together for the movec instruction to work. */
97 USP, /* User Stack Pointer */
98 ISP, /* Interrupt stack pointer */
113 BUSCR, /* 68060 added these. */
115 ROMBAR, /* mcf5200 added these. */
118 MMUBAR, /* mcfv4e added these. */
119 ROMBAR1, /* mcfv4e added these. */
120 MPCR, EDRAMBAR, SECMBAR, /* mcfv4e added these. */
121 PCR1U0, PCR1L0, PCR1U1, PCR1L1,/* mcfv4e added these. */
122 PCR2U0, PCR2L0, PCR2U1, PCR2L1,/* mcfv4e added these. */
123 PCR3U0, PCR3L0, PCR3U1, PCR3L1,/* mcfv4e added these. */
124 MBAR0, MBAR1, /* mcfv4e added these. */
125 ACR0, ACR1, ACR2, ACR3, /* mcf5200 added these. */
126 FLASHBAR, RAMBAR, /* mcf528x added these. */
128 #define last_movec_reg MBAR
129 /* End of movec ordering constraints. */
135 DRP, /* 68851 or 68030 MMU regs */
157 PSR, /* aka MMUSR on 68030 (but not MMUSR on 68040)
158 and ACUSR on 68ec030 */
161 IC, /* instruction cache token */
162 DC, /* data cache token */
163 NC, /* no cache token */
164 BC, /* both caches token */
166 TT0, /* 68030 access control unit regs */
169 ZDATA0, /* suppressed data registers. */
178 ZADDR0, /* suppressed address registers. */
187 /* Upper and lower half of data and address registers. Order *must*
188 be DATAxL, ADDRxL, DATAxU, ADDRxU. */
189 DATA0L, /* lower half of data registers */
198 ADDR0L, /* lower half of address registers */
207 DATA0U, /* upper half of data registers */
216 ADDR0U, /* upper half of address registers */
226 /* Size information. */
236 /* Word (2 bytes). */
239 /* Longword (4 bytes). */
243 /* The structure used to hold information about an index register. */
247 /* The index register itself. */
248 enum m68k_register reg;
250 /* The size to use. */
253 /* The value to scale by. */
258 /* The type of a PIC expression. */
262 pic_none, /* not pic */
263 pic_plt_pcrel, /* @PLTPC */
264 pic_got_pcrel, /* @GOTPC */
265 pic_plt_off, /* @PLT */
266 pic_got_off /* @GOT */
270 /* The structure used to hold information about an expression. */
274 /* The size to use. */
278 /* The type of pic relocation if any. */
279 enum pic_relocation pic_reloc;
282 /* The expression itself. */
286 /* The operand modes. */
288 enum m68k_operand_type
303 LSH, /* MAC/EMAC scalefactor '<<'. */
304 RSH, /* MAC/EMAC scalefactor '>>'. */
308 /* The structure used to hold a parsed operand. */
312 /* The type of operand. */
313 enum m68k_operand_type mode;
315 /* The main register. */
316 enum m68k_register reg;
318 /* The register mask for mode REGLST. */
321 /* An error message. */
324 /* The index register. */
325 struct m68k_indexreg index;
327 /* The displacement. */
328 struct m68k_exp disp;
330 /* The outer displacement. */
331 struct m68k_exp odisp;
333 /* Is a trailing '&' added to an <ea>? (for MAC/EMAC mask addressing). */
334 int trailing_ampersand;
337 #endif /* ! defined (M68K_PARSE_H) */
339 /* The parsing function. */
341 extern int m68k_ip_op PARAMS ((char *, struct m68k_op *));
343 /* Whether register prefixes are optional. */
344 extern int flag_reg_prefix_optional;