+----------------------------------------------------------------------+
*/
+#include "php_version.h"
#include <ZendAccelerator.h>
#include "zend_shared_alloc.h"
#include "Zend/zend_execute.h"
REGISTER_HELPER(zend_jit_pre_dec_obj_helper);
REGISTER_HELPER(zend_jit_post_inc_obj_helper);
REGISTER_HELPER(zend_jit_post_dec_obj_helper);
+#if (PHP_VERSION_ID <= 80000) && (SIZEOF_SIZE_T == 4)
+ REGISTER_HELPER(zval_jit_update_constant_ex);
+#endif
#undef REGISTER_HELPER
#ifndef _WIN32
zval_ptr_dtor(z);
}
}
+
+#if (PHP_VERSION_ID <= 80000) && (SIZEOF_SIZE_T == 4)
+static zend_result ZEND_FASTCALL zval_jit_update_constant_ex(zval *p, zend_class_entry *scope)
+{
+ if (Z_TYPE_P(p) == IS_CONSTANT_AST) {
+ zend_ast *ast = Z_ASTVAL_P(p);
+
+ if (ast->kind == ZEND_AST_CONSTANT) {
+ zend_string *name = zend_ast_get_constant_name(ast);
+ zval *zv = zend_get_constant_ex(name, scope, ast->attr);
+ if (UNEXPECTED(zv == NULL)) {
+ return FAILURE;
+ }
+
+ zval_ptr_dtor_nogc(p);
+ ZVAL_COPY_OR_DUP(p, zv);
+ } else {
+ zval tmp;
+
+ if (UNEXPECTED(zend_ast_evaluate(&tmp, ast, scope) != SUCCESS)) {
+ return FAILURE;
+ }
+ zval_ptr_dtor_nogc(p);
+ ZVAL_COPY_VALUE(p, &tmp);
+ }
+ }
+ return SUCCESS;
+}
+#endif
\ No newline at end of file
} else {
| ADDR_OP2_2 mov, aword EX->opline, opline, r0
}
- |.if X64
- | LOAD_ZVAL_ADDR CARG1, res_addr
- | mov r0, EX->func
- | mov CARG2, [r0 + offsetof(zend_op_array, scope)]
- | EXT_CALL zval_update_constant_ex, r0
- |.else
- | sub r4, 8
- | mov r0, EX->func
- | push dword [r0 + offsetof(zend_op_array, scope)]
- | PUSH_ZVAL_ADDR res_addr, r0
- | EXT_CALL zval_update_constant_ex, r0
- | add r4, 16
- |.endif
+ | LOAD_ZVAL_ADDR FCARG1a, res_addr
+ | mov r0, EX->func
+ | mov FCARG2a, [r0 + offsetof(zend_op_array, scope)]
+ | .if X64
+ | EXT_CALL zval_update_constant_ex, r0
+ | .else
+ ||#if (PHP_VERSION_ID <= 80000)
+ | EXT_CALL zval_jit_update_constant_ex, r0
+ ||#else
+ | EXT_CALL zval_update_constant_ex, r0
+ ||#endif
+ | .endif
| test al, al
| jnz >1
|.cold_code