diff CMakeLists.txt @ 28:c6c99ab1088a

*: add min/max functions and a big big refactor (again) agh, this time I added a few more implementations (and generally made the code just a little faster...)
author Paper <paper@tflc.us>
date Thu, 24 Apr 2025 00:54:02 -0400
parents d00b95f95dd1
children e59c91d050c0
line wrap: on
line diff
--- a/CMakeLists.txt	Mon Nov 25 00:33:02 2024 -0500
+++ b/CMakeLists.txt	Thu Apr 24 00:54:02 2025 -0400
@@ -2,7 +2,13 @@
 
 project(vec VERSION 3.0.0 DESCRIPTION "a tiny C99 SIMD vector library" LANGUAGES C)
 
-add_library(vec SHARED "src/vec.c;src/cpu.c;src/impl/generic.c;src/impl/fallback.c")
+add_library(vec "src/vec.c")
+
+target_sources(vec PRIVATE
+	"src/cpu.c"
+	"src/impl/generic.c"
+	# "src/impl/fallback.c" -- deadcode
+)
 
 include(CheckCCompilerFlag)
 
@@ -49,10 +55,18 @@
 	if(COMPILER_HAS_SSE2)
 		set(COMPILER_SSE2_FLAGS "-msse2")
 	endif()
+	check_c_compiler_flag("-msse3" COMPILER_HAS_SSE3)
+	if(COMPILER_HAS_SSE3)
+		set(COMPILER_SSE3_FLAGS "-msse3")
+	endif()
 	check_c_compiler_flag("-msse4.1" COMPILER_HAS_SSE41)
 	if(COMPILER_HAS_SSE41)
 		set(COMPILER_SSE41_FLAGS "-msse4.1")
 	endif()
+	check_c_compiler_flag("-msse4.2" COMPILER_HAS_SSE42)
+	if(COMPILER_HAS_SSE42)
+		set(COMPILER_SSE42_FLAGS "-msse4.2")
+	endif()
 	check_c_compiler_flag("-mavx2" COMPILER_HAS_AVX2)
 	if(COMPILER_HAS_AVX2)
 		set(COMPILER_AVX2_FLAGS "-mavx2")
@@ -61,6 +75,14 @@
 	if(COMPILER_HAS_AVX512F)
 		set(COMPILER_AVX512F_FLAGS "-mavx512f")
 	endif()
+	check_c_compiler_flag("-mavx512bw" COMPILER_HAS_AVX512BW)
+	if(COMPILER_HAS_AVX512BW)
+		set(COMPILER_AVX512BW_FLAGS "-mavx512bw")
+	endif()
+	check_c_compiler_flag("-mavx512dq" COMPILER_HAS_AVX512DQ)
+	if(COMPILER_HAS_AVX512DQ)
+		set(COMPILER_AVX512DQ_FLAGS "-mavx512dq")
+	endif()
 endif()
 
 if(COMPILER_HAS_ALTIVEC)
@@ -87,12 +109,24 @@
 	target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE2")
 endif()
 
+if(COMPILER_HAS_SSE3)
+	target_sources(vec PRIVATE "src/impl/x86/sse3.c")
+	set_source_files_properties("src/impl/x86/sse3.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE3_FLAGS}")
+	target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE3")
+endif()
+
 if(COMPILER_HAS_SSE41)
 	target_sources(vec PRIVATE "src/impl/x86/sse41.c")
 	set_source_files_properties("src/impl/x86/sse41.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE41_FLAGS}")
 	target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE41")
 endif()
 
+if(COMPILER_HAS_SSE42)
+	target_sources(vec PRIVATE "src/impl/x86/sse42.c")
+	set_source_files_properties("src/impl/x86/sse42.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE42_FLAGS}")
+	target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE42")
+endif()
+
 if(COMPILER_HAS_AVX2)
 	target_sources(vec PRIVATE "src/impl/x86/avx2.c")
 	set_source_files_properties("src/impl/x86/avx2.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX2_FLAGS}")
@@ -105,6 +139,17 @@
 	target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX512F")
 endif()
 
+if(COMPILER_HAS_AVX512BW)
+	target_sources(vec PRIVATE "src/impl/x86/avx512bw.c")
+	set_source_files_properties("src/impl/x86/avx512bw.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX512BW_FLAGS}")
+	target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX512BW")
+endif()
+
+if(COMPILER_HAS_AVX512DQ)
+	target_sources(vec PRIVATE "src/impl/x86/avx512dq.c")
+	set_source_files_properties("src/impl/x86/avx512dq.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX512DQ_FLAGS}")
+	target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX512DQ")
+endif()
 
 #########################################################################
 # integer types; it's nice to accommodate for older broken systems that