On Sun, Dec 22, 2013 at 11:11:12PM +0100, Uros Bizjak wrote:

> Please get someone to review config.gcc changes. They are OK as far as
> x86 rename is concerned, but I can't review functional changes.

Hi Paolo,

Can you review this config.gcc change?

> 
> > @@ -588,6 +588,22 @@ esac
> >  # Common C libraries.
> >  tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3"
> >
> > +# 32-bit x86 processors supported by --with-arch=.  Each processor
> > +# MUST be separated by exactly one space.
> > +x86_archs="athlon athlon-4 athlon-fx athlon-mp athlon-tbird \
> > +athlon-xp k6 k6-2 k6-3 geode c3 c3-2 winchip-c6 winchip2 i386 i486 \
> > +i586 i686 pentium pentium-m pentium-mmx pentium2 pentium3 pentium3m \
> > +pentium4 pentium4m pentiumpro prescott"
> 
> Missing "native".
 
x86_archs contains 32-bit x86 processors.  "native" is allowed for
64-bit targets and is included in x86_64_archs.  64-bit processors
can be used in --with-arch/--with-cpu= for 32-bit targets.

Here is a patch to improve x86 x86 --with-arch/--with-cpu= configure
handling.  This patch defines 3 variables:

1. x86_archs: It contains 32-bit x86 processors supported by
--with-arch=, which aren't allowed for 64-bit targets.
2. x86_64_archs: It contains 64-bit x86 processors supported by
--with-arch=, which are allowed for both 32-bit and 64-bit targets.
3. x86_cpus.  It contains x86 processors supported by --with-cpu=,
which are allowed for both 32-bit and 64-bit targets.

Each processor in those 3 variables are separated by exactly one space.

Instead of checking if a value of --with-arch/--with-cpu= is valid in many
difference places with

case ${val} in
valid pattern list)
  OK
  ;;
*)
  error
  exit 1
  ;;
esac

and updating all pattern lists when adding a new processor, this patch
uses

case " valid processor list separated by exactly one space " in
*" ${val} "*)
  OK
  ;;
*)
  error
  exit 1
  ;;
esac

"valid processor list separated by exactly one space" is combination
of 3 processor variables.  It only needs separate a check for empty
value with

if test x${val} != x; then
  $val isn't empty
else
  $val is empty
fi

With this approach, we only need to add new 32-bit processors to x86_archs
and new 64-bit processors to x86_64_archs.  They will be supported by
--with-arch/--with-cpu= automatically.  OK to install?

Thanks.


H.J.
---
2013-12-23   H.J. Lu  <hongjiu...@intel.com>

        PR bootstrap/59580
        PR bootstrap/59583
        * config.gcc (x86_archs): New variable.
        (x86_64_archs): Likewise.
        (x86_cpus): Likewise.
        Use $x86_archs, $x86_64_archs and $x86_cpus to check valid
        --with-arch/--with-cpu= options.
        Support --with-arch=/--with-cpu={nehalem,westmere,
        sandybridge,ivybridge,haswell,broadwell,bonnell,silvermont}.

diff --git a/gcc/config.gcc b/gcc/config.gcc
index 24dbaf9..51eb2b1 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -588,6 +588,22 @@ esac
 # Common C libraries.
 tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3"
 
+# 32-bit x86 processors supported by --with-arch=.  Each processor
+# MUST be separated by exactly one space.
+x86_archs="athlon athlon-4 athlon-fx athlon-mp athlon-tbird \
+athlon-xp k6 k6-2 k6-3 geode c3 c3-2 winchip-c6 winchip2 i386 i486 \
+i586 i686 pentium pentium-m pentium-mmx pentium2 pentium3 pentium3m \
+pentium4 pentium4m pentiumpro prescott"
+# 64-bit x86 processors supported by --with-arch=.  Each processor
+# MUST be separated by exactly one space.
+x86_64_archs="amdfam10 athlon64 athlon64-sse3 barcelona bdver1 bdver2 \
+bdver3 bdver4 btver1 btver2 k8 k8-sse3 opteron opteron-sse3 nocona \
+core2 corei7 corei7-avx core-avx-i core-avx2 atom slm nehalem westmere \
+sandybridge ivybridge haswell broadwell bonnell silvermont x86-64 native"
+# Additional x86 processors supported by --with-cpu=.  Each processor
+# MUST be separated by exactly one space.
+x86_cpus="generic intel"
+
 # Common parts for widely ported systems.
 case ${target} in
 *-*-darwin*)
@@ -1392,20 +1408,21 @@ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | 
i[34567]86-*-knetbsd*-gnu | i
                        done
                        TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 
's/^,//'`
                        need_64bit_isa=yes
-                       case X"${with_cpu}" in
-                       
Xgeneric|Xintel|Xatom|Xslm|Xcore2|Xcorei7|Xcorei7-avx|Xnocona|Xx86-64|Xbdver4|Xbdver3|Xbdver2|Xbdver1|Xbtver2|Xbtver1|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3)
                     
-                               ;;
-                       X)
+                       if test x$with_cpu = x; then
                                if test x$with_cpu_64 = x; then
                                        with_cpu_64=generic
                                fi
-                               ;;
-                       *)
-                               echo "Unsupported CPU used in 
--with-cpu=$with_cpu, supported values:" 1>&2
-                               echo "generic intel atom slm core2 corei7 
corei7-avx nocona x86-64 bdver4 bdver3 bdver2 bdver1 btver2 btver1 amdfam10 
barcelona k8 opteron athlon64 athlon-fx athlon64-sse3 k8-sse3 opteron-sse3" 1>&2
-                               exit 1
-                               ;;
-                       esac
+                       else
+                               case " $x86_cpus $x86_archs $x86_64_archs " in
+                               *" $with_cpu "*)
+                                       ;;
+                               *)
+                                       echo "Unsupported CPU used in 
--with-cpu=$with_cpu, supported values:" 1>&2
+                                       echo "$x86_cpus $x86_archs 
$x86_64_archs " 1>&2
+                                       exit 1
+                                       ;;
+                               esac
+                       fi
                else
                        tm_file="${tm_file} i386/gnu-user-common.h 
i386/gnu-user.h i386/linux-common.h i386/linux.h"
                fi
@@ -1514,20 +1531,21 @@ i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
                tm_defines="${tm_defines} TARGET_BI_ARCH=1"
                tmake_file="$tmake_file i386/t-sol2-64"
                need_64bit_isa=yes
-               case X"${with_cpu}" in
-               
Xgeneric|Xintel|Xatom|Xslm|Xcore2|Xcorei7|Xcorei7-avx|Xnocona|Xx86-64|Xbdver4|Xbdver3|Xbdver2|Xbdver1|Xbtver2|Xbtver1|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3)
-                       ;;
-               X)
+               if test x$with_cpu = x; then
                        if test x$with_cpu_64 = x; then
                                with_cpu_64=generic
                        fi
-                       ;;
-               *)
-                       echo "Unsupported CPU used in --with-cpu=$with_cpu, 
supported values:" 1>&2
-                       echo "generic intel atom slm core2 corei7 corei7-avx 
nocona x86-64 bdver4 bdver3 bdver2 bdver1 btver2 btver1 amdfam10 barcelona k8 
opteron athlon64 athlon-fx athlon64-sse3 k8-sse3 opteron-sse3" 1>&2
-                       exit 1
-                       ;;
-               esac
+               else
+                       case " $x86_cpus $x86_archs $x86_64_archs " in
+                       *" $with_cpu "*)
+                               ;;
+                       *)
+                               echo "Unsupported CPU used in 
--with-cpu=$with_cpu, supported values:" 1>&2
+                               echo "$x86_cpus $x86_archs $x86_64_archs" 1>&2
+                               exit 1
+                               ;;
+                       esac
+               fi
                ;;
        esac
        ;;
@@ -1599,20 +1617,21 @@ i[34567]86-*-mingw* | x86_64-*-mingw*)
                        tm_file="${tm_file} i386/mingw-w64.h"
                        if test x$enable_targets = xall; then
                                tm_defines="${tm_defines} TARGET_BI_ARCH=1"
-                               case X"${with_cpu}" in
-                               
Xgeneric|Xintel|Xatom|Xslm|Xcore2|Xcorei7|Xcorei7-avx|Xnocona|Xx86-64|Xbdver4|Xbdver3|Xbdver2|Xbdver1|Xbtver2|Xbtver1|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3)
-                                       ;;
-                               X)
+                               if test x$with_cpu = x; then
                                        if test x$with_cpu_64 = x; then
                                                with_cpu_64=generic
                                        fi
-                                       ;;
-                               *)
-                                       echo "Unsupported CPU used in 
--with-cpu=$with_cpu, supported values:" 1>&2
-                                       echo "generic intel atom slm core2 
corei7 Xcorei7-avx nocona x86-64 bdver4 bdver3 bdver2 bdver1 btver2 btver1 
amdfam10 barcelona k8 opteron athlon64 athlon-fx athlon64-sse3 k8-sse3 
opteron-sse3" 1>&2
-                                       exit 1
-                                       ;;
-                               esac
+                               else
+                                       case " $x86_cpus $x86_archs 
$x86_64_archs " in
+                                       *" $with_cpu "*)
+                                               ;;
+                                       *)
+                                               echo "Unsupported CPU used in 
--with-cpu=$with_cpu, supported values:" 1>&2
+                                               echo "$x86_cpus $x86_archs 
$x86_64_archs" 1>&2
+                                               exit 1
+                                               ;;
+                                       esac
+                               fi
                        fi
                        ;;
                *)
@@ -3650,13 +3669,8 @@ case "${target}" in
                supported_defaults="abi arch arch_32 arch_64 cpu cpu_32 cpu_64 
tune tune_32 tune_64"
                for which in arch arch_32 arch_64 cpu cpu_32 cpu_64 tune 
tune_32 tune_64; do
                        eval "val=\$with_$which"
-                       case ${val} in
-                       i386 | i486 \
-                       | i586 | pentium | pentium-mmx | winchip-c6 | winchip2 \
-                       | c3 | c3-2 | i686 | pentiumpro | pentium2 | pentium3 \
-                       | pentium4 | k6 | k6-2 | k6-3 | athlon | athlon-tbird \
-                       | athlon-4 | athlon-xp | athlon-mp | geode \
-                       | prescott | pentium-m | pentium4m | pentium3m)
+                       case " $x86_archs " in
+                       *" ${val} "*)
                                case "${target}" in
                                  x86_64-*-*)
                                      case "x$which" in
@@ -3671,17 +3685,34 @@ case "${target}" in
                                esac
                                # OK
                                ;;
-                       "" | x86-64 | generic | intel | native \
-                       | k8 | k8-sse3 | athlon64 | athlon64-sse3 | opteron \
-                       | opteron-sse3 | athlon-fx | bdver4 | bdver3 | bdver2 \
-                       | bdver1 | btver2 |  btver1 | amdfam10 | barcelona \
-                       | nocona | core2 | corei7 | corei7-avx | core-avx-i \
-                       | core-avx2 | broadwell | atom | slm)
-                               # OK
-                               ;;
                        *)
-                               echo "Unknown CPU given in --with-$which=$val." 
1>&2
-                               exit 1
+                               if test x${val} != x; then
+                                       case " $x86_64_archs " in
+                                       *" ${val} "*)
+                                               # OK
+                                               ;;
+                                       *)
+                                               # Allow $x86_cpus 
--with-cpu=/--with-tune=
+                                               case "x$which" in
+                                               xcpu*|xtune*)
+                                                       case " $x86_cpus " in
+                                                       *" ${val} "*)
+                                                               # OK
+                                                               ;;
+                                                       *)
+                                                               echo "Unknown 
CPU given in --with-$which=$val." 1>&2
+                                                               exit 1
+                                                               ;;
+                                                       esac
+                                                       ;;
+                                               *)
+                                                       echo "Unknown CPU given 
in --with-$which=$val." 1>&2
+                                                       exit 1
+                                                       ;;
+                                               esac
+                                       ;;
+                                       esac
+                               fi
                                ;;
                        esac
                done
-- 
1.8.4.2

Reply via email to