arc: Add --with-fpu support for ARCv2 cpus
authorClaudiu Zissulescu <claziss@synopsys.com>
Mon, 14 Jun 2021 12:33:17 +0000 (15:33 +0300)
committerClaudiu Zissulescu <claziss@synopsys.com>
Mon, 14 Jun 2021 12:33:25 +0000 (15:33 +0300)
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/
2021-06-14  Claudiu Zissulescu  <claziss@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 <claziss@synopsys.com>
gcc/config.gcc
gcc/config/arc/arc.h

index 4dc4fe0b65c07a900f59dfa80fa889528fd837c7..1be8d96f5e5addafd5db1710c8543c3aa208e3d3 100644 (file)
@@ -4260,18 +4260,52 @@ 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," \
-                      ${srcdir}/config/arc/arc-cpus.def \
-                      > /dev/null; then
+                   || grep -q -E "^ARC_CPU[[:blank:]]*\($with_cpu," \
+                      ${srcdir}/config/arc/arc-cpus.def
+               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
+                       flags_ok="[emhs]+"
+                       ;;
+               fpuda | fpuda_div | fpuda_fma | fpuda_all)
+                       # OK only em
+                       flags_ok="em"
+                       ;;
+               fpud | fpud_div | fpud_fma | fpud_all)
+                       # OK only hs
+                       flags_ok="hs"
+                       ;;
+               *)
+                       echo "Unknown floating point type used in "\
+                            "--with-fpu=$with_fpu" 1>&2
+                       exit 1
+                       ;;
+               esac
+
+               if [ -n "$flags_ok" ] \
+                  && ! grep -q -E "^ARC_CPU[[:blank:]]*\($new_cpu,[[:blank:]]*$flags_ok," \
+                  ${srcdir}/config/arc/arc-cpus.def
+               then
+                  echo "Unknown floating point type used in "\
+                        "--with-fpu=$with_fpu for cpu $new_cpu" 1>&2
+                        exit 1
+               fi
                ;;
 
     csky-*-*)
index 0224ae65074f1032e5a80c08dbfe4705e6ee265f..8cd63500044a021596c88b65b163a5ca766f38d7 100644 (file)
@@ -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