diff --git a/cmake/OptimizeForArchitecture.cmake b/cmake/OptimizeForArchitecture.cmake index 3ae05fa0f..edb8c3a67 100644 --- a/cmake/OptimizeForArchitecture.cmake +++ b/cmake/OptimizeForArchitecture.cmake @@ -230,7 +230,7 @@ Other supported values are: \"none\", \"generic\", \"core\", \"merom\" (65nm Cor \"haswell\", \"broadwell\", \"skylake\", \"skylake-xeon\", \"kaby-lake\", \"cannonlake\", \"icelake\", \"silvermont\", \ \"goldmont\", \"knl\" (Knights Landing), \"atom\", \"k8\", \"k8-sse3\", \"barcelona\", \ \"istanbul\", \"magny-cours\", \"bulldozer\", \"interlagos\", \"piledriver\", \ -\"AMD 14h\", \"AMD 16h\", \"zen\", \"zen3\".") +\"AMD 14h\", \"AMD 16h\", \"zen\", \"zen3\", \"x86-64\", \"x86-64-v2\", \"x86-64-v3\", \"x86-64-v4\".") set(_force) if(NOT _last_target_arch STREQUAL "${TARGET_ARCHITECTURE}") message(STATUS "target changed from \"${_last_target_arch}\" to \"${TARGET_ARCHITECTURE}\"") @@ -308,6 +308,25 @@ Other supported values are: \"none\", \"generic\", \"core\", \"merom\" (65nm Cor list(APPEND _march_flag_list "goldmont") _silvermont() endmacro() + macro(_x86_64) + list(APPEND _march_flag_list "x86-64") + list(APPEND _march_flag_list "sse" "sse2") + endmacro() + macro(_x86_64_v2) + list(APPEND _march_flag_list "x86-64-v2") + _x86_64() + list(APPEND _march_flag_list "sse3" "sse4.1" "sse4.2" "ssse3") + endmacro() + macro(_x86_64_v3) + list(APPEND _march_flag_list "x86-64-v3") + _x86_64_v2() + list(APPEND _march_flag_list "avx" "avx2" "bmi" "bmi2" "f16c" "fma") + endmacro() + macro(_x86_64_v4) + list(APPEND _march_flag_list "x86-64-v4") + _x86_64_v3() + list(APPEND _march_flag_list "avx512f" "avx512bw" "avx512cd" "avx512dq" "avx512vl") + endmacro() if(TARGET_ARCHITECTURE STREQUAL "core") list(APPEND _march_flag_list "core2") @@ -412,6 +431,14 @@ Other supported values are: \"none\", \"generic\", \"core\", \"merom\" (65nm Cor list(APPEND _march_flag_list "barcelona") list(APPEND _march_flag_list "core2") list(APPEND _available_vector_units_list "sse" "sse2" "sse3" "sse4a") + elseif(TARGET_ARCHITECTURE STREQUAL "x86-64") + _x86_64() + elseif(TARGET_ARCHITECTURE STREQUAL "x86-64-v2") + _x86_64_v2() + elseif(TARGET_ARCHITECTURE STREQUAL "x86-64-v3") + _x86_64_v3() + elseif(TARGET_ARCHITECTURE STREQUAL "x86-64-v4") + _x86_64_v4() elseif(TARGET_ARCHITECTURE STREQUAL "generic") list(APPEND _march_flag_list "generic") elseif(TARGET_ARCHITECTURE STREQUAL "none")