Skip to content

Commit 2e175c7

Browse files
committed
JIT opcode ignore list
1 parent 5a0e406 commit 2e175c7

File tree

4 files changed

+17
-1
lines changed

4 files changed

+17
-1
lines changed

Zend/zend_execute.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4780,6 +4780,16 @@ ZEND_API user_opcode_handler_t zend_get_user_opcode_handler(zend_uchar opcode)
47804780
return zend_user_opcode_handlers[opcode];
47814781
}
47824782

4783+
ZEND_API bool zend_jit_opcode_ignore_list_get(zend_uchar opcode)
4784+
{
4785+
return zend_jit_opcode_ignore_list[opcode];
4786+
}
4787+
4788+
ZEND_API void zend_jit_opcode_ignore_list_set(zend_uchar opcode, bool value)
4789+
{
4790+
zend_jit_opcode_ignore_list[opcode] = value;
4791+
}
4792+
47834793
ZEND_API zval *zend_get_zval_ptr(const zend_op *opline, int op_type, const znode_op *node, const zend_execute_data *execute_data)
47844794
{
47854795
zval *ret;

Zend/zend_execute.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,9 @@ ZEND_API zval* zend_get_compiled_variable_value(const zend_execute_data *execute
345345
ZEND_API int zend_set_user_opcode_handler(zend_uchar opcode, user_opcode_handler_t handler);
346346
ZEND_API user_opcode_handler_t zend_get_user_opcode_handler(zend_uchar opcode);
347347

348+
ZEND_API bool zend_jit_opcode_ignore_list_get(zend_uchar opcode);
349+
ZEND_API void zend_jit_opcode_ignore_list_set(zend_uchar opcode, bool value);
350+
348351
ZEND_API zval *zend_get_zval_ptr(const zend_op *opline, int op_type, const znode_op *node, const zend_execute_data *execute_data);
349352

350353
ZEND_API void zend_clean_and_cache_symbol_table(zend_array *symbol_table);

Zend/zend_vm_gen.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2710,6 +2710,8 @@ function gen_vm($def, $skel) {
27102710
}
27112711
out($f, "255\n};\n\n");
27122712

2713+
out($f, "static bool zend_jit_opcode_ignore_list[256];\n\n");
2714+
27132715
// Generate specialized executor
27142716
gen_executor($f, $skl, ZEND_VM_SPEC, ZEND_VM_KIND, "execute", "zend_vm_init");
27152717
out($f, "\n");

ext/opcache/jit/zend_jit.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4198,7 +4198,8 @@ ZEND_EXT_API int zend_jit_check_support(void)
41984198
}
41994199

42004200
for (i = 0; i <= 256; i++) {
4201-
if (zend_get_user_opcode_handler(i) != NULL) {
4201+
if (zend_get_user_opcode_handler(i) != NULL &&
4202+
!zend_jit_opcode_ignore_list_get(i)) {
42024203
zend_error(E_WARNING, "JIT is incompatible with third party extensions that setup user opcode handlers. JIT disabled.");
42034204
JIT_G(enabled) = 0;
42044205
JIT_G(on) = 0;

0 commit comments

Comments
 (0)