From 10281877223f146b5b6bd4e6e0690d3fad6b9d4f Mon Sep 17 00:00:00 2001 From: Oliver Schib Date: Fri, 8 Jan 2016 18:01:54 +0100 Subject: Add support for x86_64 CPU optimisation in gcc Allows to choose which x86_64 CPU type should be used. The corresponding -march optimisation for gcc will be activated. Signed-off-by: Oliver Schib --- target/config/Config.in.cpu | 352 +++++++++++++++++++++++++++++++++++ target/config/Config.in.x86_64 | 114 ++++++++++++ target/x86_64/systems/generic-x86_64 | 1 - 3 files changed, 466 insertions(+), 1 deletion(-) create mode 100644 target/config/Config.in.x86_64 (limited to 'target') diff --git a/target/config/Config.in.cpu b/target/config/Config.in.cpu index 634e3a926..6497aae56 100644 --- a/target/config/Config.in.cpu +++ b/target/config/Config.in.cpu @@ -22,6 +22,259 @@ config ADK_CPU_AMDFAM10 select ADK_TARGET_WITH_NPTL select ADK_TARGET_WITH_MMU +config ADK_CPU_ATHLON_FX + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_3DNOW + select ADK_TARGET_CPU_WITH_3DNOWEXT + +config ADK_CPU_ATHLON_64 + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_3DNOW + select ADK_TARGET_CPU_WITH_3DNOWEXT + +config ADK_CPU_ATHLON_64_SSE3 + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_3DNOW + select ADK_TARGET_CPU_WITH_3DNOWEXT + +config ADK_CPU_BARCELONA + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4A + select ADK_TARGET_CPU_WITH_3DNOW + select ADK_TARGET_CPU_WITH_3DNOWEXT + +config ADK_CPU_BDVER1 + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4A + select ADK_TARGET_CPU_WITH_SSE4_1 + select ADK_TARGET_CPU_WITH_SSE4_2 + select ADK_TARGET_CPU_WITH_SSSE3 + +config ADK_CPU_BDVER2 + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4A + select ADK_TARGET_CPU_WITH_SSE4_1 + select ADK_TARGET_CPU_WITH_SSE4_2 + select ADK_TARGET_CPU_WITH_SSSE3 + +config ADK_CPU_BDVER3 + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4A + select ADK_TARGET_CPU_WITH_SSE4_1 + select ADK_TARGET_CPU_WITH_SSE4_2 + select ADK_TARGET_CPU_WITH_SSSE3 + +config ADK_CPU_BDVER4 + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4A + select ADK_TARGET_CPU_WITH_SSE4_1 + select ADK_TARGET_CPU_WITH_SSE4_2 + select ADK_TARGET_CPU_WITH_SSSE3 + +config ADK_CPU_BONNELL + bool + select ADK_LINUX_64 + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSSE3 + +config ADK_CPU_BROADWELL + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSSE3 + +config ADK_CPU_BTVER1 + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4A + select ADK_TARGET_CPU_WITH_SSSE3 + +config ADK_CPU_BTVER2 + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4A + select ADK_TARGET_CPU_WITH_SSE4_1 + select ADK_TARGET_CPU_WITH_SSE4_2 + select ADK_TARGET_CPU_WITH_SSSE3 + +config ADK_CPU_CORE2 + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSSE3 + +config ADK_CPU_HASWELL + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4_1 + select ADK_TARGET_CPU_WITH_SSE4_2 + select ADK_TARGET_CPU_WITH_SSSE3 + +config ADK_CPU_IVYBRIDGE + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4_1 + select ADK_TARGET_CPU_WITH_SSE4_2 + select ADK_TARGET_CPU_WITH_SSSE3 + +config ADK_CPU_K8 + bool + select ADK_LINUX_64 + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_3DNOW + select ADK_TARGET_CPU_WITH_3DNOWEXT + +config ADK_CPU_K8_SSE3 + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_3DNOW + select ADK_TARGET_CPU_WITH_3DNOWEXT + +config ADK_CPU_KNL + bool + select ADK_LINUX_64 + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4_1 + select ADK_TARGET_CPU_WITH_SSE4_2 + select ADK_TARGET_CPU_WITH_SSSE3 + +config ADK_CPU_NEHALEM + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4_1 + select ADK_TARGET_CPU_WITH_SSE4_2 + select ADK_TARGET_CPU_WITH_SSSE3 + config ADK_CPU_NOCONA bool select ADK_LINUX_64 @@ -588,6 +841,30 @@ config ADK_CPU_NIOS2 select ADK_TARGET_WITH_NPTL select ADK_TARGET_WITH_MMU +config ADK_CPU_OPTERON + bool + select ADK_LINUX_64 + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_3DNOW + select ADK_TARGET_CPU_WITH_3DNOWEXT + +config ADK_CPU_OPTERON_SSE3 + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_3DNOW + select ADK_TARGET_CPU_WITH_3DNOWEXT + config ADK_CPU_OR1K bool select ADK_TARGET_WITH_LT if ADK_TARGET_LIB_UCLIBC_NG @@ -621,6 +898,20 @@ config ADK_CPU_PPC64 select ADK_TARGET_WITH_NPTL select ADK_TARGET_WITH_MMU +config ADK_CPU_SANDYBRIDGE + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4_1 + select ADK_TARGET_CPU_WITH_SSE4_2 + select ADK_TARGET_CPU_WITH_SSSE3 + config ADK_CPU_SH2 bool select ADK_TARGET_WITHOUT_MMU @@ -648,6 +939,20 @@ config ADK_CPU_SH4A select ADK_TARGET_WITH_NPTL select ADK_TARGET_WITH_MMU +config ADK_CPU_SILVERMONT + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4_1 + select ADK_TARGET_CPU_WITH_SSE4_2 + select ADK_TARGET_CPU_WITH_SSSE3 + config ADK_CPU_SPARC_V8 bool select ADK_TARGET_WITH_NPTL @@ -675,6 +980,20 @@ config ADK_CPU_V850 select ADK_TARGET_WITHOUT_THREADS select ADK_TARGET_WITHOUT_CXX +config ADK_CPU_WESTMERE + bool + select ADK_LINUX_64 + select ADK_TARGET_CPU_WITH_VT + select ADK_TARGET_WITH_NPTL + select ADK_TARGET_WITH_MMU + select ADK_TARGET_CPU_WITH_MMX + select ADK_TARGET_CPU_WITH_SSE + select ADK_TARGET_CPU_WITH_SSE2 + select ADK_TARGET_CPU_WITH_SSE3 + select ADK_TARGET_CPU_WITH_SSE4_1 + select ADK_TARGET_CPU_WITH_SSE4_2 + select ADK_TARGET_CPU_WITH_SSSE3 + config ADK_CPU_X86 bool select ADK_TARGET_WITH_NPTL @@ -737,6 +1056,15 @@ config ADK_TARGET_CPU_WITH_SSE2 config ADK_TARGET_CPU_WITH_SSE3 bool +config ADK_TARGET_CPU_WITH_SSE4A + bool + +config ADK_TARGET_CPU_WITH_SSE4_1 + bool + +config ADK_TARGET_CPU_WITH_SSE4_2 + bool + config ADK_TARGET_CPU_WITH_SSSE3 bool @@ -812,11 +1140,29 @@ config ADK_TARGET_GCC_ARCH default "btver1" if ADK_CPU_AMD_BOBCAT default "amdfam10" if ADK_CPU_AMDFAM10 default "athlon" if ADK_CPU_ATHLON + default "athlon-fx" if ADK_CPU_ATHLON_FX + default "athlon64" if ADK_CPU_ATHLON_64 + default "athlon64-sse3" if ADK_CPU_ATHLON_64_SSE3 default "atom" if ADK_CPU_ATOM + default "barcelona" if ADK_CPU_BARCELONA + default "bdver1" if ADK_CPU_BDVER1 + default "bdver2" if ADK_CPU_BDVER2 + default "bdver3" if ADK_CPU_BDVER3 + default "bdver4" if ADK_CPU_BDVER4 + default "bonnell" if ADK_CPU_BONNEL + default "broadwell" if ADK_CPU_BROADWELL + default "btver1" if ADK_CPU_BTVER1 + default "btver2" if ADK_CPU_BTVER2 + default "core2" if ADK_CPU_CORE2 default "geode" if ADK_CPU_GEODE + default "haswell" if ADK_CPU_HASWELL default "i486" if ADK_CPU_I486 default "i586" if ADK_CPU_I586 default "i686" if ADK_CPU_I686 + default "ivybridge" if ADK_CPU_IVYBRIDGE + default "k8" if ADK_CPU_K8 + default "k8-sse3" if ADK_CPU_K8_SSE3 + default "knl" if ADK_CPU_KNL default "loongson2f" if ADK_CPU_LOONGSON2F default "mips32" if ADK_CPU_MIPS32 default "mips32r2" if ADK_CPU_MIPS32R2 @@ -824,8 +1170,14 @@ config ADK_TARGET_GCC_ARCH default "mips64" if ADK_CPU_MIPS64 default "mips64r2" if ADK_CPU_MIPS64R2 default "mips64r6" if ADK_CPU_MIPS64R6 + default "nehalem" if ADK_CPU_NEHALEM default "nocona" if ADK_CPU_NOCONA + default "opteron" if ADK_CPU_OPTERON + default "opteron-sse3" if ADK_CPU_OPTERON_SSE3 default "pentium-m" if ADK_CPU_PENTIUM_M + default "sandybridge" if ADK_CPU_SANDYBRIDGE + default "silvermont" if ADK_CPU_SILVERMONT + default "westmere" if ADK_CPU_WESTMERE default "x86-64" if ADK_CPU_X86_64 default "z900" if ADK_CPU_Z900 diff --git a/target/config/Config.in.x86_64 b/target/config/Config.in.x86_64 new file mode 100644 index 000000000..bd79c5864 --- /dev/null +++ b/target/config/Config.in.x86_64 @@ -0,0 +1,114 @@ +# This file is part of the OpenADK project. OpenADK is copyrighted +# material, please see the LICENCE file in the top-level directory. + +choice ADK_TARGET_CPU +prompt "CPU type" +depends on ADK_TARGET_SYSTEM_GENERIC_X86_64 +default ADK_TARGET_CPU_X86_64 +help + Selection of x86_64 CPU type which gives gcc optimization. + For details on the different types, see: + https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/x86-Options.html#x86-Options + +config ADK_TARGET_CPU_X86_64 + bool "Generic x86_64" + select ADK_CPU_X86_64 + +config ADK_TARGET_CPU_ATHLON_FX + bool "Athlon 64 FX" + select ADK_CPU_ATHLON_FX + +config ADK_TARGET_CPU_ATHLON_64 + bool "Athlon 64" + select ADK_CPU_ATHLON_64 + +config ADK_TARGET_CPU_ATHLON_64_SSE3 + bool "Athlon 64 with SSE3" + select ADK_CPU_ATHLON_64_SSE3 + +config ADK_TARGET_CPU_BARCELONA + bool "Barcelona" + select ADK_CPU_BARCELONA + +config ADK_TARGET_CPU_BDVER1 + bool "bdver1" + select ADK_CPU_BDVER1 + +config ADK_TARGET_CPU_BDVER2 + bool "bdver2" + select ADK_CPU_BDVER2 + +config ADK_TARGET_CPU_BDVER3 + bool "bdver3" + select ADK_CPU_BDVER3 + +config ADK_TARGET_CPU_BDVER4 + bool "bdver4" + select ADK_CPU_BDVER4 + +config ADK_TARGET_CPU_BONNELL + bool "Bonnell" + select ADK_CPU_BONNELL + +config ADK_TARGET_CPU_BROADWELL + bool "Broadwell" + select ADK_CPU_BROADWELL + +config ADK_TARGET_CPU_BTVER1 + bool "btver1" + select ADK_CPU_BTVER1 + +config ADK_TARGET_CPU_BTVER2 + bool "btver2" + select ADK_CPU_BTVER1 + +config ADK_TARGET_CPU_CORE2 + bool "Core 2" + select ADK_CPU_CORE2 + +config ADK_TARGET_CPU_HASWELL + bool "Haswell" + select ADK_CPU_HASWELL + +config ADK_TARGET_CPU_IVYBRIDGE + bool "Ivybridge" + select ADK_CPU_IVYBRIDGE + +config ADK_TARGET_CPU_K8 + bool "K8" + select ADK_CPU_K8 + +config ADK_TARGET_CPU_K8_SSE3 + bool "K8 with SSE3" + select ADK_CPU_K8_SSE3 + +config ADK_TARGET_CPU_KNL + bool "knl" + select config ADK_CPU_KNL + +config ADK_TARGET_CPU_NEHALEM + bool "Nehalem" + select ADK_CPU_NEHALEM + +config ADK_TARGET_CPU_OPTERON + bool "Opteron" + select ADK_CPU_OPTERON + +config ADK_TARGET_CPU_OPTERON_SSE3 + bool "Opteron with SSE3" + select ADK_CPU_OPTERON_SSE3 + +config ADK_TARGET_CPU_SANDYBRIDGE + bool "Sandybridge" + select ADK_CPU_SANDYBRIDGE + +config ADK_TARGET_CPU_SILVERMONT + bool "Silvermont" + select ADK_CPU_SILVERMONT + +config ADK_TARGET_CPU_WESTMERE + bool "Westmere" + select ADK_CPU_WESTMERE + +endchoice + diff --git a/target/x86_64/systems/generic-x86_64 b/target/x86_64/systems/generic-x86_64 index 318006745..ba6dc0f37 100644 --- a/target/x86_64/systems/generic-x86_64 +++ b/target/x86_64/systems/generic-x86_64 @@ -1,6 +1,5 @@ config ADK_TARGET_SYSTEM_GENERIC_X86_64 bool "Generic x86_64 PC" - select ADK_CPU_X86_64 select ADK_TARGET_KERNEL_BZIMAGE select ADK_TARGET_KERNEL_WITH_COMPRESSION select ADK_TARGET_WITH_ACPI -- cgit v1.2.3