diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index 2efabc4cfaa21..aabc893a75814 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -152,6 +152,9 @@ PHP 8.4 INTERNALS UPGRADE NOTES AX_CHECK_COMPILE_FLAG). - M4 macro PHP_PROG_RE2C got a new 2nd argument to define common default re2c command-line options substituted to the Makefile RE2C_FLAGS variable. + - M4 macros PHP_CHECK_BUILTIN_* have been removed in favor of + PHP_CHECK_BUILTIN and all PHP_HAVE_BUILTIN_* symbols changed to be either + undefined or defined to 1 whether compiler supports the builtin. - Added php-config --lib-dir and --lib-embed options for PHP embed SAPI. - PDO extensions in php-src don't have the include flag -I$pdo_cv_inc_path directory anymore. diff --git a/Zend/zend_call_stack.h b/Zend/zend_call_stack.h index 79cd54d96c7f7..c8bc756426bf8 100644 --- a/Zend/zend_call_stack.h +++ b/Zend/zend_call_stack.h @@ -40,7 +40,7 @@ ZEND_API bool zend_call_stack_get(zend_call_stack *stack); static zend_always_inline void *zend_call_stack_position(void) { #ifdef ZEND_WIN32 return _AddressOfReturnAddress(); -#elif PHP_HAVE_BUILTIN_FRAME_ADDRESS +#elif defined(PHP_HAVE_BUILTIN_FRAME_ADDRESS) return __builtin_frame_address(0); #else void *a; diff --git a/Zend/zend_cpuinfo.h b/Zend/zend_cpuinfo.h index a854739bcc9aa..9537df67b24de 100644 --- a/Zend/zend_cpuinfo.h +++ b/Zend/zend_cpuinfo.h @@ -118,7 +118,7 @@ ZEND_API int zend_cpu_supports(zend_cpu_feature feature); # define ZEND_NO_SANITIZE_ADDRESS #endif -#if PHP_HAVE_BUILTIN_CPU_SUPPORTS +#ifdef PHP_HAVE_BUILTIN_CPU_SUPPORTS /* NOTE: you should use following inline function in * resolver functions (ifunc), as it could be called * before all PLT symbols are resolved. in other words, @@ -126,7 +126,7 @@ ZEND_API int zend_cpu_supports(zend_cpu_feature feature); * functions */ ZEND_NO_SANITIZE_ADDRESS static inline int zend_cpu_supports_sse2(void) { -#if PHP_HAVE_BUILTIN_CPU_INIT +#ifdef PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("sse2"); @@ -134,7 +134,7 @@ static inline int zend_cpu_supports_sse2(void) { ZEND_NO_SANITIZE_ADDRESS static inline int zend_cpu_supports_sse3(void) { -#if PHP_HAVE_BUILTIN_CPU_INIT +#ifdef PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("sse3"); @@ -142,7 +142,7 @@ static inline int zend_cpu_supports_sse3(void) { ZEND_NO_SANITIZE_ADDRESS static inline int zend_cpu_supports_ssse3(void) { -#if PHP_HAVE_BUILTIN_CPU_INIT +#ifdef PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("ssse3"); @@ -150,7 +150,7 @@ static inline int zend_cpu_supports_ssse3(void) { ZEND_NO_SANITIZE_ADDRESS static inline int zend_cpu_supports_sse41(void) { -#if PHP_HAVE_BUILTIN_CPU_INIT +#ifdef PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("sse4.1"); @@ -158,7 +158,7 @@ static inline int zend_cpu_supports_sse41(void) { ZEND_NO_SANITIZE_ADDRESS static inline int zend_cpu_supports_sse42(void) { -#if PHP_HAVE_BUILTIN_CPU_INIT +#ifdef PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("sse4.2"); @@ -166,7 +166,7 @@ static inline int zend_cpu_supports_sse42(void) { ZEND_NO_SANITIZE_ADDRESS static inline int zend_cpu_supports_avx(void) { -#if PHP_HAVE_BUILTIN_CPU_INIT +#ifdef PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("avx"); @@ -174,7 +174,7 @@ static inline int zend_cpu_supports_avx(void) { ZEND_NO_SANITIZE_ADDRESS static inline int zend_cpu_supports_avx2(void) { -#if PHP_HAVE_BUILTIN_CPU_INIT +#ifdef PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("avx2"); @@ -183,7 +183,7 @@ static inline int zend_cpu_supports_avx2(void) { #ifdef PHP_HAVE_AVX512_SUPPORTS ZEND_NO_SANITIZE_ADDRESS static inline int zend_cpu_supports_avx512(void) { -#if PHP_HAVE_BUILTIN_CPU_INIT +#ifdef PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("avx512f") && __builtin_cpu_supports("avx512dq") @@ -195,7 +195,7 @@ static inline int zend_cpu_supports_avx512(void) { #ifdef PHP_HAVE_AVX512_VBMI_SUPPORTS ZEND_NO_SANITIZE_ADDRESS static inline int zend_cpu_supports_avx512_vbmi(void) { -#if PHP_HAVE_BUILTIN_CPU_INIT +#ifdef PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return zend_cpu_supports_avx512() && __builtin_cpu_supports("avx512vbmi"); @@ -244,10 +244,10 @@ static zend_always_inline int zend_cpu_supports_avx512_vbmi(void) { #endif /* __builtin_cpu_supports has pclmul from gcc9 */ -#if PHP_HAVE_BUILTIN_CPU_SUPPORTS && (!defined(__GNUC__) || (ZEND_GCC_VERSION >= 9000)) +#if defined(PHP_HAVE_BUILTIN_CPU_SUPPORTS) && (!defined(__GNUC__) || (ZEND_GCC_VERSION >= 9000)) ZEND_NO_SANITIZE_ADDRESS static inline int zend_cpu_supports_pclmul(void) { -#if PHP_HAVE_BUILTIN_CPU_INIT +#ifdef PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("pclmul"); @@ -259,10 +259,10 @@ static inline int zend_cpu_supports_pclmul(void) { #endif /* __builtin_cpu_supports has cldemote from gcc11 */ -#if PHP_HAVE_BUILTIN_CPU_SUPPORTS && defined(__GNUC__) && (ZEND_GCC_VERSION >= 11000) +#if defined(PHP_HAVE_BUILTIN_CPU_SUPPORTS) && defined(__GNUC__) && (ZEND_GCC_VERSION >= 11000) ZEND_NO_SANITIZE_ADDRESS static inline int zend_cpu_supports_cldemote(void) { -#if PHP_HAVE_BUILTIN_CPU_INIT +#ifdef PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("cldemote"); diff --git a/Zend/zend_multiply.h b/Zend/zend_multiply.h index a99e858bd7798..a64cd612148fe 100644 --- a/Zend/zend_multiply.h +++ b/Zend/zend_multiply.h @@ -22,7 +22,7 @@ #ifndef ZEND_MULTIPLY_H #define ZEND_MULTIPLY_H -#if PHP_HAVE_BUILTIN_SMULL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG +#if defined(PHP_HAVE_BUILTIN_SMULL_OVERFLOW) && SIZEOF_LONG == SIZEOF_ZEND_LONG #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ long __tmpvar; \ @@ -32,7 +32,7 @@ else (lval) = __tmpvar; \ } while (0) -#elif PHP_HAVE_BUILTIN_SMULLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG +#elif defined(PHP_HAVE_BUILTIN_SMULLL_OVERFLOW) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ long long __tmpvar; \ diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index e9f48bc496f96..45f9820c41b16 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -550,7 +550,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL return; overflow: ZEND_ATTRIBUTE_COLD_LABEL ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0); -#elif PHP_HAVE_BUILTIN_SADDL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG +#elif defined(PHP_HAVE_BUILTIN_SADDL_OVERFLOW) && SIZEOF_LONG == SIZEOF_ZEND_LONG long lresult; if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), 1, &lresult))) { /* switch to double */ @@ -558,7 +558,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL } else { Z_LVAL_P(op1) = lresult; } -#elif PHP_HAVE_BUILTIN_SADDLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG +#elif defined(PHP_HAVE_BUILTIN_SADDLL_OVERFLOW) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG long long llresult; if (UNEXPECTED(__builtin_saddll_overflow(Z_LVAL_P(op1), 1, &llresult))) { /* switch to double */ @@ -613,7 +613,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL return; overflow: ZEND_ATTRIBUTE_COLD_LABEL ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0); -#elif PHP_HAVE_BUILTIN_SSUBL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG +#elif defined(PHP_HAVE_BUILTIN_SSUBL_OVERFLOW) && SIZEOF_LONG == SIZEOF_ZEND_LONG long lresult; if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), 1, &lresult))) { /* switch to double */ @@ -621,7 +621,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL } else { Z_LVAL_P(op1) = lresult; } -#elif PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG +#elif defined(PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG long long llresult; if (UNEXPECTED(__builtin_ssubll_overflow(Z_LVAL_P(op1), 1, &llresult))) { /* switch to double */ @@ -697,14 +697,14 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL return; overflow: ZEND_ATTRIBUTE_COLD_LABEL ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2)); -#elif PHP_HAVE_BUILTIN_SADDL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG +#elif defined(PHP_HAVE_BUILTIN_SADDL_OVERFLOW) && SIZEOF_LONG == SIZEOF_ZEND_LONG long lresult; if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) { ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2)); } else { ZVAL_LONG(result, lresult); } -#elif PHP_HAVE_BUILTIN_SADDLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG +#elif defined(PHP_HAVE_BUILTIN_SADDLL_OVERFLOW) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG long long llresult; if (UNEXPECTED(__builtin_saddll_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &llresult))) { ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2)); @@ -785,14 +785,14 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL return; overflow: ZEND_ATTRIBUTE_COLD_LABEL ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2)); -#elif PHP_HAVE_BUILTIN_SSUBL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG +#elif defined(PHP_HAVE_BUILTIN_SSUBL_OVERFLOW) && SIZEOF_LONG == SIZEOF_ZEND_LONG long lresult; if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) { ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2)); } else { ZVAL_LONG(result, lresult); } -#elif PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG +#elif defined(PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG long long llresult; if (UNEXPECTED(__builtin_ssubll_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &llresult))) { ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2)); diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h index 84ca704749244..8fe1f73bd1a94 100644 --- a/Zend/zend_portability.h +++ b/Zend/zend_portability.h @@ -92,7 +92,7 @@ #elif defined(__clang__) && __has_builtin(__builtin_assume) # pragma clang diagnostic ignored "-Wassume" # define ZEND_ASSUME(c) __builtin_assume(c) -#elif PHP_HAVE_BUILTIN_UNREACHABLE && PHP_HAVE_BUILTIN_EXPECT +#elif defined(PHP_HAVE_BUILTIN_UNREACHABLE) && defined(PHP_HAVE_BUILTIN_EXPECT) # define ZEND_ASSUME(c) do { \ if (__builtin_expect(!(c), 0)) __builtin_unreachable(); \ } while (0) diff --git a/build/php.m4 b/build/php.m4 index 880db91ae8cf3..b61a070d41cbb 100644 --- a/build/php.m4 +++ b/build/php.m4 @@ -2392,343 +2392,43 @@ AC_DEFUN([PHP_CHECK_STDINT_TYPES], [ ]) dnl -dnl PHP_CHECK_BUILTIN_EXPECT -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_EXPECT], [ - AC_MSG_CHECKING([for __builtin_expect]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - return __builtin_expect(1,1) ? 1 : 0; - ]])], [ - have_builtin_expect=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_expect=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_EXPECT], [$have_builtin_expect], [Whether the compiler supports __builtin_expect]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_UNREACHABLE -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_UNREACHABLE], [ - AC_MSG_CHECKING([for __builtin_unreachable]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - __builtin_unreachable(); - ]])], [ - have_builtin_unreachable=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_unreachable=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_UNREACHABLE], [$have_builtin_unreachable], [Whether the compiler supports __builtin_unreachable]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_CLZ -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_CLZ], [ - AC_MSG_CHECKING([for __builtin_clz]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - return __builtin_clz(1) ? 1 : 0; - ]])], [ - have_builtin_clz=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_clz=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CLZ], [$have_builtin_clz], [Whether the compiler supports __builtin_clz]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_CLZL -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_CLZL], [ - AC_MSG_CHECKING([for __builtin_clzl]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - return __builtin_clzl(1) ? 1 : 0; - ]])], [ - have_builtin_clzl=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_clzl=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CLZL], [$have_builtin_clzl], [Whether the compiler supports __builtin_clzl]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_CLZLL -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_CLZLL], [ - AC_MSG_CHECKING([for __builtin_clzll]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - return __builtin_clzll(1) ? 1 : 0; - ]])], [ - have_builtin_clzll=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_clzll=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CLZLL], [$have_builtin_clzll], [Whether the compiler supports __builtin_clzll]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_CTZL -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_CTZL], [ - AC_MSG_CHECKING([for __builtin_ctzl]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - return __builtin_ctzl(2L) ? 1 : 0; - ]])], [ - have_builtin_ctzl=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_ctzl=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CTZL], [$have_builtin_ctzl], [Whether the compiler supports __builtin_ctzl]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_CTZLL -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_CTZLL], [ - AC_MSG_CHECKING([for __builtin_ctzll]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - return __builtin_ctzll(2LL) ? 1 : 0; - ]])], [ - have_builtin_ctzll=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_ctzll=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CTZLL], [$have_builtin_ctzll], [Whether the compiler supports __builtin_ctzll]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_SMULL_OVERFLOW -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_SMULL_OVERFLOW], [ - AC_MSG_CHECKING([for __builtin_smull_overflow]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - long tmpvar; - return __builtin_smull_overflow(3, 7, &tmpvar); - ]])], [ - have_builtin_smull_overflow=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_smull_overflow=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SMULL_OVERFLOW], - [$have_builtin_smull_overflow], [Whether the compiler supports __builtin_smull_overflow]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_SMULLL_OVERFLOW -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_SMULLL_OVERFLOW], [ - AC_MSG_CHECKING([for __builtin_smulll_overflow]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - long long tmpvar; - return __builtin_smulll_overflow(3, 7, &tmpvar); - ]])], [ - have_builtin_smulll_overflow=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_smulll_overflow=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SMULLL_OVERFLOW], - [$have_builtin_smulll_overflow], [Whether the compiler supports __builtin_smulll_overflow]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_SADDL_OVERFLOW -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_SADDL_OVERFLOW], [ - AC_MSG_CHECKING([for __builtin_saddl_overflow]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - long tmpvar; - return __builtin_saddl_overflow(3, 7, &tmpvar); - ]])], [ - have_builtin_saddl_overflow=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_saddl_overflow=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SADDL_OVERFLOW], - [$have_builtin_saddl_overflow], [Whether the compiler supports __builtin_saddl_overflow]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_SADDLL_OVERFLOW -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_SADDLL_OVERFLOW], [ - AC_MSG_CHECKING([for __builtin_saddll_overflow]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - long long tmpvar; - return __builtin_saddll_overflow(3, 7, &tmpvar); - ]])], [ - have_builtin_saddll_overflow=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_saddll_overflow=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SADDLL_OVERFLOW], - [$have_builtin_saddll_overflow], [Whether the compiler supports __builtin_saddll_overflow]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_USUB_OVERFLOW -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_USUB_OVERFLOW], [ - AC_MSG_CHECKING([for __builtin_usub_overflow]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - unsigned int tmpvar; - return __builtin_usub_overflow(3, 7, &tmpvar); - ]])], [ - have_builtin_usub_overflow=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_usub_overflow=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_USUB_OVERFLOW], - [$have_builtin_usub_overflow], [Whether the compiler supports __builtin_usub_overflow]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_SSUBL_OVERFLOW -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_SSUBL_OVERFLOW], [ - AC_MSG_CHECKING([for __builtin_ssubl_overflow]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - long tmpvar; - return __builtin_ssubl_overflow(3, 7, &tmpvar); - ]])], [ - have_builtin_ssubl_overflow=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_ssubl_overflow=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SSUBL_OVERFLOW], - [$have_builtin_ssubl_overflow], [Whether the compiler supports __builtin_ssubl_overflow]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_SSUBLL_OVERFLOW -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_SSUBLL_OVERFLOW], [ - AC_MSG_CHECKING([for __builtin_ssubll_overflow]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - long long tmpvar; - return __builtin_ssubll_overflow(3, 7, &tmpvar); - ]])], [ - have_builtin_ssubll_overflow=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_ssubll_overflow=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW], - [$have_builtin_ssubll_overflow], [Whether the compiler supports __builtin_ssubll_overflow]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_CPU_INIT -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_CPU_INIT], [ - AC_MSG_CHECKING([for __builtin_cpu_init]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - __builtin_cpu_init(); - ]])], [ - have_builtin_cpu_init=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_cpu_init=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CPU_INIT], - [$have_builtin_cpu_init], [Whether the compiler supports __builtin_cpu_init]) -]) - -dnl -dnl PHP_CHECK_BUILTIN_CPU_SUPPORTS -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_CPU_SUPPORTS], [ - AC_MSG_CHECKING([for __builtin_cpu_supports]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - return __builtin_cpu_supports("sse")? 1 : 0; - ]])], [ - have_builtin_cpu_supports=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_cpu_supports=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CPU_SUPPORTS], - [$have_builtin_cpu_supports], [Whether the compiler supports __builtin_cpu_supports]) +dnl PHP_CHECK_BUILTIN(builtin) +dnl +dnl Check GNU C builtin "builtin" and define the CPP macro +dnl PHP_HAVE_ to 1 if found. +dnl +AC_DEFUN([PHP_CHECK_BUILTIN], +[AS_VAR_PUSHDEF([php_var], [php_cv_have_$1]) +AC_CACHE_CHECK([for $1], [php_var], +[AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) { m4_case([$1], + [__builtin_clz], [return $1(1) ? 1 : 0;], + [__builtin_clzl], [return $1(1) ? 1 : 0;], + [__builtin_clzll], [return $1(1) ? 1 : 0;], + [__builtin_cpu_init], [$1();], + [__builtin_cpu_supports], [return $1("sse")? 1 : 0;], + [__builtin_ctzl], [return $1(2L) ? 1 : 0;], + [__builtin_ctzll], [return $1(2LL) ? 1 : 0;], + [__builtin_expect], [return $1(1,1) ? 1 : 0;], + [__builtin_frame_address], [return $1(0) != (void*)0;], + [__builtin_saddl_overflow], [long tmpvar; return $1(3, 7, &tmpvar);], + [__builtin_saddll_overflow], [long long tmpvar; return $1(3, 7, &tmpvar);], + [__builtin_smull_overflow], [long tmpvar; return $1(3, 7, &tmpvar);], + [__builtin_smulll_overflow], [long long tmpvar; return $1(3, 7, &tmpvar);], + [__builtin_ssubl_overflow], [long tmpvar; return $1(3, 7, &tmpvar);], + [__builtin_ssubll_overflow], [long long tmpvar; return $1(3, 7, &tmpvar);], + [__builtin_unreachable], [$1();], + [__builtin_usub_overflow], [unsigned int tmpvar; return $1(3, 7, &tmpvar);], + [ + m4_warn([syntax], [Unsupported builtin '$1', the test may fail.]) + $1(); + ]) return 0; }])], +[AS_VAR_SET([php_var], [yes])], +[AS_VAR_SET([php_var], [no])]) ]) - -dnl -dnl PHP_CHECK_BUILTIN_FRAME_ADDRESS -dnl -AC_DEFUN([PHP_CHECK_BUILTIN_FRAME_ADDRESS], [ - AC_MSG_CHECKING([for __builtin_frame_address]) - - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ - return __builtin_frame_address(0) != (void*)0; - ]])], [ - have_builtin_frame_address=1 - AC_MSG_RESULT([yes]) - ], [ - have_builtin_frame_address=0 - AC_MSG_RESULT([no]) - ]) - - AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_FRAME_ADDRESS], - [$have_builtin_frame_address], [Whether the compiler supports __builtin_frame_address]) +AS_VAR_IF([php_var], [yes], + [AC_DEFINE_UNQUOTED(AS_TR_CPP([PHP_HAVE_]m4_bpatsubst([$1], [^_*], [])), [1], + [Define to 1 if compiler supports '$1'.])]) +AS_VAR_POPDEF([php_var]) ]) dnl diff --git a/configure.ac b/configure.ac index c9ae2052337e1..c86f1bb69115e 100644 --- a/configure.ac +++ b/configure.ac @@ -477,40 +477,25 @@ PHP_CHECK_SIZEOF(ptrdiff_t, 8) dnl Check stdint types (must be after header check). PHP_CHECK_STDINT_TYPES -dnl Check __builtin_expect -PHP_CHECK_BUILTIN_EXPECT -dnl Check __builtin_unreachable -PHP_CHECK_BUILTIN_UNREACHABLE -dnl Check __builtin_clz -PHP_CHECK_BUILTIN_CLZ -dnl Check __builtin_clzl -PHP_CHECK_BUILTIN_CLZL -dnl Check __builtin_clzll -PHP_CHECK_BUILTIN_CLZLL -dnl Check __builtin_ctzl -PHP_CHECK_BUILTIN_CTZL -dnl Check __builtin_ctzll -PHP_CHECK_BUILTIN_CTZLL -dnl Check __builtin_smull_overflow -PHP_CHECK_BUILTIN_SMULL_OVERFLOW -dnl Check __builtin_smulll_overflow -PHP_CHECK_BUILTIN_SMULLL_OVERFLOW -dnl Check __builtin_saddl_overflow -PHP_CHECK_BUILTIN_SADDL_OVERFLOW -dnl Check __builtin_saddll_overflow -PHP_CHECK_BUILTIN_SADDLL_OVERFLOW -dnl Check __builtin_usub_overflow -PHP_CHECK_BUILTIN_USUB_OVERFLOW -dnl Check __builtin_ssubl_overflow -PHP_CHECK_BUILTIN_SSUBL_OVERFLOW -dnl Check __builtin_ssubll_overflow -PHP_CHECK_BUILTIN_SSUBLL_OVERFLOW -dnl Check __builtin_cpu_init -PHP_CHECK_BUILTIN_CPU_INIT -dnl Check __builtin_cpu_supports -PHP_CHECK_BUILTIN_CPU_SUPPORTS -dnl Check __builtin_frame_address -PHP_CHECK_BUILTIN_FRAME_ADDRESS +dnl Check GNU C builtins. +PHP_CHECK_BUILTIN([__builtin_clz]) +PHP_CHECK_BUILTIN([__builtin_clzl]) +PHP_CHECK_BUILTIN([__builtin_clzll]) +PHP_CHECK_BUILTIN([__builtin_cpu_init]) +PHP_CHECK_BUILTIN([__builtin_cpu_supports]) +PHP_CHECK_BUILTIN([__builtin_ctzl]) +PHP_CHECK_BUILTIN([__builtin_ctzll]) +PHP_CHECK_BUILTIN([__builtin_expect]) +PHP_CHECK_BUILTIN([__builtin_frame_address]) +PHP_CHECK_BUILTIN([__builtin_saddl_overflow]) +PHP_CHECK_BUILTIN([__builtin_saddll_overflow]) +PHP_CHECK_BUILTIN([__builtin_smull_overflow]) +PHP_CHECK_BUILTIN([__builtin_smulll_overflow]) +PHP_CHECK_BUILTIN([__builtin_ssubl_overflow]) +PHP_CHECK_BUILTIN([__builtin_ssubll_overflow]) +PHP_CHECK_BUILTIN([__builtin_unreachable]) +PHP_CHECK_BUILTIN([__builtin_usub_overflow]) + dnl Check AVX512 PHP_CHECK_AVX512_SUPPORTS dnl Check AVX512 VBMI diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf16.c b/ext/mbstring/libmbfl/filters/mbfilter_utf16.c index 047afb8336620..5f5958ad19b3e 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf16.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf16.c @@ -752,7 +752,7 @@ static size_t mb_utf16be_to_wchar_avx2(unsigned char **in, size_t *in_len, uint3 *out++ = (((n & 0x3FF) << 10) | (n2 & 0x3FF)) + 0x10000; bufsize--; len -= 4; -#if defined(PHP_HAVE_BUILTIN_USUB_OVERFLOW) && PHP_HAVE_BUILTIN_USUB_OVERFLOW +#ifdef PHP_HAVE_BUILTIN_USUB_OVERFLOW /* Subtracting 2 from `n_chars` will automatically set the CPU's flags; * branch directly off the appropriate flag (CF on x86) rather than using * another instruction (CMP on x86) to check for underflow */ @@ -938,7 +938,7 @@ static size_t mb_utf16le_to_wchar_avx2(unsigned char **in, size_t *in_len, uint3 *out++ = (((n & 0x3FF) << 10) | (n2 & 0x3FF)) + 0x10000; bufsize--; len -= 4; -#if defined(PHP_HAVE_BUILTIN_USUB_OVERFLOW) && PHP_HAVE_BUILTIN_USUB_OVERFLOW +#ifdef PHP_HAVE_BUILTIN_USUB_OVERFLOW if (__builtin_usub_overflow(n_chars, 2, &n_chars)) { break; } diff --git a/ext/opcache/jit/zend_jit_ir.c b/ext/opcache/jit/zend_jit_ir.c index 34d383c7f5f7c..84dce9707e209 100644 --- a/ext/opcache/jit/zend_jit_ir.c +++ b/ext/opcache/jit/zend_jit_ir.c @@ -3185,7 +3185,7 @@ static void zend_jit_setup(void) if (zend_cpu_supports_avx()) { allowed_opt_flags |= ZEND_JIT_CPU_AVX; } -# if PHP_HAVE_BUILTIN_CPU_SUPPORTS && defined(__GNUC__) && (ZEND_GCC_VERSION >= 11000) +# if defined(PHP_HAVE_BUILTIN_CPU_SUPPORTS) && defined(__GNUC__) && (ZEND_GCC_VERSION >= 11000) if (zend_cpu_supports_cldemote()) { default_mflags |= IR_X86_CLDEMOTE; }