summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-11-04 11:34:02 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-11-04 11:34:02 +0100
commitb509d67554f729b8b81ce906a46262357f79a87b (patch)
tree7b268d2cd948968ef1b9ffd4a53608982fbacc30
parent5b447d4b42416eb5c5ef94cf0b374e5a60ec4f39 (diff)
parent451314111b9942c8389415f04e9017c3e3d3cb56 (diff)
downloadphp-git-b509d67554f729b8b81ce906a46262357f79a87b.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Revert "Remove configure checks for supported instruction sets"
-rw-r--r--Zend/zend_portability.h12
-rw-r--r--build/php.m424
-rw-r--r--configure.ac6
3 files changed, 36 insertions, 6 deletions
diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h
index 3331b9ed10..1e549d300b 100644
--- a/Zend/zend_portability.h
+++ b/Zend/zend_portability.h
@@ -532,21 +532,21 @@ static zend_always_inline double _zend_get_nan(void) /* {{{ */
#endif
#if (defined(__i386__) || defined(__x86_64__))
-# if defined(HAVE_TMMINTRIN_H)
-# define PHP_HAVE_SSSE3
+# if PHP_HAVE_SSSE3_INSTRUCTIONS && defined(HAVE_TMMINTRIN_H)
+# define PHP_HAVE_SSSE3
# endif
-# if defined(HAVE_NMMINTRIN_H)
-# define PHP_HAVE_SSE4_2
+# if PHP_HAVE_SSE4_2_INSTRUCTIONS && defined(HAVE_NMMINTRIN_H)
+# define PHP_HAVE_SSE4_2
# endif
/*
* AVX2 support was added in gcc 4.7, but AVX2 intrinsics don't work in
* __attribute__((target("avx2"))) functions until gcc 4.9.
*/
-# if defined(HAVE_IMMINTRIN_H) && \
+# if PHP_HAVE_AVX2_INSTRUCTIONS && defined(HAVE_IMMINTRIN_H) && \
(defined(__llvm__) || defined(__clang__) || (defined(__GNUC__) && ZEND_GCC_VERSION >= 4009))
-# define PHP_HAVE_AVX2
+# define PHP_HAVE_AVX2
# endif
#endif
diff --git a/build/php.m4 b/build/php.m4
index ec4998426c..f5351ad4eb 100644
--- a/build/php.m4
+++ b/build/php.m4
@@ -2678,6 +2678,30 @@ AC_DEFUN([PHP_CHECK_BUILTIN_CPU_SUPPORTS], [
])
dnl
+dnl PHP_CHECK_CPU_SUPPORTS
+dnl
+AC_DEFUN([PHP_CHECK_CPU_SUPPORTS], [
+ AC_REQUIRE([PHP_CHECK_BUILTIN_CPU_INIT])
+ AC_REQUIRE([PHP_CHECK_BUILTIN_CPU_SUPPORTS])
+ have_ext_instructions=0
+ if test $have_builtin_cpu_supports = 1; then
+ AC_MSG_CHECKING([for $1 instructions supports])
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
+int main() {
+ return __builtin_cpu_supports("$1")? 0 : 1;
+}
+ ]])], [
+ have_ext_instructions=1
+ AC_MSG_RESULT([yes])
+ ], [
+ AC_MSG_RESULT([no])
+ ], [AC_MSG_RESULT([no])])
+ fi
+ AC_DEFINE_UNQUOTED(AS_TR_CPP([PHP_HAVE_$1_INSTRUCTIONS]),
+ [$have_ext_instructions], [Whether the compiler supports $1 instructions])
+])
+
+dnl
dnl PHP_PATCH_CONFIG_HEADERS([FILE])
dnl
dnl PACKAGE_* symbols are automatically defined by Autoconf. When including
diff --git a/configure.ac b/configure.ac
index e79de5b81a..1370ffae0a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -540,6 +540,12 @@ PHP_CHECK_BUILTIN_CPU_INIT
dnl Check __builtin_cpu_supports
PHP_CHECK_BUILTIN_CPU_SUPPORTS
+dnl Check instructions.
+PHP_CHECK_CPU_SUPPORTS([ssse3])
+PHP_CHECK_CPU_SUPPORTS([sse4.2])
+PHP_CHECK_CPU_SUPPORTS([avx])
+PHP_CHECK_CPU_SUPPORTS([avx2])
+
dnl Check for structure members.
AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[#include <time.h>])
AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_rdev])