diff options
author | Ondřej Surý <ondrej@sury.org> | 2020-05-13 08:22:29 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-05-14 09:38:05 +0200 |
commit | d4bebc874b1b6dba953b901ee80f6d2a86a8d678 (patch) | |
tree | 4663df5460aa03391f803b684c8b85b5a2a6c3fe | |
parent | 1892e3abaaecff13e7b124ec4b19c2f23e2d8f69 (diff) | |
download | php-git-d4bebc874b1b6dba953b901ee80f6d2a86a8d678.tar.gz |
Properly detect CRC32 APIs on aarch64 from configure
The CRC32 APIs are optional for armv8-a. They became mandatory since
armv8.1-a.
Closes GH-5564.
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | ext/standard/crc32.c | 4 |
2 files changed, 8 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index fdf35e213b..c589896741 100644 --- a/configure.ac +++ b/configure.ac @@ -720,6 +720,12 @@ if test "x$php_crypt_r" = "x1"; then PHP_CRYPT_R_STYLE fi +AC_CACHE_CHECK([for aarch64 CRC32 API], ac_cv_func___crc32d, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <arm_acle.h>]],[[__crc32d(0, 0);]])],[ac_cv_func___crc32d=yes],[ac_cv_func___crc32d="no"])]) +if test "$ac_cv_func___crc32d" = "yes"; then + AC_DEFINE([HAVE_AARCH64_CRC32], [1], [Define when aarch64 CRC32 API is available.]) +fi + dnl Check for asm goto support. AC_CACHE_CHECK([for asm goto], ac_cv__asm_goto, [AC_RUN_IFELSE([AC_LANG_SOURCE([[ diff --git a/ext/standard/crc32.c b/ext/standard/crc32.c index 765135a142..497b133642 100644 --- a/ext/standard/crc32.c +++ b/ext/standard/crc32.c @@ -20,7 +20,7 @@ #include "basic_functions.h" #include "crc32.h" -#if defined(__aarch64__) && defined(HAVE_SYS_AUXV_H) +#if HAVE_AARCH64_CRC32 # include <arm_acle.h> # if defined(__linux__) # include <sys/auxv.h> @@ -85,7 +85,7 @@ PHP_NAMED_FUNCTION(php_if_crc32) crc = crcinit^0xFFFFFFFF; -#if defined(__aarch64__) && defined(HAVE_SYS_AUXV_H) +#if HAVE_AARCH64_CRC32 if (has_crc32_insn()) { crc = crc32_aarch64(crc, p, nr); RETURN_LONG(crc^0xFFFFFFFF); |