mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
8699fc3e88
This commit introduces the nps400 machine type as a variant of arc. There's a new flag in the assembler to select this machine type. All other changes are just adding handling of the new machine type into the relevant places. The nps400 is an arc700 variant with some vendor specific instructions added into the instruction set. This commit does not add any of the new instructions, this is just laying the groundwork for future commits. However, in preparation for these new instructions a new opcode define for nps400 has been added to include/opcode/arc.h, this new opcode define is used in the assembler and disassembler along with the existing define for arc700 such that when assembling and disassembling for nps400 the user will have access to all arc700 instructions and all the nps400 vendor extension instructions. bfd/ChangeLog: * archures.c (bfd_mach_arc_nps400): Define. * bfd-in2.h: Regenerate. * cpu-arc.c (arch_info_struct): New entry for nps400, renumber some existing entries to make space. * elf32-arc.c (arc_elf_object_p): Add nps400 case. (arc_elf_final_write_processing): Likewise. binutils/ChangeLog: * readelf.c (decode_ARC_machine_flags): Handle nps400. gas/ChangeLog: * config/tc-arc.c (cpu_types): Add nps400 entry. (check_zol): Handle nps400. include/ChangeLog: * elf/arc.h (E_ARC_MACH_NPS400): Define. * opcode/arc.h (ARC_OPCODE_NPS400): Define. opcodes/ChangeLog: * arc-dis.c (print_insn_arc): Handle nps400.
75 lines
2.4 KiB
C
75 lines
2.4 KiB
C
/* BFD support for the ARC processor
|
|
Copyright (C) 1994-2016 Free Software Foundation, Inc.
|
|
Contributed by Doug Evans (dje@cygnus.com).
|
|
|
|
This file is part of BFD, the Binary File Descriptor library.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
MA 02110-1301, USA. */
|
|
|
|
#include "sysdep.h"
|
|
#include "bfd.h"
|
|
#include "libbfd.h"
|
|
|
|
#define ARC(mach, print_name, default_p, next) \
|
|
{ \
|
|
32, /* 32 bits in a word */ \
|
|
32, /* 32 bits in an address */ \
|
|
8, /* 8 bits in a byte */ \
|
|
bfd_arch_arc, \
|
|
mach, \
|
|
"arc", \
|
|
print_name, \
|
|
4, /* section alignment power */ \
|
|
default_p, \
|
|
bfd_default_compatible, \
|
|
bfd_default_scan, \
|
|
bfd_arch_default_fill, \
|
|
next, \
|
|
}
|
|
|
|
static const bfd_arch_info_type arch_info_struct[] =
|
|
{
|
|
ARC (bfd_mach_arc_arc600, "ARC600", FALSE, &arch_info_struct[1]),
|
|
ARC (bfd_mach_arc_arc600, "A6" , FALSE, &arch_info_struct[2]),
|
|
ARC (bfd_mach_arc_arc601, "ARC601", FALSE, &arch_info_struct[3]),
|
|
ARC (bfd_mach_arc_arc700, "ARC700", FALSE, &arch_info_struct[4]),
|
|
ARC (bfd_mach_arc_arc700, "A7", FALSE, &arch_info_struct[5]),
|
|
ARC (bfd_mach_arc_nps400, "NPS400", FALSE, &arch_info_struct[6]),
|
|
ARC (bfd_mach_arc_arcv2, "ARCv2", FALSE, &arch_info_struct[7]),
|
|
ARC (bfd_mach_arc_arcv2, "EM", FALSE, &arch_info_struct[8]),
|
|
ARC (bfd_mach_arc_arcv2, "HS", FALSE, NULL),
|
|
};
|
|
|
|
const bfd_arch_info_type bfd_arc_arch =
|
|
ARC (bfd_mach_arc_arc600, "ARC600", TRUE, &arch_info_struct[0]);
|
|
|
|
/* Utility routines. */
|
|
|
|
/* Given cpu type NAME, return its bfd_mach_arc_xxx value.
|
|
Returns -1 if not found. */
|
|
int arc_get_mach (char *name);
|
|
|
|
int
|
|
arc_get_mach (char *name)
|
|
{
|
|
const bfd_arch_info_type *p;
|
|
|
|
for (p = &bfd_arc_arch; p != NULL; p = p->next)
|
|
if (strcmp (name, p->printable_name) == 0)
|
|
return p->mach;
|
|
return -1;
|
|
}
|