xref: /dragonfly/share/mk/bsd.cpu.gcc80.mk (revision 2cccd0a0)
12233c95bSzrj# Set default CPU compile flags and baseline CPUTYPE for each arch.  The
22233c95bSzrj# compile flags must support the minimum CPU type for each architecture but
32233c95bSzrj# may tune support for more advanced processors.
42233c95bSzrj
52233c95bSzrjgeneric_x86_64=	x86_64 mmx sse sse2
62233c95bSzrjgeneric_i386=	i386
72233c95bSzrj
82233c95bSzrj.if !defined(CPUTYPE) || empty(CPUTYPE) || ${CPUTYPE} == "native"
92233c95bSzrj
102233c95bSzrj. if defined(CPUTYPE) && ${CPUTYPE:Mnative}
112233c95bSzrj_CPUCFLAGS=	-march=native
122233c95bSzrj. else
132233c95bSzrj_CPUCFLAGS=
142233c95bSzrj. endif
152233c95bSzrj
162233c95bSzrjMACHINE_CPU=	${generic_${MACHINE_ARCH}}
172233c95bSzrj
182233c95bSzrj.else
192233c95bSzrj
202233c95bSzrj###############################################################################
212233c95bSzrj# Logic to set up correct gcc optimization flag.  This must be included
222233c95bSzrj# after /etc/make.conf so it can react to the local value of CPUTYPE
232233c95bSzrj# defined therein.  Consult:
24*2cccd0a0SSascha Wildner#	https://gcc.gnu.org/onlinedocs/gcc-8.3.0/gcc/x86-Options.html
252233c95bSzrj###############################################################################
262233c95bSzrj
272233c95bSzrj# Some GCC cpu-types have aliases, rename them to a single identifier
282233c95bSzrj# If the value for cpu-type is not recognized, throw it away and use -native
292233c95bSzrj
302233c95bSzrj. if ${CPUTYPE} == "k8" \
312233c95bSzrj  || ${CPUTYPE} == "opteron" \
322233c95bSzrj  || ${CPUTYPE} == "athlon-fx"
332233c95bSzrjCT2=	athlon64
342233c95bSzrj. elif ${CPUTYPE} == "k8-sse3" \
352233c95bSzrj    || ${CPUTYPE} == "opteron-sse3"
362233c95bSzrjCT2=	athlon64-sse3
372233c95bSzrj. elif ${CPUTYPE} == "amdfam10"
382233c95bSzrjCT2=	barcelona
392233c95bSzrj. else
402233c95bSzrjCT2=	${CPUTYPE}
412233c95bSzrj. endif
422233c95bSzrj
432233c95bSzrjknown_x86_64=	athlon64 \
442233c95bSzrj		athlon64-sse3 \
452233c95bSzrj		barcelona \
462233c95bSzrj		bdver1 bdver2 bdver3 bdver4 \
472233c95bSzrj		bonnell \
482233c95bSzrj		broadwell \
492233c95bSzrj		btver1 btver2 \
50*2cccd0a0SSascha Wildner		cannonlake \
512233c95bSzrj		core2 \
522233c95bSzrj		haswell \
532233c95bSzrj		i386 \
54*2cccd0a0SSascha Wildner		icelake-client \
55*2cccd0a0SSascha Wildner		icelake-server \
562233c95bSzrj		ivybridge \
572233c95bSzrj		knl \
58*2cccd0a0SSascha Wildner		knm \
592233c95bSzrj		nocona \
602233c95bSzrj		nehalem \
612233c95bSzrj		sandybridge \
622233c95bSzrj		silvermont \
632233c95bSzrj		skylake \
642233c95bSzrj		skylake-avx512 \
652233c95bSzrj		westmere \
662233c95bSzrj		znver1
672233c95bSzrj
682233c95bSzrjknown_i386=	i386
692233c95bSzrj
702233c95bSzrj. if defined(known_${MACHINE_ARCH}) && \
712233c95bSzrj     !empty(known_${MACHINE_ARCH}:M${CT2})		# CID: Check CPUTYPE
722233c95bSzrj
732233c95bSzrj# Set up the list of CPU features based on the CPU type.  This is an
742233c95bSzrj# unordered list to make it easy for client makefiles to test for the
752233c95bSzrj# presence of a CPU feature.
762233c95bSzrj
772233c95bSzrj.  if ${MACHINE_ARCH} == "x86_64"
782233c95bSzrjC_nocona=	${generic_x86_64} sse3
792233c95bSzrjC_core2=	${C_nocona} ssse3
802233c95bSzrjC_nehalem=	${C_core2} sse41 sse42 popcnt
812233c95bSzrjC_westmere=	${C_nehalem} aes pclmul
822233c95bSzrjC_sandybridge=	${C_westmere} avx
832233c95bSzrjC_ivybridge=	${C_sandybridge} fsgsbase rdrnd f16c
842233c95bSzrjC_haswell=	${C_ivybridge} movbe avx2 fma bmi bmi2
852233c95bSzrjC_broadwell=	${C_haswell} rdseed adcx prefetchw
862233c95bSzrjC_skylake=	${C_broadwell} xsavec xsaves clflushop
872233c95bSzrjC_knl=		${C_broadwell} avx512f avx512pf avx512er avx512cd
88*2cccd0a0SSascha WildnerC_knm=		${C_knl} avx5124vnniw avx5124fmaps avx512vpopcntdq
892233c95bSzrjC_bonnell=	${C_core2} movbe
902233c95bSzrjC_silvermont=	${C_westmere} movbe rdrnd
91*2cccd0a0SSascha WildnerC_skylakeavx512=${C_skylake} pku avx512f clwb avx512vl avx512bw avx512dq \
92*2cccd0a0SSascha Wildner		avx512cd
93*2cccd0a0SSascha WildnerC_cannonlake=	${C_skylake} pku avx512f avx512vl avx512bw avx512dq avx512cd \
94*2cccd0a0SSascha Wildner		avx512vbmi avx512ifma sha umip
95*2cccd0a0SSascha WildnerC_icelakeclient=${C_skylakeavx512} avx512vbmi avx512ifma sha umip rdpid gfni \
96*2cccd0a0SSascha Wildner		avx512vbmi2 avx512vpopcntdq avx512bitalg avx512vnni \
97*2cccd0a0SSascha Wildner		vpclmulqdq vaes
98*2cccd0a0SSascha WildnerC_icelakeserver=${C_icelakeclient} pconfig wbnoinvd
99*2cccd0a0SSascha Wildner
1002233c95bSzrjC_athlon64=	${generic_x86_64} 3dnow
1012233c95bSzrjC_athlon64sse3=	${C_athlon64} sse3
1022233c95bSzrjC_barcelona=	${C_athlon64sse3} sse4a abm
1032233c95bSzrjC_bdver1=	${C_core2} sse4a sse41 sse42 abm fma4 avx xop lwp aes \
1042233c95bSzrj		pclmul cx16
1052233c95bSzrjC_bdver2=	${C_bdver1} bmi f16c fma tbm
1062233c95bSzrjC_bdver3=	${C_bdver2} fsgsbase
1072233c95bSzrjC_bdver4=	${C_bdver3} bmi2 avx2 movbe
1082233c95bSzrjC_znver1=	${C_core2} bmi bmi2 f16c fma fsgsbase avx avx2 adcx rdseed \
1092233c95bSzrj		mwaitx sha clzero aes pclmul cx16 movbe sse4a sse41 sse42 \
1102233c95bSzrj		abm xsavec xsaves clflushop popcnt
1112233c95bSzrjC_btver1=	${C_barcelona} cx16
1122233c95bSzrjC_btver2=	${C_btver1} movbe f16c bmi avx pclmul aes sse41 sse42
1132233c95bSzrjC_i386=		${generic_i386}
1142233c95bSzrj
1152233c95bSzrj.  endif	# end of x86_64 feature list
1162233c95bSzrj
1172233c95bSzrj# i386 used for 32-bit BIOS-based boot loaders
1182233c95bSzrj
1192233c95bSzrj.  if ${MACHINE_ARCH} == "i386"
1202233c95bSzrjC_i386=		${generic_i386}
1212233c95bSzrj.  endif	# end of i386 feature list
1222233c95bSzrj
1232233c95bSzrj_CPUCFLAGS=	-march=${CT2}
1242233c95bSzrjMACHINE_CPU=	${C_${CT2:S|-||}}
1252233c95bSzrj
1262233c95bSzrj. else							# CID: Check CPUTYPE
1272233c95bSzrj
1282233c95bSzrj# CPUTYPE was defined and was not empty, but the value does not match known
1292233c95bSzrj# CPU types of the defined MACHINE_ARCH.  Set -march to native and define
1302233c95bSzrj# generic features based on MACHINE_ARCH
1312233c95bSzrj
1322233c95bSzrj_CPUCFLAGS=	-march=native
1332233c95bSzrjMACHINE_CPU=	${generic_${MACHINE_ARCH}}
1342233c95bSzrj
1352233c95bSzrj. endif							# CID: Check CPUTYPE
1362233c95bSzrj
1372233c95bSzrj.endif
138