diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-11-04 11:32:46 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-11-04 11:32:46 +0100 |
commit | 451314111b9942c8389415f04e9017c3e3d3cb56 (patch) | |
tree | 3cdcd889bc41a827d37b756586df37f6ff55aae8 | |
parent | c9abfaec6bf61bcef6d9651827b49cc7789018fd (diff) | |
download | php-git-451314111b9942c8389415f04e9017c3e3d3cb56.tar.gz |
Revert "Remove configure checks for supported instruction sets"
This reverts commit edccf32f7f36a8bc759b9482737e0c3efcb3a005.
This was reported to cause issues for as yet unknown reasons in
bug #78769. As this was intended as code cleanup, revert this from
7.4 at least. May reapply it to master later.
-rw-r--r-- | Zend/zend_portability.h | 12 | ||||
-rw-r--r-- | build/php.m4 | 24 | ||||
-rw-r--r-- | configure.ac | 6 |
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 fd37373f20..e91ef9887c 100644 --- a/build/php.m4 +++ b/build/php.m4 @@ -2675,6 +2675,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 39dc519a6c..038a3fbb9f 100644 --- a/configure.ac +++ b/configure.ac @@ -541,6 +541,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]) |