This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
RE: [PATCHv3 5/7] arc: Add nps400 machine type, and assembler flag.
- From: Claudiu Zissulescu <Claudiu dot Zissulescu at synopsys dot com>
- To: Andrew Burgess <andrew dot burgess at embecosm dot com>, "binutils at sourceware dot org" <binutils at sourceware dot org>
- Cc: "Claudiu dot Zissulescu at synopsys dot com" <Claudiu dot Zissulescu at synopsys dot com>, "Cupertino dot Miranda at synopsys dot com" <Cupertino dot Miranda at synopsys dot com>, "noamca at mellanox dot com" <noamca at mellanox dot com>, Nick Clifton <nickc at redhat dot com>, Andreas Schwab <schwab at suse dot de>
- Date: Wed, 16 Mar 2016 11:08:50 +0000
- Subject: RE: [PATCHv3 5/7] arc: Add nps400 machine type, and assembler flag.
- Authentication-results: sourceware.org; auth=none
- References: <cover dot 1456947552 dot git dot andrew dot burgess at embecosm dot com> <cover dot 1458082098 dot git dot andrew dot burgess at embecosm dot com> <503fcfcf06a8ebe23202bd9ef0922aea6c4082be dot 1458082098 dot git dot andrew dot burgess at embecosm dot com>
It seems ok, though some testing is required.
//Claudiu
> -----Original Message-----
> From: Andrew Burgess [mailto:andrew.burgess@embecosm.com]
> Sent: Wednesday, March 16, 2016 12:02 AM
> To: binutils@sourceware.org
> Cc: Claudiu.Zissulescu@synopsys.com; Cupertino.Miranda@synopsys.com;
> noamca@mellanox.com; Nick Clifton; Andreas Schwab; Andrew Burgess
> Subject: [PATCHv3 5/7] arc: Add nps400 machine type, and assembler flag.
>
> 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 (get_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.
> ---
> bfd/ChangeLog | 9 +++++++++
> bfd/archures.c | 1 +
> bfd/bfd-in2.h | 1 +
> bfd/cpu-arc.c | 5 +++--
> bfd/elf32-arc.c | 6 ++++++
> binutils/ChangeLog | 4 ++++
> binutils/readelf.c | 6 ++++++
> gas/ChangeLog | 5 +++++
> gas/config/tc-arc.c | 3 +++
> include/ChangeLog | 5 +++++
> include/elf/arc.h | 1 +
> include/opcode/arc.h | 1 +
> opcodes/ChangeLog | 4 ++++
> opcodes/arc-dis.c | 4 ++++
> 14 files changed, 53 insertions(+), 2 deletions(-)
>
> diff --git a/bfd/ChangeLog b/bfd/ChangeLog
> index 20c1904..0c82aea 100644
> --- a/bfd/ChangeLog
> +++ b/bfd/ChangeLog
> @@ -1,5 +1,14 @@
> 2016-03-15 Andrew Burgess <andrew.burgess@embecosm.com>
>
> + * 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.
> +
> +2016-03-15 Andrew Burgess <andrew.burgess@embecosm.com>
> +
> * elf32-arc.c (arc_elf_print_private_bfd_data): Remove use of
> EF_ARC_CPU_GENERIC.
> (arc_elf_final_write_processing): Don't bother setting cpu field
> diff --git a/bfd/archures.c b/bfd/archures.c
> index 12e3342..7ff1e82 100644
> --- a/bfd/archures.c
> +++ b/bfd/archures.c
> @@ -359,6 +359,7 @@ DESCRIPTION
> .#define bfd_mach_arc_arc601 4
> .#define bfd_mach_arc_arc700 3
> .#define bfd_mach_arc_arcv2 5
> +.#define bfd_mach_arc_nps400 6
> . bfd_arch_m32c, {* Renesas M16C/M32C. *}
> .#define bfd_mach_m16c 0x75
> .#define bfd_mach_m32c 0x78
> diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
> index 13f2d6e..f02e2aa 100644
> --- a/bfd/bfd-in2.h
> +++ b/bfd/bfd-in2.h
> @@ -2174,6 +2174,7 @@ enum bfd_architecture
> #define bfd_mach_arc_arc601 4
> #define bfd_mach_arc_arc700 3
> #define bfd_mach_arc_arcv2 5
> +#define bfd_mach_arc_nps400 6
> bfd_arch_m32c, /* Renesas M16C/M32C. */
> #define bfd_mach_m16c 0x75
> #define bfd_mach_m32c 0x78
> diff --git a/bfd/cpu-arc.c b/bfd/cpu-arc.c
> index 07a052b..472af8d 100644
> --- a/bfd/cpu-arc.c
> +++ b/bfd/cpu-arc.c
> @@ -47,8 +47,9 @@ static const bfd_arch_info_type arch_info_struct[] =
> 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_arcv2, "ARCv2", FALSE, &arch_info_struct[6]),
> - ARC (bfd_mach_arc_arcv2, "EM", FALSE, &arch_info_struct[7]),
> + 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),
> };
>
> diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c
> index ec81852..488b86f 100644
> --- a/bfd/elf32-arc.c
> +++ b/bfd/elf32-arc.c
> @@ -610,6 +610,9 @@ arc_elf_object_p (bfd * abfd)
> case E_ARC_MACH_ARC700:
> mach = bfd_mach_arc_arc700;
> break;
> + case E_ARC_MACH_NPS400:
> + mach = bfd_mach_arc_nps400;
> + break;
> case EF_ARC_CPU_ARCV2HS:
> case EF_ARC_CPU_ARCV2EM:
> mach = bfd_mach_arc_arcv2;
> @@ -659,6 +662,9 @@ arc_elf_final_write_processing (bfd * abfd,
> case bfd_mach_arc_arc700:
> emf = EM_ARC_COMPACT;
> break;
> + case bfd_mach_arc_nps400:
> + emf = EM_ARC_COMPACT;
> + break;
> case bfd_mach_arc_arcv2:
> emf = EM_ARC_COMPACT2;
> break;
> diff --git a/binutils/ChangeLog b/binutils/ChangeLog
> index 1ac9384..de99ad2 100644
> --- a/binutils/ChangeLog
> +++ b/binutils/ChangeLog
> @@ -1,5 +1,9 @@
> 2016-03-15 Andrew Burgess <andrew.burgess@embecosm.com>
>
> + * readelf.c (get_machine_flags): Handle nps400.
> +
> +2016-03-15 Andrew Burgess <andrew.burgess@embecosm.com>
> +
> * readelf.c (get_machine_flags): Remove use of
> EF_ARC_CPU_GENERIC.
>
> 2016-03-15 Andrew Burgess <andrew.burgess@embecosm.com>
> diff --git a/binutils/readelf.c b/binutils/readelf.c
> index b764234..920eca5 100644
> --- a/binutils/readelf.c
> +++ b/binutils/readelf.c
> @@ -2785,6 +2785,9 @@ get_machine_flags (unsigned e_flags, unsigned
> e_machine)
> case E_ARC_MACH_ARC700:
> strcat (buf, ", ARC700");
> break;
> + case E_ARC_MACH_NPS400:
> + strcat (buf, ", NPS400");
> + break;
> default:
> strcat (buf, ", unrecognized cpu flag for ARCv2");
> break;
> @@ -2819,6 +2822,9 @@ get_machine_flags (unsigned e_flags, unsigned
> e_machine)
> case E_ARC_MACH_ARC700:
> strcat (buf, ", ARC 700");
> break;
> + case E_ARC_MACH_NPS400:
> + strcat (buf, ", NPS400");
> + break;
> default:
> strcat (buf, ", Generic ARCompact");
> break;
> diff --git a/gas/ChangeLog b/gas/ChangeLog
> index 16d7f34..8df40e9 100644
> --- a/gas/ChangeLog
> +++ b/gas/ChangeLog
> @@ -1,5 +1,10 @@
> 2016-03-15 Andrew Burgess <andrew.burgess@embecosm.com>
>
> + * config/tc-arc.c (cpu_types): Add nps400 entry.
> + (check_zol): Handle nps400.
> +
> +2016-03-15 Andrew Burgess <andrew.burgess@embecosm.com>
> +
> * config/tc-arc.c (arc_select_cpu): Remove use of
> EF_ARC_CPU_GENERIC.
>
> diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c
> index 65eb0e9..2bf7f13 100644
> --- a/gas/config/tc-arc.c
> +++ b/gas/config/tc-arc.c
> @@ -342,6 +342,8 @@ static const struct cpu_type
> E_ARC_MACH_ARC600, 0x00},
> { "arc700", ARC_OPCODE_ARC700, bfd_mach_arc_arc700,
> E_ARC_MACH_ARC700, 0x00},
> + { "nps400", ARC_OPCODE_ARC700 | ARC_OPCODE_NPS400,
> bfd_mach_arc_nps400,
> + E_ARC_MACH_NPS400, 0x00},
> { "arcem", ARC_OPCODE_ARCv2EM, bfd_mach_arc_arcv2,
> EF_ARC_CPU_ARCV2EM, ARC_CD},
> { "archs", ARC_OPCODE_ARCv2HS, bfd_mach_arc_arcv2,
> @@ -3655,6 +3657,7 @@ check_zol (symbolS *s)
> end of the ZOL label @%s"), S_GET_NAME (s));
>
> /* Fall through. */
> + case bfd_mach_arc_nps400:
> case bfd_mach_arc_arc700:
> if (arc_last_insns[0].has_delay_slot)
> as_bad (_("An illegal use of delay slot detected at the end of the ZOL
> label @%s"),
> diff --git a/include/ChangeLog b/include/ChangeLog
> index 102d1c0..d531748 100644
> --- a/include/ChangeLog
> +++ b/include/ChangeLog
> @@ -1,5 +1,10 @@
> 2016-03-15 Andrew Burgess <andrew.burgess@embecosm.com>
>
> + * elf/arc.h (E_ARC_MACH_NPS400): Define.
> + * opcode/arc.h (ARC_OPCODE_NPS400): Define.
> +
> +2016-03-15 Andrew Burgess <andrew.burgess@embecosm.com>
> +
> * elf/arc.h (EF_ARC_CPU_GENERIC): Delete. Update related
> comment.
>
> 2016-03-15 Andrew Burgess <andrew.burgess@embecosm.com>
> diff --git a/include/elf/arc.h b/include/elf/arc.h
> index 47381f3..2aed25d 100644
> --- a/include/elf/arc.h
> +++ b/include/elf/arc.h
> @@ -48,6 +48,7 @@ END_RELOC_NUMBERS (R_ARC_max)
> #define E_ARC_MACH_ARC600 0x00000002
> #define E_ARC_MACH_ARC601 0x00000004
> #define E_ARC_MACH_ARC700 0x00000003
> +#define E_ARC_MACH_NPS400 0x00000007
> #define EF_ARC_CPU_ARCV2EM 0x00000005
> #define EF_ARC_CPU_ARCV2HS 0x00000006
>
> diff --git a/include/opcode/arc.h b/include/opcode/arc.h
> index d33b878..85ea735 100644
> --- a/include/opcode/arc.h
> +++ b/include/opcode/arc.h
> @@ -132,6 +132,7 @@ extern const unsigned arc_num_opcodes;
> #define ARC_OPCODE_ARC700 0x0002 /* ARC 700 specific insns. */
> #define ARC_OPCODE_ARCv2EM 0x0004 /* ARCv2 EM specific insns. */
> #define ARC_OPCODE_ARCv2HS 0x0008 /* ARCv2 HS specific insns. */
> +#define ARC_OPCODE_NPS400 0x0010 /* NPS400 specific insns. */
>
> /* CPU extensions. */
> #define ARC_EA 0x0001
> diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
> index e367f65..f9c5f77 100644
> --- a/opcodes/ChangeLog
> +++ b/opcodes/ChangeLog
> @@ -1,5 +1,9 @@
> 2016-03-15 Andrew Burgess <andrew.burgess@embecosm.com>
>
> + * arc-dis.c (print_insn_arc): Handle nps400.
> +
> +2016-03-15 Andrew Burgess <andrew.burgess@embecosm.com>
> +
> * arc-opc.c (BASE): Delete.
>
> 2016-03-07 Trevor Saunders <tbsaunde+binutils@tbsaunde.org>
> diff --git a/opcodes/arc-dis.c b/opcodes/arc-dis.c
> index 7320c9f..aeb3ba6 100644
> --- a/opcodes/arc-dis.c
> +++ b/opcodes/arc-dis.c
> @@ -132,6 +132,10 @@ print_insn_arc (bfd_vma memaddr,
>
> switch (info->mach)
> {
> + case bfd_mach_arc_nps400:
> + isa_mask = ARC_OPCODE_ARC700 | ARC_OPCODE_NPS400;
> + break;
> +
> case bfd_mach_arc_arc700:
> isa_mask = ARC_OPCODE_ARC700;
> break;
> --
> 2.5.1