From e1817984055545e32ee59d22c1d5d00517caa935 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 16 Jun 2014 13:25:23 +0400 Subject: [PATCH] Small call/return improvement --- Zend/zend_execute.c | 14 ++++++++------ Zend/zend_execute.h | 11 +++++++---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index de52545353..2044557bd8 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1495,12 +1495,14 @@ void zend_clean_and_cache_symbol_table(zend_array *symbol_table TSRMLS_DC) /* {{ static zend_always_inline void i_free_compiled_variables(zend_execute_data *execute_data TSRMLS_DC) /* {{{ */ { - zval *cv = EX_VAR_NUM(0); - zval *end = cv + EX(op_array)->last_var; - while (cv != end) { - zval_ptr_dtor(cv); - cv++; - } + if (EXPECTED(EX(op_array)->last_var > 0)) { + zval *cv = EX_VAR_NUM(0); + zval *end = cv + EX(op_array)->last_var; + do { + zval_ptr_dtor(cv); + cv++; + } while (cv != end); + } } /* }}} */ diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index 623d3a8031..1b74564dfd 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -253,11 +253,14 @@ static zend_always_inline void zend_vm_stack_free(void *ptr TSRMLS_DC) static zend_always_inline void zend_vm_stack_clear_multiple(int nested TSRMLS_DC) { zval *p = EG(argument_stack)->top - 1; - zval *end = p - Z_LVAL_P(p); - while (p != end) { - p--; - i_zval_ptr_dtor_nogc(p ZEND_FILE_LINE_CC TSRMLS_CC); + if (EXPECTED(Z_LVAL_P(p) > 0)) { + zval *end = p - Z_LVAL_P(p); + + do { + p--; + i_zval_ptr_dtor_nogc(p ZEND_FILE_LINE_CC TSRMLS_CC); + } while (p != end); } if (nested) { EG(argument_stack)->top = p; -- 2.50.1