diff --git a/CMakeLists.txt b/CMakeLists.txt
index be8d1decc0c6cc6f344edd8cfc201289ca0b0931..a94f61ab8e8bd5fd87275896a3ef56446283dcd3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -178,8 +178,8 @@ endif()
 #----------------------------------------------------------
 # vectorization target
 #----------------------------------------------------------
-set(NMC_VECTORIZE_TARGET "none" CACHE STRING "CPU target for vectorization {KNL,AVX,AVX2}")
-set_property(CACHE NMC_VECTORIZE_TARGET PROPERTY STRINGS none KNL AVX AVX2)
+set(NMC_VECTORIZE_TARGET "none" CACHE STRING "CPU target for vectorization {KNL,AVX,AVX2,AVX512}")
+set_property(CACHE NMC_VECTORIZE_TARGET PROPERTY STRINGS none KNL AVX AVX2 AVX512)
 
 if(NMC_VECTORIZE_TARGET STREQUAL "KNL")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXXOPT_KNL}")
@@ -187,6 +187,8 @@ elseif(NMC_VECTORIZE_TARGET STREQUAL "AVX")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXXOPT_AVX}")
 elseif(NMC_VECTORIZE_TARGET STREQUAL "AVX2")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXXOPT_AVX2}")
+elseif(NMC_VECTORIZE_TARGET STREQUAL "AVX512")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXXOPT_AVX512}")
 endif()
 
 #----------------------------------------------------------
diff --git a/cmake/CompilerOptions.cmake b/cmake/CompilerOptions.cmake
index c3982b9485fc1c99a83a83bd419c09f8417eb3eb..b15e252acf81e3cb2338f45971c50582c5136a06 100644
--- a/cmake/CompilerOptions.cmake
+++ b/cmake/CompilerOptions.cmake
@@ -27,7 +27,8 @@ if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
     # supported in gcc 4.9.x and later.
     set(CXXOPT_KNL "-march=knl")
     set(CXXOPT_AVX "-mavx")
-    set(CXXOPT_AVX2 "-march=core-avx2")
+    set(CXXOPT_AVX2 "-mavx2")
+    set(CXXOPT_AVX512 "-mavx512f -mavx512cd")
 
     # Disable 'maybe-uninitialized' warning: this will be raised
     # inappropriately in some uses of util::optional<T> when T
@@ -42,7 +43,8 @@ if(${CMAKE_CXX_COMPILER_ID} MATCHES "Intel")
 
     # Compiler flags for generating KNL-specific AVX512 instructions.
     set(CXXOPT_KNL "-xMIC-AVX512")
-    set(CXXOPT_AVX "-mavx")
-    set(CXXOPT_AVX2 "-march=core-avx2")
+    set(CXXOPT_AVX "-xAVX")
+    set(CXXOPT_AVX2 "-xCORE-AVX2")
+    set(CXXOPT_AVX512 "-xCORE-AVX512")
 endif()
 
diff --git a/mechanisms/CMakeLists.txt b/mechanisms/CMakeLists.txt
index ace0936e5ac3aaa88ab9f73d0474275f269a7f5c..569f85a5ffa097a87f9a8714713ad8d43e4b72b7 100644
--- a/mechanisms/CMakeLists.txt
+++ b/mechanisms/CMakeLists.txt
@@ -16,6 +16,8 @@ elseif(NMC_VECTORIZE_TARGET STREQUAL "AVX")
     set(modcc_target "cpu")
 elseif(NMC_VECTORIZE_TARGET STREQUAL "AVX2")
     set(modcc_target "avx2")
+elseif(NMC_VECTORIZE_TARGET STREQUAL "AVX512")
+    set(modcc_target "avx512")
 else()
     set(modcc_target "cpu")
 endif()