diff --git a/arch/x86/config/toolchain.cmake b/arch/x86/config/toolchain.cmake
index bce6a97..e05fe5b 100644
--- a/arch/x86/config/toolchain.cmake
+++ b/arch/x86/config/toolchain.cmake
@@ -7,7 +7,7 @@ set(CMAKE_CROSSCOMPILING 1)
 set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
 if (CFG_X86_64)
     set(CMAKE_SYSTEM_PROCESSOR x86-64)
-    set(_toolchain_common_flags "-m64 -march=x86-64")
+    set(_toolchain_common_flags "-m64 -march=${M_ARCH}")
     set(_toolchain_triple x86_64-pc-none-elf)
     set(_toolchain_bits 64)
 else()
diff --git a/cmake/config-x86.cmake b/cmake/config-x86.cmake
index d73870d..4e3a33c 100644
--- a/cmake/config-x86.cmake
+++ b/cmake/config-x86.cmake
@@ -1,5 +1,15 @@
 # Copyright (C) 2021 fef <owo@fef.moe>.  All rights reserved.
 
+set(_amd64_march_options
+    "nocona" "core2" "penryn" "bonnell" "atom" "silvermont" "slm" "goldmont" "goldmont-plus"
+    "tremont" "nehalem" "corei7" "westmere" "sandybridge" "corei7-avx" "ivybridge" "core-avx-i"
+    "haswell" "core-avx2" "broadwell" "skylake" "skylake-avx512" "skx" "cascadelake" "cooperlake"
+    "cannonlake" "icelake-client" "rocketlake" "icelake-server" "tigerlake" "sapphirerapids"
+    "alderlake" "knl" "knm" "k8" "athlon64" "athlon-fx" "opteron" "k8-sse3" "athlon64-sse3"
+    "opteron-sse3" "amdfam10" "barcelona" "btver1" "btver2" "bdver1" "bdver2" "bdver3" "bdver4"
+    "znver1" "znver2" "znver3" "x86-64" "x86-64-v2" "x86-64-v3"
+)
+
 set(BOOT_TYPE "bios" CACHE STRING "Bootloader type")
 set_property(CACHE BOOT_TYPE PROPERTY STRINGS
     "bios"
@@ -8,6 +18,10 @@ set_property(CACHE BOOT_TYPE PROPERTY STRINGS
 option(CFG_X86_64 "64-bit kernel (32-bit support is fundamentally broken)" ON)
 if(CFG_X86_64)
     set(X86_ARCH amd64)
+    set(M_ARCH "x86-64" CACHE STRING "Value for -march")
+    set_property(CACHE M_ARCH PROPERTY STRINGS ${_amd64_march_options})
 else()
     set(X86_ARCH i386)
+    set(M_ARCH "i686" CACHE STRING "Value for -march")
+    set_property(CACHE M_ARCH PROPERTY STRINGS "i686")
 endif()