/* m68k-parse.h -- header file for m68k assembler
- Copyright (C) 1987, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1987-2017 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
GAS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
+ the Free Software Foundation; either version 3, or (at your option)
any later version.
GAS is distributed in the hope that it will be useful,
You should have received a copy of the GNU General Public License
along with GAS; see the file COPYING. If not, write to the Free
- Software Foundation, 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
+ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+ 02110-1301, USA. */
#ifndef M68K_PARSE_H
#define M68K_PARSE_H
ZPC, /* Hack for Program space, but 0 addressing */
SR, /* Status Reg */
CCR, /* Condition code Reg */
-
- /* These have to be grouped together for the movec instruction to work. */
+ ACC, /* Accumulator Reg0 (EMAC or ACC on MAC). */
+ ACC1, /* Accumulator Reg 1 (EMAC). */
+ ACC2, /* Accumulator Reg 2 (EMAC). */
+ ACC3, /* Accumulator Reg 3 (EMAC). */
+ ACCEXT01, /* Accumulator extension 0&1 (EMAC). */
+ ACCEXT23, /* Accumulator extension 2&3 (EMAC). */
+ MACSR, /* MAC Status Reg */
+ MASK, /* Modulus Reg */
+
+ /* These have to be grouped together for the movec instruction to work. */
USP, /* User Stack Pointer */
ISP, /* Interrupt stack pointer */
SFC,
CACR,
VBR,
CAAR,
+ CPUCR,
MSP,
ITT0,
ITT1,
TC,
SRP,
URP,
- BUSCR, /* 68060 added these */
+ BUSCR, /* 68060 added these. */
PCR,
-#define last_movec_reg PCR
- /* end of movec ordering constraints */
+ ROMBAR, /* mcf5200 added these. */
+ RAMBAR_ALT, /* Some CF chips have RAMBAR using
+ RAMBAR0's number */
+ RAMBAR0,
+ RAMBAR1,
+ MMUBAR, /* mcfv4e added these. */
+ ROMBAR0, /* mcfv4e added these. */
+ ROMBAR1, /* mcfv4e added these. */
+ MPCR, EDRAMBAR, SECMBAR, /* mcfv4e added these. */
+ PCR1U0, PCR1L0, PCR1U1, PCR1L1,/* mcfv4e added these. */
+ PCR2U0, PCR2L0, PCR2U1, PCR2L1,/* mcfv4e added these. */
+ PCR3U0, PCR3L0, PCR3U1, PCR3L1,/* mcfv4e added these. */
+ MBAR0, MBAR1, /* mcfv4e added these. */
+ ACR0, ACR1, ACR2, ACR3, /* mcf5200 added these. */
+ ACR4, ACR5, ACR6, ACR7, /* mcf54418 added these. */
+ FLASHBAR, RAMBAR, /* mcf528x added these. */
+ MBAR2, /* mcf5249 added this. */
+ MBAR,
+ RGPIOBAR, /* mcf54418 added this. */
+ ASID, /* m5475. */
+ CAC, /* fido added this. */
+ MBO,
+#define last_movec_reg MBO
+ /* End of movec ordering constraints. */
FPI,
FPS,
ZADDR5,
ZADDR6,
ZADDR7,
+
+ /* Upper and lower half of data and address registers. Order *must*
+ be DATAxL, ADDRxL, DATAxU, ADDRxU. */
+ DATA0L, /* lower half of data registers */
+ DATA1L,
+ DATA2L,
+ DATA3L,
+ DATA4L,
+ DATA5L,
+ DATA6L,
+ DATA7L,
+
+ ADDR0L, /* lower half of address registers */
+ ADDR1L,
+ ADDR2L,
+ ADDR3L,
+ ADDR4L,
+ ADDR5L,
+ ADDR6L,
+ ADDR7L,
+
+ DATA0U, /* upper half of data registers */
+ DATA1U,
+ DATA2U,
+ DATA3U,
+ DATA4U,
+ DATA5U,
+ DATA6U,
+ DATA7U,
+
+ ADDR0U, /* upper half of address registers */
+ ADDR1U,
+ ADDR2U,
+ ADDR3U,
+ ADDR4U,
+ ADDR5U,
+ ADDR6U,
+ ADDR7U,
};
/* Size information. */
int scale;
};
+#ifdef OBJ_ELF
+/* The type of a PIC expression. */
+
+enum pic_relocation
+{
+ pic_none, /* not pic */
+ pic_plt_pcrel, /* @PLTPC */
+ pic_got_pcrel, /* @GOTPC */
+ pic_plt_off, /* @PLT */
+ pic_got_off, /* @GOT */
+ pic_tls_gd, /* @TLSGD */
+ pic_tls_ldm, /* @TLSLDM */
+ pic_tls_ldo, /* @TLSLDO */
+ pic_tls_ie, /* @TLSIE */
+ pic_tls_le /* @TLSLE */
+};
+#endif
+
/* The structure used to hold information about an expression. */
struct m68k_exp
/* The size to use. */
enum m68k_size size;
+#ifdef OBJ_ELF
+ /* The type of pic relocation if any. */
+ enum pic_relocation pic_reloc;
+#endif
+
/* The expression itself. */
expressionS exp;
};
-/* See whether an expression is a signed eight bit value. */
-
-#define expr8(ex) \
- ((ex)->exp.X_op == O_constant \
- && (ex)->exp.X_add_number >= -0x80 \
- && (ex)->exp.X_add_number < 0x80)
-
-/* See whether an expression is a signed sixteen bit value. */
-
-#define expr16(ex) \
- ((ex)->exp.X_op == O_constant \
- && (ex)->exp.X_add_number >= -0x8000 \
- && (ex)->exp.X_add_number < 0x8000)
-
/* The operand modes. */
enum m68k_operand_type
BASE,
POST,
PRE,
+ LSH, /* MAC/EMAC scalefactor '<<'. */
+ RSH, /* MAC/EMAC scalefactor '>>'. */
REGLST
};
/* The outer displacement. */
struct m68k_exp odisp;
+
+ /* Is a trailing '&' added to an <ea>? (for MAC/EMAC mask addressing). */
+ int trailing_ampersand;
};
#endif /* ! defined (M68K_PARSE_H) */
/* The parsing function. */
-extern int m68k_ip_op PARAMS ((char *, struct m68k_op *));
+extern int m68k_ip_op (char *, struct m68k_op *);
/* Whether register prefixes are optional. */
extern int flag_reg_prefix_optional;