* bfd/archures.c (bfd_mach_mcf5200, bfd_mach_mcf5206e,

bfd_mach_mcf5307, bfd_mach_mcf5407, bfd_mach_mcf528x,
	bfd_mach_mcfv4e, bfd_mach_mcf521x, bfd_mach_mcf5249,
	bfd_mach_mcf547x, bfd_mach_mcf548x): Remove.
	(bfd_mach_mcf_isa_a, bfd_mach_mcf_isa_a_div,
	bfd_mach_mcf_isa_a_div_mac, bfd_mach_mcf_isa_a_div_emac,
	bfd_mach_mcf_isa_aplus, bfd_mach_mcf_isa_aplus_mac,
	bfd_mach_mcf_isa_aplus_emac, bfd_mach_mcf_isa_aplus_usp,
	bfd_mach_mcf_isa_aplus_usp_mac, bfd_mach_mcf_isa_aplus_usp_emac,
	bfd_mach_mcf_isa_b, bfd_mach_mcf_isa_b_mac, bfd_mach_mcf_isa_b_emac,
	bfd_mach_mcf_isa_b_usp_float, bfd_mach_mcf_isa_b_usp_float_mac,
	bfd_mach_mcf_isa_b_usp_float_emac): New.
	(bfd_default_scan): Update coldfire mapping.
	* bfd/bfd-in.h (bfd_m68k_mach_to_features,
	bfd_m68k_features_to_mach): Declare.
	* bfd/bfd-in2.h: Rebuilt.
	* bfd/cpu-m68k.c (arch_info_struct): Add new coldfire machines,
	adjust legacy names.
	(m68k_arch_features): New.
	(bfd_m68k_mach_to_features,
	bfd_m68k_features_to_mach): Define.
	* bfd/elf32-m68k.c (elf32_m68k_object_p): New.
	(elf32_m68k_merge_private_bfd_data): Merge the CF EF flags.
	(elf32_m68k_print_private_bfd_data): Print the CF EF flags.
	(elf_backend_object_p): Define.
	* bfd/ieee.c (ieee_write_processor): Update coldfire machines.
	* bfd/libbfd.h: Rebuilt.

	* gas/config/tc-m68k.c (mcf5208_control_regs, mcf5213_control_regs,
	mcf5329_control_regs): New.
	(not_current_architecture, selected_arch, selected_cpu): New.
	(m68k_archs, m68k_extensions): New.
	(archs): Renamed to ...
	(m68k_cpus): ... here.  Adjust.
	(n_arches): Remove.
	(md_pseudo_table): Add arch and cpu directives.
	(find_cf_chip, m68k_ip): Adjust table scanning.
	(no_68851, no_68881): Remove.
	(md_assemble): Lazily initialize.
	(select_control_regs): Adjust cpu names. Add 5208, 5213, 5329.
	(md_init_after_args): Move functionality to m68k_init_arch.
	(mri_chip): Adjust table scanning.
	(md_parse_option): Reimplement 'm' processing to add -march & -mcpu
	options with saner parsing.
	(m68k_lookup_cpu, m68k_set_arch, m68k_set_cpu, m68k_set_extension,
	m68k_init_arch): New.
	(s_m68k_cpu, s_m68k_arch): New.
	(md_show_usage): Adjust.
	(m68k_elf_final_processing): Set CF EF flags.
	* gas/config/tc-m68k.h (m68k_init_after_args): Remove.
	(tc_init_after_args): Remove.
	* gas/doc/c-m68k.texi (M68K-Opts): Document -march, -mcpu options.
	(M68k-Directives): Document .arch and .cpu directives.

	* gas/testsuite/gas/m68k/all.exp: Add arch-cpu-1 test.
	* gas/testsuite/gas/m68k/arch-cpu-1.[sd]: New.

	* include/elf/m68k.h (EF_CPU32, EF_M68000, EF_CFV4E): Rename to ...
	(EF_M68K_CPU32, EF_M68K_M68000, EF_M68K_CFV4E): ... here.
	(EF_M68K_ISA_MASK, EF_M68K_ISA_A, EF_M68K_M68K_ISA_A_PLUS,
	EF_M68K_ISA_B, EF_M68K_HW_DIV, EF_M68K_MAC_MASK, EF_M68K_MAC,
	EF_M68K_EMAC, EF_M68K_USP, EF_M68K_FLOAT): New.

	* include/opcode/m68k.h (m68008, m68ec030, m68882): Remove.
	(m68k_mask): New.
	(cpu_m68k, cpu_cf): New.
	(mcf5200, mcf5206e, mcf521x, mcf5249, mcf528x, mcf5307, mcf5407,
	mcf5470, mcf5480): Rename to cpu_<foo>. Add m680x0 variants.

	* opcodes/m68k-dis.c (print_insn_m68k): Use
	bfd_m68k_mach_to_features.

	* binutils/readelf.c (get_machine_flags): Add logic for EF_M68K flags.
This commit is contained in:
Nathan Sidwell 2006-02-07 19:01:10 +00:00
parent f4d408c653
commit 266abb8f72
21 changed files with 1199 additions and 427 deletions

View File

@ -1,3 +1,33 @@
2006-01-26 Nathan Sidwell <nathan@codesourcery.com>
* archures.c (bfd_mach_mcf5200, bfd_mach_mcf5206e,
bfd_mach_mcf5307, bfd_mach_mcf5407, bfd_mach_mcf528x,
bfd_mach_mcfv4e, bfd_mach_mcf521x, bfd_mach_mcf5249,
bfd_mach_mcf547x, bfd_mach_mcf548x): Remove.
(bfd_mach_mcf_isa_a, bfd_mach_mcf_isa_a_div,
bfd_mach_mcf_isa_a_div_mac, bfd_mach_mcf_isa_a_div_emac,
bfd_mach_mcf_isa_aplus, bfd_mach_mcf_isa_aplus_mac,
bfd_mach_mcf_isa_aplus_emac, bfd_mach_mcf_isa_aplus_usp,
bfd_mach_mcf_isa_aplus_usp_mac, bfd_mach_mcf_isa_aplus_usp_emac,
bfd_mach_mcf_isa_b, bfd_mach_mcf_isa_b_mac, bfd_mach_mcf_isa_b_emac,
bfd_mach_mcf_isa_b_usp_float, bfd_mach_mcf_isa_b_usp_float_mac,
bfd_mach_mcf_isa_b_usp_float_emac): New.
(bfd_default_scan): Update coldfire mapping.
* bfd-in.h (bfd_m68k_mach_to_features,
bfd_m68k_features_to_mach): Declare.
* bfd-in2.h: Rebuilt.
* cpu-m68k.c (arch_info_struct): Add new coldfire machines,
adjust legacy names.
(m68k_arch_features): New.
(bfd_m68k_mach_to_features,
bfd_m68k_features_to_mach): Define.
* elf32-m68k.c (elf32_m68k_object_p): New.
(elf32_m68k_merge_private_bfd_data): Merge the CF EF flags.
(elf32_m68k_print_private_bfd_data): Print the CF EF flags.
(elf_backend_object_p): Define.
* ieee.c (ieee_write_processor): Update coldfire machines.
* libbfd.h: Rebuilt.
2006-02-06 Steve Ellcey <sje@cup.hp.com>
* elfxx-ia64.c (elfNN_ia64_fake_sections): Set SHF_IA_64_HP_TLS

View File

@ -1,6 +1,6 @@
/* BFD library support routines for architectures.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005
2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
Hacked by John Gilmore and Steve Chamberlain of Cygnus Support.
@ -80,16 +80,22 @@ DESCRIPTION
.#define bfd_mach_m68040 6
.#define bfd_mach_m68060 7
.#define bfd_mach_cpu32 8
.#define bfd_mach_mcf5200 9
.#define bfd_mach_mcf5206e 10
.#define bfd_mach_mcf5307 11
.#define bfd_mach_mcf5407 12
.#define bfd_mach_mcf528x 13
.#define bfd_mach_mcfv4e 14
.#define bfd_mach_mcf521x 15
.#define bfd_mach_mcf5249 16
.#define bfd_mach_mcf547x 17
.#define bfd_mach_mcf548x 18
.#define bfd_mach_mcf_isa_a 9
.#define bfd_mach_mcf_isa_a_div 10
.#define bfd_mach_mcf_isa_a_div_mac 11
.#define bfd_mach_mcf_isa_a_div_emac 12
.#define bfd_mach_mcf_isa_aplus 13
.#define bfd_mach_mcf_isa_aplus_mac 14
.#define bfd_mach_mcf_isa_aplus_emac 15
.#define bfd_mach_mcf_isa_aplus_usp 16
.#define bfd_mach_mcf_isa_aplus_usp_mac 17
.#define bfd_mach_mcf_isa_aplus_usp_emac 18
.#define bfd_mach_mcf_isa_b 19
.#define bfd_mach_mcf_isa_b_mac 20
.#define bfd_mach_mcf_isa_b_emac 21
.#define bfd_mach_mcf_isa_b_usp_float 22
.#define bfd_mach_mcf_isa_b_usp_float_mac 23
.#define bfd_mach_mcf_isa_b_usp_float_emac 24
. bfd_arch_vax, {* DEC Vax *}
. bfd_arch_i960, {* Intel 960 *}
. {* The order of the following is important.
@ -1004,23 +1010,23 @@ bfd_default_scan (const bfd_arch_info_type *info, const char *string)
break;
case 5200:
arch = bfd_arch_m68k;
number = bfd_mach_mcf5200;
number = bfd_mach_mcf_isa_a;
break;
case 5206:
arch = bfd_arch_m68k;
number = bfd_mach_mcf5206e;
number = bfd_mach_mcf_isa_a_div_mac;
break;
case 5307:
arch = bfd_arch_m68k;
number = bfd_mach_mcf5307;
number = bfd_mach_mcf_isa_a_div_mac;
break;
case 5407:
arch = bfd_arch_m68k;
number = bfd_mach_mcf5407;
number = bfd_mach_mcf_isa_b_mac;
break;
case 5282:
arch = bfd_arch_m68k;
number = bfd_mach_mcf528x;
number = bfd_mach_mcf_isa_b_usp_float_emac;
break;
case 32000:

View File

@ -1,7 +1,8 @@
/* Main header file for the bfd library -- portable access to object files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
Contributed by Cygnus Support.
@ -706,6 +707,10 @@ extern struct bfd_section *_bfd_elf_tls_setup
extern void _bfd_fix_excluded_sec_syms
(bfd *, struct bfd_link_info *);
extern unsigned bfd_m68k_mach_to_features (int);
extern int bfd_m68k_features_to_mach (unsigned);
extern bfd_boolean bfd_m68k_elf32_create_embedded_relocs
(bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
char **);

View File

@ -714,6 +714,10 @@ extern struct bfd_section *_bfd_elf_tls_setup
extern void _bfd_fix_excluded_sec_syms
(bfd *, struct bfd_link_info *);
extern unsigned bfd_m68k_mach_to_features (int);
extern int bfd_m68k_features_to_mach (unsigned);
extern bfd_boolean bfd_m68k_elf32_create_embedded_relocs
(bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
char **);
@ -1670,16 +1674,22 @@ enum bfd_architecture
#define bfd_mach_m68040 6
#define bfd_mach_m68060 7
#define bfd_mach_cpu32 8
#define bfd_mach_mcf5200 9
#define bfd_mach_mcf5206e 10
#define bfd_mach_mcf5307 11
#define bfd_mach_mcf5407 12
#define bfd_mach_mcf528x 13
#define bfd_mach_mcfv4e 14
#define bfd_mach_mcf521x 15
#define bfd_mach_mcf5249 16
#define bfd_mach_mcf547x 17
#define bfd_mach_mcf548x 18
#define bfd_mach_mcf_isa_a 9
#define bfd_mach_mcf_isa_a_div 10
#define bfd_mach_mcf_isa_a_div_mac 11
#define bfd_mach_mcf_isa_a_div_emac 12
#define bfd_mach_mcf_isa_aplus 13
#define bfd_mach_mcf_isa_aplus_mac 14
#define bfd_mach_mcf_isa_aplus_emac 15
#define bfd_mach_mcf_isa_aplus_usp 16
#define bfd_mach_mcf_isa_aplus_usp_mac 17
#define bfd_mach_mcf_isa_aplus_usp_emac 18
#define bfd_mach_mcf_isa_b 19
#define bfd_mach_mcf_isa_b_mac 20
#define bfd_mach_mcf_isa_b_emac 21
#define bfd_mach_mcf_isa_b_usp_float 22
#define bfd_mach_mcf_isa_b_usp_float_mac 23
#define bfd_mach_mcf_isa_b_usp_float_emac 24
bfd_arch_vax, /* DEC Vax */
bfd_arch_i960, /* Intel 960 */
/* The order of the following is important.

View File

@ -1,6 +1,6 @@
/* BFD library support routines for architectures.
Copyright 1990, 1991, 1992, 1993, 1994, 1997, 1998, 2000, 2001, 2002,
2003, 2004 Free Software Foundation, Inc.
2003, 2004, 2006 Free Software Foundation, Inc.
Hacked by Steve Chamberlain of Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@ -22,6 +22,7 @@
#include "bfd.h"
#include "sysdep.h"
#include "libbfd.h"
#include "opcode/m68k.h"
#define N(name, print,d,next) \
{ 32, 32, 8, bfd_arch_m68k, name, "m68k",print,2,d,bfd_default_compatible,bfd_default_scan, next, }
@ -34,19 +35,149 @@ static const bfd_arch_info_type arch_info_struct[] =
N(bfd_mach_m68020, "m68k:68020", FALSE, &arch_info_struct[4]),
N(bfd_mach_m68030, "m68k:68030", FALSE, &arch_info_struct[5]),
N(bfd_mach_m68040, "m68k:68040", FALSE, &arch_info_struct[6]),
N(bfd_mach_cpu32, "m68k:cpu32", FALSE, &arch_info_struct[7]),
N(bfd_mach_mcf5200, "m68k:5200", FALSE, &arch_info_struct[8]),
N(bfd_mach_mcf5206e,"m68k:5206e", FALSE, &arch_info_struct[9]),
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, &arch_info_struct[13]),
N(bfd_mach_mcf521x, "m68k:521x", FALSE, &arch_info_struct[14]),
N(bfd_mach_mcf5249, "m68k:5249", FALSE, &arch_info_struct[15]),
N(bfd_mach_mcf547x, "m68k:547x", FALSE, &arch_info_struct[16]),
N(bfd_mach_mcf548x, "m68k:548x", FALSE, &arch_info_struct[17]),
N(bfd_mach_mcfv4e, "m68k:cfv4e", FALSE, 0),
N(bfd_mach_m68060, "m68k:68060", FALSE, &arch_info_struct[7]),
N(bfd_mach_cpu32, "m68k:cpu32", FALSE, &arch_info_struct[8]),
/* Various combinations of CF architecture features */
N(bfd_mach_mcf_isa_a, "m68k:isa-a",
FALSE, &arch_info_struct[9]),
N(bfd_mach_mcf_isa_a_div, "m68k:isa-a:div",
FALSE, &arch_info_struct[10]),
N(bfd_mach_mcf_isa_a_div_mac, "m68k:isa-a:div:mac",
FALSE, &arch_info_struct[11]),
N(bfd_mach_mcf_isa_a_div_emac, "m68k:isa-a:div:emac",
FALSE, &arch_info_struct[12]),
N(bfd_mach_mcf_isa_aplus, "m68k:isa-a+",
FALSE, &arch_info_struct[13]),
N(bfd_mach_mcf_isa_aplus_mac, "m68k:isa-a+:mac",
FALSE, &arch_info_struct[14]),
N(bfd_mach_mcf_isa_aplus_emac, "m68k:isa-a+:emac",
FALSE, &arch_info_struct[15]),
N(bfd_mach_mcf_isa_aplus_usp, "m68k:isa-a+:usp",
FALSE, &arch_info_struct[16]),
N(bfd_mach_mcf_isa_aplus_usp_mac, "m68k:isa-a+:usp:mac",
FALSE, &arch_info_struct[17]),
N(bfd_mach_mcf_isa_aplus_usp_emac, "m68k:isa-a+:usp:emac",
FALSE, &arch_info_struct[18]),
N(bfd_mach_mcf_isa_b, "m68k:isa-b",
FALSE, &arch_info_struct[19]),
N(bfd_mach_mcf_isa_b_mac, "m68k:isa-b:mac",
FALSE, &arch_info_struct[20]),
N(bfd_mach_mcf_isa_b_emac, "m68k:isa-b:emac",
FALSE, &arch_info_struct[21]),
N(bfd_mach_mcf_isa_b_usp_float, "m68k:isa-b:usp:float",
FALSE, &arch_info_struct[22]),
N(bfd_mach_mcf_isa_b_usp_float_mac, "m68k:isa-b:usp:float:mac",
FALSE, &arch_info_struct[23]),
N(bfd_mach_mcf_isa_b_usp_float_emac, "m68k:isa-b:usp:float:emac",
FALSE, &arch_info_struct[24]),
/* Legacy names for CF architectures */
N(bfd_mach_mcf_isa_a, "m68k:5200", FALSE, &arch_info_struct[25]),
N(bfd_mach_mcf_isa_a_div_mac,"m68k:5206e", FALSE, &arch_info_struct[26]),
N(bfd_mach_mcf_isa_a_div_mac, "m68k:5307", FALSE, &arch_info_struct[27]),
N(bfd_mach_mcf_isa_b_mac, "m68k:5407", FALSE, &arch_info_struct[28]),
N(bfd_mach_mcf_isa_aplus_usp_emac, "m68k:528x",
FALSE, &arch_info_struct[29]),
N(bfd_mach_mcf_isa_aplus_usp_emac, "m68k:521x",
FALSE, &arch_info_struct[30]),
N(bfd_mach_mcf_isa_a_div_emac, "m68k:5249", FALSE, &arch_info_struct[31]),
N(bfd_mach_mcf_isa_b_usp_float_emac, "m68k:547x",
FALSE, &arch_info_struct[32]),
N(bfd_mach_mcf_isa_b_usp_float_emac, "m68k:548x",
FALSE, &arch_info_struct[33]),
N(bfd_mach_mcf_isa_b_usp_float_emac, "m68k:cfv4e", FALSE, 0),
};
const bfd_arch_info_type bfd_m68k_arch =
N(0, "m68k", TRUE, &arch_info_struct[0]);
/* Table indexed by bfd_mach_arch number indicating which
architectural features are supported. */
static const unsigned m68k_arch_features[] =
{
0,
m68000|m68881|m68851,
m68000|m68881|m68851,
m68010|m68881|m68851,
m68020|m68881|m68851,
m68030|m68881|m68851,
m68040|m68881|m68851,
m68060|m68881|m68851,
cpu32|m68881,
mcfisa_a,
mcfisa_a|mcfhwdiv,
mcfisa_a|mcfhwdiv|mcfmac,
mcfisa_a|mcfhwdiv|mcfemac,
mcfisa_a|mcfisa_aa|mcfhwdiv,
mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac,
mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac,
mcfisa_a|mcfisa_aa|mcfhwdiv|mcfusp,
mcfisa_a|mcfisa_aa|mcfhwdiv|mcfusp|mcfmac,
mcfisa_a|mcfisa_aa|mcfhwdiv|mcfusp|mcfemac,
mcfisa_a|mcfhwdiv|mcfisa_b,
mcfisa_a|mcfhwdiv|mcfisa_b|mcfmac,
mcfisa_a|mcfhwdiv|mcfisa_b|mcfemac,
mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat,
mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat|mcfmac,
mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat|mcfemac,
};
/* Return the count of bits set in MASK */
static unsigned
bit_count (unsigned mask)
{
unsigned ix;
for (ix = 0; mask; ix++)
/* Clear the LSB set */
mask ^= mask & -mask;
return ix;
}
/* Return the architectural features supported by MACH */
unsigned
bfd_m68k_mach_to_features (int mach)
{
if ((unsigned)mach
>= sizeof (m68k_arch_features) / sizeof (m68k_arch_features[0]))
mach = 0;
return m68k_arch_features[mach];
}
/* Return the bfd machine that most closely represents the
architectural features. We find the machine with the smallest
number of additional features. If there is no such machine, we
find the one with the smallest number of missing features. */
int bfd_m68k_features_to_mach (unsigned features)
{
int superset = 0, subset = 0;
unsigned extra = 99, missing = 99;
unsigned ix;
for (ix = 0;
ix != sizeof (m68k_arch_features) / sizeof (m68k_arch_features[0]);
ix++)
{
unsigned this_extra, this_missing;
if (m68k_arch_features[ix] == features)
return ix;
this_extra = bit_count (m68k_arch_features[ix] & ~features);
if (this_extra < extra)
{
extra = this_extra;
superset = ix;
}
this_missing = bit_count (features & ~m68k_arch_features[ix]);
if (this_missing < missing)
{
missing = this_missing;
superset = ix;
}
}
return superset ? superset : subset;
}

View File

@ -1,6 +1,6 @@
/* Motorola 68k series support for 32-bit ELF
Copyright 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
2004, 2005 Free Software Foundation, Inc.
2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@ -24,6 +24,7 @@
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/m68k.h"
#include "opcode/m68k.h"
static reloc_howto_type *reloc_type_lookup
PARAMS ((bfd *, bfd_reloc_code_real_type));
@ -220,7 +221,7 @@ static const bfd_byte elf_m68k_plt_entry[PLT_ENTRY_SIZE] =
#define CFV4E_PLT_ENTRY_SIZE 24
#define CFV4E_FLAG(abfd) (elf_elfheader (abfd)->e_flags & EF_CFV4E)
#define CFV4E_FLAG(abfd) (elf_elfheader (abfd)->e_flags & EF_M68K_CFV4E)
static const bfd_byte elf_cfv4e_plt0_entry[CFV4E_PLT_ENTRY_SIZE] =
{
@ -248,7 +249,7 @@ static const bfd_byte elf_cfv4e_plt_entry[CFV4E_PLT_ENTRY_SIZE] =
0, 0, 0, 0 /* Replaced with offset to start of .plt. */
};
#define CPU32_FLAG(abfd) (elf_elfheader (abfd)->e_flags & EF_CPU32)
#define CPU32_FLAG(abfd) (elf_elfheader (abfd)->e_flags & EF_M68K_CPU32)
#define PLT_CPU32_ENTRY_SIZE 24
/* Procedure linkage table entries for the cpu32 */
@ -372,6 +373,56 @@ elf_m68k_link_hash_table_create (abfd)
return &ret->root.root;
}
/* Set the right machine number. */
static bfd_boolean
elf32_m68k_object_p (bfd *abfd)
{
unsigned int mach = 0;
unsigned features = 0;
flagword eflags = elf_elfheader (abfd)->e_flags;
if (eflags & EF_M68K_M68000)
features |= m68000;
else if (eflags & EF_M68K_CPU32)
features |= cpu32;
else if (eflags & EF_M68K_ISA_MASK)
{
switch (eflags & EF_M68K_ISA_MASK)
{
case EF_M68K_ISA_B:
features |= mcfisa_b;
/* FALLTHROUGH */
case EF_M68K_ISA_A_PLUS:
features |= mcfisa_aa;
/* FALLTHROUGH */
case EF_M68K_ISA_A:
features |= mcfisa_a;
break;
}
if (eflags & EF_M68K_HW_DIV)
features |= mcfhwdiv;
switch (eflags & EF_M68K_MAC_MASK)
{
case EF_M68K_MAC:
features |= mcfmac;
break;
case EF_M68K_EMAC:
features |= mcfemac;
break;
}
if (eflags & EF_M68K_USP)
features |= mcfusp;
if (eflags & EF_M68K_FLOAT)
features |= cfloat;
}
mach = bfd_m68k_features_to_mach (features);
bfd_default_set_arch_mach (abfd, bfd_arch_m68k, mach);
return TRUE;
}
/* Keep m68k-specific flags in the ELF header. */
static bfd_boolean
elf32_m68k_set_private_flags (abfd, flags)
@ -392,19 +443,86 @@ elf32_m68k_merge_private_bfd_data (ibfd, obfd)
{
flagword out_flags;
flagword in_flags;
unsigned in_mach, out_mach;
if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
return TRUE;
return FALSE;
in_mach = bfd_get_mach (ibfd);
out_mach = bfd_get_mach (obfd);
if (!out_mach || !in_mach)
/* One is unknown, copy the input machine. */
out_mach = in_mach;
else if (in_mach != out_mach)
{
if (in_mach <= bfd_mach_m68060 && out_mach <= bfd_mach_m68060)
{
/* Merge m68k machine. */
if (in_mach > out_mach)
out_mach = in_mach;
}
else if (in_mach >= bfd_mach_mcf_isa_a && out_mach >= bfd_mach_mcf_isa_a)
/* Merge cf machine. */
out_mach = bfd_m68k_features_to_mach
(bfd_m68k_mach_to_features (in_mach)
| bfd_m68k_mach_to_features (out_mach));
else
/* They are incompatible. */
return FALSE;
}
bfd_set_arch_mach (obfd, bfd_arch_m68k, out_mach);
in_flags = elf_elfheader (ibfd)->e_flags;
out_flags = elf_elfheader (obfd)->e_flags;
if (!elf_flags_init (obfd))
{
elf_flags_init (obfd) = TRUE;
elf_elfheader (obfd)->e_flags = in_flags;
out_flags = in_flags;
}
else
{
/* Copy legacy flags. */
out_flags |= in_flags & (EF_M68K_CPU32 | EF_M68K_M68000 | EF_M68K_CFV4E);
if (((in_flags | out_flags) & EF_M68K_ISA_MASK)
&& ((in_flags | out_flags) & (EF_M68K_CPU32 | EF_M68K_M68000)))
/* Mixing m68k and cf is not allowed */
return FALSE;
if (in_flags & EF_M68K_ISA_MASK)
{
if (out_flags & EF_M68K_ISA_MASK)
{
/* Merge cf specific flags */
if ((in_flags & EF_M68K_ISA_MASK)
> (out_flags & EF_M68K_ISA_MASK))
{
out_flags ^= out_flags & EF_M68K_ISA_MASK;
out_flags |= in_flags & EF_M68K_ISA_MASK;
}
out_flags |= in_flags
& (EF_M68K_HW_DIV | EF_M68K_USP | EF_M68K_FLOAT);
if (in_flags & EF_M68K_MAC_MASK)
{
if (!(out_flags & EF_M68K_MAC_MASK))
out_flags |= in_flags & EF_M68K_MAC_MASK;
else if ((out_flags & EF_M68K_MAC_MASK)
!= (in_flags & EF_M68K_MAC_MASK))
/* Cannot mix MACs */
return FALSE;
}
}
else
{
/* Copy the coldfire bits. */
out_flags &= ~EF_M68K_CF_MASK;
out_flags |= in_flags & EF_M68K_CF_MASK;
}
}
}
elf_elfheader (obfd)->e_flags = out_flags;
return TRUE;
}
@ -416,6 +534,7 @@ elf32_m68k_print_private_bfd_data (abfd, ptr)
PTR ptr;
{
FILE *file = (FILE *) ptr;
flagword eflags = elf_elfheader (abfd)->e_flags;
BFD_ASSERT (abfd != NULL && ptr != NULL);
@ -427,12 +546,55 @@ elf32_m68k_print_private_bfd_data (abfd, ptr)
/* xgettext:c-format */
fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
if (elf_elfheader (abfd)->e_flags & EF_CPU32)
fprintf (file, _(" [cpu32]"));
if (eflags & EF_M68K_CPU32)
fprintf (file, " [cpu32]");
if (elf_elfheader (abfd)->e_flags & EF_M68000)
fprintf (file, _(" [m68000]"));
if (eflags & EF_M68K_M68000)
fprintf (file, " [m68000]");
if (eflags & EF_M68K_CFV4E)
fprintf (file, " [cfv4e]");
if (eflags & EF_M68K_ISA_MASK)
{
char const *isa = _("unknown");
char const *mac = _("unknown");
switch (eflags & EF_M68K_ISA_MASK)
{
case EF_M68K_ISA_A:
isa = "A";
break;
case EF_M68K_ISA_A_PLUS:
isa = "A+";
break;
case EF_M68K_ISA_B:
isa = "B";
break;
}
fprintf (file, " [isa %s]", isa);
if (eflags & EF_M68K_HW_DIV)
fprintf (file, " [hwdiv]");
switch (eflags & EF_M68K_MAC_MASK)
{
case 0:
mac = NULL;
break;
case EF_M68K_MAC:
mac = "mac";
break;
case EF_M68K_EMAC:
mac = "emac";
break;
}
if (mac)
fprintf (file, " [%s]", mac);
if (eflags & EF_M68K_USP)
fprintf (file, " [usp");
if (eflags & EF_M68K_FLOAT)
fprintf (file, " [float]");
}
fputc ('\n', file);
return TRUE;
@ -2313,6 +2475,7 @@ elf_m68k_plt_sym_val (bfd_vma i, const asection *plt,
elf32_m68k_print_private_bfd_data
#define elf_backend_reloc_type_class elf32_m68k_reloc_type_class
#define elf_backend_plt_sym_val elf_m68k_plt_sym_val
#define elf_backend_object_p elf32_m68k_object_p
#define elf_backend_can_gc_sections 1
#define elf_backend_can_refcount 1

View File

@ -1,6 +1,6 @@
/* BFD back-end for ieee-695 objects.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005
2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support.
@ -3466,11 +3466,22 @@ ieee_write_processor (bfd *abfd)
case bfd_mach_m68040: id = "68040"; break;
case bfd_mach_m68060: id = "68060"; break;
case bfd_mach_cpu32: id = "cpu32"; break;
case bfd_mach_mcf5200:id = "5200"; break;
case bfd_mach_mcf5206e:id = "5206e"; break;
case bfd_mach_mcf5307:id = "5307"; break;
case bfd_mach_mcf5407:id = "5407"; break;
case bfd_mach_mcf528x:id = "5282"; break;
case bfd_mach_mcf_isa_a: id = "isa-a"; break;
case bfd_mach_mcf_isa_a_div: id = "isa-a:div"; break;
case bfd_mach_mcf_isa_a_div_mac: id = "isa-a:div:mac"; break;
case bfd_mach_mcf_isa_a_div_emac: id = "isa-a:div:emac"; break;
case bfd_mach_mcf_isa_aplus: id = "isa-a+"; break;
case bfd_mach_mcf_isa_aplus_mac: id = "isa-a+:mac"; break;
case bfd_mach_mcf_isa_aplus_emac: id = "isa-a+:mac"; break;
case bfd_mach_mcf_isa_aplus_usp: id = "isa-a+:usp"; break;
case bfd_mach_mcf_isa_aplus_usp_mac: id = "isa-a+:usp:mac"; break;
case bfd_mach_mcf_isa_aplus_usp_emac: id = "isa-a+:usp:emac"; break;
case bfd_mach_mcf_isa_b: id = "isa-b"; break;
case bfd_mach_mcf_isa_b_mac: id = "isa-b:mac"; break;
case bfd_mach_mcf_isa_b_emac: id = "isa-b:emac"; break;
case bfd_mach_mcf_isa_b_usp_float: id = "isa-b:usp:float"; break;
case bfd_mach_mcf_isa_b_usp_float_mac: id = "isa-b:usp:float:mac"; break;
case bfd_mach_mcf_isa_b_usp_float_emac: id = "isa-b:usp:float:emac"; break;
}
if (! ieee_write_id (abfd, id))

View File

@ -7,7 +7,7 @@
(This include file is not for users of the library.)
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
Written by Cygnus Support.

View File

@ -1,3 +1,7 @@
2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
* readelf.c (get_machine_flags): Add logic for EF_M68K flags.
2006-02-02 H.J. Lu <hongjiu.lu@intel.com>
* readelf.c (process_program_headers): Undo the last change.

View File

@ -1940,10 +1940,53 @@ get_machine_flags (unsigned e_flags, unsigned e_machine)
break;
case EM_68K:
if (e_flags & EF_CPU32)
if (e_flags & EF_M68K_CPU32)
strcat (buf, ", cpu32");
if (e_flags & EF_M68000)
if (e_flags & EF_M68K_M68000)
strcat (buf, ", m68000");
if (e_flags & EF_M68K_ISA_MASK)
{
char const *isa = _("unknown");
char const *mac = _("unknown mac");
switch (e_flags & EF_M68K_ISA_MASK)
{
case EF_M68K_ISA_A:
isa = "A";
break;
case EF_M68K_ISA_A_PLUS:
isa = "A+";
break;
case EF_M68K_ISA_B:
isa = "B";
break;
}
strcat (buf, ", cf, isa ");
strcat (buf, isa);
if (e_flags & EF_M68K_HW_DIV)
strcat (buf, ", hwdiv");
switch (e_flags & EF_M68K_MAC_MASK)
{
case 0:
mac = NULL;
break;
case EF_M68K_MAC:
mac = "mac";
break;
case EF_M68K_EMAC:
mac = "emac";
break;
}
if (mac)
{
strcat (buf, ", ");
strcat (buf, mac);
}
if (e_flags & EF_M68K_USP)
strcat (buf, ", usp");
if (e_flags & EF_M68K_FLOAT)
strcat (buf, ", float");
}
break;
case EM_PPC:

View File

@ -1,3 +1,31 @@
2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
* config/tc-m68k.c (mcf5208_control_regs, mcf5213_control_regs,
mcf5329_control_regs): New.
(not_current_architecture, selected_arch, selected_cpu): New.
(m68k_archs, m68k_extensions): New.
(archs): Renamed to ...
(m68k_cpus): ... here. Adjust.
(n_arches): Remove.
(md_pseudo_table): Add arch and cpu directives.
(find_cf_chip, m68k_ip): Adjust table scanning.
(no_68851, no_68881): Remove.
(md_assemble): Lazily initialize.
(select_control_regs): Adjust cpu names. Add 5208, 5213, 5329.
(md_init_after_args): Move functionality to m68k_init_arch.
(mri_chip): Adjust table scanning.
(md_parse_option): Reimplement 'm' processing to add -march & -mcpu
options with saner parsing.
(m68k_lookup_cpu, m68k_set_arch, m68k_set_cpu, m68k_set_extension,
m68k_init_arch): New.
(s_m68k_cpu, s_m68k_arch): New.
(md_show_usage): Adjust.
(m68k_elf_final_processing): Set CF EF flags.
* config/tc-m68k.h (m68k_init_after_args): Remove.
(tc_init_after_args): Remove.
* doc/c-m68k.texi (M68K-Opts): Document -march, -mcpu options.
(M68k-Directives): Document .arch and .cpu directives.
2006-02-05 Arnold Metselaar <arnold.metselaar@planet.nl>
* config/tc-z80.c (z80_start_line_hook): allow .equ and .defl as

File diff suppressed because it is too large Load Diff

View File

@ -145,9 +145,6 @@ extern void m68k_elf_final_processing (void);
#define DIFF_EXPR_OK
extern void m68k_init_after_args (void);
#define tc_init_after_args m68k_init_after_args
extern int m68k_parse_long_option (char *);
#define md_parse_long_option m68k_parse_long_option

View File

@ -32,6 +32,50 @@ dependent options:
@table @samp
@cindex @samp{-march=} command line option, M680x0
@item -march=@var{architecture}
This option specifies a target architecture. The following
architectures are recognized:
@code{68000},
@code{68010},
@code{68020},
@code{68030},
@code{68040},
@code{68060},
@code{cpu32},
@code{isaa},
@code{isaaplus},
@code{isab} and
@code{cfv4e}.
@cindex @samp{-mcpu=} command line option, M680x0
@item -mcpu=@var{cpu}
This option specifies a target cpu. When used in conjunction with the
@option{-march} option, the cpu must be within the specified
architecture. Also, the generic features of the architecture are used
for instruction generation, rather than those of the specific chip.
@cindex @samp{-m[no-]68851} command line option, M680x0
@cindex @samp{-m[no-]68881} command line option, M680x0
@cindex @samp{-m[no-]div} command line option, M680x0
@cindex @samp{-m[no-]usp} command line option, M680x0
@cindex @samp{-m[no-]float} command line option, M680x0
@cindex @samp{-m[no-]mac} command line option, M680x0
@cindex @samp{-m[no-]emac} command line option, M680x0
@item -m[no-]68851
@item -m[no-]68881
@item -m[no-]div
@item -m[no-]usp
@item -m[no-]float
@item -m[no-]mac
@item -m[no-]emac
Enable or disable various architecture specific features. If a chip
or architecture by default supports an option (for instance
@option{-march=isaaplus} includes the @option{-mdiv} option),
explicitly disabling the option will override the default.
@cindex @samp{-l} option, M680x0
@item -l
You can use the @samp{-l} option to shorten the size of references to undefined
@ -398,6 +442,25 @@ aligns the output to an even byte boundary.
@cindex @code{skip} directive, M680x0
@item .skip
This directive is identical to a @code{.space} directive.
@cindex @code{arch} directive, M680x0
@item .arch @var{name}
Select the target architecture and extension features. Valid valuse
for @var{name} are the same as for the @option{-march} command line
option. This directive cannot be specified after
any instructions have been assembled. If it is given multiple times,
or in conjuction with the @option{-march} option, all uses must be for
the same architecture and extension set.
@cindex @code{cpu} directive, M680x0
@item .cpu @var{name}
Select the target cpu. Valid valuse
for @var{name} are the same as for the @option{-mcpu} command line
option. This directive cannot be specified after
any instructions have been assembled. If it is given multiple times,
or in conjuction with the @option{-mopt} option, all uses must be for
the same cpu.
@end table
@need 2000

View File

@ -1,3 +1,8 @@
2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
* testsuite/gas/m68k/all.exp: Add arch-cpu-1 test.
* testsuite/gas/m68k/arch-cpu-1.[sd]: New.
2005-02-02 Paul Brook <paul@codesourcery.com>
* gas/arm/thumb2_invert.d: New test.

View File

@ -39,6 +39,7 @@ if [istarget m68*-*-*] then {
run_dump_test mcf-mac
run_dump_test mcf-emac
run_dump_test mcf-fpu
run_dump_test arch-cpu-1
set testname "68000 operands"
gas_run "operands.s" "-m68000" "2>err.out"

View File

@ -1,3 +1,15 @@
2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
* m68k.h (EF_CPU32, EF_M68000, EF_CFV4E): Rename to ...
(EF_M68K_CPU32, EF_M68K_M68000, EF_M68K_CFV4E): ... here.
(EF_M68K_ISA_MASK, EF_M68K_ISA_A, EF_M68K_M68K_ISA_A_PLUS,
EF_M68K_ISA_B, EF_M68K_HW_DIV, EF_M68K_MAC_MASK, EF_M68K_MAC,
EF_M68K_EMAC, EF_M68K_USP, EF_M68K_FLOAT): New.
2006-02-06 Steve Ellcey <sje@cup.hp.com>
* ia64.h (SHF_IA_64_HP_TLS): New.
2006-01-18 Alexandre Oliva <aoliva@redhat.com>
Introduce TLS descriptors for i386 and x86_64.

View File

@ -1,5 +1,5 @@
/* MC68k ELF support for BFD.
Copyright 1998, 1999, 2000, 2002, 2005 Free Software Foundation, Inc.
Copyright 1998, 1999, 2000, 2002, 2005, 2006 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@ -52,8 +52,22 @@ START_RELOC_NUMBERS (elf_m68k_reloc_type)
RELOC_NUMBER (R_68K_GNU_VTENTRY, 24)
END_RELOC_NUMBERS (R_68K_max)
#define EF_CPU32 0x00810000
#define EF_M68000 0x01000000
#define EF_CFV4E 0x00008000
#define EF_M68K_CPU32 0x00810000
#define EF_M68K_M68000 0x01000000
#define EF_M68K_CFV4E 0x00008000
/* We use the bottom 8 bits to encode information about the
coldfire variant. */
#define EF_M68K_ISA_MASK 0x07 /* Which ISA */
#define EF_M68K_ISA_A 0x01
#define EF_M68K_ISA_A_PLUS 0x02
#define EF_M68K_ISA_B 0x03
#define EF_M68K_HW_DIV 0x08 /* Has HW divide */
#define EF_M68K_MAC_MASK 0x30
#define EF_M68K_MAC 0x10 /* Has MAC */
#define EF_M68K_EMAC 0x20 /* Has EMAC */
#define EF_M68K_USP 0x40 /* Has USP insns */
#define EF_M68K_FLOAT 0x80 /* Has float insns */
#define EF_M68K_CF_MASK 0xFF
#endif

View File

@ -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, 2004 Free Software Foundation, Inc.
2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of GDB, GAS, and the GNU binutils.
@ -23,19 +23,15 @@
structure. */
#define _m68k_undef 0
#define m68000 0x001
#define m68008 m68000 /* Synonym for -m68000. otherwise unused. */
#define m68010 0x002
#define m68020 0x004
#define m68030 0x008
#define m68ec030 m68030 /* Similar enough to -m68030 to ignore differences;
gas will deal with the few differences. */
#define m68040 0x010
/* There is no 68050. */
#define m68060 0x020
#define m68881 0x040
#define m68882 m68881 /* Synonym for -m68881. otherwise unused. */
#define m68851 0x080
#define cpu32 0x100 /* e.g., 68332 */
#define m68k_mask 0x1ff
#define mcfmac 0x200 /* ColdFire MAC. */
#define mcfemac 0x400 /* ColdFire EMAC. */
@ -47,26 +43,54 @@
#define mcfisa_b 0x8000 /* ColdFire ISA_B. */
#define mcfusp 0x10000 /* ColdFire USP instructions. */
#define mcf5200 0x20000
#define mcf5206e 0x40000
#define mcf521x 0x80000
#define mcf5249 0x100000
#define mcf528x 0x200000
#define mcf5307 0x400000
#define mcf5407 0x800000
#define mcf5470 0x1000000
#define mcf5480 0x2000000
/* Handy aliases. */
/* Handy aliases. */
#define m68040up (m68040 | m68060)
#define m68030up (m68030 | m68040up)
#define m68020up (m68020 | m68030up)
#define m68010up (m68010 | cpu32 | m68020up)
#define m68000up (m68000 | m68010up)
#define mfloat (m68881 | m68882 | m68040 | m68060)
#define mfloat (m68881 | m68040 | m68060)
#define mmmu (m68851 | m68030 | m68040 | m68060)
/* CPU numbering. There are too many of these to use a bit vector.
These are a one-of-many selection. Choose a numbering scheme that
simply maps onto manufacturer's part numbers. */
/* All m68k cpus */
#define cpu_m68k 0
/* All coldfire cpus */
#define cpu_cf 1000000
#define cpu_m68000 (cpu_m68k + 68000)
#define cpu_m68008 cpu_m68000 /* Synonym for -m68000. otherwise unused. */
#define cpu_m68010 (cpu_m68k + 68010)
#define cpu_m68020 (cpu_m68k + 68020)
#define cpu_m68030 (cpu_m68k + 68030)
#define cpu_m68ec030 cpu_m68030 /* Similar enough to -m68030 to ignore
differences; gas will deal with the few
differences. */
#define cpu_m68040 (cpu_m68k + 68040)
/* There is no 68050. */
#define cpu_m68060 (cpu_m68k + 68060)
#define cpu_m68851 (cpu_m68k + 68851)
#define cpu_m68881 (cpu_m68k + 68881)
#define cpu_m68882 cpu_m68881 /* Synonym for -m68881. otherwise unused. */
#define cpu_cpu32 (cpu_m68k + 32)
#define cpu_cf5200 (cpu_cf + 5200)
#define cpu_cf5206e (cpu_cf + 5206)
#define cpu_cf5208 (cpu_cf + 5208)
#define cpu_cf521x (cpu_cf + 5210)
#define cpu_cf5213 (cpu_cf + 5213)
#define cpu_cf5249 (cpu_cf + 5249)
#define cpu_cf528x (cpu_cf + 5280)
#define cpu_cf5307 (cpu_cf + 5307)
#define cpu_cf5329 (cpu_cf + 5329)
#define cpu_cf5407 (cpu_cf + 5407)
#define cpu_cf547x (cpu_cf + 5470)
#define cpu_cf548x (cpu_cf + 5480)
/* The structure used to hold information for an opcode. */
struct m68k_opcode

View File

@ -1,3 +1,7 @@
2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
* m68k-dis.c (print_insn_m68k): Use bfd_m68k_mach_to_features.
2006-01-26 David Ung <davidu@mips.com>
* mips-opc.c: Add I33 masks to these MIPS32R2 instructions: prefx,

View File

@ -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, 2004, 2005
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is free software; you can redistribute it and/or modify
@ -1396,58 +1396,9 @@ print_insn_m68k (bfd_vma memaddr, disassemble_info *info)
/* Error return. */
return -1;
switch (info->mach)
{
default:
case 0:
arch_mask = (unsigned int) -1;
break;
case bfd_mach_m68000:
arch_mask = m68000|m68881|m68851;
break;
case bfd_mach_m68008:
arch_mask = m68008|m68881|m68851;
break;
case bfd_mach_m68010:
arch_mask = m68010|m68881|m68851;
break;
case bfd_mach_m68020:
arch_mask = m68020|m68881|m68851;
break;
case bfd_mach_m68030:
arch_mask = m68030|m68881|m68851;
break;
case bfd_mach_m68040:
arch_mask = m68040|m68881|m68851;
break;
case bfd_mach_m68060:
arch_mask = m68060|m68881|m68851;
break;
case bfd_mach_mcf5200:
arch_mask = mcfisa_a;
break;
case bfd_mach_mcf521x:
case bfd_mach_mcf528x:
arch_mask = mcfisa_a|mcfhwdiv|mcfisa_aa|mcfusp|mcfemac;
break;
case bfd_mach_mcf5206e:
arch_mask = mcfisa_a|mcfhwdiv|mcfmac;
break;
case bfd_mach_mcf5249:
arch_mask = mcfisa_a|mcfhwdiv|mcfemac;
break;
case bfd_mach_mcf5307:
arch_mask = mcfisa_a|mcfhwdiv|mcfmac;
break;
case bfd_mach_mcf5407:
arch_mask = mcfisa_a|mcfhwdiv|mcfisa_b|mcfmac;
break;
case bfd_mach_mcf547x:
case bfd_mach_mcf548x:
case bfd_mach_mcfv4e:
arch_mask = mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat|mcfemac;
break;
}
arch_mask = bfd_m68k_mach_to_features (info->mach);
if (!arch_mask)
arch_mask = ~(unsigned int)0;
FETCH_DATA (info, buffer + 2);
major_opcode = (buffer[0] >> 4) & 15;