loongarch: add lsx simd opt

This commit is contained in:
yuanhecai
2025-08-26 14:21:45 +08:00
parent 9feadb98a9
commit c94458d8f2
11 changed files with 135 additions and 7 deletions

View File

@@ -109,6 +109,21 @@ if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$" AND NOT CMAKE_CROSSCOMPILI
include(GNUInstallDirs)
endif()
include(CheckCXXSourceCompiles)
if (CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch32|loongarch64")
set (CMAKE_REQUIRED_FLAGS -mlsx)
check_cxx_source_compiles(
"int main() {
#if !defined(__loongarch_sx)
static_assert(false, \"__loongarch_sx is not defined\");
#endif
return 0;
}"
COMPILER_SUPPORT_LSX_FLAG
)
endif()
#
# Declare PKGINCLUDEDIR for kissfft include path
#
@@ -167,7 +182,10 @@ else()
if(KISSFFT_DATATYPE MATCHES "^simd$")
list(APPEND KISSFFT_COMPILE_DEFINITIONS USE_SIMD)
if (NOT MSVC)
if(COMPILER_SUPPORT_LSX_FLAG)
list(APPEND KISSFFT_COMPILE_DEFINITIONS HAVE_LSX)
target_compile_options(kissfft PRIVATE -mlsx)
elseif(NOT MSVC)
target_compile_options(kissfft PRIVATE -msse)
else()
target_compile_options(kissfft PRIVATE "/arch:SSE")
@@ -262,6 +280,10 @@ function(add_kissfft_executable NAME)
target_link_libraries(${NAME} PRIVATE m)
endif()
if(COMPILER_SUPPORT_LSX_FLAG)
target_compile_options(${NAME} PRIVATE -mlsx)
endif()
if (NOT KISSFFT_OPENMP)
set_target_properties(${NAME} PROPERTIES
OUTPUT_NAME "${NAME}-${KISSFFT_DATATYPE}")
@@ -329,7 +351,9 @@ if (KISSFFT_PKGCONFIG)
join_paths(PKGCONFIG_KISSFFT_INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
if(KISSFFT_DATATYPE MATCHES "^simd$")
list(APPEND KISSFFT_COMPILE_DEFINITIONS USE_SIMD)
if (NOT MSVC)
if(COMPILER_SUPPORT_LSX_FLAG)
set(PKG_KISSFFT_DEFS "${PKG_KISSFFT_DEFS} -mlsx")
elseif(NOT MSVC)
set(PKG_KISSFFT_DEFS "${PKG_KISSFFT_DEFS} -msse")
else()
set(PKG_KISSFFT_DEFS "${PKG_KISSFFT_DEFS} /ARCH:SSE")