Thank you for your input. I have made an update using grep's ERE. Please let me know if it is ok.
//Claudiu
>From 3f598e0fc9bc88c3f40f3e381c2955ab36e77ce0 Mon Sep 17 00:00:00 2001 From: Claudiu Zissulescu <claz...@synopsys.com> Date: Wed, 21 Oct 2020 16:11:43 +0300 Subject: [PATCH] arc: Add --with-fpu support for ARCv2 cpus Support for a compile-time default FPU. The --with-fpu configuration option is ignored if -mfpu compiler option is specified. The FPU options are only available for ARCv2 cpus. gcc/ yyyy-mm-dd Claudiu Zissulescu <claz...@synopsys.com> * config.gcc (arc): Add support for with_cpu option. * config/arc/arc.h (OPTION_DEFAULT_SPECS): Add fpu. Signed-off-by: Claudiu Zissulescu <claz...@synopsys.com> --- gcc/config.gcc | 58 +++++++++++++++++++++++++++++++++++++++++--- gcc/config/arc/arc.h | 4 +++ 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 610422fb29ee..d4445e98e0c9 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4258,18 +4258,70 @@ case "${target}" in ;; arc*-*-*) - supported_defaults="cpu" + supported_defaults="cpu fpu" + new_cpu=hs38_linux if [ x"$with_cpu" = x ] \ - || grep "^ARC_CPU ($with_cpu," \ + || grep -E "^ARC_CPU \($with_cpu," \ ${srcdir}/config/arc/arc-cpus.def \ > /dev/null; then # Ok - true + new_cpu=$with_cpu else echo "Unknown cpu used in --with-cpu=$with_cpu" 1>&2 exit 1 fi + + # see if --with-fpu matches any of the supported FPUs + case "$with_fpu" in + "") + # OK + ;; + fpus | fpus_div | fpus_fma | fpus_all) + # OK if em or hs + if grep -E "^ARC_CPU \($new_cpu,[[:space:]]+[emhs]+," \ + ${srcdir}/config/arc/arc-cpus.def \ + > /dev/null; then + # OK + true + else + echo "Unknown floating point type used in "\ + "--with-fpu=$with_fpu for cpu $new_cpu" 1>&2 + exit 1 + fi + ;; + fpuda | fpuda_div | fpuda_fma | fpuda_all) + # OK only em + if grep -E "^ARC_CPU \($new_cpu,[[:space:]]+em," \ + ${srcdir}/config/arc/arc-cpus.def \ + > /dev/null; then + # OK + true + else + echo "Unknown floating point type used in "\ + "--with-fpu=$with_fpu for cpu $new_cpu" 1>&2 + exit 1 + fi + ;; + fpud | fpud_div | fpud_fma | fpud_all) + # OK only hs + if grep -E "^ARC_CPU \($new_cpu,[[:space:]]+hs," \ + ${srcdir}/config/arc/arc-cpus.def \ + > /dev/null; then + # OK + true + else + echo "Unknown floating point type used in"\ + "--with-fpu=$with_fpu for cpu $new_cpu" 1>&2 + exit 1 + fi + ;; + *) + echo "Unknown floating point type used in "\ + "--with-fpu=$with_fpu" 1>&2 + exit 1 + ;; + esac ;; csky-*-*) diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h index 722bb10b8813..b9c4ba0398e5 100644 --- a/gcc/config/arc/arc.h +++ b/gcc/config/arc/arc.h @@ -100,7 +100,11 @@ extern const char *arc_cpu_to_as (int argc, const char **argv); "%:cpu_to_as(%{mcpu=*:%*}) %{mspfp*} %{mdpfp*} " \ "%{mfpu=fpuda*:-mfpuda} %{mcode-density}" +/* Support for a compile-time default CPU and FPU. The rules are: + --with-cpu is ignored if -mcpu, mARC*, marc*, mA7, mA6 are specified. + --with-fpu is ignored if -mfpu is specified. */ #define OPTION_DEFAULT_SPECS \ + {"fpu", "%{!mfpu=*:-mfpu=%(VALUE)}"}, \ {"cpu", "%{!mcpu=*:%{!mARC*:%{!marc*:%{!mA7:%{!mA6:-mcpu=%(VALUE)}}}}}" } #ifndef DRIVER_ENDIAN_SELF_SPECS -- 2.31.1