endif()
if(X86_64 OR I386)
set(KERNELLIB_HOST_CPU_VARIANTS sse2 ssse3 sse41 avx avx_f16c avx_fma4 avx2 avx512)
+ if(I386)
+ set(KERNELLIB_HOST_CPU_VARIANTS i386 i686 mmx sse ${KERNELLIB_HOST_CPU_VARIANTS})
+ endif()
elseif(POWERPC64LE)
set(KERNELLIB_HOST_CPU_VARIANTS pwr8 pwr9)
elseif(APPLE AND ARM64)
} kernellib_feature_map[] = {
// order the entries s.t. if a cpu matches multiple entries, the "best" match
// comes last
-#if defined(__x86_64__)
+#if defined(__i386__)
+ "i386",
+ "i386",
+ {NULL},
+ // FIXME: Can we distinguish i686 from i386 using feature flags?
+ "i686",
+ "i686",
+ {NULL},
+ "mmx",
+ "pentium-mmx",
+ {"mmx", NULL},
+ "sse",
+ "pentium3",
+ {"sse", NULL},
+#endif
+#if defined(__i386__) || defined(__x86_64__)
"sse2",
"athlon64",
{"sse2", NULL},
function(x86_distro_variant_to_flags VARIANT OUT_LLC_FLAGS OUT_CLANG_FLAGS)
- if("${VARIANT}" STREQUAL "sse2")
+ if("${VARIANT}" STREQUAL "i386")
+ set(CLANG_F "${CLANG_MARCH_FLAG}i386")
+ set(LLC_F "-mcpu=i386")
+
+ elseif("${VARIANT}" STREQUAL "i686")
+ set(CLANG_F "${CLANG_MARCH_FLAG}i686")
+ set(LLC_F "-mcpu=i686")
+
+ elseif("${VARIANT}" STREQUAL "mmx")
+ set(CLANG_F "${CLANG_MARCH_FLAG}pentium-mmx")
+ set(LLC_F "-mcpu=pentium-mmx")
+
+ elseif("${VARIANT}" STREQUAL "sse")
+ set(CLANG_F "${CLANG_MARCH_FLAG}pentium3")
+ set(LLC_F "-mcpu=pentium3")
+
+ elseif("${VARIANT}" STREQUAL "sse2")
set(CLANG_F "${CLANG_MARCH_FLAG}athlon64")
set(LLC_F "-mcpu=athlon64")