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