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.
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 Reg */
88 MACSR
, /* MAC Status Reg */
89 MASK
, /* Modulus Reg */
91 /* These have to be grouped together for the movec instruction to work. */
92 USP
, /* User Stack Pointer */
93 ISP
, /* Interrupt stack pointer */
108 BUSCR
, /* 68060 added these. */
110 ROMBAR
, /* mcf5200 added these. */
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. */
123 #define last_movec_reg MBAR
124 /* End of movec ordering constraints. */
130 DRP
, /* 68851 or 68030 MMU regs */
152 PSR
, /* aka MMUSR on 68030 (but not MMUSR on 68040)
153 and ACUSR on 68ec030 */
156 IC
, /* instruction cache token */
157 DC
, /* data cache token */
158 NC
, /* no cache token */
159 BC
, /* both caches token */
161 TT0
, /* 68030 access control unit regs */
164 ZDATA0
, /* suppressed data registers. */
173 ZADDR0
, /* suppressed address registers. */
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 */
193 ADDR0L
, /* lower half of address registers */
202 DATA0U
, /* upper half of data registers */
211 ADDR0U
, /* upper half of address registers */
221 /* Size information. */
231 /* Word (2 bytes). */
234 /* Longword (4 bytes). */
238 /* The structure used to hold information about an index register. */
242 /* The index register itself. */
243 enum m68k_register reg
;
245 /* The size to use. */
248 /* The value to scale by. */
253 /* The type of a PIC expression. */
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 */
265 /* The structure used to hold information about an expression. */
269 /* The size to use. */
273 /* The type of pic relocation if any. */
274 enum pic_relocation pic_reloc
;
277 /* The expression itself. */
281 /* The operand modes. */
283 enum m68k_operand_type
301 /* The structure used to hold a parsed operand. */
305 /* The type of operand. */
306 enum m68k_operand_type mode
;
308 /* The main register. */
309 enum m68k_register reg
;
311 /* The register mask for mode REGLST. */
314 /* An error message. */
317 /* The index register. */
318 struct m68k_indexreg index
;
320 /* The displacement. */
321 struct m68k_exp disp
;
323 /* The outer displacement. */
324 struct m68k_exp odisp
;
327 #endif /* ! defined (M68K_PARSE_H) */
329 /* The parsing function. */
331 extern int m68k_ip_op
PARAMS ((char *, struct m68k_op
*));
333 /* Whether register prefixes are optional. */
334 extern int flag_reg_prefix_optional
;