{
uint32_t flags;
- flags = ZEND_CFG_STACKLESS | ZEND_RT_CONSTANTS | ZEND_CFG_NO_ENTRY_PREDECESSORS | ZEND_SSA_RC_INFERENCE_FLAG | ZEND_SSA_USE_CV_RESULTS;
-
- if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
- /* First RECV/RECV_INIT instructions may be skipped */
- flags |= ZEND_CFG_RECV_ENTRY;
- }
+ flags = ZEND_CFG_STACKLESS | ZEND_RT_CONSTANTS | ZEND_CFG_NO_ENTRY_PREDECESSORS | ZEND_SSA_RC_INFERENCE_FLAG | ZEND_SSA_USE_CV_RESULTS | ZEND_CFG_RECV_ENTRY;
if (zend_build_cfg(&CG(arena), op_array, flags, cfg) != SUCCESS) {
return FAILURE;
| mov aword EX->opline, FCARG1a
}
}
+
+ if (op_array == &func->op_array) {
+ /* recursive call */
+#ifdef CONTEXT_THREADED_JIT
+ | call >1
+ |.cold_code
+ |1:
+ | pop r0
+ | jmp =>num_args
+ |.code
+#else
+ | jmp =>num_args
+#endif
+ return 1;
+ }
} else {
| // opline = op_array->opcodes
if (GCC_GLOBAL_REGS) {
|3:
}
- if (func && op_array == &func->op_array) {
- /* recursive call */
- uint32_t num_args;
-
- if (func->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) {
- num_args = skip_valid_arguments(op_array, ssa, call_info);
- } else {
- num_args = call_info->num_args;
- }
-
#ifdef CONTEXT_THREADED_JIT
- | call >1
- |.cold_code
- |1:
- | pop r0
- | jmp =>num_args
- |.code
- if (!func) {
- | jmp >9
- }
+ | call ->context_threaded_call
+ if (!func) {
+ | jmp >9
+ }
#else
- | jmp =>num_args
-#endif
+ if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) {
+ | add r4, HYBRID_SPAD
+ | JMP_IP
+ } else if (GCC_GLOBAL_REGS) {
+ | add r4, SPAD // stack alignment
+ | JMP_IP
} else {
-#ifdef CONTEXT_THREADED_JIT
- | call ->context_threaded_call
- if (!func) {
- | jmp >9
- }
-#else
- if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) {
- | add r4, HYBRID_SPAD
- | JMP_IP
- } else if (GCC_GLOBAL_REGS) {
- | add r4, SPAD // stack alignment
- | JMP_IP
- } else {
- | mov FP, aword T2 // restore FP
- | mov RX, aword T3 // restore IP
- | add r4, NR_SPAD // stack alignment
- | mov r0, 1 // ZEND_VM_ENTER
- | ret
- }
-#endif
+ | mov FP, aword T2 // restore FP
+ | mov RX, aword T3 // restore IP
+ | add r4, NR_SPAD // stack alignment
+ | mov r0, 1 // ZEND_VM_ENTER
+ | ret
}
+#endif
}
if (!func || func->type == ZEND_INTERNAL_FUNCTION) {