Add support for ColdFire MAC instructions and tidy up support for other m68k
variants.
This commit is contained in:
parent
69b975477d
commit
fd99574ba5
|
@ -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>
|
||||
|
||||
* coff-mips.c (bfd_mips_ecoff_create_embedded_relocs): Remove.
|
||||
|
|
|
@ -85,6 +85,7 @@ DESCRIPTION
|
|||
.#define bfd_mach_mcf5307 11
|
||||
.#define bfd_mach_mcf5407 12
|
||||
.#define bfd_mach_mcf528x 13
|
||||
.#define bfd_mach_mcfv4e 14
|
||||
. bfd_arch_vax, {* DEC Vax *}
|
||||
. bfd_arch_i960, {* Intel 960 *}
|
||||
. {* The order of the following is important.
|
||||
|
|
|
@ -1491,6 +1491,7 @@ enum bfd_architecture
|
|||
#define bfd_mach_mcf5307 11
|
||||
#define bfd_mach_mcf5407 12
|
||||
#define bfd_mach_mcf528x 13
|
||||
#define bfd_mach_mcfv4e 14
|
||||
bfd_arch_vax, /* DEC Vax */
|
||||
bfd_arch_i960, /* Intel 960 */
|
||||
/* The order of the following is important.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* BFD library support routines for architectures.
|
||||
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.
|
||||
|
||||
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_mcf5407, "m68k:5407", FALSE, &arch_info_struct[11]),
|
||||
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 =
|
||||
|
|
|
@ -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>
|
||||
|
||||
* config/tc-arm.h (enum mstate): Move here, add MAP_UNDEFINED
|
||||
|
|
3
gas/NEWS
3
gas/NEWS
|
@ -1,5 +1,8 @@
|
|||
-*- text -*-
|
||||
|
||||
* Support for ColdFire EMAC instructions added and Motorola syntax for MAC/EMAC
|
||||
instrucitons.
|
||||
|
||||
* The MIPS -membedded-pic option (Embedded-PIC code generation) is
|
||||
deprecated and will be removed in a future release.
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* m68k-parse.h -- header file for m68k assembler
|
||||
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.
|
||||
|
||||
|
@ -84,7 +84,12 @@ enum m68k_register
|
|||
ZPC, /* Hack for Program space, but 0 addressing */
|
||||
SR, /* Status 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 */
|
||||
MASK, /* Modulus Reg */
|
||||
|
||||
|
@ -295,6 +300,8 @@ enum m68k_operand_type
|
|||
BASE,
|
||||
POST,
|
||||
PRE,
|
||||
LSH, /* MAC/EMAC scalefactor '<<'. */
|
||||
RSH, /* MAC/EMAC scalefactor '>>'. */
|
||||
REGLST
|
||||
};
|
||||
|
||||
|
@ -322,6 +329,9 @@ struct m68k_op
|
|||
|
||||
/* 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) */
|
||||
|
|
|
@ -98,6 +98,7 @@ static struct m68k_op *op;
|
|||
struct m68k_exp exp;
|
||||
unsigned long mask;
|
||||
int onereg;
|
||||
int trailing_ampersand;
|
||||
}
|
||||
|
||||
%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 <mask> reglist ireglist reglistpair
|
||||
%type <onereg> reglistreg
|
||||
%type <trailing_ampersand> optional_ampersand
|
||||
|
||||
%%
|
||||
|
||||
|
@ -116,14 +118,35 @@ static struct m68k_op *op;
|
|||
|
||||
operand:
|
||||
generic_operand
|
||||
| motorola_operand
|
||||
| motorola_operand optional_ampersand
|
||||
{
|
||||
op->trailing_ampersand = $2;
|
||||
}
|
||||
| mit_operand
|
||||
;
|
||||
|
||||
/* A trailing ampersand(for MAC/EMAC mask addressing). */
|
||||
optional_ampersand:
|
||||
/* empty */
|
||||
{ $$ = 0; }
|
||||
| '&'
|
||||
{ $$ = 1; }
|
||||
;
|
||||
|
||||
/* A generic operand. */
|
||||
|
||||
generic_operand:
|
||||
DR
|
||||
'<' '<'
|
||||
{
|
||||
op->mode = LSH;
|
||||
}
|
||||
|
||||
| '>' '>'
|
||||
{
|
||||
op->mode = RSH;
|
||||
}
|
||||
|
||||
| DR
|
||||
{
|
||||
op->mode = DREG;
|
||||
op->reg = $1;
|
||||
|
@ -757,12 +780,14 @@ yylex ()
|
|||
case '/':
|
||||
case '[':
|
||||
case ']':
|
||||
case '<':
|
||||
case '>':
|
||||
return *str++;
|
||||
case '+':
|
||||
/* It so happens that a '+' can only appear at the end of an
|
||||
operand. If it appears anywhere else, it must be a unary
|
||||
plus on an expression. */
|
||||
if (str[1] == '\0')
|
||||
operand, or if it is trailed by an '&'(see mac load insn).
|
||||
If it appears anywhere else, it must be a unary. */
|
||||
if (str[1] == '\0' || (str[1] == '&' && str[2] == '\0'))
|
||||
return *str++;
|
||||
break;
|
||||
case '-':
|
||||
|
|
|
@ -371,52 +371,52 @@ struct m68k_cpu
|
|||
|
||||
static const struct m68k_cpu archs[] =
|
||||
{
|
||||
{ m68000, "68000", 0 },
|
||||
{ m68010, "68010", 0 },
|
||||
{ m68020, "68020", 0 },
|
||||
{ m68030, "68030", 0 },
|
||||
{ m68040, "68040", 0 },
|
||||
{ m68060, "68060", 0 },
|
||||
{ cpu32, "cpu32", 0 },
|
||||
{ m68881, "68881", 0 },
|
||||
{ m68851, "68851", 0 },
|
||||
{ mcf5200, "5200", 0 },
|
||||
{ mcf5206e,"5206e", 0 },
|
||||
{ mcf528x, "528x", 0 },
|
||||
{ mcf5307, "5307", 0 },
|
||||
{ mcf5407, "5407", 0 },
|
||||
{ mcfv4e, "cfv4e", 0 },
|
||||
{ m68000, "68000", 0 },
|
||||
{ m68010, "68010", 0 },
|
||||
{ m68020, "68020", 0 },
|
||||
{ m68030, "68030", 0 },
|
||||
{ m68040, "68040", 0 },
|
||||
{ m68060, "68060", 0 },
|
||||
{ cpu32, "cpu32", 0 },
|
||||
{ m68881, "68881", 0 },
|
||||
{ m68851, "68851", 0 },
|
||||
{ mcf5200, "5200", 0 },
|
||||
{ mcf5206e, "5206e", 0 },
|
||||
{ mcf528x|mcfmac, "528x", 0 },
|
||||
{ mcf5307|mcfmac, "5307", 0 },
|
||||
{ mcf5407|mcfmac, "5407", 0 },
|
||||
{ mcfv4e|mcfemac, "cfv4e", 0 },
|
||||
/* Aliases (effectively, so far as gas is concerned) for the above
|
||||
cpus. */
|
||||
{ m68020, "68k", 1 },
|
||||
{ m68000, "68008", 1 },
|
||||
{ m68000, "68302", 1 },
|
||||
{ m68000, "68306", 1 },
|
||||
{ m68000, "68307", 1 },
|
||||
{ m68000, "68322", 1 },
|
||||
{ m68000, "68356", 1 },
|
||||
{ m68000, "68ec000", 1 },
|
||||
{ m68000, "68hc000", 1 },
|
||||
{ m68000, "68hc001", 1 },
|
||||
{ m68020, "68ec020", 1 },
|
||||
{ m68030, "68ec030", 1 },
|
||||
{ m68040, "68ec040", 1 },
|
||||
{ m68060, "68ec060", 1 },
|
||||
{ cpu32, "68330", 1 },
|
||||
{ cpu32, "68331", 1 },
|
||||
{ cpu32, "68332", 1 },
|
||||
{ cpu32, "68333", 1 },
|
||||
{ cpu32, "68334", 1 },
|
||||
{ cpu32, "68336", 1 },
|
||||
{ cpu32, "68340", 1 },
|
||||
{ cpu32, "68341", 1 },
|
||||
{ cpu32, "68349", 1 },
|
||||
{ cpu32, "68360", 1 },
|
||||
{ m68881, "68882", 1 },
|
||||
{ mcf5200, "5202", 1 },
|
||||
{ mcf5200, "5204", 1 },
|
||||
{ mcf5200, "5206", 1 },
|
||||
{ mcf5407, "cfv4", 1 },
|
||||
{ m68020, "68k", 1 },
|
||||
{ m68000, "68008", 1 },
|
||||
{ m68000, "68302", 1 },
|
||||
{ m68000, "68306", 1 },
|
||||
{ m68000, "68307", 1 },
|
||||
{ m68000, "68322", 1 },
|
||||
{ m68000, "68356", 1 },
|
||||
{ m68000, "68ec000", 1 },
|
||||
{ m68000, "68hc000", 1 },
|
||||
{ m68000, "68hc001", 1 },
|
||||
{ m68020, "68ec020", 1 },
|
||||
{ m68030, "68ec030", 1 },
|
||||
{ m68040, "68ec040", 1 },
|
||||
{ m68060, "68ec060", 1 },
|
||||
{ cpu32, "68330", 1 },
|
||||
{ cpu32, "68331", 1 },
|
||||
{ cpu32, "68332", 1 },
|
||||
{ cpu32, "68333", 1 },
|
||||
{ cpu32, "68334", 1 },
|
||||
{ cpu32, "68336", 1 },
|
||||
{ cpu32, "68340", 1 },
|
||||
{ cpu32, "68341", 1 },
|
||||
{ cpu32, "68349", 1 },
|
||||
{ cpu32, "68360", 1 },
|
||||
{ m68881, "68882", 1 },
|
||||
{ mcf5200, "5202", 1 },
|
||||
{ mcf5200, "5204", 1 },
|
||||
{ mcf5200, "5206", 1 },
|
||||
{ mcf5407|mcfmac, "cfv4", 1 },
|
||||
};
|
||||
|
||||
static const int n_archs = sizeof (archs) / sizeof (archs[0]);
|
||||
|
@ -1505,6 +1505,14 @@ m68k_ip (instring)
|
|||
++losing;
|
||||
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 */
|
||||
if (opP->mode != ABSL
|
||||
|| (flag_long_jumps
|
||||
|
@ -1552,6 +1560,12 @@ m68k_ip (instring)
|
|||
losing++;
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
if (opP->reg != ACC && opP->reg != ACC1
|
||||
&& opP->reg != ACC2 && opP->reg != ACC3)
|
||||
losing++;
|
||||
break;
|
||||
|
||||
case 'F':
|
||||
if (opP->mode != FPREG)
|
||||
losing++;
|
||||
|
@ -1562,6 +1576,11 @@ m68k_ip (instring)
|
|||
losing++;
|
||||
break;
|
||||
|
||||
case 'g':
|
||||
if (opP->reg != ACCEXT01 && opP->reg != ACCEXT23)
|
||||
losing++;
|
||||
break;
|
||||
|
||||
case 'H':
|
||||
if (opP->reg != MASK)
|
||||
losing++;
|
||||
|
@ -1574,6 +1593,11 @@ m68k_ip (instring)
|
|||
losing++;
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
if (opP->mode != LSH && opP->mode != RSH)
|
||||
losing++;
|
||||
break;
|
||||
|
||||
case 'J':
|
||||
if (opP->mode != CONTROL
|
||||
|| opP->reg < USP
|
||||
|
@ -1994,6 +2018,7 @@ m68k_ip (instring)
|
|||
case 'w':
|
||||
case 'y':
|
||||
case 'z':
|
||||
case '4':
|
||||
#ifndef NO_68851
|
||||
case '|':
|
||||
#endif
|
||||
|
@ -2519,6 +2544,16 @@ m68k_ip (instring)
|
|||
as_bad (_("unknown/incorrect operand"));
|
||||
/* 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);
|
||||
break;
|
||||
|
||||
|
@ -2737,6 +2772,10 @@ m68k_ip (instring)
|
|||
install_operand (s[1], opP->reg - DATA);
|
||||
break;
|
||||
|
||||
case 'e': /* EMAC ACCx, reg/reg. */
|
||||
install_operand (s[1], opP->reg - ACC);
|
||||
break;
|
||||
|
||||
case 'E': /* Ignore it. */
|
||||
break;
|
||||
|
||||
|
@ -2744,6 +2783,10 @@ m68k_ip (instring)
|
|||
install_operand (s[1], opP->reg - FP0);
|
||||
break;
|
||||
|
||||
case 'g': /* EMAC ACCEXTx. */
|
||||
install_operand (s[1], opP->reg - ACCEXT01);
|
||||
break;
|
||||
|
||||
case 'G': /* Ignore it. */
|
||||
case 'H':
|
||||
break;
|
||||
|
@ -2753,6 +2796,10 @@ m68k_ip (instring)
|
|||
install_operand (s[1], tmpreg);
|
||||
break;
|
||||
|
||||
case 'i': /* MAC/EMAC scale factor. */
|
||||
install_operand (s[1], opP->mode == LSH ? 0x1 : 0x3);
|
||||
break;
|
||||
|
||||
case 'J': /* JF foo. */
|
||||
switch (opP->reg)
|
||||
{
|
||||
|
@ -3286,25 +3333,46 @@ install_operand (mode, val)
|
|||
the_ins.opcode[0] |= ((val & 0x7) << 9);
|
||||
the_ins.opcode[1] |= ((val & 0x10) << (7 - 4));
|
||||
break;
|
||||
case 'n':
|
||||
case 'n': /* MAC/EMAC Rx on !load. */
|
||||
the_ins.opcode[0] |= ((val & 0x8) << (6 - 3));
|
||||
the_ins.opcode[0] |= ((val & 0x7) << 9);
|
||||
the_ins.opcode[1] |= ((val & 0x10) << (7 - 4));
|
||||
break;
|
||||
case 'o':
|
||||
case 'o': /* MAC/EMAC Rx on load. */
|
||||
the_ins.opcode[1] |= val << 12;
|
||||
the_ins.opcode[1] |= ((val & 0x10) << (7 - 4));
|
||||
break;
|
||||
case 'M':
|
||||
case 'M': /* MAC/EMAC Ry on !load. */
|
||||
the_ins.opcode[0] |= (val & 0xF);
|
||||
the_ins.opcode[1] |= ((val & 0x10) << (6 - 4));
|
||||
break;
|
||||
case 'N':
|
||||
case 'N': /* MAC/EMAC Ry on load. */
|
||||
the_ins.opcode[1] |= (val & 0xF);
|
||||
the_ins.opcode[1] |= ((val & 0x10) << (6 - 4));
|
||||
break;
|
||||
case 'h':
|
||||
the_ins.opcode[1] |= ((val != 1) << 10);
|
||||
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':
|
||||
default:
|
||||
as_fatal (_("failed sanity check."));
|
||||
|
@ -3318,6 +3386,11 @@ install_gen_operand (mode, val)
|
|||
{
|
||||
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':
|
||||
the_ins.opcode[0] |= val;
|
||||
break;
|
||||
|
@ -3507,6 +3580,12 @@ static const struct init_entry init_table[] =
|
|||
{ "cc", CCR },
|
||||
|
||||
{ "acc", ACC },
|
||||
{ "acc0", ACC },
|
||||
{ "acc1", ACC1 },
|
||||
{ "acc2", ACC2 },
|
||||
{ "acc3", ACC3 },
|
||||
{ "accext01", ACCEXT01 },
|
||||
{ "accext23", ACCEXT23 },
|
||||
{ "macsr", MACSR },
|
||||
{ "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>
|
||||
|
||||
* 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 fmoveml
|
||||
run_dump_test mcf-mov3q
|
||||
run_dump_test mcf-mac
|
||||
run_dump_test mcf-emac
|
||||
|
||||
set testname "68000 operands"
|
||||
gas_run "operands.s" "-m68000" "2>err.out"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
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>
|
||||
|
||||
* 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.
|
||||
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.
|
||||
|
||||
|
@ -42,6 +42,8 @@
|
|||
#define mcf5407 0x1000
|
||||
#define mcfv4e 0x2000
|
||||
#define mcf528x 0x4000
|
||||
#define mcfmac 0x8000
|
||||
#define mcfemac 0x10000
|
||||
|
||||
/* Handy aliases. */
|
||||
#define m68040up (m68040 | m68060)
|
||||
|
@ -99,7 +101,7 @@ struct m68k_opcode_alias
|
|||
operand; the second, the place it is stored. */
|
||||
|
||||
/* Kinds of operands:
|
||||
Characters used: AaBbCcDdEFfGHIJkLlMmnOopQqRrSsTtU VvWwXxYyZz0123|*~%;@!&$?/<>#^+-
|
||||
Characters used: AaBbCcDdEeFfGgHIiJkLlMmnOopQqRrSsTtU VvWwXxYyZz01234|*~%;@!&$?/<>#^+-
|
||||
|
||||
D data 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.
|
||||
S the SR. 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.
|
||||
G the MACSR. No need to store, just as with CCR.
|
||||
E the MAC ACC. 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.
|
||||
i the MAC/EMAC scale factor.
|
||||
|
||||
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
|
||||
|
@ -230,7 +235,9 @@ struct m68k_opcode_alias
|
|||
w (modes 2-5,7.2)
|
||||
y (modes 2,5)
|
||||
z (modes 2,5,7.2)
|
||||
x mov3q immediate operand. */
|
||||
x mov3q immediate operand.
|
||||
4 (modes 2,3,4,5)
|
||||
*/
|
||||
|
||||
/* For the 68851: */
|
||||
/* 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:
|
||||
Characters used: BbCcDdghijkLlMmNnostWw123456789
|
||||
Characters used: BbCcDdFfGgHhIijkLlMmNnostWw123456789/
|
||||
|
||||
s source, low bits of 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
|
||||
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
|
||||
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[];
|
||||
|
|
|
@ -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>
|
||||
|
||||
* sparc-opc.c (fmoviccx, fmovfccx, fmovccx): Define.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Print Motorola 68k instructions.
|
||||
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.
|
||||
|
||||
This file is free software; you can redistribute it and/or modify
|
||||
|
@ -264,16 +264,19 @@ print_insn_m68k (memaddr, info)
|
|||
arch_mask = mcf5200;
|
||||
break;
|
||||
case bfd_mach_mcf528x:
|
||||
arch_mask = mcf528x;
|
||||
arch_mask = mcf528x | mcfmac;
|
||||
break;
|
||||
case bfd_mach_mcf5206e:
|
||||
arch_mask = mcf5206e;
|
||||
arch_mask = mcf5206e | mcfmac;
|
||||
break;
|
||||
case bfd_mach_mcf5307:
|
||||
arch_mask = mcf5307;
|
||||
arch_mask = mcf5307 | mcfmac;
|
||||
break;
|
||||
case bfd_mach_mcf5407:
|
||||
arch_mask = mcf5407;
|
||||
arch_mask = mcf5407 | mcfmac;
|
||||
break;
|
||||
case bfd_mach_mcfv4e:
|
||||
arch_mask = mcfv4e | mcfemac;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -736,6 +739,24 @@ print_insn_arg (d, buffer, p0, addr, info)
|
|||
fpcr_names[fetch_arg (buffer, place, 3, info)]);
|
||||
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':
|
||||
/* Get coprocessor ID... */
|
||||
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);
|
||||
break;
|
||||
|
||||
case '4':
|
||||
case '*':
|
||||
case '~':
|
||||
case '%':
|
||||
|
@ -881,6 +903,16 @@ print_insn_arg (d, buffer, p0, addr, info)
|
|||
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;
|
||||
|
||||
case 'L':
|
||||
|
@ -1075,6 +1107,34 @@ fetch_arg (buffer, code, bits, info)
|
|||
register int val = 0;
|
||||
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':
|
||||
val = buffer[1];
|
||||
break;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Opcode table for m680[012346]0/m6888[12]/m68851/mcf5200.
|
||||
Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
2000, 2001, 2003
|
||||
2000, 2001, 2003, 2004
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
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(0160250), one(0170770), "DdDs", m68000up | mcf },
|
||||
|
||||
/* FIXME: add MAM mode (`&' after <ea> operand) / remove MACM */
|
||||
{"macw", two(0120000, 0000000), two(0170660, 0005400), "uMum", mcf5206eup },
|
||||
{"macw", two(0120000, 0001000), two(0170660, 0005400), "uMumMh",mcf5206eup },
|
||||
{"macw", two(0120220, 0000000), two(0170670, 0005460), "uNuoasRn", mcf5206eup },
|
||||
{"macw", two(0120230, 0000000), two(0170670, 0005460), "uNuo+sRn", mcf5206eup },
|
||||
{"macw", two(0120240, 0000000), two(0170670, 0005460), "uNuo-sRn", mcf5206eup },
|
||||
{"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 },
|
||||
{"macw", two(0xa000, 0x0000), two(0xf1b0, 0x0800), "uMum", mcfmac },
|
||||
{"macw", two(0xa000, 0x0000), two(0xf1b0, 0x0b00), "uMumiI", mcfmac },
|
||||
{"macw", two(0xa000, 0x0200), two(0xf1b0, 0x0b00), "uMumMh", mcfmac },
|
||||
{"macw", two(0xa080, 0x0000), two(0xf180, 0x0f30), "uNuo4/Rn", mcfmac },
|
||||
{"macw", two(0xa080, 0x0000), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac },
|
||||
{"macw", two(0xa080, 0x0200), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac },
|
||||
|
||||
{"macl", two(0120000, 0004000), two(0170660, 0005400), "RsRm", mcf5206eup },
|
||||
{"macl", two(0120000, 0005000), two(0170660, 0005400), "RsRmMh", mcf5206eup },
|
||||
{"macl", two(0120220, 0004000), two(0170670, 0005460), "R3R1asRn", mcf5206eup },
|
||||
{"macl", two(0120230, 0004000), two(0170670, 0005460), "R3R1+sRn", mcf5206eup },
|
||||
{"macl", two(0120240, 0004000), two(0170670, 0005460), "R3R1-sRn", mcf5206eup },
|
||||
{"macl", two(0120250, 0004000), two(0170670, 0005460), "R3R1dsRn", mcf5206eup },
|
||||
{"macl", two(0120220, 0005000), two(0170670, 0005460), "R3R1MhasRn", mcf5206eup },
|
||||
{"macl", two(0120230, 0005000), two(0170670, 0005460), "R3R1Mh+sRn", mcf5206eup },
|
||||
{"macl", two(0120240, 0005000), two(0170670, 0005460), "R3R1Mh-sRn", mcf5206eup },
|
||||
{"macl", two(0120250, 0005000), two(0170670, 0005460), "R3R1MhdsRn", mcf5206eup },
|
||||
{"macml", two(0120220, 0004040), two(0170670, 0005460), "R3R1asRn", mcf5206eup },
|
||||
{"macml", two(0120230, 0004040), two(0170670, 0005460), "R3R1+sRn", mcf5206eup },
|
||||
{"macml", two(0120240, 0004040), two(0170670, 0005460), "R3R1-sRn", mcf5206eup },
|
||||
{"macml", two(0120250, 0004040), two(0170670, 0005460), "R3R1dsRn", mcf5206eup },
|
||||
{"macml", two(0120220, 0005040), two(0170670, 0005460), "R3R1MhasRn", mcf5206eup },
|
||||
{"macml", two(0120230, 0005040), two(0170670, 0005460), "R3R1Mh+sRn", mcf5206eup },
|
||||
{"macml", two(0120240, 0005040), two(0170670, 0005460), "R3R1Mh-sRn", mcf5206eup },
|
||||
{"macml", two(0120250, 0005040), two(0170670, 0005460), "R3R1MhdsRn", mcf5206eup },
|
||||
{"macw", two(0xa000, 0x0000), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX. */
|
||||
{"macw", two(0xa000, 0x0000), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX. */
|
||||
{"macw", two(0xa000, 0x0200), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX. */
|
||||
{"macw", two(0xa000, 0x0000), two(0xf100, 0x0f00), "uMum4/RneG", mcfemac },/* Ry,Rx,<ea>,accX. */
|
||||
{"macw", two(0xa000, 0x0000), two(0xf100, 0x0900), "uMumiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX. */
|
||||
{"macw", two(0xa000, 0x0200), two(0xf100, 0x0900), "uMumMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX. */
|
||||
|
||||
{"macl", two(0xa000, 0x0800), two(0xf1b0, 0x0800), "RMRm", mcfmac },
|
||||
{"macl", two(0xa000, 0x0800), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac },
|
||||
{"macl", two(0xa000, 0x0a00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac },
|
||||
{"macl", two(0xa080, 0x0800), two(0xf180, 0x0f30), "RNRo4/Rn", mcfmac },
|
||||
{"macl", two(0xa080, 0x0800), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac },
|
||||
{"macl", two(0xa080, 0x0a00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac },
|
||||
|
||||
{"macl", two(0xa000, 0x0800), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
|
||||
{"macl", two(0xa000, 0x0800), two(0xf130, 0x0900), "RMRmiIeH", mcfemac },
|
||||
{"macl", two(0xa000, 0x0a00), two(0xf130, 0x0900), "RMRmMheH", mcfemac },
|
||||
{"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
|
||||
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 },
|
||||
{"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), "R1#j", m68010up | mcf },
|
||||
{"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(0047140), one(0177770), "AsUd", m68000up | mcfv4e },
|
||||
{"movel", one(0047150), one(0177770), "UdAs", m68000up | mcfv4e },
|
||||
{"movel", one(0120600), one(0177760), "EsRs", mcf5206eup },
|
||||
{"movel", one(0120400), one(0177760), "RsEs", mcf5206eup },
|
||||
{"movel", one(0120474), one(0177777), "#lEs", mcf5206eup },
|
||||
{"movel", one(0124600), one(0177760), "GsRs", mcf5206eup },
|
||||
{"movel", one(0124400), one(0177760), "RsGs", mcf5206eup },
|
||||
{"movel", one(0124474), one(0177777), "#lGs", mcf5206eup },
|
||||
{"movel", one(0126600), one(0177760), "HsRs", mcf5206eup },
|
||||
{"movel", one(0126400), one(0177760), "RsHs", mcf5206eup },
|
||||
{"movel", one(0126474), one(0177777), "#lHs", mcf5206eup },
|
||||
{"movel", one(0124700), one(0177777), "GsCs", mcf5206eup },
|
||||
{"movel", one(0120600), one(0177760), "EsRs", mcfmac },
|
||||
{"movel", one(0120400), one(0177760), "RsEs", mcfmac },
|
||||
{"movel", one(0120474), one(0177777), "#lEs", mcfmac },
|
||||
{"movel", one(0124600), one(0177760), "GsRs", mcfmac },
|
||||
{"movel", one(0124400), one(0177760), "RsGs", mcfmac },
|
||||
{"movel", one(0124474), one(0177777), "#lGs", mcfmac },
|
||||
{"movel", one(0126600), one(0177760), "HsRs", mcfmac },
|
||||
{"movel", one(0126400), one(0177760), "RsHs", mcfmac },
|
||||
{"movel", one(0126474), one(0177777), "#lHs", mcfmac },
|
||||
{"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), "ms%d", mcf },
|
||||
|
@ -1637,44 +1643,33 @@ const struct m68k_opcode m68k_opcodes[] =
|
|||
{"move16", one(0xf610), one(0xfff8), "as_L", m68040up },
|
||||
{"move16", one(0xf618), one(0xfff8), "_Las", m68040up },
|
||||
|
||||
/* FIXME: add MAM mode (`&' after <ea> operand) / remove MSACM */
|
||||
{"msacw", two(0120000, 0000400), two(0170660, 0005400), "uMum", mcf5206eup },
|
||||
{"msacw", two(0120000, 0001400), two(0170660, 0005400), "uMumMh", mcf5206eup },
|
||||
{"msacw", two(0120220, 0000400), two(0170670, 0005460), "uNuoasRn", mcf5206eup },
|
||||
{"msacw", two(0120230, 0000400), two(0170670, 0005460), "uNuo+sRn", mcf5206eup },
|
||||
{"msacw", two(0120240, 0000400), two(0170670, 0005460), "uNuo-sRn", mcf5206eup },
|
||||
{"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 },
|
||||
{"msacw", two(0xa000, 0x0100), two(0xf1b0, 0x0800), "uMum", mcfmac },
|
||||
{"msacw", two(0xa000, 0x0100), two(0xf1b0, 0x0b00), "uMumiI", mcfmac },
|
||||
{"msacw", two(0xa000, 0x0300), two(0xf1b0, 0x0b00), "uMumMh", mcfmac },
|
||||
{"msacw", two(0xa080, 0x0100), two(0xf180, 0x0f30), "uNuo4/Rn", mcfmac },
|
||||
{"msacw", two(0xa080, 0x0100), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac },
|
||||
{"msacw", two(0xa080, 0x0300), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac },
|
||||
|
||||
{"msacl", two(0120000, 0004400), two(0170660, 0005400), "RsRm", mcf5206eup },
|
||||
{"msacl", two(0120000, 0005400), two(0170660, 0005400), "RsRmMh", mcf5206eup },
|
||||
{"msacl", two(0120220, 0004400), two(0170670, 0005460), "R3R1asRn", mcf5206eup },
|
||||
{"msacl", two(0120230, 0004400), two(0170670, 0005460), "R3R1+sRn", mcf5206eup },
|
||||
{"msacl", two(0120240, 0004400), two(0170670, 0005460), "R3R1-sRn", mcf5206eup },
|
||||
{"msacl", two(0120250, 0004400), two(0170670, 0005460), "R3R1dsRn", mcf5206eup },
|
||||
{"msacl", two(0120220, 0005400), two(0170670, 0005460), "R3R1MhasRn", mcf5206eup },
|
||||
{"msacl", two(0120230, 0005400), two(0170670, 0005460), "R3R1Mh+sRn", mcf5206eup },
|
||||
{"msacl", two(0120240, 0005400), two(0170670, 0005460), "R3R1Mh-sRn", mcf5206eup },
|
||||
{"msacl", two(0120250, 0005400), two(0170670, 0005460), "R3R1MhdsRn", mcf5206eup },
|
||||
{"msacml", two(0120220, 0004440), two(0170670, 0005460), "R3R1asRn", mcf5206eup },
|
||||
{"msacml", two(0120230, 0004440), two(0170670, 0005460), "R3R1+sRn", mcf5206eup },
|
||||
{"msacml", two(0120240, 0004440), two(0170670, 0005460), "R3R1-sRn", mcf5206eup },
|
||||
{"msacml", two(0120250, 0004440), two(0170670, 0005460), "R3R1dsRn", mcf5206eup },
|
||||
{"msacml", two(0120220, 0005440), two(0170670, 0005460), "R3R1MhasRn", mcf5206eup },
|
||||
{"msacml", two(0120230, 0005440), two(0170670, 0005460), "R3R1Mh+sRn", mcf5206eup },
|
||||
{"msacml", two(0120240, 0005440), two(0170670, 0005460), "R3R1Mh-sRn", mcf5206eup },
|
||||
{"msacml", two(0120250, 0005440), two(0170670, 0005460), "R3R1MhdsRn", mcf5206eup },
|
||||
{"msacw", two(0xa000, 0x0100), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX. */
|
||||
{"msacw", two(0xa000, 0x0100), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX. */
|
||||
{"msacw", two(0xa000, 0x0300), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX. */
|
||||
{"msacw", two(0xa000, 0x0100), two(0xf100, 0x0f00), "uMum4/RneG", mcfemac },/* Ry,Rx,<ea>,accX. */
|
||||
{"msacw", two(0xa000, 0x0100), two(0xf100, 0x0900), "uMumiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX. */
|
||||
{"msacw", two(0xa000, 0x0300), two(0xf100, 0x0900), "uMumMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX. */
|
||||
|
||||
{"msacl", two(0xa000, 0x0900), two(0xf1b0, 0x0800), "RMRm", mcfmac },
|
||||
{"msacl", two(0xa000, 0x0900), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac },
|
||||
{"msacl", two(0xa000, 0x0b00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac },
|
||||
{"msacl", two(0xa080, 0x0900), two(0xf180, 0x0f30), "RNRo4/Rn", mcfmac },
|
||||
{"msacl", two(0xa080, 0x0900), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac },
|
||||
{"msacl", two(0xa080, 0x0b00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac },
|
||||
|
||||
{"msacl", two(0xa000, 0x0900), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
|
||||
{"msacl", two(0xa000, 0x0900), two(0xf130, 0x0900), "RMRmiIeH", mcfemac },
|
||||
{"msacl", two(0xa000, 0x0b00), two(0xf130, 0x0900), "RMRmMheH", mcfemac },
|
||||
{"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 },
|
||||
{"mulsl", two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
|
||||
|
|
Loading…
Reference in New Issue