summaryrefslogtreecommitdiff
path: root/devel/cpuflags/files/subr_Linux
blob: d014f777d813f89b2b3c95ed132b1a89d3374243 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# $NetBSD: subr_Linux,v 1.2 2008/12/10 23:27:17 abs Exp $

AWK=awk
SED=sed

display_hw_details()
    {
    cat <<END
OS	        : '$(uname)'
proc model      : '$hw_model'
machine_arch    : '$hw_machine_arch'
proc flag       : '$feat_flags'
END
    }

extract_hw_details()
    {
    hw_machine_arch=$(uname -m)
    if [ ! -f /proc/cpuinfo ] ; then
	echo "Unable to open /proc/cpuinfo"
	hw_model=Unknown
    else
	hw_model=$($AWK -F: '/^model name/{sub(" ","",$2);print $2;exit}' /proc/cpuinfo)
	feat_flags=$($AWK -F: '/^flags/{sub(" ","",$2);print $2;exit}' /proc/cpuinfo)
    fi
    }

determine_arch()
    {
    ARCH=
    case $hw_machine_arch in
	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 | 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'	;;
	    "AMD Opteron(tm) Processor "*)	ARCH='-march=opteron'	;;
	    "AMD Sempron(tm) Processor "*)	ARCH='-march=athlon-xp'	;;

	    # 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
    }

determine_features()
    {
    FEATURES=
    case $hw_machine_arch in
	i586|i686|x86_64)
	case " $feat_flags " in
	    *" ssse3 "*)	FEATURES='-mfpmath=sse -msse3'	;;
	    *" sse2 "*)		FEATURES='-mfpmath=sse -msse2'	;;
	    *" sse "*)		FEATURES='-mfpmath=sse -msse'	;;
	    *" mmx "*)		FEATURES='-mmmx'		;;
	esac ;;
    esac
    echo $FEATURES
    }