Add support for ColdFire MAC instructions and tidy up support for other m68k
variants.
This commit is contained in:
parent
69b975477d
commit
fd99574ba5
20 changed files with 20250 additions and 153 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2004-04-22 Peter Barada <peter@the-baradas.com>
|
||||||
|
|
||||||
|
* archures.c: Add bfd_mach_mcfv4e to bfd_architecture.
|
||||||
|
* bfd2-in.h: Regenerate.
|
||||||
|
* cpu-m68k.c: Add 'm68k:mcfv4e' to arch_info_struct[].
|
||||||
|
|
||||||
2004-04-21 Chris Demetriou <cgd@broadcom.com>
|
2004-04-21 Chris Demetriou <cgd@broadcom.com>
|
||||||
|
|
||||||
* coff-mips.c (bfd_mips_ecoff_create_embedded_relocs): Remove.
|
* coff-mips.c (bfd_mips_ecoff_create_embedded_relocs): Remove.
|
||||||
|
|
|
@ -85,6 +85,7 @@ DESCRIPTION
|
||||||
.#define bfd_mach_mcf5307 11
|
.#define bfd_mach_mcf5307 11
|
||||||
.#define bfd_mach_mcf5407 12
|
.#define bfd_mach_mcf5407 12
|
||||||
.#define bfd_mach_mcf528x 13
|
.#define bfd_mach_mcf528x 13
|
||||||
|
.#define bfd_mach_mcfv4e 14
|
||||||
. bfd_arch_vax, {* DEC Vax *}
|
. bfd_arch_vax, {* DEC Vax *}
|
||||||
. bfd_arch_i960, {* Intel 960 *}
|
. bfd_arch_i960, {* Intel 960 *}
|
||||||
. {* The order of the following is important.
|
. {* The order of the following is important.
|
||||||
|
|
|
@ -1491,6 +1491,7 @@ enum bfd_architecture
|
||||||
#define bfd_mach_mcf5307 11
|
#define bfd_mach_mcf5307 11
|
||||||
#define bfd_mach_mcf5407 12
|
#define bfd_mach_mcf5407 12
|
||||||
#define bfd_mach_mcf528x 13
|
#define bfd_mach_mcf528x 13
|
||||||
|
#define bfd_mach_mcfv4e 14
|
||||||
bfd_arch_vax, /* DEC Vax */
|
bfd_arch_vax, /* DEC Vax */
|
||||||
bfd_arch_i960, /* Intel 960 */
|
bfd_arch_i960, /* Intel 960 */
|
||||||
/* The order of the following is important.
|
/* The order of the following is important.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* BFD library support routines for architectures.
|
/* BFD library support routines for architectures.
|
||||||
Copyright 1990, 1991, 1992, 1993, 1994, 1997, 1998, 2000, 2001, 2002,
|
Copyright 1990, 1991, 1992, 1993, 1994, 1997, 1998, 2000, 2001, 2002,
|
||||||
2003 Free Software Foundation, Inc.
|
2003, 2004 Free Software Foundation, Inc.
|
||||||
Hacked by Steve Chamberlain of Cygnus Support.
|
Hacked by Steve Chamberlain of Cygnus Support.
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
This file is part of BFD, the Binary File Descriptor library.
|
||||||
|
@ -40,7 +40,8 @@ static const bfd_arch_info_type arch_info_struct[] =
|
||||||
N(bfd_mach_mcf5307, "m68k:5307", FALSE, &arch_info_struct[10]),
|
N(bfd_mach_mcf5307, "m68k:5307", FALSE, &arch_info_struct[10]),
|
||||||
N(bfd_mach_mcf5407, "m68k:5407", FALSE, &arch_info_struct[11]),
|
N(bfd_mach_mcf5407, "m68k:5407", FALSE, &arch_info_struct[11]),
|
||||||
N(bfd_mach_m68060, "m68k:68060", FALSE, &arch_info_struct[12]),
|
N(bfd_mach_m68060, "m68k:68060", FALSE, &arch_info_struct[12]),
|
||||||
N(bfd_mach_mcf528x, "m68k:528x", FALSE, 0),
|
N(bfd_mach_mcf528x, "m68k:528x", FALSE, &arch_info_struct[13]),
|
||||||
|
N(bfd_mach_mcfv4e, "m68k:cfv4e", FALSE, 0),
|
||||||
};
|
};
|
||||||
|
|
||||||
const bfd_arch_info_type bfd_m68k_arch =
|
const bfd_arch_info_type bfd_m68k_arch =
|
||||||
|
|
|
@ -1,3 +1,23 @@
|
||||||
|
2004-04-22 Peter Barada <peter@the-baradas.com>
|
||||||
|
|
||||||
|
* NEWS: Added support for EMAC instructions and MAC/EMAC
|
||||||
|
Motorola syntax.
|
||||||
|
* config/m68k-parse.h: Add ACC[123], ACCEXT{01,23}, MAC/EMAC
|
||||||
|
scale factor tokens, trailing_ampersand to mark mask addressing
|
||||||
|
for MAC/EMAC instructions.
|
||||||
|
* config/m68k-parse.y: Add options_ampersand clause, '<<',
|
||||||
|
'>>'.
|
||||||
|
(yylex): Handle '>', '<', and '&' following '+'.
|
||||||
|
* config/tc-m68k.c: Set mcfmac/mcfemac on appropriate ColdFire
|
||||||
|
architectures in archs[].
|
||||||
|
(m68k-ip): Add '4', 'e', 'g', 'i', cases to handle mask addressing
|
||||||
|
for MAC/EMAC instructions, ACC[0123], ACCEXT{01,23}, and '<<'/'>>'
|
||||||
|
respectively.
|
||||||
|
(m68k_ip): Handle trailing '&' on MAC/EMAC insns.
|
||||||
|
(install_operand): Fix 'n' case, Add 'F', 'f', 'G', 'H', 'I', ']'
|
||||||
|
cases.
|
||||||
|
Add EMAC operands to init_table[].
|
||||||
|
|
||||||
2004-04-22 Bruno De Bus <bdebus@elis.ugent.be>
|
2004-04-22 Bruno De Bus <bdebus@elis.ugent.be>
|
||||||
|
|
||||||
* config/tc-arm.h (enum mstate): Move here, add MAP_UNDEFINED
|
* config/tc-arm.h (enum mstate): Move here, add MAP_UNDEFINED
|
||||||
|
|
3
gas/NEWS
3
gas/NEWS
|
@ -1,5 +1,8 @@
|
||||||
-*- text -*-
|
-*- text -*-
|
||||||
|
|
||||||
|
* Support for ColdFire EMAC instructions added and Motorola syntax for MAC/EMAC
|
||||||
|
instrucitons.
|
||||||
|
|
||||||
* The MIPS -membedded-pic option (Embedded-PIC code generation) is
|
* The MIPS -membedded-pic option (Embedded-PIC code generation) is
|
||||||
deprecated and will be removed in a future release.
|
deprecated and will be removed in a future release.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* m68k-parse.h -- header file for m68k assembler
|
/* m68k-parse.h -- header file for m68k assembler
|
||||||
Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000,
|
Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000,
|
||||||
2003 Free Software Foundation, Inc.
|
2003, 2004 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GAS, the GNU Assembler.
|
This file is part of GAS, the GNU Assembler.
|
||||||
|
|
||||||
|
@ -84,7 +84,12 @@ enum m68k_register
|
||||||
ZPC, /* Hack for Program space, but 0 addressing */
|
ZPC, /* Hack for Program space, but 0 addressing */
|
||||||
SR, /* Status Reg */
|
SR, /* Status Reg */
|
||||||
CCR, /* Condition code Reg */
|
CCR, /* Condition code Reg */
|
||||||
ACC, /* Accumulator Reg */
|
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 */
|
MACSR, /* MAC Status Reg */
|
||||||
MASK, /* Modulus Reg */
|
MASK, /* Modulus Reg */
|
||||||
|
|
||||||
|
@ -295,6 +300,8 @@ enum m68k_operand_type
|
||||||
BASE,
|
BASE,
|
||||||
POST,
|
POST,
|
||||||
PRE,
|
PRE,
|
||||||
|
LSH, /* MAC/EMAC scalefactor '<<'. */
|
||||||
|
RSH, /* MAC/EMAC scalefactor '>>'. */
|
||||||
REGLST
|
REGLST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -322,6 +329,9 @@ struct m68k_op
|
||||||
|
|
||||||
/* The outer displacement. */
|
/* The outer displacement. */
|
||||||
struct m68k_exp odisp;
|
struct m68k_exp odisp;
|
||||||
|
|
||||||
|
/* Is a trailing '&' added to an <ea>? (for MAC/EMAC mask addressing). */
|
||||||
|
int trailing_ampersand;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* ! defined (M68K_PARSE_H) */
|
#endif /* ! defined (M68K_PARSE_H) */
|
||||||
|
|
|
@ -98,6 +98,7 @@ static struct m68k_op *op;
|
||||||
struct m68k_exp exp;
|
struct m68k_exp exp;
|
||||||
unsigned long mask;
|
unsigned long mask;
|
||||||
int onereg;
|
int onereg;
|
||||||
|
int trailing_ampersand;
|
||||||
}
|
}
|
||||||
|
|
||||||
%token <reg> DR AR FPR FPCR LPC ZAR ZDR LZPC CREG
|
%token <reg> DR AR FPR FPCR LPC ZAR ZDR LZPC CREG
|
||||||
|
@ -109,6 +110,7 @@ static struct m68k_op *op;
|
||||||
%type <exp> optcexpr optexprc
|
%type <exp> optcexpr optexprc
|
||||||
%type <mask> reglist ireglist reglistpair
|
%type <mask> reglist ireglist reglistpair
|
||||||
%type <onereg> reglistreg
|
%type <onereg> reglistreg
|
||||||
|
%type <trailing_ampersand> optional_ampersand
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
|
@ -116,14 +118,35 @@ static struct m68k_op *op;
|
||||||
|
|
||||||
operand:
|
operand:
|
||||||
generic_operand
|
generic_operand
|
||||||
| motorola_operand
|
| motorola_operand optional_ampersand
|
||||||
|
{
|
||||||
|
op->trailing_ampersand = $2;
|
||||||
|
}
|
||||||
| mit_operand
|
| mit_operand
|
||||||
;
|
;
|
||||||
|
|
||||||
|
/* A trailing ampersand(for MAC/EMAC mask addressing). */
|
||||||
|
optional_ampersand:
|
||||||
|
/* empty */
|
||||||
|
{ $$ = 0; }
|
||||||
|
| '&'
|
||||||
|
{ $$ = 1; }
|
||||||
|
;
|
||||||
|
|
||||||
/* A generic operand. */
|
/* A generic operand. */
|
||||||
|
|
||||||
generic_operand:
|
generic_operand:
|
||||||
DR
|
'<' '<'
|
||||||
|
{
|
||||||
|
op->mode = LSH;
|
||||||
|
}
|
||||||
|
|
||||||
|
| '>' '>'
|
||||||
|
{
|
||||||
|
op->mode = RSH;
|
||||||
|
}
|
||||||
|
|
||||||
|
| DR
|
||||||
{
|
{
|
||||||
op->mode = DREG;
|
op->mode = DREG;
|
||||||
op->reg = $1;
|
op->reg = $1;
|
||||||
|
@ -757,12 +780,14 @@ yylex ()
|
||||||
case '/':
|
case '/':
|
||||||
case '[':
|
case '[':
|
||||||
case ']':
|
case ']':
|
||||||
|
case '<':
|
||||||
|
case '>':
|
||||||
return *str++;
|
return *str++;
|
||||||
case '+':
|
case '+':
|
||||||
/* It so happens that a '+' can only appear at the end of an
|
/* It so happens that a '+' can only appear at the end of an
|
||||||
operand. If it appears anywhere else, it must be a unary
|
operand, or if it is trailed by an '&'(see mac load insn).
|
||||||
plus on an expression. */
|
If it appears anywhere else, it must be a unary. */
|
||||||
if (str[1] == '\0')
|
if (str[1] == '\0' || (str[1] == '&' && str[2] == '\0'))
|
||||||
return *str++;
|
return *str++;
|
||||||
break;
|
break;
|
||||||
case '-':
|
case '-':
|
||||||
|
|
|
@ -382,10 +382,10 @@ static const struct m68k_cpu archs[] =
|
||||||
{ m68851, "68851", 0 },
|
{ m68851, "68851", 0 },
|
||||||
{ mcf5200, "5200", 0 },
|
{ mcf5200, "5200", 0 },
|
||||||
{ mcf5206e, "5206e", 0 },
|
{ mcf5206e, "5206e", 0 },
|
||||||
{ mcf528x, "528x", 0 },
|
{ mcf528x|mcfmac, "528x", 0 },
|
||||||
{ mcf5307, "5307", 0 },
|
{ mcf5307|mcfmac, "5307", 0 },
|
||||||
{ mcf5407, "5407", 0 },
|
{ mcf5407|mcfmac, "5407", 0 },
|
||||||
{ mcfv4e, "cfv4e", 0 },
|
{ mcfv4e|mcfemac, "cfv4e", 0 },
|
||||||
/* Aliases (effectively, so far as gas is concerned) for the above
|
/* Aliases (effectively, so far as gas is concerned) for the above
|
||||||
cpus. */
|
cpus. */
|
||||||
{ m68020, "68k", 1 },
|
{ m68020, "68k", 1 },
|
||||||
|
@ -416,7 +416,7 @@ static const struct m68k_cpu archs[] =
|
||||||
{ mcf5200, "5202", 1 },
|
{ mcf5200, "5202", 1 },
|
||||||
{ mcf5200, "5204", 1 },
|
{ mcf5200, "5204", 1 },
|
||||||
{ mcf5200, "5206", 1 },
|
{ mcf5200, "5206", 1 },
|
||||||
{ mcf5407, "cfv4", 1 },
|
{ mcf5407|mcfmac, "cfv4", 1 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const int n_archs = sizeof (archs) / sizeof (archs[0]);
|
static const int n_archs = sizeof (archs) / sizeof (archs[0]);
|
||||||
|
@ -1505,6 +1505,14 @@ m68k_ip (instring)
|
||||||
++losing;
|
++losing;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case '4':
|
||||||
|
if (opP->mode != AINDR && opP->mode != AINC && opP->mode != ADEC
|
||||||
|
&& (opP->mode != DISP
|
||||||
|
|| opP->reg < ADDR0
|
||||||
|
|| opP->reg > ADDR7))
|
||||||
|
++losing;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'B': /* FOO */
|
case 'B': /* FOO */
|
||||||
if (opP->mode != ABSL
|
if (opP->mode != ABSL
|
||||||
|| (flag_long_jumps
|
|| (flag_long_jumps
|
||||||
|
@ -1552,6 +1560,12 @@ m68k_ip (instring)
|
||||||
losing++;
|
losing++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'e':
|
||||||
|
if (opP->reg != ACC && opP->reg != ACC1
|
||||||
|
&& opP->reg != ACC2 && opP->reg != ACC3)
|
||||||
|
losing++;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'F':
|
case 'F':
|
||||||
if (opP->mode != FPREG)
|
if (opP->mode != FPREG)
|
||||||
losing++;
|
losing++;
|
||||||
|
@ -1562,6 +1576,11 @@ m68k_ip (instring)
|
||||||
losing++;
|
losing++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'g':
|
||||||
|
if (opP->reg != ACCEXT01 && opP->reg != ACCEXT23)
|
||||||
|
losing++;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'H':
|
case 'H':
|
||||||
if (opP->reg != MASK)
|
if (opP->reg != MASK)
|
||||||
losing++;
|
losing++;
|
||||||
|
@ -1574,6 +1593,11 @@ m68k_ip (instring)
|
||||||
losing++;
|
losing++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'i':
|
||||||
|
if (opP->mode != LSH && opP->mode != RSH)
|
||||||
|
losing++;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'J':
|
case 'J':
|
||||||
if (opP->mode != CONTROL
|
if (opP->mode != CONTROL
|
||||||
|| opP->reg < USP
|
|| opP->reg < USP
|
||||||
|
@ -1994,6 +2018,7 @@ m68k_ip (instring)
|
||||||
case 'w':
|
case 'w':
|
||||||
case 'y':
|
case 'y':
|
||||||
case 'z':
|
case 'z':
|
||||||
|
case '4':
|
||||||
#ifndef NO_68851
|
#ifndef NO_68851
|
||||||
case '|':
|
case '|':
|
||||||
#endif
|
#endif
|
||||||
|
@ -2519,6 +2544,16 @@ m68k_ip (instring)
|
||||||
as_bad (_("unknown/incorrect operand"));
|
as_bad (_("unknown/incorrect operand"));
|
||||||
/* abort (); */
|
/* abort (); */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If s[0] is '4', then this is for the mac instructions
|
||||||
|
that can have a trailing_ampersand set. If so, set 0x100
|
||||||
|
bit on tmpreg so install_gen_operand can check for it and
|
||||||
|
set the appropriate bit (word2, bit 5). */
|
||||||
|
if (s[0] == '4')
|
||||||
|
{
|
||||||
|
if (opP->trailing_ampersand)
|
||||||
|
tmpreg |= 0x100;
|
||||||
|
}
|
||||||
install_gen_operand (s[1], tmpreg);
|
install_gen_operand (s[1], tmpreg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2737,6 +2772,10 @@ m68k_ip (instring)
|
||||||
install_operand (s[1], opP->reg - DATA);
|
install_operand (s[1], opP->reg - DATA);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'e': /* EMAC ACCx, reg/reg. */
|
||||||
|
install_operand (s[1], opP->reg - ACC);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'E': /* Ignore it. */
|
case 'E': /* Ignore it. */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2744,6 +2783,10 @@ m68k_ip (instring)
|
||||||
install_operand (s[1], opP->reg - FP0);
|
install_operand (s[1], opP->reg - FP0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'g': /* EMAC ACCEXTx. */
|
||||||
|
install_operand (s[1], opP->reg - ACCEXT01);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'G': /* Ignore it. */
|
case 'G': /* Ignore it. */
|
||||||
case 'H':
|
case 'H':
|
||||||
break;
|
break;
|
||||||
|
@ -2753,6 +2796,10 @@ m68k_ip (instring)
|
||||||
install_operand (s[1], tmpreg);
|
install_operand (s[1], tmpreg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'i': /* MAC/EMAC scale factor. */
|
||||||
|
install_operand (s[1], opP->mode == LSH ? 0x1 : 0x3);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'J': /* JF foo. */
|
case 'J': /* JF foo. */
|
||||||
switch (opP->reg)
|
switch (opP->reg)
|
||||||
{
|
{
|
||||||
|
@ -3286,25 +3333,46 @@ install_operand (mode, val)
|
||||||
the_ins.opcode[0] |= ((val & 0x7) << 9);
|
the_ins.opcode[0] |= ((val & 0x7) << 9);
|
||||||
the_ins.opcode[1] |= ((val & 0x10) << (7 - 4));
|
the_ins.opcode[1] |= ((val & 0x10) << (7 - 4));
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n': /* MAC/EMAC Rx on !load. */
|
||||||
the_ins.opcode[0] |= ((val & 0x8) << (6 - 3));
|
the_ins.opcode[0] |= ((val & 0x8) << (6 - 3));
|
||||||
the_ins.opcode[0] |= ((val & 0x7) << 9);
|
the_ins.opcode[0] |= ((val & 0x7) << 9);
|
||||||
|
the_ins.opcode[1] |= ((val & 0x10) << (7 - 4));
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o': /* MAC/EMAC Rx on load. */
|
||||||
the_ins.opcode[1] |= val << 12;
|
the_ins.opcode[1] |= val << 12;
|
||||||
the_ins.opcode[1] |= ((val & 0x10) << (7 - 4));
|
the_ins.opcode[1] |= ((val & 0x10) << (7 - 4));
|
||||||
break;
|
break;
|
||||||
case 'M':
|
case 'M': /* MAC/EMAC Ry on !load. */
|
||||||
the_ins.opcode[0] |= (val & 0xF);
|
the_ins.opcode[0] |= (val & 0xF);
|
||||||
the_ins.opcode[1] |= ((val & 0x10) << (6 - 4));
|
the_ins.opcode[1] |= ((val & 0x10) << (6 - 4));
|
||||||
break;
|
break;
|
||||||
case 'N':
|
case 'N': /* MAC/EMAC Ry on load. */
|
||||||
the_ins.opcode[1] |= (val & 0xF);
|
the_ins.opcode[1] |= (val & 0xF);
|
||||||
the_ins.opcode[1] |= ((val & 0x10) << (6 - 4));
|
the_ins.opcode[1] |= ((val & 0x10) << (6 - 4));
|
||||||
break;
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
the_ins.opcode[1] |= ((val != 1) << 10);
|
the_ins.opcode[1] |= ((val != 1) << 10);
|
||||||
break;
|
break;
|
||||||
|
case 'F':
|
||||||
|
the_ins.opcode[0] |= ((val & 0x3) << 9);
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
the_ins.opcode[0] |= ((val & 0x3) << 0);
|
||||||
|
break;
|
||||||
|
case 'G':
|
||||||
|
the_ins.opcode[0] |= ((~val & 0x1) << 7);
|
||||||
|
the_ins.opcode[1] |= ((val & 0x2) << (4 - 1));
|
||||||
|
break;
|
||||||
|
case 'H':
|
||||||
|
the_ins.opcode[0] |= ((val & 0x1) << 7);
|
||||||
|
the_ins.opcode[1] |= ((val & 0x2) << (4 - 1));
|
||||||
|
break;
|
||||||
|
case 'I':
|
||||||
|
the_ins.opcode[1] |= ((val & 0x3) << 9);
|
||||||
|
break;
|
||||||
|
case ']':
|
||||||
|
the_ins.opcode[0] |= (val & 0x1) <<10;
|
||||||
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
default:
|
default:
|
||||||
as_fatal (_("failed sanity check."));
|
as_fatal (_("failed sanity check."));
|
||||||
|
@ -3318,6 +3386,11 @@ install_gen_operand (mode, val)
|
||||||
{
|
{
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
|
case '/': /* Special for mask loads for mac/msac insns with
|
||||||
|
possible mask; trailing_ampersend set in bit 8. */
|
||||||
|
the_ins.opcode[0] |= (val & 0x3f);
|
||||||
|
the_ins.opcode[1] |= (((val & 0x100) >> 8) << 5);
|
||||||
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
the_ins.opcode[0] |= val;
|
the_ins.opcode[0] |= val;
|
||||||
break;
|
break;
|
||||||
|
@ -3507,6 +3580,12 @@ static const struct init_entry init_table[] =
|
||||||
{ "cc", CCR },
|
{ "cc", CCR },
|
||||||
|
|
||||||
{ "acc", ACC },
|
{ "acc", ACC },
|
||||||
|
{ "acc0", ACC },
|
||||||
|
{ "acc1", ACC1 },
|
||||||
|
{ "acc2", ACC2 },
|
||||||
|
{ "acc3", ACC3 },
|
||||||
|
{ "accext01", ACCEXT01 },
|
||||||
|
{ "accext23", ACCEXT23 },
|
||||||
{ "macsr", MACSR },
|
{ "macsr", MACSR },
|
||||||
{ "mask", MASK },
|
{ "mask", MASK },
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
2004-04-22 Peter Barada <peter@the-baradas.com>
|
||||||
|
|
||||||
|
* gas/m68k/mcf-mac.s: New test: Check ColdFire MAC instructions.
|
||||||
|
* gas/m68k/mcf-emac.s: New test: Similar checks.
|
||||||
|
* gas/m68k/mcf-mac.d: New test: Expected output.
|
||||||
|
* gas/m68k/mcf-emac.d: New test: Likewise.
|
||||||
|
* gas/m68k/all.exp: Run new tests.
|
||||||
|
|
||||||
2004-04-21 Chris Demetriou <cgd@broadcom.com>
|
2004-04-21 Chris Demetriou <cgd@broadcom.com>
|
||||||
|
|
||||||
* gas/mips/elempic.d: File removed as part of -membedded-pic removal.
|
* gas/mips/elempic.d: File removed as part of -membedded-pic removal.
|
||||||
|
|
|
@ -35,6 +35,8 @@ if [istarget m68*-*-*] then {
|
||||||
run_dump_test link
|
run_dump_test link
|
||||||
run_dump_test fmoveml
|
run_dump_test fmoveml
|
||||||
run_dump_test mcf-mov3q
|
run_dump_test mcf-mov3q
|
||||||
|
run_dump_test mcf-mac
|
||||||
|
run_dump_test mcf-emac
|
||||||
|
|
||||||
set testname "68000 operands"
|
set testname "68000 operands"
|
||||||
gas_run "operands.s" "-m68000" "2>err.out"
|
gas_run "operands.s" "-m68000" "2>err.out"
|
||||||
|
|
6538
gas/testsuite/gas/m68k/mcf-emac.d
Normal file
6538
gas/testsuite/gas/m68k/mcf-emac.d
Normal file
File diff suppressed because it is too large
Load diff
6660
gas/testsuite/gas/m68k/mcf-emac.s
Normal file
6660
gas/testsuite/gas/m68k/mcf-emac.s
Normal file
File diff suppressed because it is too large
Load diff
3325
gas/testsuite/gas/m68k/mcf-mac.d
Normal file
3325
gas/testsuite/gas/m68k/mcf-mac.d
Normal file
File diff suppressed because it is too large
Load diff
3331
gas/testsuite/gas/m68k/mcf-mac.s
Normal file
3331
gas/testsuite/gas/m68k/mcf-mac.s
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,11 @@
|
||||||
|
2004-04-22 Peter Barada <peter@the-baradas.com>
|
||||||
|
|
||||||
|
* m68k.h: Add mcfmac/mcfemac definitions. Update operand
|
||||||
|
descriptions for new EMAC cases.
|
||||||
|
Remove ColdFire macmw/macml/msacmw/msacmw hacks and properly
|
||||||
|
handle Motorola MAC syntax.
|
||||||
|
Allow disassembly of ColdFire V4e object files.
|
||||||
|
|
||||||
2004-03-16 Alan Modra <amodra@bigpond.net.au>
|
2004-03-16 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* ppc.h (PPC_OPERAND_GPR_0): Define. Bump other operand defines.
|
* ppc.h (PPC_OPERAND_GPR_0): Define. Bump other operand defines.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Opcode table header for m680[01234]0/m6888[12]/m68851.
|
/* Opcode table header for m680[01234]0/m6888[12]/m68851.
|
||||||
Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001,
|
Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001,
|
||||||
2003 Free Software Foundation, Inc.
|
2003, 2004 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GDB, GAS, and the GNU binutils.
|
This file is part of GDB, GAS, and the GNU binutils.
|
||||||
|
|
||||||
|
@ -42,6 +42,8 @@
|
||||||
#define mcf5407 0x1000
|
#define mcf5407 0x1000
|
||||||
#define mcfv4e 0x2000
|
#define mcfv4e 0x2000
|
||||||
#define mcf528x 0x4000
|
#define mcf528x 0x4000
|
||||||
|
#define mcfmac 0x8000
|
||||||
|
#define mcfemac 0x10000
|
||||||
|
|
||||||
/* Handy aliases. */
|
/* Handy aliases. */
|
||||||
#define m68040up (m68040 | m68060)
|
#define m68040up (m68040 | m68060)
|
||||||
|
@ -99,7 +101,7 @@ struct m68k_opcode_alias
|
||||||
operand; the second, the place it is stored. */
|
operand; the second, the place it is stored. */
|
||||||
|
|
||||||
/* Kinds of operands:
|
/* Kinds of operands:
|
||||||
Characters used: AaBbCcDdEFfGHIJkLlMmnOopQqRrSsTtU VvWwXxYyZz0123|*~%;@!&$?/<>#^+-
|
Characters used: AaBbCcDdEeFfGgHIiJkLlMmnOopQqRrSsTtU VvWwXxYyZz01234|*~%;@!&$?/<>#^+-
|
||||||
|
|
||||||
D data register only. Stored as 3 bits.
|
D data register only. Stored as 3 bits.
|
||||||
A address register only. Stored as 3 bits.
|
A address register only. Stored as 3 bits.
|
||||||
|
@ -133,9 +135,12 @@ struct m68k_opcode_alias
|
||||||
C the CCR. No need to store it; this is just for filtering validity.
|
C the CCR. No need to store it; this is just for filtering validity.
|
||||||
S the SR. No need to store, just as with CCR.
|
S the SR. No need to store, just as with CCR.
|
||||||
U the USP. No need to store, just as with CCR.
|
U the USP. No need to store, just as with CCR.
|
||||||
E the ACC. No need to store, just as with CCR.
|
E the MAC ACC. No need to store, just as with CCR.
|
||||||
G the MACSR. No need to store, just as with CCR.
|
e the EMAC ACC[0123].
|
||||||
|
G the MAC/EMAC MACSR. No need to store, just as with CCR.
|
||||||
|
g the EMAC ACCEXT{01,23}.
|
||||||
H the MASK. No need to store, just as with CCR.
|
H the MASK. No need to store, just as with CCR.
|
||||||
|
i the MAC/EMAC scale factor.
|
||||||
|
|
||||||
I Coprocessor ID. Not printed if 1. The Coprocessor ID is always
|
I Coprocessor ID. Not printed if 1. The Coprocessor ID is always
|
||||||
extracted from the 'd' field of word one, which means that an extended
|
extracted from the 'd' field of word one, which means that an extended
|
||||||
|
@ -230,7 +235,9 @@ struct m68k_opcode_alias
|
||||||
w (modes 2-5,7.2)
|
w (modes 2-5,7.2)
|
||||||
y (modes 2,5)
|
y (modes 2,5)
|
||||||
z (modes 2,5,7.2)
|
z (modes 2,5,7.2)
|
||||||
x mov3q immediate operand. */
|
x mov3q immediate operand.
|
||||||
|
4 (modes 2,3,4,5)
|
||||||
|
*/
|
||||||
|
|
||||||
/* For the 68851: */
|
/* For the 68851: */
|
||||||
/* I didn't use much imagination in choosing the
|
/* I didn't use much imagination in choosing the
|
||||||
|
@ -283,7 +290,7 @@ struct m68k_opcode_alias
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Places to put an operand, for non-general operands:
|
/* Places to put an operand, for non-general operands:
|
||||||
Characters used: BbCcDdghijkLlMmNnostWw123456789
|
Characters used: BbCcDdFfGgHhIijkLlMmNnostWw123456789/
|
||||||
|
|
||||||
s source, low bits of first word.
|
s source, low bits of first word.
|
||||||
d dest, shifted 9 in first word
|
d dest, shifted 9 in first word
|
||||||
|
@ -348,6 +355,13 @@ struct m68k_opcode_alias
|
||||||
F double precision float, low bit of 1st word, immediate uses 8 bytes
|
F double precision float, low bit of 1st word, immediate uses 8 bytes
|
||||||
x extended precision float, low bit of 1st word, immediate uses 12 bytes
|
x extended precision float, low bit of 1st word, immediate uses 12 bytes
|
||||||
p packed float, low bit of 1st word, immediate uses 12 bytes
|
p packed float, low bit of 1st word, immediate uses 12 bytes
|
||||||
|
G EMAC accumulator, load (bit 4 2nd word, !bit8 first word)
|
||||||
|
H EMAC accumulator, non load (bit 4 2nd word, bit 8 first word)
|
||||||
|
F EMAC ACCx
|
||||||
|
f EMAC ACCy
|
||||||
|
I MAC/EMAC scale factor
|
||||||
|
/ Like 's', but set 2nd word, bit 5 if trailing_ampersand set
|
||||||
|
] first word, bit 10
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern const struct m68k_opcode m68k_opcodes[];
|
extern const struct m68k_opcode m68k_opcodes[];
|
||||||
|
|
|
@ -1,3 +1,13 @@
|
||||||
|
2004-04-22 Peter Barada <peter@the-baradas.com>
|
||||||
|
|
||||||
|
* m68k-dis.c(print_insn_m68k): Set mfcmac/mcfemac on
|
||||||
|
appropriate ColdFire architectures.
|
||||||
|
(print_insn_m68k): Handle EMAC, MAC/EMAC scalefactor, and MAC/EMAC
|
||||||
|
mask addressing.
|
||||||
|
Add EMAC instructions, fix MAC instructions. Remove
|
||||||
|
macmw/macml/msacmw/msacml instructions since mask addressing now
|
||||||
|
supported.
|
||||||
|
|
||||||
2004-04-20 Jakub Jelinek <jakub@redhat.com>
|
2004-04-20 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* sparc-opc.c (fmoviccx, fmovfccx, fmovccx): Define.
|
* sparc-opc.c (fmoviccx, fmovfccx, fmovccx): Define.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Print Motorola 68k instructions.
|
/* Print Motorola 68k instructions.
|
||||||
Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
|
Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
|
||||||
1998, 1999, 2000, 2001, 2002, 2003
|
1998, 1999, 2000, 2001, 2002, 2003, 2004
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is free software; you can redistribute it and/or modify
|
This file is free software; you can redistribute it and/or modify
|
||||||
|
@ -264,16 +264,19 @@ print_insn_m68k (memaddr, info)
|
||||||
arch_mask = mcf5200;
|
arch_mask = mcf5200;
|
||||||
break;
|
break;
|
||||||
case bfd_mach_mcf528x:
|
case bfd_mach_mcf528x:
|
||||||
arch_mask = mcf528x;
|
arch_mask = mcf528x | mcfmac;
|
||||||
break;
|
break;
|
||||||
case bfd_mach_mcf5206e:
|
case bfd_mach_mcf5206e:
|
||||||
arch_mask = mcf5206e;
|
arch_mask = mcf5206e | mcfmac;
|
||||||
break;
|
break;
|
||||||
case bfd_mach_mcf5307:
|
case bfd_mach_mcf5307:
|
||||||
arch_mask = mcf5307;
|
arch_mask = mcf5307 | mcfmac;
|
||||||
break;
|
break;
|
||||||
case bfd_mach_mcf5407:
|
case bfd_mach_mcf5407:
|
||||||
arch_mask = mcf5407;
|
arch_mask = mcf5407 | mcfmac;
|
||||||
|
break;
|
||||||
|
case bfd_mach_mcfv4e:
|
||||||
|
arch_mask = mcfv4e | mcfemac;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -736,6 +739,24 @@ print_insn_arg (d, buffer, p0, addr, info)
|
||||||
fpcr_names[fetch_arg (buffer, place, 3, info)]);
|
fpcr_names[fetch_arg (buffer, place, 3, info)]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'e':
|
||||||
|
val = fetch_arg(buffer, place, 2, info);
|
||||||
|
(*info->fprintf_func) (info->stream, "%%acc%d", val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'g':
|
||||||
|
val = fetch_arg(buffer, place, 2, info);
|
||||||
|
(*info->fprintf_func) (info->stream, "%%accext%s", val==0 ? "01" : "23");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'i':
|
||||||
|
val = fetch_arg(buffer, place, 2, info);
|
||||||
|
if (val == 1)
|
||||||
|
(*info->fprintf_func) (info->stream, "<<");
|
||||||
|
else if (val == 3)
|
||||||
|
(*info->fprintf_func) (info->stream, ">>");
|
||||||
|
break;
|
||||||
|
|
||||||
case 'I':
|
case 'I':
|
||||||
/* Get coprocessor ID... */
|
/* Get coprocessor ID... */
|
||||||
val = fetch_arg (buffer, 'd', 3, info);
|
val = fetch_arg (buffer, 'd', 3, info);
|
||||||
|
@ -744,6 +765,7 @@ print_insn_arg (d, buffer, p0, addr, info)
|
||||||
(*info->fprintf_func) (info->stream, "(cpid=%d) ", val);
|
(*info->fprintf_func) (info->stream, "(cpid=%d) ", val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case '4':
|
||||||
case '*':
|
case '*':
|
||||||
case '~':
|
case '~':
|
||||||
case '%':
|
case '%':
|
||||||
|
@ -881,6 +903,16 @@ print_insn_arg (d, buffer, p0, addr, info)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If place is '/', then this is the case of the mask bit for
|
||||||
|
mac/emac loads. Now that the arg has been printed, grab the
|
||||||
|
mask bit and if set, add a '&' to the arg. */
|
||||||
|
if (place == '/')
|
||||||
|
{
|
||||||
|
val = fetch_arg (buffer, place, 1, info);
|
||||||
|
if (val)
|
||||||
|
(*info->fprintf_func) (info->stream, "&");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'L':
|
case 'L':
|
||||||
|
@ -1075,6 +1107,34 @@ fetch_arg (buffer, code, bits, info)
|
||||||
register int val = 0;
|
register int val = 0;
|
||||||
switch (code)
|
switch (code)
|
||||||
{
|
{
|
||||||
|
case '/': /* MAC/EMAC mask bit. */
|
||||||
|
val = buffer[3] >> 5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'G': /* EMAC ACC load. */
|
||||||
|
val = ((buffer[3] >> 3) & 0x2) | ((~buffer[2] >> 7) & 0x1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'H': /* EMAC ACC !load. */
|
||||||
|
val = ((buffer[3] >> 3) & 0x2) | ((buffer[2] >> 7) & 0x1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ']': /* EMAC ACCEXT bit. */
|
||||||
|
val = buffer[0] >> 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'I': /* MAC/EMAC scale factor. */
|
||||||
|
val = buffer[0] >> 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'F': /* EMAC ACCx. */
|
||||||
|
val = buffer[0] >> 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'f':
|
||||||
|
val = buffer[0];
|
||||||
|
break;
|
||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
val = buffer[1];
|
val = buffer[1];
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Opcode table for m680[012346]0/m6888[12]/m68851/mcf5200.
|
/* Opcode table for m680[012346]0/m6888[12]/m68851/mcf5200.
|
||||||
Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
2000, 2001, 2003
|
2000, 2001, 2003, 2004
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GDB, GAS, and the GNU binutils.
|
This file is part of GDB, GAS, and the GNU binutils.
|
||||||
|
@ -1459,44 +1459,33 @@ const struct m68k_opcode m68k_opcodes[] =
|
||||||
{"lsrl", one(0160210), one(0170770), "QdDs", m68000up | mcf },
|
{"lsrl", one(0160210), one(0170770), "QdDs", m68000up | mcf },
|
||||||
{"lsrl", one(0160250), one(0170770), "DdDs", m68000up | mcf },
|
{"lsrl", one(0160250), one(0170770), "DdDs", m68000up | mcf },
|
||||||
|
|
||||||
/* FIXME: add MAM mode (`&' after <ea> operand) / remove MACM */
|
{"macw", two(0xa000, 0x0000), two(0xf1b0, 0x0800), "uMum", mcfmac },
|
||||||
{"macw", two(0120000, 0000000), two(0170660, 0005400), "uMum", mcf5206eup },
|
{"macw", two(0xa000, 0x0000), two(0xf1b0, 0x0b00), "uMumiI", mcfmac },
|
||||||
{"macw", two(0120000, 0001000), two(0170660, 0005400), "uMumMh",mcf5206eup },
|
{"macw", two(0xa000, 0x0200), two(0xf1b0, 0x0b00), "uMumMh", mcfmac },
|
||||||
{"macw", two(0120220, 0000000), two(0170670, 0005460), "uNuoasRn", mcf5206eup },
|
{"macw", two(0xa080, 0x0000), two(0xf180, 0x0f30), "uNuo4/Rn", mcfmac },
|
||||||
{"macw", two(0120230, 0000000), two(0170670, 0005460), "uNuo+sRn", mcf5206eup },
|
{"macw", two(0xa080, 0x0000), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac },
|
||||||
{"macw", two(0120240, 0000000), two(0170670, 0005460), "uNuo-sRn", mcf5206eup },
|
{"macw", two(0xa080, 0x0200), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac },
|
||||||
{"macw", two(0120250, 0000000), two(0170670, 0005460), "uNuodsRn", mcf5206eup },
|
|
||||||
{"macw", two(0120220, 0001000), two(0170670, 0005460), "uNuoMhasRn", mcf5206eup },
|
|
||||||
{"macw", two(0120230, 0001000), two(0170670, 0005460), "uNuoMh+sRn", mcf5206eup },
|
|
||||||
{"macw", two(0120240, 0001000), two(0170670, 0005460), "uNuoMh-sRn", mcf5206eup },
|
|
||||||
{"macw", two(0120250, 0001000), two(0170670, 0005460), "uNuoMhdsRn", mcf5206eup },
|
|
||||||
{"macmw", two(0120220, 0000040), two(0170670, 0005460), "uNuoasRn", mcf5206eup },
|
|
||||||
{"macmw", two(0120230, 0000040), two(0170670, 0005460), "uNuo+sRn", mcf5206eup },
|
|
||||||
{"macmw", two(0120240, 0000040), two(0170670, 0005460), "uNuo-sRn", mcf5206eup },
|
|
||||||
{"macmw", two(0120250, 0000040), two(0170670, 0005460), "uNuodsRn", mcf5206eup },
|
|
||||||
{"macmw", two(0120220, 0001040), two(0170670, 0005460), "uNuoMhasRn", mcf5206eup },
|
|
||||||
{"macmw", two(0120230, 0001040), two(0170670, 0005460), "uNuoMh+sRn", mcf5206eup },
|
|
||||||
{"macmw", two(0120240, 0001040), two(0170670, 0005460), "uNuoMh-sRn", mcf5206eup },
|
|
||||||
{"macmw", two(0120250, 0001040), two(0170670, 0005460), "uNuoMhdsRn", mcf5206eup },
|
|
||||||
|
|
||||||
{"macl", two(0120000, 0004000), two(0170660, 0005400), "RsRm", mcf5206eup },
|
{"macw", two(0xa000, 0x0000), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX. */
|
||||||
{"macl", two(0120000, 0005000), two(0170660, 0005400), "RsRmMh", mcf5206eup },
|
{"macw", two(0xa000, 0x0000), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX. */
|
||||||
{"macl", two(0120220, 0004000), two(0170670, 0005460), "R3R1asRn", mcf5206eup },
|
{"macw", two(0xa000, 0x0200), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX. */
|
||||||
{"macl", two(0120230, 0004000), two(0170670, 0005460), "R3R1+sRn", mcf5206eup },
|
{"macw", two(0xa000, 0x0000), two(0xf100, 0x0f00), "uMum4/RneG", mcfemac },/* Ry,Rx,<ea>,accX. */
|
||||||
{"macl", two(0120240, 0004000), two(0170670, 0005460), "R3R1-sRn", mcf5206eup },
|
{"macw", two(0xa000, 0x0000), two(0xf100, 0x0900), "uMumiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX. */
|
||||||
{"macl", two(0120250, 0004000), two(0170670, 0005460), "R3R1dsRn", mcf5206eup },
|
{"macw", two(0xa000, 0x0200), two(0xf100, 0x0900), "uMumMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX. */
|
||||||
{"macl", two(0120220, 0005000), two(0170670, 0005460), "R3R1MhasRn", mcf5206eup },
|
|
||||||
{"macl", two(0120230, 0005000), two(0170670, 0005460), "R3R1Mh+sRn", mcf5206eup },
|
{"macl", two(0xa000, 0x0800), two(0xf1b0, 0x0800), "RMRm", mcfmac },
|
||||||
{"macl", two(0120240, 0005000), two(0170670, 0005460), "R3R1Mh-sRn", mcf5206eup },
|
{"macl", two(0xa000, 0x0800), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac },
|
||||||
{"macl", two(0120250, 0005000), two(0170670, 0005460), "R3R1MhdsRn", mcf5206eup },
|
{"macl", two(0xa000, 0x0a00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac },
|
||||||
{"macml", two(0120220, 0004040), two(0170670, 0005460), "R3R1asRn", mcf5206eup },
|
{"macl", two(0xa080, 0x0800), two(0xf180, 0x0f30), "RNRo4/Rn", mcfmac },
|
||||||
{"macml", two(0120230, 0004040), two(0170670, 0005460), "R3R1+sRn", mcf5206eup },
|
{"macl", two(0xa080, 0x0800), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac },
|
||||||
{"macml", two(0120240, 0004040), two(0170670, 0005460), "R3R1-sRn", mcf5206eup },
|
{"macl", two(0xa080, 0x0a00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac },
|
||||||
{"macml", two(0120250, 0004040), two(0170670, 0005460), "R3R1dsRn", mcf5206eup },
|
|
||||||
{"macml", two(0120220, 0005040), two(0170670, 0005460), "R3R1MhasRn", mcf5206eup },
|
{"macl", two(0xa000, 0x0800), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
|
||||||
{"macml", two(0120230, 0005040), two(0170670, 0005460), "R3R1Mh+sRn", mcf5206eup },
|
{"macl", two(0xa000, 0x0800), two(0xf130, 0x0900), "RMRmiIeH", mcfemac },
|
||||||
{"macml", two(0120240, 0005040), two(0170670, 0005460), "R3R1Mh-sRn", mcf5206eup },
|
{"macl", two(0xa000, 0x0a00), two(0xf130, 0x0900), "RMRmMheH", mcfemac },
|
||||||
{"macml", two(0120250, 0005040), two(0170670, 0005460), "R3R1MhdsRn", mcf5206eup },
|
{"macl", two(0xa000, 0x0800), two(0xf100, 0x0f00), "R3R14/RneG", mcfemac },
|
||||||
|
{"macl", two(0xa000, 0x0800), two(0xf100, 0x0900), "R3R1iI4/RneG", mcfemac },
|
||||||
|
{"macl", two(0xa000, 0x0a00), two(0xf100, 0x0900), "R3R1Mh4/RneG", mcfemac },
|
||||||
|
|
||||||
/* NOTE: The mcf5200 family programmer's reference manual does not
|
/* NOTE: The mcf5200 family programmer's reference manual does not
|
||||||
indicate the byte form of the movea instruction is invalid (as it
|
indicate the byte form of the movea instruction is invalid (as it
|
||||||
|
@ -1518,6 +1507,8 @@ const struct m68k_opcode m68k_opcodes[] =
|
||||||
{"moveal", one(0020100), one(0170700), "*lAd", m68000up | mcf },
|
{"moveal", one(0020100), one(0170700), "*lAd", m68000up | mcf },
|
||||||
{"moveaw", one(0030100), one(0170700), "*wAd", m68000up | mcf },
|
{"moveaw", one(0030100), one(0170700), "*wAd", m68000up | mcf },
|
||||||
|
|
||||||
|
{"movclrl", one(0xA1C0), one(0xf9f0), "eFRs", mcfemac },
|
||||||
|
|
||||||
{"movec", one(0047173), one(0177777), "R1Jj", m68010up | mcf },
|
{"movec", one(0047173), one(0177777), "R1Jj", m68010up | mcf },
|
||||||
{"movec", one(0047173), one(0177777), "R1#j", m68010up | mcf },
|
{"movec", one(0047173), one(0177777), "R1#j", m68010up | mcf },
|
||||||
{"movec", one(0047172), one(0177777), "JjR1", m68010up },
|
{"movec", one(0047172), one(0177777), "JjR1", m68010up },
|
||||||
|
@ -1588,16 +1579,31 @@ const struct m68k_opcode m68k_opcodes[] =
|
||||||
{"movel", one(0020000), one(0170000), "olnd", mcfv4up },
|
{"movel", one(0020000), one(0170000), "olnd", mcfv4up },
|
||||||
{"movel", one(0047140), one(0177770), "AsUd", m68000up | mcfv4e },
|
{"movel", one(0047140), one(0177770), "AsUd", m68000up | mcfv4e },
|
||||||
{"movel", one(0047150), one(0177770), "UdAs", m68000up | mcfv4e },
|
{"movel", one(0047150), one(0177770), "UdAs", m68000up | mcfv4e },
|
||||||
{"movel", one(0120600), one(0177760), "EsRs", mcf5206eup },
|
{"movel", one(0120600), one(0177760), "EsRs", mcfmac },
|
||||||
{"movel", one(0120400), one(0177760), "RsEs", mcf5206eup },
|
{"movel", one(0120400), one(0177760), "RsEs", mcfmac },
|
||||||
{"movel", one(0120474), one(0177777), "#lEs", mcf5206eup },
|
{"movel", one(0120474), one(0177777), "#lEs", mcfmac },
|
||||||
{"movel", one(0124600), one(0177760), "GsRs", mcf5206eup },
|
{"movel", one(0124600), one(0177760), "GsRs", mcfmac },
|
||||||
{"movel", one(0124400), one(0177760), "RsGs", mcf5206eup },
|
{"movel", one(0124400), one(0177760), "RsGs", mcfmac },
|
||||||
{"movel", one(0124474), one(0177777), "#lGs", mcf5206eup },
|
{"movel", one(0124474), one(0177777), "#lGs", mcfmac },
|
||||||
{"movel", one(0126600), one(0177760), "HsRs", mcf5206eup },
|
{"movel", one(0126600), one(0177760), "HsRs", mcfmac },
|
||||||
{"movel", one(0126400), one(0177760), "RsHs", mcf5206eup },
|
{"movel", one(0126400), one(0177760), "RsHs", mcfmac },
|
||||||
{"movel", one(0126474), one(0177777), "#lHs", mcf5206eup },
|
{"movel", one(0126474), one(0177777), "#lHs", mcfmac },
|
||||||
{"movel", one(0124700), one(0177777), "GsCs", mcf5206eup },
|
{"movel", one(0124700), one(0177777), "GsCs", mcfmac },
|
||||||
|
|
||||||
|
{"movel", one(0xa180), one(0xf9f0), "eFRs", mcfemac }, /* ACCx,Rx. */
|
||||||
|
{"movel", one(0xab80), one(0xfbf0), "g]Rs", mcfemac }, /* ACCEXTx,Rx. */
|
||||||
|
{"movel", one(0xa980), one(0xfff0), "G-Rs", mcfemac }, /* macsr,Rx. */
|
||||||
|
{"movel", one(0xad80), one(0xfff0), "H-Rs", mcfemac }, /* mask,Rx. */
|
||||||
|
{"movel", one(0xa110), one(0xf9fc), "efeF", mcfemac }, /* ACCy,ACCx. */
|
||||||
|
{"movel", one(0xa9c0), one(0xffff), "G-C-", mcfemac }, /* macsr,ccr. */
|
||||||
|
{"movel", one(0xa100), one(0xf9f0), "RseF", mcfemac }, /* Rx,ACCx. */
|
||||||
|
{"movel", one(0xa13c), one(0xf9ff), "#leF", mcfemac }, /* #,ACCx. */
|
||||||
|
{"movel", one(0xab00), one(0xfbc0), "Rsg]", mcfemac }, /* Rx,ACCEXTx. */
|
||||||
|
{"movel", one(0xab3c), one(0xfbff), "#lg]", mcfemac }, /* #,ACCEXTx. */
|
||||||
|
{"movel", one(0xa900), one(0xffc0), "RsG-", mcfemac }, /* Rx,macsr. */
|
||||||
|
{"movel", one(0xa93c), one(0xffff), "#lG-", mcfemac }, /* #,macsr. */
|
||||||
|
{"movel", one(0xad00), one(0xffc0), "RsH-", mcfemac }, /* Rx,mask. */
|
||||||
|
{"movel", one(0xad3c), one(0xffff), "#lH-", mcfemac }, /* #,mask. */
|
||||||
|
|
||||||
{"move", one(0030000), one(0170000), "*w%d", m68000up },
|
{"move", one(0030000), one(0170000), "*w%d", m68000up },
|
||||||
{"move", one(0030000), one(0170000), "ms%d", mcf },
|
{"move", one(0030000), one(0170000), "ms%d", mcf },
|
||||||
|
@ -1637,44 +1643,33 @@ const struct m68k_opcode m68k_opcodes[] =
|
||||||
{"move16", one(0xf610), one(0xfff8), "as_L", m68040up },
|
{"move16", one(0xf610), one(0xfff8), "as_L", m68040up },
|
||||||
{"move16", one(0xf618), one(0xfff8), "_Las", m68040up },
|
{"move16", one(0xf618), one(0xfff8), "_Las", m68040up },
|
||||||
|
|
||||||
/* FIXME: add MAM mode (`&' after <ea> operand) / remove MSACM */
|
{"msacw", two(0xa000, 0x0100), two(0xf1b0, 0x0800), "uMum", mcfmac },
|
||||||
{"msacw", two(0120000, 0000400), two(0170660, 0005400), "uMum", mcf5206eup },
|
{"msacw", two(0xa000, 0x0100), two(0xf1b0, 0x0b00), "uMumiI", mcfmac },
|
||||||
{"msacw", two(0120000, 0001400), two(0170660, 0005400), "uMumMh", mcf5206eup },
|
{"msacw", two(0xa000, 0x0300), two(0xf1b0, 0x0b00), "uMumMh", mcfmac },
|
||||||
{"msacw", two(0120220, 0000400), two(0170670, 0005460), "uNuoasRn", mcf5206eup },
|
{"msacw", two(0xa080, 0x0100), two(0xf180, 0x0f30), "uNuo4/Rn", mcfmac },
|
||||||
{"msacw", two(0120230, 0000400), two(0170670, 0005460), "uNuo+sRn", mcf5206eup },
|
{"msacw", two(0xa080, 0x0100), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac },
|
||||||
{"msacw", two(0120240, 0000400), two(0170670, 0005460), "uNuo-sRn", mcf5206eup },
|
{"msacw", two(0xa080, 0x0300), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac },
|
||||||
{"msacw", two(0120250, 0000400), two(0170670, 0005460), "uNuodsRn", mcf5206eup },
|
|
||||||
{"msacw", two(0120220, 0001400), two(0170670, 0005460), "uNuoMhasRn", mcf5206eup },
|
|
||||||
{"msacw", two(0120230, 0001400), two(0170670, 0005460), "uNuoMh+sRn", mcf5206eup },
|
|
||||||
{"msacw", two(0120240, 0001400), two(0170670, 0005460), "uNuoMh-sRn", mcf5206eup },
|
|
||||||
{"msacw", two(0120250, 0001400), two(0170670, 0005460), "uNuoMhdsRn", mcf5206eup },
|
|
||||||
{"msacmw", two(0120220, 0000440), two(0170670, 0005460), "uNuoasRn", mcf5206eup },
|
|
||||||
{"msacmw", two(0120230, 0000440), two(0170670, 0005460), "uNuo+sRn", mcf5206eup },
|
|
||||||
{"msacmw", two(0120240, 0000440), two(0170670, 0005460), "uNuo-sRn", mcf5206eup },
|
|
||||||
{"msacmw", two(0120250, 0000440), two(0170670, 0005460), "uNuodsRn", mcf5206eup },
|
|
||||||
{"msacmw", two(0120220, 0001440), two(0170670, 0005460), "uNuoMhasRn", mcf5206eup },
|
|
||||||
{"msacmw", two(0120230, 0001440), two(0170670, 0005460), "uNuoMh+sRn", mcf5206eup },
|
|
||||||
{"msacmw", two(0120240, 0001440), two(0170670, 0005460), "uNuoMh-sRn", mcf5206eup },
|
|
||||||
{"msacmw", two(0120250, 0001440), two(0170670, 0005460), "uNuoMhdsRn", mcf5206eup },
|
|
||||||
|
|
||||||
{"msacl", two(0120000, 0004400), two(0170660, 0005400), "RsRm", mcf5206eup },
|
{"msacw", two(0xa000, 0x0100), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX. */
|
||||||
{"msacl", two(0120000, 0005400), two(0170660, 0005400), "RsRmMh", mcf5206eup },
|
{"msacw", two(0xa000, 0x0100), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX. */
|
||||||
{"msacl", two(0120220, 0004400), two(0170670, 0005460), "R3R1asRn", mcf5206eup },
|
{"msacw", two(0xa000, 0x0300), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX. */
|
||||||
{"msacl", two(0120230, 0004400), two(0170670, 0005460), "R3R1+sRn", mcf5206eup },
|
{"msacw", two(0xa000, 0x0100), two(0xf100, 0x0f00), "uMum4/RneG", mcfemac },/* Ry,Rx,<ea>,accX. */
|
||||||
{"msacl", two(0120240, 0004400), two(0170670, 0005460), "R3R1-sRn", mcf5206eup },
|
{"msacw", two(0xa000, 0x0100), two(0xf100, 0x0900), "uMumiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX. */
|
||||||
{"msacl", two(0120250, 0004400), two(0170670, 0005460), "R3R1dsRn", mcf5206eup },
|
{"msacw", two(0xa000, 0x0300), two(0xf100, 0x0900), "uMumMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX. */
|
||||||
{"msacl", two(0120220, 0005400), two(0170670, 0005460), "R3R1MhasRn", mcf5206eup },
|
|
||||||
{"msacl", two(0120230, 0005400), two(0170670, 0005460), "R3R1Mh+sRn", mcf5206eup },
|
{"msacl", two(0xa000, 0x0900), two(0xf1b0, 0x0800), "RMRm", mcfmac },
|
||||||
{"msacl", two(0120240, 0005400), two(0170670, 0005460), "R3R1Mh-sRn", mcf5206eup },
|
{"msacl", two(0xa000, 0x0900), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac },
|
||||||
{"msacl", two(0120250, 0005400), two(0170670, 0005460), "R3R1MhdsRn", mcf5206eup },
|
{"msacl", two(0xa000, 0x0b00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac },
|
||||||
{"msacml", two(0120220, 0004440), two(0170670, 0005460), "R3R1asRn", mcf5206eup },
|
{"msacl", two(0xa080, 0x0900), two(0xf180, 0x0f30), "RNRo4/Rn", mcfmac },
|
||||||
{"msacml", two(0120230, 0004440), two(0170670, 0005460), "R3R1+sRn", mcf5206eup },
|
{"msacl", two(0xa080, 0x0900), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac },
|
||||||
{"msacml", two(0120240, 0004440), two(0170670, 0005460), "R3R1-sRn", mcf5206eup },
|
{"msacl", two(0xa080, 0x0b00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac },
|
||||||
{"msacml", two(0120250, 0004440), two(0170670, 0005460), "R3R1dsRn", mcf5206eup },
|
|
||||||
{"msacml", two(0120220, 0005440), two(0170670, 0005460), "R3R1MhasRn", mcf5206eup },
|
{"msacl", two(0xa000, 0x0900), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
|
||||||
{"msacml", two(0120230, 0005440), two(0170670, 0005460), "R3R1Mh+sRn", mcf5206eup },
|
{"msacl", two(0xa000, 0x0900), two(0xf130, 0x0900), "RMRmiIeH", mcfemac },
|
||||||
{"msacml", two(0120240, 0005440), two(0170670, 0005460), "R3R1Mh-sRn", mcf5206eup },
|
{"msacl", two(0xa000, 0x0b00), two(0xf130, 0x0900), "RMRmMheH", mcfemac },
|
||||||
{"msacml", two(0120250, 0005440), two(0170670, 0005460), "R3R1MhdsRn", mcf5206eup },
|
{"msacl", two(0xa000, 0x0900), two(0xf100, 0x0f00), "R3R14/RneG", mcfemac },
|
||||||
|
{"msacl", two(0xa000, 0x0900), two(0xf100, 0x0900), "R3R1iI4/RneG", mcfemac },
|
||||||
|
{"msacl", two(0xa000, 0x0b00), two(0xf100, 0x0900), "R3R1Mh4/RneG", mcfemac },
|
||||||
|
|
||||||
{"mulsw", one(0140700), one(0170700), ";wDd", m68000up|mcf },
|
{"mulsw", one(0140700), one(0170700), ";wDd", m68000up|mcf },
|
||||||
{"mulsl", two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
|
{"mulsl", two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
|
||||||
|
|
Loading…
Reference in a new issue