From ee565529138891e757727de230af9051caeda05d Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 30 May 2019 20:35:30 +0300 Subject: [PATCH] Disable "bad" optimisations only for emulation loop --- Zend/zend_execute.c | 10 ---------- Zend/zend_vm_execute.h | 8 ++++++++ Zend/zend_vm_execute.skl | 8 ++++++++ 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index db9ca228601..96d1f614e33 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -4437,18 +4437,8 @@ static zend_never_inline int ZEND_FASTCALL zend_quick_check_constant( } \ } while (0) -#if ZEND_GCC_VERSION >= 4000 && !defined(__clang__) -# pragma GCC push_options -# pragma GCC optimize("no-gcse") -# pragma GCC optimize("no-ivopts") -#endif - #include "zend_vm_execute.h" -#if ZEND_GCC_VERSION >= 4000 && !defined(__clang__) -# pragma GCC pop_options -#endif - ZEND_API int zend_set_user_opcode_handler(zend_uchar opcode, user_opcode_handler_t handler) { if (opcode != ZEND_USER_OPCODE) { diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 89b36bde88e..210f488de2c 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -54854,6 +54854,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDL #endif +#if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__) +# pragma GCC push_options +# pragma GCC optimize("no-gcse") +# pragma GCC optimize("no-ivopts") +#endif ZEND_API void execute_ex(zend_execute_data *ex) { DCL_OPLINE @@ -65700,6 +65705,9 @@ zend_leave_helper_SPEC_LABEL: } zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen"); } +#if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__) +# pragma GCC pop_options +#endif ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value) { diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl index 5e6e98bb24e..27aae163913 100644 --- a/Zend/zend_vm_execute.skl +++ b/Zend/zend_vm_execute.skl @@ -1,5 +1,10 @@ {%DEFINES%} +#if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__) +# pragma GCC push_options +# pragma GCC optimize("no-gcse") +# pragma GCC optimize("no-ivopts") +#endif ZEND_API void {%EXECUTOR_NAME%}_ex(zend_execute_data *ex) { DCL_OPLINE @@ -20,6 +25,9 @@ ZEND_API void {%EXECUTOR_NAME%}_ex(zend_execute_data *ex) } zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen"); } +#if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__) +# pragma GCC pop_options +#endif ZEND_API void zend_{%EXECUTOR_NAME%}(zend_op_array *op_array, zval *return_value) {