diff options
author | Claudiu Zissulescu <claziss@synopsys.com> | 2016-11-15 16:10:13 +0100 |
---|---|---|
committer | Claudiu Zissulescu <claziss@gcc.gnu.org> | 2016-11-15 16:10:13 +0100 |
commit | f9ccf89916a2adc029d9e2f8611b09e17a236c3d (patch) | |
tree | 9df4111e2b05f6dcf2e793a19e73624fde74e578 /gcc/config/arc/arc.h | |
parent | 2cf63121e9640348fa3d917dfb247da545255c61 (diff) | |
download | gcc-f9ccf89916a2adc029d9e2f8611b09e17a236c3d.zip gcc-f9ccf89916a2adc029d9e2f8611b09e17a236c3d.tar.gz gcc-f9ccf89916a2adc029d9e2f8611b09e17a236c3d.tar.bz2 |
[ARC] New option handling, refurbish multilib support.
gcc/
2016-11-15 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc-arch.h: New file.
* config/arc/arc-arches.def: Likewise.
* config/arc/arc-cpus.def: Likewise.
* config/arc/arc-options.def: Likewise.
* config/arc/t-multilib: Likewise.
* config/arc/genmultilib.awk: Likewise.
* config/arc/genoptions.awk: Likewise.
* config/arc/arc-tables.opt: Likewise.
* config/arc/driver-arc.c: Likewise.
* testsuite/gcc.target/arc/nps400-cpu-flag.c: Likewise.
* common/config/arc/arc-common.c (arc_handle_option): Trace
toggled options.
* config.gcc (arc*-*-*): Add arc-tables.opt to arc's extra
options; check for supported cpu against arc-cpus.def file.
(arc*-*-elf*, arc*-*-linux-uclibc*): Use new make fragment; define
TARGET_CPU_BUILD macro; add driver-arc.o as an extra object.
* config/arc/arc-c.def: Add emacs local variables.
* config/arc/arc-opts.h (processor_type): Use arc-cpus.def file.
(FPU_FPUS, FPU_FPUD, FPU_FPUDA, FPU_FPUDA_DIV, FPU_FPUDA_FMA)
(FPU_FPUDA_ALL, FPU_FPUS_DIV, FPU_FPUS_FMA, FPU_FPUS_ALL)
(FPU_FPUD_DIV, FPU_FPUD_FMA, FPU_FPUD_ALL): New defines.
(DEFAULT_arc_fpu_build): Define.
(DEFAULT_arc_mpy_option): Define.
* config/arc/arc-protos.h (arc_init): Delete.
* config/arc/arc.c (arc_cpu_name): New variable.
(arc_selected_cpu, arc_selected_arch, arc_arcem, arc_archs)
(arc_arc700, arc_arc600, arc_arc601): New variable.
(arc_init): Add static; remove selection of default tune value,
cleanup obsolete error messages.
(arc_override_options): Make use of .def files for selecting the
right cpu and option configurations.
* config/arc/arc.h (stdbool.h): Include.
(TARGET_CPU_DEFAULT): Define.
(CPP_SPEC): Remove mcpu=NPS400 handling.
(arc_cpu_to_as): Declare.
(EXTRA_SPEC_FUNCTIONS): Define.
(OPTION_DEFAULT_SPECS): Likewise.
(ASM_DEFAULT): Remove.
(ASM_SPEC): Use arc_cpu_to_as.
(DRIVER_SELF_SPECS): Remove deprecated options.
(arc_base_cpu): Declare.
(TARGET_ARC600, TARGET_ARC601, TARGET_ARC700, TARGET_EM)
(TARGET_HS, TARGET_V2, TARGET_ARC600): Make them use arc_base_cpu
variable.
(MULTILIB_DEFAULTS): Use ARC_MULTILIB_CPU_DEFAULT.
* config/arc/arc.md (attr_cpu): Remove.
* config/arc/arc.opt (mno-mpy): Deprecate.
(mcpu=ARC600, mcpu=ARC601, mcpu=ARC700, mcpu=NPS400, mcpu=ARCEM)
(mcpu=ARCHS): Remove.
(mcrc, mdsp-packa, mdvbf, mmac-d16, mmac-24, mtelephony, mrtsc):
Deprecate.
(mbarrel_shifte, mspfp_, mdpfp_, mdsp_pack, mmac_): Remove.
(arc_fpu): Use new defines.
(mpy-option): Change to use numeric or string like inputs.
* config/arc/t-arc (driver-arc.o): New target.
(arc-cpus, t-multilib, arc-tables.opt): Likewise.
* config/arc/t-arc-newlib: Delete.
* config/arc/t-arc-uClibc: Renamed to t-uClibc.
* doc/invoke.texi (ARC): Update arc options.
Fixup
From-SVN: r242425
Diffstat (limited to 'gcc/config/arc/arc.h')
-rw-r--r-- | gcc/config/arc/arc.h | 89 |
1 files changed, 40 insertions, 49 deletions
diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h index a4adce0..6188a4f 100644 --- a/gcc/config/arc/arc.h +++ b/gcc/config/arc/arc.h @@ -28,6 +28,8 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_ARC_H #define GCC_ARC_H +#include <stdbool.h> + /* Things to do: - incscc, decscc? @@ -39,6 +41,10 @@ along with GCC; see the file COPYING3. If not see #define SYMBOL_FLAG_LONG_CALL (SYMBOL_FLAG_MACH_DEP << 2) #define SYMBOL_FLAG_CMEM (SYMBOL_FLAG_MACH_DEP << 3) +#ifndef TARGET_CPU_DEFAULT +#define TARGET_CPU_DEFAULT PROCESSOR_arc700 +#endif + /* Check if this symbol has a long_call attribute in its declaration */ #define SYMBOL_REF_LONG_CALL_P(X) \ ((SYMBOL_REF_FLAGS (X) & SYMBOL_FLAG_LONG_CALL) != 0) @@ -74,9 +80,11 @@ along with GCC; see the file COPYING3. If not see GNU_USER_TARGET_OS_CPP_BUILTINS (); \ } \ while (0) -#endif -/* Match the macros used in the assembler. */ +#endif /* DEFAULT_LIBC == LIBC_UCLIBC */ + +/* Macros enabled by specific command line option. FIXME: to be + deprecatd. */ #define CPP_SPEC "\ %{msimd:-D__Xsimd} %{mno-mpy:-D__Xno_mpy} %{mswap:-D__Xswap} \ %{mmin-max:-D__Xmin_max} %{mEA:-D__Xea} \ @@ -85,34 +93,22 @@ along with GCC; see the file COPYING3. If not see %{mdsp-packa:-D__Xdsp_packa} %{mcrc:-D__Xcrc} %{mdvbf:-D__Xdvbf} \ %{mtelephony:-D__Xtelephony} %{mxy:-D__Xxy} %{mmul64: -D__Xmult32} \ %{mlock:-D__Xlock} %{mswape:-D__Xswape} %{mrtsc:-D__Xrtsc} \ -%{mcpu=NPS400:-D__NPS400__} \ -%{mcpu=nps400:-D__NPS400__} \ -" +%{mcpu=nps400:-D__NPS400__}" #define CC1_SPEC "\ %{EB:%{EL:%emay not use both -EB and -EL}} \ %{EB:-mbig-endian} %{EL:-mlittle-endian} \ " +extern const char *arc_cpu_to_as (int argc, const char **argv); + +#define EXTRA_SPEC_FUNCTIONS \ + { "cpu_to_as", arc_cpu_to_as }, + +#define ASM_SPEC "%{mbig-endian|EB:-EB} %{EL} " \ + "%:cpu_to_as(%{mcpu=*:%*}) %{mspfp*} %{mdpfp*} %{mfpu=fpuda*:-mfpuda}" -#define ASM_DEFAULT "-mARC700 -mEA" - -#define ASM_SPEC "\ -%{mbig-endian|EB:-EB} %{EL} \ -%{mcpu=ARC600:-mARC600} \ -%{mcpu=ARC601:-mARC601} \ -%{mcpu=ARC700:-mARC700} \ -%{mcpu=ARC700:-mEA} \ -%{!mcpu=*:" ASM_DEFAULT "} \ -%{mbarrel-shifter} %{mno-mpy} %{mmul64} %{mmul32x16:-mdsp-packa} %{mnorm} \ -%{mswap} %{mEA} %{mmin-max} %{mspfp*} %{mdpfp*} %{mfpu=fpuda*:-mfpuda} \ -%{msimd} \ -%{mmac-d16} %{mmac-24} %{mdsp-packa} %{mcrc} %{mdvbf} %{mtelephony} %{mxy} \ -%{mcpu=ARC700|!mcpu=*:%{mlock}} \ -%{mcpu=ARC700|!mcpu=*:%{mswape}} \ -%{mcpu=ARC700|!mcpu=*:%{mrtsc}} \ -%{mcpu=ARCHS:-mHS} \ -%{mcpu=ARCEM:-mEM} \ -%{matomic:-mlock}" +#define OPTION_DEFAULT_SPECS \ + {"cpu", "%{!mcpu=*:%{!mARC*:%{!marc*:%{!mA7:%{!mA6:-mcpu=%(VALUE)}}}}}" } #if DEFAULT_LIBC == LIBC_UCLIBC /* Note that the default is to link against dynamic libraries, if they are @@ -178,17 +174,11 @@ along with GCC; see the file COPYING3. If not see #define TARGET_MMEDIUM_CALLS_DEFAULT 0 #endif -#define DRIVER_SELF_SPECS DRIVER_ENDIAN_SELF_SPECS \ - "%{mARC600|mA6: -mcpu=ARC600 %<mARC600 %<mA6}" \ - "%{mARC601: -mcpu=ARC601 %<mARC601}" \ - "%{mARC700|mA7: -mcpu=ARC700 %<mARC700 %<mA7}" \ - "%{mbarrel_shifte*: -mbarrel-shifte%* %<mbarrel_shifte*}" \ - "%{mEA: -mea %<mEA}" \ - "%{mspfp_*: -mspfp-%* %<mspfp_*}" \ - "%{mdpfp_*: -mdpfp-%* %<mdpfp_*}" \ - "%{mdsp_pack*: -mdsp-pack%* %<mdsp_pack*}" \ - "%{mmac_*: -mmac-%* %<mmac_*}" \ - "%{multcost=*: -mmultcost=%* %<multcost=*}" +#define DRIVER_SELF_SPECS DRIVER_ENDIAN_SELF_SPECS \ + "%{mARC600|mA6: -mcpu=arc600 %<mARC600 %<mA6 %<mARC600}" \ + "%{mARC601: -mcpu=arc601 %<mARC601}" \ + "%{mARC700|mA7: -mcpu=arc700 %<mARC700 %<mA7}" \ + "%{mEA: -mea %<mEA}" /* Run-time compilation parameters selecting different hardware subsets. */ @@ -234,20 +224,21 @@ along with GCC; see the file COPYING3. If not see use conditional execution? */ #define TARGET_AT_DBR_CONDEXEC (!TARGET_ARC700 && !TARGET_V2) -#define TARGET_ARC600 (arc_cpu == PROCESSOR_ARC600) -#define TARGET_ARC601 (arc_cpu == PROCESSOR_ARC601) -#define TARGET_ARC700 (arc_cpu == PROCESSOR_ARC700 \ - || arc_cpu == PROCESSOR_NPS400) -#define TARGET_EM (arc_cpu == PROCESSOR_ARCEM) -#define TARGET_HS (arc_cpu == PROCESSOR_ARCHS) -#define TARGET_V2 \ - ((arc_cpu == PROCESSOR_ARCHS) || (arc_cpu == PROCESSOR_ARCEM)) - -/* Recast the cpu class to be the cpu attribute. */ -#define arc_cpu_attr ((enum attr_cpu)arc_cpu) - -#ifndef MULTILIB_DEFAULTS -#define MULTILIB_DEFAULTS { "mARC700" } +extern enum base_architecture arc_base_cpu; + +#define TARGET_ARC600 ((arc_base_cpu == BASE_ARCH_6xx) \ + && (TARGET_BARREL_SHIFTER)) +#define TARGET_ARC601 ((arc_base_cpu == BASE_ARCH_6xx) \ + && (!TARGET_BARREL_SHIFTER)) +#define TARGET_ARC700 (arc_base_cpu == BASE_ARCH_700) +#define TARGET_EM (arc_base_cpu == BASE_ARCH_em) +#define TARGET_HS (arc_base_cpu == BASE_ARCH_hs) +#define TARGET_V2 (TARGET_EM || TARGET_HS) + +#ifdef ARC_MULTILIB_CPU_DEFAULT +# ifndef MULTILIB_DEFAULTS +# define MULTILIB_DEFAULTS { "mcpu=" ARC_MULTILIB_CPU_DEFAULT } +# endif #endif #ifndef UNALIGNED_ACCESS_DEFAULT |