From 53a346d8236aec06f1d3c767716d3340fb0aa013 Mon Sep 17 00:00:00 2001 From: Claudiu Zissulescu Date: Wed, 10 May 2017 14:42:22 +0200 Subject: [ARC] Object attributes. gas/ 2017-05-10 Claudiu Zissulescu * testsuite/gas/arc/attr-arc600.d: New file. * testsuite/gas/arc/attr-arc600_mul32x16.d: Likewise. * testsuite/gas/arc/attr-arc600_norm.d: Likewise. * testsuite/gas/arc/attr-arc601.d: Likewise. * testsuite/gas/arc/attr-arc601_mul32x16.d: Likewise. * testsuite/gas/arc/attr-arc601_mul64.d: Likewise. * testsuite/gas/arc/attr-arc601_norm.d: Likewise. * testsuite/gas/arc/attr-arc700.d: Likewise. * testsuite/gas/arc/attr-arcem.d: Likewise. * testsuite/gas/arc/attr-archs.d: Likewise. * testsuite/gas/arc/attr-autodetect-1.d: Likewise. * testsuite/gas/arc/attr-autodetect-1.s: Likewise. * testsuite/gas/arc/attr-cpu-a601.d: Likewise. * testsuite/gas/arc/attr-cpu-a601.s: Likewise. * testsuite/gas/arc/attr-cpu-a700.d: Likewise. * testsuite/gas/arc/attr-cpu-a700.s: Likewise. * testsuite/gas/arc/attr-cpu-em.d: Likewise. * testsuite/gas/arc/attr-cpu-em.s: Likewise. * testsuite/gas/arc/attr-cpu-hs.d: Likewise. * testsuite/gas/arc/attr-cpu-hs.s: Likewise. * testsuite/gas/arc/attr-em.d: Likewise. * testsuite/gas/arc/attr-em4.d: Likewise. * testsuite/gas/arc/attr-em4_dmips.d: Likewise. * testsuite/gas/arc/attr-em4_fpuda.d: Likewise. * testsuite/gas/arc/attr-em4_fpus.d: Likewise. * testsuite/gas/arc/attr-hs.d: Likewise. * testsuite/gas/arc/attr-hs34.d: Likewise. * testsuite/gas/arc/attr-hs38.d: Likewise. * testsuite/gas/arc/attr-hs38_linux.d: Likewise. * testsuite/gas/arc/attr-mul64.d: Likewise. * testsuite/gas/arc/attr-name.d: Likewise. * testsuite/gas/arc/attr-name.s: Likewise. * testsuite/gas/arc/attr-nps400.d: Likewise. * testsuite/gas/arc/attr-override-mcpu.d: Likewise. * testsuite/gas/arc/attr-override-mcpu.s * testsuite/gas/arc/attr-quarkse_em.d: Likewise. * testsuite/gas/arc/blank.s: Likewise. * testsuite/gas/elf/section2.e-arc: Likewise. * testsuite/gas/arc/cpu-pseudop-1.d: Update test. * testsuite/gas/arc/cpu-pseudop-2.d: Likewise. * testsuite/gas/arc/nps400-0.d: Likewise. * testsuite/gas/elf/elf.exp: Set target_machine for ARC. * config/tc-arc.c (opcode/arc-attrs.h): Include. (ARC_GET_FLAG, ARC_SET_FLAG, streq): Define. (arc_attribute): Declare new function. (md_pseudo_table): Add arc_attribute. (cpu_types): Rename default cpu features. (selected_cpu): Set the default OSABI flag. (mpy_option): New variable. (pic_option): Likewise. (sda_option): Likewise. (tls_option): Likewise. (feature_type, feature_list): Remove. (arc_initial_eflag): Likewise. (attributes_set_explicitly): New variable. (arc_check_feature): Check also for the conflicting features. (arc_select_cpu): Refactor assignment of selected_cpu.eflags. (arc_option): Remove setting of private flags and architecture. (check_cpu_feature): Refactor feature names. (autodetect_attributes): New function. (assemble_tokens): Use above function. (md_parse_option): Refactor feature names. (arc_attribute): New function. (arc_set_attribute_int): Likewise. (arc_set_attribute_string): Likewise. (arc_stralloc): Likewise. (arc_set_public_attributes): Likewise. (arc_md_end): Likewise. (arc_copy_symbol_attributes): Likewise. (rc_convert_symbolic_attribute): Likewise. * config/tc-arc.h (md_end): Define. (CONVERT_SYMBOLIC_ATTRIBUTE): Likewise. (TC_COPY_SYMBOL_ATTRIBUTES): Likewise. * doc/c-arc.texi: Document ARC object attributes. binutils/ 2017-05-10 Claudiu Zissulescu * readelf.c (decode_ARC_machine_flags): Recognize OSABI v4. (get_arc_section_type_name): New function. (get_section_type_name): Use the above function. (display_arc_attribute): New function. (process_arc_specific): Likewise. (process_arch_specific): Handle ARC specific information. * testsuite/binutils-all/strip-3.d: Consider ARC.attributes section. include/ 2017-05-10 Claudiu Zissulescu * elf/arc.h (SHT_ARC_ATTRIBUTES): Define. (Tag_ARC_*): Define. (E_ARC_OSABI_V4): Define. (E_ARC_OSABI_CURRENT): Reassign it. (TAG_CPU_*): Define. * opcode/arc-attrs.h: New file. * opcode/arc.h (insn_subclass_t): Assign enum values. (insn_subclass_t): Update enum with QUARKSE1, QUARKSE2, and LL64. (ARC_EA, ARC_CD, ARC_LLOCK, ARC_ATOMIC, ARC_MPY, ARC_MULT) (ARC_NPS400, ARC_DPFP, ARC_SPFP, ARC_FPU, ARC_FPUDA, ARC_SWAP) (ARC_NORM, ARC_BSCAN, ARC_UIX, ARC_TSTAMP, ARC_VBFDW) (ARC_BARREL, ARC_DSPA, ARC_SHIFT, ARC_INTR, ARC_DIV, ARC_XMAC) (ARC_CRC): Delete. bfd/ 2017-05-10 Claudiu Zissulescu * elf32-arc.c (FEATURE_LIST_NAME): Define. (CONFLICT_LIST): Likewise. (opcode/arc-attrs.h): Include. (arc_elf_print_private_bfd_data): Print OSABI v4 flag. (arc_extract_features): New file. (arc_stralloc): Likewise. (arc_elf_merge_attributes): Likewise. (arc_elf_merge_private_bfd_data): Use object attributes. (bfd_arc_get_mach_from_attributes): New function. (arc_elf_object_p): Use object attributes. (arc_elf_final_write_processing): Likewise. (elf32_arc_obj_attrs_arg_type): New function. (elf32_arc_obj_attrs_handle_unknown): Likewise. (elf32_arc_section_from_shdr): Likewise. (elf_backend_obj_attrs_vendor): Define. (elf_backend_obj_attrs_section): Likewise. (elf_backend_obj_attrs_arg_type): Likewise. (elf_backend_obj_attrs_section_type): Likewise. (elf_backend_obj_attrs_handle_unknown): Likewise. (elf_backend_section_from_shdr): Likewise. ld/ 2017-05-10 Claudiu Zissulescu * testsuite/ld-arc/attr-merge-0.d: New file. * testsuite/ld-arc/attr-merge-0.s: Likewise. * testsuite/ld-arc/attr-merge-0e.s: Likewise. * testsuite/ld-arc/attr-merge-1.d: Likewise. * testsuite/ld-arc/attr-merge-1.s: Likewise. * testsuite/ld-arc/attr-merge-1e.s: Likewise. * testsuite/ld-arc/attr-merge-2.d: Likewise. * testsuite/ld-arc/attr-merge-2.s: Likewise. * testsuite/ld-arc/attr-merge-3.d: Likewise. * testsuite/ld-arc/attr-merge-3.s: Likewise. * testsuite/ld-arc/attr-merge-3e.s: Likewise. * testsuite/ld-arc/attr-merge-4.s: Likewise. * testsuite/ld-arc/attr-merge-5.d: Likewise. * testsuite/ld-arc/attr-merge-5a.s: Likewise. * testsuite/ld-arc/attr-merge-5b.s: Likewise. * testsuite/ld-arc/attr-merge-conflict-isa.d: Likewise. * testsuite/ld-arc/attr-merge-err-isa.d: Likewise. * testsuite/ld-arc/attr-merge-incompatible-cpu.d: Likewise. * testsuite/ld-arc/got-01.d: Update test. * testsuite/ld-arc/attr-merge-err-quarkse.d: New file. * testsuite/ld-arc/attr-quarkse.s: Likewise. * testsuite/ld-arc/attr-quarkse2.s: Likewise. opcodes/ 2017-05-10 Claudiu Zissulescu * arc-dis.c (parse_option): Update quarkse_em option.. * arc-ext-tbl.h (dsp_fp_flt2i, dsp_fp_i2flt): Change subclass to QUARKSE1. (dsp_fp_div, dsp_fp_cmp): Change subclass to QUARKSE2. --- include/ChangeLog | 16 +++++++++ include/elf/arc.h | 34 ++++++++++++++++-- include/opcode/arc-attrs.h | 72 +++++++++++++++++++++++++++++++++++++ include/opcode/arc.h | 88 ++++++++++++++-------------------------------- 4 files changed, 146 insertions(+), 64 deletions(-) create mode 100644 include/opcode/arc-attrs.h (limited to 'include') diff --git a/include/ChangeLog b/include/ChangeLog index 31dc68f..5ee7cba 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,19 @@ +2017-05-10 Claudiu Zissulescu + + * elf/arc.h (SHT_ARC_ATTRIBUTES): Define. + (Tag_ARC_*): Define. + (E_ARC_OSABI_V4): Define. + (E_ARC_OSABI_CURRENT): Reassign it. + (TAG_CPU_*): Define. + * opcode/arc-attrs.h: New file. + * opcode/arc.h (insn_subclass_t): Assign enum values. + (insn_subclass_t): Update enum with QUARKSE1, QUARKSE2, and LL64. + (ARC_EA, ARC_CD, ARC_LLOCK, ARC_ATOMIC, ARC_MPY, ARC_MULT) + (ARC_NPS400, ARC_DPFP, ARC_SPFP, ARC_FPU, ARC_FPUDA, ARC_SWAP) + (ARC_NORM, ARC_BSCAN, ARC_UIX, ARC_TSTAMP, ARC_VBFDW) + (ARC_BARREL, ARC_DSPA, ARC_SHIFT, ARC_INTR, ARC_DIV, ARC_XMAC) + (ARC_CRC): Delete. + 2017-04-20 H.J. Lu PR ld/21382 diff --git a/include/elf/arc.h b/include/elf/arc.h index 944f49a..78da89c 100644 --- a/include/elf/arc.h +++ b/include/elf/arc.h @@ -55,12 +55,42 @@ END_RELOC_NUMBERS (R_ARC_max) #define E_ARC_OSABI_ORIG 0x00000000 /* MUST be 0 for back-compat. */ #define E_ARC_OSABI_V2 0x00000200 #define E_ARC_OSABI_V3 0x00000300 -#define E_ARC_OSABI_CURRENT E_ARC_OSABI_V3 - +#define E_ARC_OSABI_V4 0x00000400 +#define E_ARC_OSABI_CURRENT E_ARC_OSABI_V4 /* Leave bits 0xf0 alone in case we ever have more than 16 cpu types. */ /* File contains position independent code. */ #define EF_ARC_PIC 0x00000100 +/* Additional section types. */ +#define SHT_ARC_ATTRIBUTES 0x70000001 /* Section holds attributes. */ + +/* ARC ABI object attributes. */ +enum { + /* 0-3 are generic. */ + Tag_ARC_PCS_config = 4, + Tag_ARC_CPU_base, + Tag_ARC_CPU_variation, + Tag_ARC_CPU_name, + Tag_ARC_ABI_rf16, + Tag_ARC_ABI_osver, + Tag_ARC_ABI_sda, + Tag_ARC_ABI_pic, + Tag_ARC_ABI_tls, + Tag_ARC_ABI_enumsize, + Tag_ARC_ABI_exceptions, + Tag_ARC_ABI_double_size, + Tag_ARC_ISA_config, + Tag_ARC_ISA_apex, + Tag_ARC_ISA_mpy_option +}; + +/* Values for the Tag_ARC_cpu_base attribute. */ +#define TAG_CPU_NONE 0 +#define TAG_CPU_ARC6xx 1 +#define TAG_CPU_ARC7xx 2 +#define TAG_CPU_ARCEM 3 +#define TAG_CPU_ARCHS 4 + #endif /* _ELF_ARC_H */ diff --git a/include/opcode/arc-attrs.h b/include/opcode/arc-attrs.h new file mode 100644 index 0000000..4c36d00 --- /dev/null +++ b/include/opcode/arc-attrs.h @@ -0,0 +1,72 @@ +/* Copyright (C) 1994-2016 Free Software Foundation, Inc. + + Contributed by Claudiu Zissulescu (claziss@synopsys.com) + + This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and + the GNU Binutils. + + GAS/GDB 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, or (at your option) + any later version. + + GAS/GDB 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 GAS or GDB; see the file COPYING3. If not, write to + the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#ifndef ATTRS_ARC_H +#define ATTRS_ARC_H + +#ifndef FEATURE_LIST_NAME +#define FEATURE_LIST_NAME feature_list +#endif + +/* A table with cpu features. */ +const struct feature_type +{ + unsigned feature; + unsigned cpus; + const char *attr; + const char *name; +} FEATURE_LIST_NAME [] = + { + { BTSCN, ARC_OPCODE_ARCALL, "BITSCAN", "bit-scan" }, + { CD, ARC_OPCODE_ARCV2, "CD", "code-density" }, + { DIV, ARC_OPCODE_ARCV2, "DIV_REM", "div/rem" }, + { DP, ARC_OPCODE_ARCv2HS, "FPUD", "double-precision FPU" }, + { DPA, ARC_OPCODE_ARCv2EM, "FPUDA", "double assist FP" }, + { DPX, ARC_OPCODE_ARCFPX, "DPFP", "double-precision FPX" }, + { LL64, ARC_OPCODE_ARCv2HS, "LL64", "double load/store" }, + { NPS400, ARC_OPCODE_ARC700, "NPS400", "nps400" }, + { QUARKSE1, ARC_OPCODE_ARCv2EM, "QUARKSE1", "QuarkSE-EM" }, + { QUARKSE2, ARC_OPCODE_ARCv2EM, "QUARKSE2", "QuarkSE-EM" }, + { SHFT1, ARC_OPCODE_ARCALL, "SA", "shift assist" }, + { SHFT2, ARC_OPCODE_ARCALL, "BS", "barrel-shifter" }, + { SWAP, ARC_OPCODE_ARCALL, "SWAP", "swap" }, + { SP, ARC_OPCODE_ARCV2, "FPUS", "single-precision FPU" }, + { SPX, ARC_OPCODE_ARCFPX, "SPFP", "single-precision FPX" } + }; + +#ifndef CONFLICT_LIST +#define CONFLICT_LIST conflict_list +#endif + +/* A table with conflicting features. */ +unsigned CONFLICT_LIST [] = { + NPS400 | SPX, + NPS400 | DPX, + DPX | DPA, + SP | DPX, + SP | SPX, + DP | DPX, + DP | SPX, + QUARKSE1 | DP, + QUARKSE1 | SP +}; +#endif diff --git a/include/opcode/arc.h b/include/opcode/arc.h index 97db92c..0524fda 100644 --- a/include/opcode/arc.h +++ b/include/opcode/arc.h @@ -85,28 +85,31 @@ typedef enum /* Instruction Subclass. */ typedef enum { - NONE, - CVT, - BTSCN, - CD1, - CD2, - COND, - DIV, - DP, - DPA, - DPX, - MPY1E, - MPY6E, - MPY7E, - MPY8E, - MPY9E, - NPS400, - QUARKSE, - SHFT1, - SHFT2, - SWAP, - SP, - SPX + NONE = 0, + CVT = (1U << 1), + BTSCN = (1U << 2), + CD = (1U << 3), + CD1 = CD, + CD2 = CD, + COND = (1U << 4), + DIV = (1U << 5), + DP = (1U << 6), + DPA = (1U << 7), + DPX = (1U << 8), + LL64 = (1U << 9), + MPY1E = (1U << 10), + MPY6E = (1U << 11), + MPY7E = (1U << 12), + MPY8E = (1U << 13), + MPY9E = (1U << 14), + NPS400 = (1U << 15), + QUARKSE1 = (1U << 16), + QUARKSE2 = (1U << 17), + SHFT1 = (1U << 18), + SHFT2 = (1U << 19), + SWAP = (1U << 20), + SP = (1U << 21), + SPX = (1U << 22) } insn_subclass_t; /* Flags class. */ @@ -197,46 +200,7 @@ extern int arc_opcode_len (const struct arc_opcode *opcode); | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS) #define ARC_OPCODE_ARCFPX (ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM) #define ARC_OPCODE_ARCV2 (ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS) - -/* CPU extensions. */ -#define ARC_EA 0x0001 -#define ARC_CD 0x0001 /* Mutual exclusive with EA. */ -#define ARC_LLOCK 0x0002 -#define ARC_ATOMIC 0x0002 /* Mutual exclusive with LLOCK. */ -#define ARC_MPY 0x0004 -#define ARC_MULT 0x0004 -#define ARC_NPS400 0x0008 - -/* Floating point support. */ -#define ARC_DPFP 0x0010 -#define ARC_SPFP 0x0020 -#define ARC_FPU 0x0030 -#define ARC_FPUDA 0x0040 - -/* NORM & SWAP. */ -#define ARC_SWAP 0x0100 -#define ARC_NORM 0x0200 -#define ARC_BSCAN 0x0200 - -/* A7 specific. */ -#define ARC_UIX 0x1000 -#define ARC_TSTAMP 0x1000 - -/* A6 specific. */ -#define ARC_VBFDW 0x1000 -#define ARC_BARREL 0x1000 -#define ARC_DSPA 0x1000 - -/* EM specific. */ -#define ARC_SHIFT 0x1000 - -/* V2 specific. */ -#define ARC_INTR 0x1000 -#define ARC_DIV 0x1000 - -/* V1 specific. */ -#define ARC_XMAC 0x1000 -#define ARC_CRC 0x1000 +#define ARC_OPCODE_ARCMPY6E (ARC_OPCODE_ARC700 | ARC_OPCODE_ARCV2) /* The operands table is an array of struct arc_operand. */ struct arc_operand -- cgit v1.1