Merge pull request #111 from HecaiYuan/master

loongarch: add loongarch simd opt
This commit is contained in:
mborgerding
2026-05-11 20:03:41 -04:00
committed by GitHub
12 changed files with 192 additions and 7 deletions

View File

@@ -72,6 +72,9 @@ ifneq ($(MAKECMDGOALS),clean)
ifeq ($(_UNAME_ARCH),x86_64)
CANDIDATE_LIBDIR_NAME = lib64
endif
ifeq ($(_UNAME_ARCH),loongarch64)
CANDIDATE_LIBDIR_NAME = lib64
endif
endif
endif
@@ -113,6 +116,8 @@ else
endif
export KISSFFTLIB_SHORTNAME
export HAVE_LSX
export HAVE_LASX
#
# Compile-time definitions by datatype
@@ -127,7 +132,13 @@ ifeq "$(KISSFFT_DATATYPE)" "int32_t"
else ifeq "$(KISSFFT_DATATYPE)" "int16_t"
TYPEFLAGS += -DFIXED_POINT=16
else ifeq "$(KISSFFT_DATATYPE)" "simd"
ifeq "$(HAVE_LASX)" "lasx"
TYPEFLAGS += -DUSE_SIMD=1 -DHAVE_LASX=1 -mlasx
else ifeq "$(HAVE_LSX)" "lsx"
TYPEFLAGS += -DUSE_SIMD=1 -DHAVE_LSX=1 -mlsx
else
TYPEFLAGS += -DUSE_SIMD=1 -msse
endif
else ifeq "$(KISSFFT_DATATYPE)" "float"
TYPEFLAGS += -Dkiss_fft_scalar=$(KISSFFT_DATATYPE)
else ifeq "$(KISSFFT_DATATYPE)" "double"
@@ -273,21 +284,39 @@ testall:
$(MAKE) KISSFFT_DATATYPE=int16_t testsingle
# The simd and int32_t types may or may not work on your machine
$(MAKE) KISSFFT_DATATYPE=int32_t testsingle
$(MAKE) KISSFFT_DATATYPE=simd testsingle
@if [ "$(HAVE_LASX)" = "lasx" ]; then \
$(MAKE) KISSFFT_DATATYPE=simd HAVE_LASX=lasx testsingle; \
elif [ "$(HAVE_LSX)" = "lsx" ]; then \
$(MAKE) KISSFFT_DATATYPE=simd HAVE_LSX=lsx testsingle; \
else \
$(MAKE) KISSFFT_DATATYPE=simd testsingle; \
fi
# Static libraries
$(MAKE) KISSFFT_DATATYPE=double KISSFFT_STATIC=1 testsingle
$(MAKE) KISSFFT_DATATYPE=float KISSFFT_STATIC=1 testsingle
$(MAKE) KISSFFT_DATATYPE=int16_t KISSFFT_STATIC=1 testsingle
# The simd and int32_t types may or may not work on your machine
$(MAKE) KISSFFT_DATATYPE=int32_t KISSFFT_STATIC=1 testsingle
$(MAKE) KISSFFT_DATATYPE=simd KISSFFT_STATIC=1 testsingle
@if [ "$(HAVE_LASX)" = "lasx" ]; then \
$(MAKE) KISSFFT_DATATYPE=simd HAVE_LASX=lasx testsingle; \
elif [ "$(HAVE_LSX)" = "lsx" ]; then \
$(MAKE) KISSFFT_DATATYPE=simd HAVE_LSX=lsx KISSFFT_STATIC=1 testsingle; \
else \
$(MAKE) KISSFFT_DATATYPE=simd KISSFFT_STATIC=1 testsingle; \
fi
# OpenMP libraries
$(MAKE) KISSFFT_DATATYPE=double KISSFFT_OPENMP=1 testsingle
$(MAKE) KISSFFT_DATATYPE=float KISSFFT_OPENMP=1 testsingle
$(MAKE) KISSFFT_DATATYPE=int16_t KISSFFT_OPENMP=1 testsingle
# The simd and int32_t types may or may not work on your machine
$(MAKE) KISSFFT_DATATYPE=int32_t KISSFFT_OPENMP=1 testsingle
$(MAKE) KISSFFT_DATATYPE=simd KISSFFT_OPENMP=1 testsingle
@if [ "$(HAVE_LASX)" = "lasx" ]; then \
$(MAKE) KISSFFT_DATATYPE=simd HAVE_LASX=lasx testsingle; \
elif [ "$(HAVE_LSX)" = "lsx" ]; then \
$(MAKE) KISSFFT_DATATYPE=simd HAVE_LSX=lsx KISSFFT_OPENMP=1 testsingle; \
else \
$(MAKE) KISSFFT_DATATYPE=simd KISSFFT_OPENMP=1 testsingle; \
fi
$(warning All tests passed!)
#