summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.h
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2015-06-22 16:39:07 +0300
committerDmitry Stogov <dmitry@zend.com>2015-06-22 16:39:07 +0300
commit567aa1783e30570140a21f94b98bc99a4aa1241b (patch)
tree507c8c8b56e01aab3f9f6c6f96e3ca8e2ecaab19 /Zend/zend_execute.h
parent4807b164fd801381ded0f13c3643f56ef427cda9 (diff)
downloadphp-git-567aa1783e30570140a21f94b98bc99a4aa1241b.tar.gz
Added comments
Diffstat (limited to 'Zend/zend_execute.h')
-rw-r--r--Zend/zend_execute.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h
index 0b54445323..9719eda42b 100644
--- a/Zend/zend_execute.h
+++ b/Zend/zend_execute.h
@@ -148,6 +148,13 @@ struct _zend_vm_stack {
#define ZEND_VM_STACK_ELEMETS(stack) \
(((zval*)(stack)) + ZEND_VM_STACK_HEADER_SLOTS)
+/*
+ * In general in RELEASE build ZEND_ASSERT() must be zero-cost, but for some
+ * reason, GCC generated worse code, performing CSE on assertion code and the
+ * following "slow path" and moving memory read operatins from slow path into
+ * common header. This made a degradation for the fast path.
+ * The following "#if ZEND_DEBUG" eliminates it.
+ */
#if ZEND_DEBUG
# define ZEND_ASSERT_VM_STACK(stack) ZEND_ASSERT(stack->top > (zval *) stack && stack->end > (zval *) stack && stack->top <= stack->end)
# define ZEND_ASSERT_VM_STACK_GLOBAL ZEND_ASSERT(EG(vm_stack_top) > (zval *) EG(vm_stack) && EG(vm_stack_end) > (zval *) EG(vm_stack) && EG(vm_stack_top) <= EG(vm_stack_end))