summaryrefslogtreecommitdiff
path: root/Zend/zend_execute_API.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-04-30 11:23:19 +0400
committerDmitry Stogov <dmitry@zend.com>2014-04-30 11:23:19 +0400
commit6a911e833f6b6dcac669a60808e96dc2c4f391d3 (patch)
treeed3e1218c42c71dfea2fd3c14291582536d4662d /Zend/zend_execute_API.c
parent8a8df2ce68918d1abbc72236cf171940b00198eb (diff)
downloadphp-git-6a911e833f6b6dcac669a60808e96dc2c4f391d3.tar.gz
Optimized JMPZNZ to avoid multiplication at runtime (may be it makes sense to use relative addresses everywere it'll lead to Position Independent Code)
Diffstat (limited to 'Zend/zend_execute_API.c')
-rw-r--r--Zend/zend_execute_API.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 03f763ea21..a7d7a948a5 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -1301,6 +1301,10 @@ void execute_new_code(TSRMLS_D) /* {{{ */
case ZEND_JMP:
opline->op1.jmp_addr = &CG(active_op_array)->opcodes[opline->op1.opline_num];
break;
+ case ZEND_JMPZNZ:
+ /* absolute index to relative offset */
+ opline->extended_value = (char*)(CG(active_op_array)->opcodes + opline->extended_value) - (char*)opline;
+ /* break omitted intentionally */
case ZEND_JMPZ:
case ZEND_JMPNZ:
case ZEND_JMPZ_EX: