diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-02-13 16:52:46 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-02-14 09:59:10 +0100 |
commit | 7bc162f928fe8144eddf95ca4bda5377787c8720 (patch) | |
tree | 8c46b6fd5044c5129653ccd13fa77c4ea750a5ef | |
parent | a89948320b7f835fa1dfe8dc3fc3f369304e5893 (diff) | |
download | php-git-7bc162f928fe8144eddf95ca4bda5377787c8720.tar.gz |
Work around compiler flag dependent ABI
-rw-r--r-- | Zend/zend_portability.h | 2 | ||||
-rw-r--r-- | configure.ac | 18 |
2 files changed, 19 insertions, 1 deletions
diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h index 108eb7e791..12e99b74d8 100644 --- a/Zend/zend_portability.h +++ b/Zend/zend_portability.h @@ -577,7 +577,7 @@ static zend_always_inline double _zend_get_nan(void) /* {{{ */ # define ZEND_INTRIN_SSSE3_FUNC_DECL(func) #endif -#ifdef __SSE4_2__ +#if defined(HAVE_SSE4_2_DEF) || (defined(ZEND_WIN32) && defined(__SSE4_2__)) /* Instructions compiled directly. */ # define ZEND_INTRIN_SSE4_2_NATIVE 1 #elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_SSE4_2)) || defined(ZEND_WIN32) diff --git a/configure.ac b/configure.ac index 809f783907..c1a9b9a560 100644 --- a/configure.ac +++ b/configure.ac @@ -565,6 +565,24 @@ PHP_CHECK_CPU_SUPPORTS([sse4.2]) PHP_CHECK_CPU_SUPPORTS([avx]) PHP_CHECK_CPU_SUPPORTS([avx2]) +dnl The ABI of php_addslashes in PHP 7.3 is dependent on __SSE4_2__, +dnl which depends on target attributes. Use this check to make sure that +dnl SSE 4.2 availability during the PHP compilation is used, independently +dnl of whether extensions are compiled with SSE 4.2 support. +AC_MSG_CHECKING([whether __SSE4_2__ is defined]) +AC_RUN_IFELSE([AC_LANG_SOURCE([[ +int main() { +#if defined(__SSE4_2__) + return 0; +#else + return 1; +#endif +} +]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_SSE4_2_DEF, 1, [Define if __SSE4_2__ has been defined]) +], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([no])]) + dnl Check for members of the stat structure AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_rdev]) dnl AC_STRUCT_ST_BLOCKS will screw QNX because fileblocks.o does not exist |