From c98e1747a8cd7d02bfaf76391ebef5d0b4d60c53 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 2 Sep 2020 11:49:42 +0300 Subject: [PATCH] Minimal JIT support for JMP_NULL --- ext/opcache/jit/zend_jit.c | 5 +---- ext/opcache/jit/zend_jit_trace.c | 2 ++ 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: -- 2.50.1