@@ -8567,8 +8567,6 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
8567
8567
#endif
8568
8568
}
8569
8569
8570
- bool may_have_extra_named_params =
8571
- opline->extended_value == ZEND_FCALL_MAY_HAVE_EXTRA_NAMED_PARAMS;
8572
8570
if ((opline-1)->opcode == ZEND_SEND_UNPACK || (opline-1)->opcode == ZEND_SEND_ARRAY ||
8573
8571
(opline-1)->opcode == ZEND_CHECK_UNDEF_ARGS) {
8574
8572
unknown_num_args = 1;
@@ -8624,6 +8622,10 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
8624
8622
}
8625
8623
}
8626
8624
8625
+ bool may_have_extra_named_params =
8626
+ opline->extended_value == ZEND_FCALL_MAY_HAVE_EXTRA_NAMED_PARAMS &&
8627
+ (!func || func->common.fn_flags & ZEND_ACC_VARIADIC);
8628
+
8627
8629
if (!reuse_ip) {
8628
8630
zend_jit_start_reuse_ip();
8629
8631
| // call = EX(call);
@@ -8992,9 +8994,6 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
8992
8994
}
8993
8995
}
8994
8996
8995
- | // EG(current_execute_data) = execute_data;
8996
- | MEM_OP2_1_ZTS mov, aword, executor_globals, current_execute_data, RX, r1
8997
-
8998
8997
if (!RETURN_VALUE_USED(opline)) {
8999
8998
|.if not(X64WIN)
9000
8999
| sub r4, 16 /* alloca() */
@@ -9005,6 +9004,9 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
9005
9004
| LOAD_ZVAL_ADDR FCARG2a, res_addr
9006
9005
| SET_Z_TYPE_INFO FCARG2a, IS_NULL
9007
9006
9007
+ | // EG(current_execute_data) = execute_data;
9008
+ | MEM_OP2_1_ZTS mov, aword, executor_globals, current_execute_data, RX, r1
9009
+
9008
9010
zend_jit_reset_opline(Dst, NULL);
9009
9011
9010
9012
| // fbc->internal_function.handler(call, ret);
@@ -11036,17 +11038,17 @@ static int zend_jit_recv(dasm_State **Dst, const zend_op *opline, const zend_op_
11036
11038
}
11037
11039
11038
11040
if (arg_info || (opline+1)->opcode != ZEND_RECV) {
11039
- zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var);
11041
+ | cmp dword EX->This.u2.num_args, arg_num
11040
11042
if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) {
11041
11043
int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM);
11042
11044
const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point);
11043
11045
11044
11046
if (!exit_addr) {
11045
11047
return 0;
11046
11048
}
11047
- | IF_ZVAL_TYPE res_addr, IS_UNDEF, &exit_addr
11049
+ | jb &exit_addr
11048
11050
} else {
11049
- | IF_ZVAL_TYPE res_addr, IS_UNDEF, >1
11051
+ | jb >1
11050
11052
|.cold_code
11051
11053
|1:
11052
11054
if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) {
@@ -11085,7 +11087,11 @@ static int zend_jit_recv_init(dasm_State **Dst, const zend_op *opline, const zen
11085
11087
zval *zv = RT_CONSTANT(opline, opline->op2);
11086
11088
zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var);
11087
11089
11088
- | IF_NOT_ZVAL_TYPE res_addr, IS_UNDEF, >5
11090
+ if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE ||
11091
+ (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
11092
+ | cmp dword EX->This.u2.num_args, arg_num
11093
+ | jae >5
11094
+ }
11089
11095
| ZVAL_COPY_CONST res_addr, -1, -1, zv, r0
11090
11096
if (Z_REFCOUNTED_P(zv)) {
11091
11097
| ADDREF_CONST zv, r0
0 commit comments