diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2020-09-02 11:49:42 +0300 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2020-09-02 11:49:42 +0300 |
| commit | c98e1747a8cd7d02bfaf76391ebef5d0b4d60c53 (patch) | |
| tree | 482930ce5a5232a9fdd0fbbec36ef4f3c7782d5b | |
| parent | 8b6b2bda093b26640d0d1d640e4566684df88011 (diff) | |
| download | php-git-c98e1747a8cd7d02bfaf76391ebef5d0b4d60c53.tar.gz | |
Minimal JIT support for JMP_NULL
| -rw-r--r-- | ext/opcache/jit/zend_jit.c | 5 | ||||
| -rw-r--r-- | ext/opcache/jit/zend_jit_trace.c | 2 | ||||
| -rw-r--r-- | ext/opcache/jit/zend_jit_x86.dasc | 3 |
3 files changed, 6 insertions, 4 deletions
diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c index a89b21f875..7997110c82 100644 --- a/ext/opcache/jit/zend_jit.c +++ b/ext/opcache/jit/zend_jit.c @@ -2972,8 +2972,6 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op goto jit_failure; } goto done; - case ZEND_JMP_NULL: - goto jit_failure; default: break; } @@ -3062,6 +3060,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op case ZEND_JMPNZ_EX: case ZEND_JMP_SET: case ZEND_COALESCE: + case ZEND_JMP_NULL: case ZEND_FE_RESET_R: case ZEND_FE_RESET_RW: case ZEND_ASSERT_CHECK: @@ -3112,8 +3111,6 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } } break; - case ZEND_JMP_NULL: - goto jit_failure; default: if (!zend_jit_handler(&dasm_state, opline, zend_may_throw(opline, ssa_op, op_array, ssa))) { diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index 4b88a9d03e..3203339d02 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -280,6 +280,7 @@ static int zend_jit_trace_may_exit(const zend_op_array *op_array, const zend_op case ZEND_JMPNZ_EX: case ZEND_JMP_SET: case ZEND_COALESCE: + case ZEND_JMP_NULL: case ZEND_FE_RESET_R: case ZEND_FE_RESET_RW: case ZEND_ASSERT_CHECK: @@ -4638,6 +4639,7 @@ done: || opline->opcode == ZEND_QM_ASSIGN || opline->opcode == ZEND_JMP_SET || opline->opcode == ZEND_COALESCE + || opline->opcode == ZEND_JMP_NULL || opline->opcode == ZEND_FE_RESET_R) { /* keep old value */ type = STACK_VAR_TYPE(opline->op1.var); diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 39a8942a84..39fd42e263 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -3329,6 +3329,7 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra case ZEND_JMPNZ_EX: case ZEND_JMP_SET: case ZEND_COALESCE: + case ZEND_JMP_NULL: case ZEND_FE_RESET_R: case ZEND_FE_RESET_RW: exit_opline = (trace->opline == opline + 1) ? @@ -8335,6 +8336,7 @@ static int zend_jit_needs_call_chain(zend_call_info *call_info, uint32_t b, cons case ZEND_FE_RESET_RW: case ZEND_JMP_SET: case ZEND_COALESCE: + case ZEND_JMP_NULL: case ZEND_ASSERT_CHECK: case ZEND_CATCH: case ZEND_DECLARE_ANON_CLASS: @@ -8416,6 +8418,7 @@ static int zend_jit_needs_call_chain(zend_call_info *call_info, uint32_t b, cons case ZEND_FE_RESET_RW: case ZEND_JMP_SET: case ZEND_COALESCE: + case ZEND_JMP_NULL: case ZEND_ASSERT_CHECK: case ZEND_CATCH: case ZEND_DECLARE_ANON_CLASS: |
