Revert "Remove PSIMD dependency"
PiperOrigin-RevId: 345916889
diff --git a/CMakeLists.txt b/CMakeLists.txt
index eaeccca..e957755 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -115,6 +115,16 @@
SET(FXDIV_SOURCE_DIR "${CMAKE_BINARY_DIR}/FXdiv-source" CACHE STRING "FXdiv source directory")
ENDIF()
+ IF(NOT DEFINED PSIMD_SOURCE_DIR)
+ MESSAGE(STATUS "Downloading PSimd to ${CMAKE_BINARY_DIR}/psimd-source (define PSIMD_SOURCE_DIR to avoid it)")
+ CONFIGURE_FILE(cmake/DownloadPSimd.cmake "${CMAKE_BINARY_DIR}/psimd-download/CMakeLists.txt")
+ EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/psimd-download")
+ EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build .
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/psimd-download")
+ SET(PSIMD_SOURCE_DIR "${CMAKE_BINARY_DIR}/psimd-source" CACHE STRING "PSimd source directory")
+ ENDIF()
+
IF(NOT DEFINED PTHREADPOOL_SOURCE_DIR)
MESSAGE(STATUS "Downloading pthreadpool to ${CMAKE_BINARY_DIR}/pthreadpool-source (define PTHREADPOOL_SOURCE_DIR to avoid it)")
CONFIGURE_FILE(cmake/DownloadPThreadPool.cmake "${CMAKE_BINARY_DIR}/pthreadpool-download/CMakeLists.txt")
@@ -652,6 +662,12 @@
src/x32-zip/xm-scalar.c
src/xx-copy/memcpy.c)
+SET(XNNPACK_PSIMD_ACCMATH_MICROKERNEL_SRCS
+ src/qs8-requantization/fp32-psimd.c
+ src/qs8-requantization/precise-psimd.c
+ src/qu8-requantization/fp32-psimd.c
+ src/qu8-requantization/precise-psimd.c)
+
SET(XNNPACK_NEON_MICROKERNEL_SRCS
src/f32-argmaxpool/4x-neon-c4.c
src/f32-argmaxpool/9p8x-neon-c4.c
@@ -2639,6 +2655,9 @@
src/qs8-gemm/4x16c4-aarch64-neondot-ld64.S)
SET(XNNPACK_MICROKERNEL_SRCS ${XNNPACK_SCALAR_MICROKERNEL_SRCS})
+IF(NOT EMSCRIPTEN AND NOT MSVC AND NOT CMAKE_C_COMPILER_ID STREQUAL "Intel")
+ LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_PSIMD_ACCMATH_MICROKERNEL_SRCS})
+ENDIF()
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[5-8]" OR IOS_ARCH MATCHES "^armv7")
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEON_MICROKERNEL_SRCS})
LIST(APPEND XNNPACK_MICROKERNEL_SRCS ${XNNPACK_NEONFMA_MICROKERNEL_SRCS})
@@ -2682,6 +2701,7 @@
C_EXTENSIONS YES)
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[5-8]" OR IOS_ARCH MATCHES "^armv7")
SET_PROPERTY(SOURCE ${XNNPACK_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -marm ")
+ SET_PROPERTY(SOURCE ${XNNPACK_PSIMD_ACCMATH_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv7-a -mfpu=neon ")
SET_PROPERTY(SOURCE ${XNNPACK_NEON_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv7-a -mfpu=neon ")
SET_PROPERTY(SOURCE ${XNNPACK_NEONFMA_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv7-a -mfpu=neon-vfpv4 ")
SET_PROPERTY(SOURCE ${XNNPACK_NEONV8_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -march=armv8-a -mfpu=neon-fp-armv8 ")
@@ -2721,6 +2741,7 @@
SET_PROPERTY(SOURCE ${XNNPACK_AVX512F_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " /arch:AVX512 ")
SET_PROPERTY(SOURCE ${XNNPACK_AVX512SKX_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " /arch:AVX512 ")
ELSE()
+ SET_PROPERTY(SOURCE ${XNNPACK_PSIMD_ACCMATH_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -msse2 ")
SET_PROPERTY(SOURCE ${XNNPACK_SSE_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -msse ")
SET_PROPERTY(SOURCE ${XNNPACK_SSE2_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -msse2 ")
SET_PROPERTY(SOURCE ${XNNPACK_SSSE3_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -mssse3 ")
@@ -2766,6 +2787,15 @@
SET_PROPERTY(SOURCE ${XNNPACK_COLD_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS "$<$<NOT:$<CONFIG:Debug>>: -Os >")
ENDIF()
ENDIF()
+IF(NOT EMSCRIPTEN)
+ IF(${CMAKE_VERSION} VERSION_LESS "3.8.0")
+ IF(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
+ SET_PROPERTY(SOURCE ${XNNPACK_PSIMD_ACCMATH_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -O3 ")
+ ENDIF()
+ ELSE()
+ SET_PROPERTY(SOURCE ${XNNPACK_PSIMD_ACCMATH_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS "$<$<NOT:$<CONFIG:Debug>>: -O3 >")
+ ENDIF()
+ENDIF()
TARGET_INCLUDE_DIRECTORIES(XNNPACK PUBLIC include)
TARGET_INCLUDE_DIRECTORIES(XNNPACK PRIVATE src)
@@ -2862,6 +2892,23 @@
ENDIF()
TARGET_LINK_LIBRARIES(XNNPACK PRIVATE fxdiv)
+# ---[ Configure psimd
+IF(NOT TARGET psimd)
+ IF(NOT XNNPACK_USE_SYSTEM_LIBS)
+ ADD_SUBDIRECTORY(
+ "${PSIMD_SOURCE_DIR}"
+ "${CMAKE_BINARY_DIR}/psimd")
+ ELSE()
+ FIND_FILE(PSIMD_HDR psimd.h PATH_SUFFIXES include)
+ IF(NOT PSIMD_HDR)
+ MESSAGE(FATAL_ERROR "Cannot find psimd")
+ ENDIF()
+ ADD_LIBRARY(psimd STATIC "${PSIMD_HDR}")
+ SET_PROPERTY(TARGET psimd PROPERTY LINKER_LANGUAGE C)
+ ENDIF()
+ENDIF()
+TARGET_LINK_LIBRARIES(XNNPACK PRIVATE psimd)
+
# ---[ Configure FP16
IF(NOT TARGET fp16)
IF(NOT XNNPACK_USE_SYSTEM_LIBS)