bsd.cpu.mk revision 127888
1# $FreeBSD: head/share/mk/bsd.cpu.mk 127888 2004-04-05 09:55:50Z dfr $
2
3# Set default CPU compile flags and baseline CPUTYPE for each arch.  The
4# compile flags must support the minimum CPU type for each architecture but
5# may tune support for more advanced processors.
6
7.if !defined(CPUTYPE) || empty(CPUTYPE)
8. if ${MACHINE_ARCH} == "i386"
9_CPUCFLAGS =
10MACHINE_CPU = i486
11. elif ${MACHINE_ARCH} == "alpha"
12_CPUCFLAGS = -mcpu=ev4 -mtune=ev5
13MACHINE_CPU = ev4
14. elif ${MACHINE_ARCH} == "amd64"
15MACHINE_CPU = amd64 sse2 sse
16. elif ${MACHINE_ARCH} == "ia64"
17_CPUCFLAGS =
18MACHINE_CPU = itanium
19. elif ${MACHINE_ARCH} == "sparc64"
20_CPUCFLAGS =
21. endif
22.else
23
24# Handle aliases (not documented in make.conf to avoid user confusion
25# between e.g. i586 and pentium)
26
27. if ${MACHINE_ARCH} == "i386"
28.  if ${CPUTYPE} == "pentiumpro"
29CPUTYPE = i686
30.  elif ${CPUTYPE} == "pentium"
31CPUTYPE = i586
32.  elif ${CPUTYPE} == "k7"
33CPUTYPE = athlon
34.  endif
35. endif
36
37# Logic to set up correct gcc optimization flag.  This must be included
38# after /etc/make.conf so it can react to the local value of CPUTYPE
39# defined therein.  Consult:
40#	http://gcc.gnu.org/onlinedocs/gcc/DEC-Alpha-Options.html
41#	http://gcc.gnu.org/onlinedocs/gcc/IA-64-Options.html
42#	http://gcc.gnu.org/onlinedocs/gcc/RS-6000-and-PowerPC-Options.html
43#	http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html
44#	http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html
45
46. if ${MACHINE_ARCH} == "i386"
47.  if ${CPUTYPE} == "crusoe"
48_ICC_CPUCFLAGS = -tpp6 -xiM
49_CPUCFLAGS = -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0
50.  elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \
51    ${CPUTYPE} == "athlon-4"
52_ICC_CPUCFLAGS = -tpp6 -xiMK
53_CPUCFLAGS = -march=${CPUTYPE}
54.  elif ${CPUTYPE} == "athlon-tbird" || ${CPUTYPE} == "athlon"
55_CPUCFLAGS = -march=${CPUTYPE}
56_ICC_CPUCFLAGS = -tpp6 -xiM
57.  elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "k6"
58_CPUCFLAGS = -march=${CPUTYPE}
59_ICC_CPUCFLAGS = -tpp6 -xi
60.  elif ${CPUTYPE} == "k5"
61_ICC_CPUCFLAGS = -tpp5
62_CPUCFLAGS = -march=pentium
63.  elif ${CPUTYPE} == "p4"
64_ICC_CPUCFLAGS = -tpp7 -xiMKW
65_CPUCFLAGS = -march=pentium4
66.  elif ${CPUTYPE} == "p3"
67_ICC_CPUCFLAGS = -tpp6 -xiMK
68_CPUCFLAGS = -march=pentium3
69.  elif ${CPUTYPE} == "p2"
70_ICC_CPUCFLAGS = -tpp6 -xiM
71_CPUCFLAGS = -march=pentium2
72.  elif ${CPUTYPE} == "i686"
73_ICC_CPUCFLAGS = -tpp6 -xiM
74_CPUCFLAGS = -march=pentiumpro
75.  elif ${CPUTYPE} == "i586/mmx"
76_ICC_CPUCFLAGS = -tpp5 -xM
77_CPUCFLAGS = -march=pentium-mmx
78.  elif ${CPUTYPE} == "i586"
79_ICC_CPUCFLAGS = -tpp5
80_CPUCFLAGS = -march=pentium
81.  elif ${CPUTYPE} == "i486"
82_ICC_CPUCFLAGS =
83_CPUCFLAGS = -march=i486
84.  endif
85. elif ${MACHINE_ARCH} == "alpha"
86.  if ${CPUTYPE} == "ev67"
87_CPUCFLAGS = -mcpu=ev67
88.  elif ${CPUTYPE} == "ev6"
89_CPUCFLAGS = -mcpu=ev6
90.  elif ${CPUTYPE} == "pca56"
91_CPUCFLAGS = -mcpu=pca56
92.  elif ${CPUTYPE} == "ev56"
93_CPUCFLAGS = -mcpu=ev56
94.  elif ${CPUTYPE} == "ev5"
95_CPUCFLAGS = -mcpu=ev5
96.  elif ${CPUTYPE} == "ev45"
97_CPUCFLAGS = -mcpu=ev45
98.  elif ${CPUTYPE} == "ev4"
99_CPUCFLAGS = -mcpu=ev4
100.  endif
101. endif
102
103# Set up the list of CPU features based on the CPU type.  This is an
104# unordered list to make it easy for client makefiles to test for the
105# presence of a CPU feature.
106
107. if ${MACHINE_ARCH} == "i386"
108.  if ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \
109    ${CPUTYPE} == "athlon-4"
110MACHINE_CPU = athlon-xp k7 3dnow sse mmx k6 k5 i586 i486 i386
111.  elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird"
112MACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 i486 i386
113.  elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2"
114MACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386
115.  elif ${CPUTYPE} == "k6"
116MACHINE_CPU = mmx k6 k5 i586 i486 i386
117.  elif ${CPUTYPE} == "k5"
118MACHINE_CPU = k5 i586 i486 i386
119.  elif ${CPUTYPE} == "p4"
120MACHINE_CPU = sse2 sse i686 mmx i586 i486 i386
121.  elif ${CPUTYPE} == "p3"
122MACHINE_CPU = sse i686 mmx i586 i486 i386
123.  elif ${CPUTYPE} == "p2"
124MACHINE_CPU = i686 mmx i586 i486 i386
125.  elif ${CPUTYPE} == "i686"
126MACHINE_CPU = i686 i586 i486 i386
127.  elif ${CPUTYPE} == "i586/mmx"
128MACHINE_CPU = mmx i586 i486 i386
129.  elif ${CPUTYPE} == "i586"
130MACHINE_CPU = i586 i486 i386
131.  elif ${CPUTYPE} == "i486"
132MACHINE_CPU = i486 i386
133.  elif ${CPUTYPE} == "i386"
134MACHINE_CPU = i386
135.  endif
136. elif ${MACHINE_ARCH} == "alpha"
137.  if ${CPUTYPE} == "ev6"
138MACHINE_CPU = ev6 ev56 pca56 ev5 ev45 ev4
139.  elif ${CPUTYPE} == "pca56"
140MACHINE_CPU = pca56 ev56 ev5 ev45 ev4
141.  elif ${CPUTYPE} == "ev56"
142MACHINE_CPU = ev56 ev5 ev45 ev4
143.  elif ${CPUTYPE} == "ev5"
144MACHINE_CPU = ev5 ev45 ev4
145.  elif ${CPUTYPE} == "ev45"
146MACHINE_CPU = ev45 ev4
147.  elif ${CPUTYPE} == "ev4"
148MACHINE_CPU = ev4
149.  endif
150. elif ${MACHINE_ARCH} == "amd64"
151MACHINE_CPU = amd64 sse2 sse
152. elif ${MACHINE_ARCH} == "ia64"
153.  if ${CPUTYPE} == "itanium"
154MACHINE_CPU = itanium
155.  endif
156. endif
157.endif
158
159.if ${MACHINE_ARCH} == "alpha"
160_CPUCFLAGS += -mieee
161.endif
162
163# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk
164
165.if !defined(NO_CPU_CFLAGS)
166. if ${CC} == "icc"
167CFLAGS += ${_ICC_CPUCFLAGS}
168. else
169CFLAGS += ${_CPUCFLAGS}
170. endif
171.endif
172