]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.4'
authorDmitry Stogov <dmitry@zend.com>
Tue, 6 Aug 2019 13:33:27 +0000 (16:33 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 6 Aug 2019 13:33:27 +0000 (16:33 +0300)
* PHP-7.4:
  Inline zend_zval_ptr() in executor explicitely (only on hot paths)

1  2 
Zend/zend_execute.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 4c6984e73d8475b5782cb700efa3a93fb4e0a4d0,556a8f8493a8ddba1dadc570d29171810ecf621c..52ba9ee7000a154748032e5cefe2d887d551a7fe
@@@ -141,15 -141,13 +141,12 @@@ ZEND_API const zend_internal_function z
        {NULL,NULL,NULL,NULL}   /* reserved          */
  };
  
- #undef zval_ptr_dtor
- #define zval_ptr_dtor(zv) i_zval_ptr_dtor(zv)
 -#define FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op, result) do {    \
 -      zval *__container_to_free = (free_op);                                                                  \
 -      if (UNEXPECTED(__container_to_free)                                                                             \
 -       && EXPECTED(Z_REFCOUNTED_P(__container_to_free))) {                                    \
 +#define FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_var) do {                   \
 +      zval *__container_to_free = EX_VAR(free_var);                                                   \
 +      if (UNEXPECTED(Z_REFCOUNTED_P(__container_to_free))) {                                  \
                zend_refcounted *__ref = Z_COUNTED_P(__container_to_free);                      \
                if (UNEXPECTED(!GC_DELREF(__ref))) {                                                            \
 -                      zval *__zv = (result);                                                                                  \
 +                      zval *__zv = EX_VAR(opline->result.var);                                                \
                        if (EXPECTED(Z_TYPE_P(__zv) == IS_INDIRECT)) {                                  \
                                ZVAL_COPY(__zv, Z_INDIRECT_P(__zv));                                            \
                        }                                                                                                                               \
index d1c2b886a45717b06361c42118a2b24d52fe7885,c10f9d6169c04f604582210e75c7acf42640038b..a0aead301ce745f54341d5bbe9769d8ff89f9da8
@@@ -4220,10 -4204,27 +4220,10 @@@ ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, 
                zend_vm_stack_free_args(call);
  
                if (!RETURN_VALUE_USED(opline)) {
-                       zval_ptr_dtor(ret);
+                       i_zval_ptr_dtor(ret);
                }
 -
 -      } else { /* ZEND_OVERLOADED_FUNCTION */
 -              zval retval;
 -
 -              ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
 -
 -              call->prev_execute_data = execute_data;
 -
 -              if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) {
 -                      UNDEF_RESULT();
 -                      HANDLE_EXCEPTION();
 -              }
 -
 -              if (!RETURN_VALUE_USED(opline)) {
 -                      zval_ptr_dtor(ret);
 -              }
        }
  
 -ZEND_VM_C_LABEL(fcall_end):
        if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
                OBJ_RELEASE(Z_OBJ(call->This));
        }
index 8cbd2011c26980bda6ec9c3ba83ec042b26379ae,6ac1d09e8f5644e21648a02774abce418721261d..29d6d3e778985ebfb39b1cf82775723836f6271b
@@@ -1623,10 -1618,27 +1623,10 @@@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_
                zend_vm_stack_free_args(call);
  
                if (!0) {
-                       zval_ptr_dtor(ret);
+                       i_zval_ptr_dtor(ret);
                }
 -
 -      } else { /* ZEND_OVERLOADED_FUNCTION */
 -              zval retval;
 -
 -              ret = 0 ? EX_VAR(opline->result.var) : &retval;
 -
 -              call->prev_execute_data = execute_data;
 -
 -              if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) {
 -                      UNDEF_RESULT();
 -                      HANDLE_EXCEPTION();
 -              }
 -
 -              if (!0) {
 -                      zval_ptr_dtor(ret);
 -              }
        }
  
 -fcall_end:
        if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
                OBJ_RELEASE(Z_OBJ(call->This));
        }
@@@ -1722,10 -1729,27 +1722,10 @@@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_
                zend_vm_stack_free_args(call);
  
                if (!1) {
-                       zval_ptr_dtor(ret);
+                       i_zval_ptr_dtor(ret);
                }
 -
 -      } else { /* ZEND_OVERLOADED_FUNCTION */
 -              zval retval;
 -
 -              ret = 1 ? EX_VAR(opline->result.var) : &retval;
 -
 -              call->prev_execute_data = execute_data;
 -
 -              if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) {
 -                      UNDEF_RESULT();
 -                      HANDLE_EXCEPTION();
 -              }
 -
 -              if (!1) {
 -                      zval_ptr_dtor(ret);
 -              }
        }
  
 -fcall_end:
        if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
                OBJ_RELEASE(Z_OBJ(call->This));
        }