summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2019-04-05 00:26:20 +0300
committerDmitry Stogov <dmitry@zend.com>2019-04-05 00:26:20 +0300
commit5b34c87d181d379e4c5212a07f6b39d151508b79 (patch)
treef03ac5379d360fc8ed1df00ae688c6145874c658 /Zend/zend_execute.c
parent3b4d9f9d9ebd2a4f8949c79b9734772e22cb7b7b (diff)
parentd6848625d7309b76377aa50b07a5bbdb6779c042 (diff)
downloadphp-git-5b34c87d181d379e4c5212a07f6b39d151508b79.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Optimized "smart branch" instructions
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r--Zend/zend_execute.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index fb19a1ac91..431c742a4f 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -4259,12 +4259,32 @@ static zend_never_inline int ZEND_FASTCALL zend_quick_check_constant(
} \
ZEND_VM_CONTINUE(); \
} while (0)
+#define ZEND_VM_SMART_BRANCH_TRUE() do { \
+ if (EXPECTED((opline+1)->opcode == ZEND_JMPNZ)) { \
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline + 1, (opline+1)->op2)); \
+ ZEND_VM_CONTINUE(); \
+ } else if (EXPECTED((opline+1)->opcode == ZEND_JMPZ)) { \
+ ZEND_VM_SET_NEXT_OPCODE(opline + 2); \
+ ZEND_VM_CONTINUE(); \
+ } \
+ } while (0)
+#define ZEND_VM_SMART_BRANCH_FALSE() do { \
+ if (EXPECTED((opline+1)->opcode == ZEND_JMPNZ)) { \
+ ZEND_VM_SET_NEXT_OPCODE(opline + 2); \
+ ZEND_VM_CONTINUE(); \
+ } else if (EXPECTED((opline+1)->opcode == ZEND_JMPZ)) { \
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline + 1, (opline+1)->op2)); \
+ ZEND_VM_CONTINUE(); \
+ } \
+ } while (0)
#else
# define ZEND_VM_REPEATABLE_OPCODE
# define ZEND_VM_REPEAT_OPCODE(_opcode)
# define ZEND_VM_SMART_BRANCH(_result, _check)
# define ZEND_VM_SMART_BRANCH_JMPZ(_result, _check)
# define ZEND_VM_SMART_BRANCH_JMPNZ(_result, _check)
+# define ZEND_VM_SMART_BRANCH_TRUE()
+# define ZEND_VM_SMART_BRANCH_FASLE()
#endif
#ifdef __GNUC__