diff options
Diffstat (limited to 'devel/cpuflags/files')
-rw-r--r-- | devel/cpuflags/files/subr_FreeBSD | 4 | ||||
-rwxr-xr-x | devel/cpuflags/files/subr_Linux | 48 | ||||
-rwxr-xr-x | devel/cpuflags/files/subr_NetBSD | 48 | ||||
-rwxr-xr-x | devel/cpuflags/files/subr_SunOS | 14 | ||||
-rw-r--r-- | devel/cpuflags/files/subr_x86 | 23 |
5 files changed, 83 insertions, 54 deletions
diff --git a/devel/cpuflags/files/subr_FreeBSD b/devel/cpuflags/files/subr_FreeBSD index 9da384d48ee..40e7b2f8b34 100644 --- a/devel/cpuflags/files/subr_FreeBSD +++ b/devel/cpuflags/files/subr_FreeBSD @@ -1,4 +1,4 @@ -# $NetBSD: subr_FreeBSD,v 1.2 2007/08/27 10:08:29 abs Exp $ +# $NetBSD: subr_FreeBSD,v 1.3 2008/12/10 23:27:17 abs Exp $ AWK=awk SED=sed @@ -38,7 +38,7 @@ determine_arch() Pentium\ II*) ARCH='-march=pentium2' ;; Intel\ Pentium\ III\ *) ARCH='-march=pentium3' ;; Intel\ Pentium\ 4\ *) ARCH='-march=pentium4' ;; - Intel\ Core2\ *) ARCH='-march=prescott' ;; + Intel\ Core2\ *) ARCH='-march=core2' ;; AMD\ Athlon\ XP*) ARCH='-march=athlon-xp' ;; AMD\ Sempron\ Processor\ *) ARCH='-march=athlon-xp' ;; # last resort: diff --git a/devel/cpuflags/files/subr_Linux b/devel/cpuflags/files/subr_Linux index c2e5520a20f..d014f777d81 100755 --- a/devel/cpuflags/files/subr_Linux +++ b/devel/cpuflags/files/subr_Linux @@ -1,4 +1,4 @@ -# $NetBSD: subr_Linux,v 1.1 2007/08/20 11:21:21 abs Exp $ +# $NetBSD: subr_Linux,v 1.2 2008/12/10 23:27:17 abs Exp $ AWK=awk SED=sed @@ -32,37 +32,29 @@ determine_arch() parisc) case $hw_model in "Mirage 100+") ARCH='-march=1.1' ;; esac ;; - i386) ARCH='-march=i386' ;; - i486) ARCH='-march=i486' ;; - i586) ARCH='-march=pentium' ;; - i686) case $hw_model in + i386) ARCH='-march=i386' ;; + i486) ARCH='-march=i486' ;; + i586) ARCH='-march=pentium' ;; + i686 | x86_64) + include subr_x86 # this provides map_x86_brand_string() + ARCH=$(map_x86_brand_string "$cpu_brand") + if [ -z "$ARCH" ] ; then + case $hw_model in "AMD Athlon(TM) XP "*) ARCH='-march=athlon-xp' ;; + "AMD Athlon(tm) 64"*) ARCH='-march=athlon64' ;; "AMD Athlon(tm) XP"*) ARCH='-march=athlon-xp' ;; - "AMD Duron(TM)") ARCH='-march=athlon' ;; - "AMD Duron(tm) ") ARCH='-march=athlon' ;; - "Pentium II (Deschutes)") ARCH='-march=pentium2' ;; - "Celeron (Coppermine)") ARCH='-march=pentium3' ;; - "Intel(R) Pentium(R) 4 CPU "*) ARCH='-march=pentium4' ;; - "Intel(R) Pentium(R) III Mobile CPU"*) ARCH='-march=pentium3m' ;; - "Intel(R) Pentium(R) M processor"*) ARCH='-march=pentium3m' ;; - "Mobile Intel(R) Pentium(R) 4 - M "*) ARCH='-march=pentium4m' ;; - "Pentium III (Coppermine)") ARCH='-march=pentium3' ;; - "Pentium III (Katmai)") ARCH='-march=pentium3' ;; - "AMD Athlon(tm) 64"*) ARCH='-march=athlon-xp' ;; + "AMD Duron(TM)") ARCH='-march=athlon' ;; + "AMD Duron(tm) ") ARCH='-march=athlon' ;; "AMD Opteron(tm) Processor "*) ARCH='-march=opteron' ;; - "Intel(R) Celeron(R) CPU "* | "Intel(R) Xeon(TM) CPU "*) - case "$feat_flags" in - *" sse2 "*) - ARCH='-march=pentium4' ;; - esac;; "AMD Sempron(tm) Processor "*) ARCH='-march=athlon-xp' ;; - "Intel(R) Core(TM)2 CPU "*) ARCH='-march=prescott' ;; - esac ;; - x86_64) case $hw_model in - "AMD Sempron(tm) Processor "*) ARCH='-march=athlon64' ;; - "AMD Athlon(tm) 64"*) ARCH='-march=athlon64' ;; - "Intel(R) Core(TM)2 CPU "*) ARCH='-march=nocona' ;; - esac ;; + + # Intel PIII & earlier - later Intel handled by map_x86_brand_string + "Celeron (Coppermine)") ARCH='-march=pentium3' ;; + "Pentium II (Deschutes)") ARCH='-march=pentium2' ;; + "Pentium III (Coppermine)") ARCH='-march=pentium3' ;; + "Pentium III (Katmai)") ARCH='-march=pentium3' ;; + esac + fi ;; esac echo $ARCH } diff --git a/devel/cpuflags/files/subr_NetBSD b/devel/cpuflags/files/subr_NetBSD index 2af3a910483..06cd26a0b10 100755 --- a/devel/cpuflags/files/subr_NetBSD +++ b/devel/cpuflags/files/subr_NetBSD @@ -1,4 +1,4 @@ -# $NetBSD: subr_NetBSD,v 1.7 2008/12/08 19:46:59 abs Exp $ +# $NetBSD: subr_NetBSD,v 1.8 2008/12/10 23:27:17 abs Exp $ AWK=awk SED=sed @@ -12,13 +12,14 @@ hw.model : '$hw_model' hw.machine : '$hw_machine' hw.machine_arch : '$hw_machine_arch' CPU : '$cpu' -$cpu_details END + extract_x86_cpu_vars + echo "$cpu_details" } extract_hw_details() { - hw_model=$(sysctl -n hw.model | sed 's/^ *//') + hw_model=$(sysctl -n hw.model | $SED 's/^ *//') hw_machine=$(sysctl -n hw.machine) hw_machine_arch=$(sysctl -n hw.machine_arch) if [ "$hw_machine_arch" = i386 -o "$hw_machine_arch" = x86_64 ] ; then @@ -27,7 +28,7 @@ extract_hw_details() else cpu_details="$(grep ^cpu0: /var/run/dmesg.boot)" fi - cpu=$(echo "$cpu_details"|awk '/cpu0:/{sub("cpu0: ","");print;exit}') + eval $(extract_x86_cpu_vars) fi # We're almost certainly crosscompiling @@ -37,6 +38,23 @@ extract_hw_details() fi } +extract_x86_cpu_vars() + { + # Set: cpu_feature_FOO=1 for each 'FOO' feature reported + # cpu_name="NAME" taken from the first cpu0: line + # cpu_brand="BRAND" the CPU branding string + echo "$cpu_details" | $AWK -F , ' + { if (/cpu0:/ && !n) { sub("cpu0: ",""); n=1; print "cpu_name=\""$0"\"" } } + /cpu0: ".*"/ { sub("[^\"]*", ""); print "cpu_brand="$0 } + /cpu0: features/ { + sub(".*<",""); + sub(">.*",""); + gsub("[^,A-Z0-9]","_"); + for (i = 1; i < NR; i++) { print "cpu_feature_"$i"=1" } + } + ' + } + determine_arch() { ARCH= @@ -91,28 +109,30 @@ determine_arch() ;; i386 | x86_64) - case "$cpu" in + include subr_x86 # this provides map_x86_brand_string() + ARCH=$(map_x86_brand_string "$cpu_brand") + if [ -z "$ARCH" ] ; then + case "$cpu_name" in 'AMD Athlon 64 X2 (686-class)'*) ARCH='-march=athlon64' ;; 'AMD Athlon 64 or Athlon 64 FX or Opteron '*) ARCH='-march=opteron' ;; 'AMD Athlon 64 or Sempron (686-class)'*) ARCH='-march=athlon64' ;; 'AMD Athlon Model 4 (Thunderbird) '*) ARCH='-march=athlon-tbird' ;; 'AMD Dual-Core Opteron or Athlon 64 X2 '*) ARCH='-march=opteron' ;; 'AMD Family 10h (686-class)'*) ARCH='-march=amdfam10' ;; + 'AMD K6-2 (586-class)'*) ARCH="-march=k6-2" ;; + + # Intel PIII & earlier - later Intel handled by map_x86_brand_string 'Intel (686-class)'*) ARCH='-march=pentiumpro' ;; - 'Intel Celeron (686-class)'*) ARCH='-march=pentiumpro' ;; - 'Intel Core 2 (Merom) (686-class)'*) ARCH='-march=core2' ;; - 'Intel Pentium 4 (686-class)'*) ARCH='-march=pentium4' ;; 'Intel Pentium II (686-class)'*) ARCH='-march=pentium2' ;; 'Intel Pentium III (686-class)'*) ARCH='-march=pentium3' ;; 'Intel Pentium III (Katmai) (686-class)'*) ARCH='-march=pentium3' ;; 'Intel Pentium III Xeon (686-class)'*) ARCH='-march=pentium3' ;; - 'Intel Pentium M (Dothan) (686-class)'*) ARCH='-march=pentium-m' ;; - 'Intel Pentium M (Yonah) (686-class)'*) ARCH='-march=pentium-m' ;; # Fallback classes *'(586-class)'*) ARCH='-march=pentium' ;; *'(486-class)'*) ARCH='-march=i486' ;; esac + fi ;; m68k) case $hw_model in # Examples @@ -196,14 +216,6 @@ determine_features() case $hw_machine_arch in i386 | x86_64) - # Set cpu_feature_FOO=1 for each 'FOO' feature reported - eval $(echo "$cpu_details" | awk -F , ' - /cpu0: features/ { - sub(".*<",""); - sub(">.*",""); - gsub("[^,A-Z0-9]","_"); - for (i = 1; i < NR; i++) { print "cpu_feature_"$i"=1" } } - ') if [ -n "$cpu_feature_SSE3" ] ; then FEATURES="-mfpmath=sse -msse3" elif [ -n "$cpu_feature_SSE2" ] ; then diff --git a/devel/cpuflags/files/subr_SunOS b/devel/cpuflags/files/subr_SunOS index 07beabd10a3..c6162baf9f1 100755 --- a/devel/cpuflags/files/subr_SunOS +++ b/devel/cpuflags/files/subr_SunOS @@ -1,4 +1,4 @@ -# $NetBSD: subr_SunOS,v 1.1 2007/08/20 11:21:21 abs Exp $ +# $NetBSD: subr_SunOS,v 1.2 2008/12/10 23:27:17 abs Exp $ AWK=nawk SED=sed @@ -15,7 +15,7 @@ END extract_hw_details() { hw_arch=`/usr/bin/uname -m` - hw_psrinfo=`psrinfo -v | $AWK 'NR==3{print}'` # Just gets the first CPU + hw_psrinfo=`psrinfo -pv | $AWK 'NR==3{print}'` # Just gets the first CPU } determine_arch() @@ -26,9 +26,13 @@ determine_arch() sun4m ) ARCH='-mcpu=supersparc' ;; sun4u ) ARCH='-mcpu=v9' ;; i86pc ) - case "$hw_psrinfo" in - *AMD\ Opteron\(tm\)*) ARCH="-mcpu=opteron" ;; - esac + include subr_x86 # this provides map_x86_brand_string() + ARCH=$(map_x86_brand_string "$cpu_brand") + if [ -z "$ARCH" ] ; then + case "$hw_psrinfo" in + *) + esac + fi ;; esac echo $ARCH diff --git a/devel/cpuflags/files/subr_x86 b/devel/cpuflags/files/subr_x86 index b2596915a6f..ca17d4dc26d 100644 --- a/devel/cpuflags/files/subr_x86 +++ b/devel/cpuflags/files/subr_x86 @@ -1,4 +1,25 @@ -# $NetBSD: subr_x86,v 1.2 2007/08/27 10:09:22 abs Exp $ +# $NetBSD: subr_x86,v 1.3 2008/12/10 23:27:17 abs Exp $ + +# Apparently the only way to reliably determine the architecture of a recent +# Intel CPU is to use the cpu brand string - as they reused family and +# extended family bitflags... annoying +map_x86_brand_string() + { + case "$1" in + "Genuine Intel(R) CPU T2400"*) echo '-march=core2' ;; + "Intel(R) Celeron(R) CPU E1400"*) echo '-march=core2' ;; + "Intel(R) Celeron(R) CPU 2.40GHz") echo '-march=pentium4' ;; + "Intel(R) Core(TM)2 CPU "*) echo '-march=core2' ;; + "Intel(R) Core(TM)2 Duo CPU "*) echo '-march=core2' ;; + "Intel(R) Core(TM)2 Quad CPU"*) echo '-march=core2' ;; + "Intel(R) Pentium(R) 4 CPU 3.00GHz") echo '-march=prescott' ;; + "Intel(R) Pentium(R) D CPU "*) echo '-march=prescott' ;; + "Intel(R) Xeon(R) CPU 3040"*) echo '-march=core2' ;; + "Intel(R) Xeon(R) CPU 3050"*) echo '-march=core2' ;; + "Pentium(R) Dual-Core CPU E5200"*) echo '-march=core2' ;; + + esac + } flags_fixup_x86arch() { |