Use NEON on ARM hardware via sse2neon.h

The autoconf changes were adapted from:
https://github.com/glennrp/libpng/blob/libpng16/configure.ac
This commit is contained in:
Dino Kovač
2022-04-16 22:48:59 +02:00
parent 893745f09b
commit 6064bc6c06
7 changed files with 9025 additions and 32 deletions

View File

@@ -73,19 +73,52 @@ AS_IF([test "x$FOUND_SHUF" = xyes], [AC_DEFINE([HAVE_SHUF], [1], [shuf availabl
AS_IF([test "x$FOUND_GSHUF" = xyes], [AC_DEFINE([HAVE_GSHUF], [1], [gshuf available])])
# ------------------------------------------------------------------
# Checks for SSE2 build
# Architecture-specific options
# ------------------------------------------------------------------
AC_ARG_ENABLE([sse2],
AS_HELP_STRING(
[--disable-sse2],
[disable SSE2 optimization routines]
)
)
AS_IF([test "x$enable_sse2" != "xno"], [
CFLAGS="-mfpmath=sse -msse2 -DUSE_SSE ${CFLAGS}"
# allow enabling hardware optimization on any system:
case "$host_cpu" in
arm*|aarch64*)
enable_arm_neon=yes
enable_intel_sse=no
AC_DEFINE([ARM_NEON], [1],
[Enable ARM_NEON optimizations])
;;
i?86|x86_64)
enable_intel_sse=yes
enable_arm_neon=no
AC_DEFINE([INTEL_SSE], [1],
[Enable Intel SSE optimizations])
;;
esac
AC_ARG_ENABLE([hardware-optimizations],
AS_HELP_STRING([[[--disable-hardware-optimizations]]],
[Disable hardware optimizations (Intel SSE2 / ARM NEON)]),
[
# disable hardware optimization on all systems:
enable_arm_neon=no
AC_DEFINE([ARM_NEON], [0],
[Disable ARM_NEON optimizations])
enable_intel_sse=no
AC_DEFINE([INTEL_SSE], [0],
[Disable INTEL_SSE optimizations])
])
SIMDFLAGS=""
AS_IF([test "x$enable_intel_sse" != "xno"], [
SIMDFLAGS="-mfpmath=sse -msse2 -DINTEL_SSE"
])
AS_IF([test "x$enable_arm_neon" != "xno"], [
SIMDFLAGS="-march=armv8-a+fp+simd+crypto+crc -DARM_NEON"
])
CFLAGS="${SIMDFLAGS} ${CFLAGS}"
AC_SUBST([SIMDFLAGS], [$SIMDFLAGS])
AC_CHECK_HEADER(cblas.h, [AX_CBLAS])
AC_ARG_ENABLE([data-download],