Lines Matching refs:opline

103 static int zend_jit_trace_op_len(const zend_op *opline);
104 static int zend_jit_trace_may_exit(const zend_op_array *op_array, const zend_op *opline);
170 static int zend_jit_is_constant_cmp_long_long(const zend_op *opline, in zend_jit_is_constant_cmp_long_long() argument
202 switch (opline->opcode) { in zend_jit_is_constant_cmp_long_long()
254 …rray *op_array, zend_ssa *ssa, const zend_ssa_op *ssa_op, const zend_op *opline, int call_level, z… in zend_jit_needs_call_chain() argument
264 switch (p->opline->opcode) { in zend_jit_needs_call_chain()
313 if (zend_may_throw(opline, ssa_op, op_array, ssa)) { in zend_jit_needs_call_chain()
317 ADVANCE_SSA_OP(ssa_op, zend_jit_trace_op_len(opline)); in zend_jit_needs_call_chain()
330 opline++; in zend_jit_needs_call_chain()
333 while (opline != end) { in zend_jit_needs_call_chain()
335 if (zend_may_throw(opline, ssa_op, op_array, ssa)) { in zend_jit_needs_call_chain()
339 switch (opline->opcode) { in zend_jit_needs_call_chain()
386 end = opline; in zend_jit_needs_call_chain()
393 opline++; in zend_jit_needs_call_chain()
407 opline++; in zend_jit_needs_call_chain()
410 while (opline != end) { in zend_jit_needs_call_chain()
412 switch (opline->opcode) { in zend_jit_needs_call_chain()
429 if (zend_may_throw(opline, ssa_op, op_array, ssa)) { in zend_jit_needs_call_chain()
433 opline++; in zend_jit_needs_call_chain()
453 zend_op *opline = call_info->arg_info[num_args].opline; in skip_valid_arguments() local
454 zend_ssa_op *ssa_op = ssa->ops ? &ssa->ops[opline - op_array->opcodes] : NULL; in skip_valid_arguments()
490 … const zend_op *opline = op_array->opcodes + ssa->cfg.blocks[j].start + ssa->cfg.blocks[j].len - 1; in zend_ssa_cv_info() local
492 if (opline->opcode == ZEND_RETURN) { in zend_ssa_cv_info()
493 if (opline->op1_type == IS_CV && opline->op1.var == EX_NUM_TO_VAR(var)) { in zend_ssa_cv_info()
506 static bool zend_jit_may_avoid_refcounting(const zend_op *opline, uint32_t op1_info) in zend_jit_may_avoid_refcounting() argument
508 switch (opline->opcode) { in zend_jit_may_avoid_refcounting()
519 && opline->op2_type == IS_CONST in zend_jit_may_avoid_refcounting()
520 && Z_TYPE_P(RT_CONSTANT(opline, opline->op2)) == IS_STRING in zend_jit_may_avoid_refcounting()
521 && Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))[0] != '\0') { in zend_jit_may_avoid_refcounting()
536 if (!(opline->extended_value & ZEND_ISEMPTY)) { in zend_jit_may_avoid_refcounting()
563 static zend_class_entry* zend_get_known_class(const zend_op_array *op_array, const zend_op *opline,… in zend_get_known_class() argument
568 zval *zv = RT_CONSTANT(opline, op); in zend_get_known_class()
770 (((opline->opN##_type & (IS_TMP_VAR|IS_VAR|IS_CV)) && \
868 static int zend_may_overflow(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array … in zend_may_overflow() argument
876 switch (opline->opcode) { in zend_may_overflow()
968 if (opline->extended_value == ZEND_ADD) { in zend_may_overflow()
995 } else if (opline->extended_value == ZEND_SUB) { in zend_may_overflow()
1022 } else if (opline->extended_value == ZEND_MUL) { in zend_may_overflow()
1341 static bool zend_jit_next_is_send_result(const zend_op *opline) in zend_jit_next_is_send_result() argument
1343 if (opline->result_type == IS_TMP_VAR in zend_jit_next_is_send_result()
1344 && (opline+1)->opcode == ZEND_SEND_VAL in zend_jit_next_is_send_result()
1345 && (opline+1)->op1_type == IS_TMP_VAR in zend_jit_next_is_send_result()
1346 && (opline+1)->op2_type != IS_CONST in zend_jit_next_is_send_result()
1347 && (opline+1)->op1.var == opline->result.var) { in zend_jit_next_is_send_result()
1384 zend_op *opline; in zend_jit() local
1444 opline = op_array->opcodes + ssa->cfg.blocks[b].start; in zend_jit()
1446 if (opline->opcode == ZEND_RECV_INIT) { in zend_jit()
1448 if (opline != op_array->opcodes && (opline-1)->opcode != ZEND_RECV_INIT) { in zend_jit()
1452 if (opline != op_array->opcodes && recv_emitted) { in zend_jit()
1457 } else if (opline->opcode == ZEND_RECV) { in zend_jit()
1574 opline = op_array->opcodes + i; in zend_jit()
1575 switch (opline->opcode) { in zend_jit()
1589 switch (opline->opcode) { in zend_jit()
1594 if (opline->op1_type != IS_CV) { in zend_jit()
1601 if (opline->result_type != IS_UNUSED) { in zend_jit()
1604 if (opline->result_type == IS_CV in zend_jit()
1624 if (!zend_jit_inc_dec(&ctx, opline, in zend_jit()
1629 …(op1_info & MAY_BE_LONG) && (op1_def_info & MAY_BE_DOUBLE) && zend_may_overflow(opline, ssa_op, op… in zend_jit()
1630 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
1652 && zend_jit_next_is_send_result(opline)) { in zend_jit()
1655 res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, (opline+1)->result.var); in zend_jit()
1662 if (opline->result_type == IS_CV in zend_jit()
1675 if (!zend_jit_long_math(&ctx, opline, in zend_jit()
1679 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
1695 if (opline->opcode == ZEND_ADD && in zend_jit()
1706 && zend_jit_next_is_send_result(opline)) { in zend_jit()
1709 res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, (opline+1)->result.var); in zend_jit()
1716 if (opline->result_type == IS_CV in zend_jit()
1730 if (opline->opcode == ZEND_ADD && in zend_jit()
1733 …if (!zend_jit_add_arrays(&ctx, opline, op1_info, OP1_REG_ADDR(), op2_info, OP2_REG_ADDR(), res_add… in zend_jit()
1737 if (!zend_jit_math(&ctx, opline, in zend_jit()
1741 …2_info & MAY_BE_LONG) && (res_info & MAY_BE_DOUBLE) && zend_may_overflow(opline, ssa_op, op_array,… in zend_jit()
1742 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
1763 && zend_jit_next_is_send_result(opline)) { in zend_jit()
1765 res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, (opline+1)->result.var); in zend_jit()
1770 if (!zend_jit_concat(&ctx, opline, in zend_jit()
1772 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
1777 if (opline->op1_type != IS_CV || opline->result_type != IS_UNUSED) { in zend_jit()
1786 opline->extended_value, op1_info, op2_info)) { in zend_jit()
1797 if (!zend_jit_assign_op(&ctx, opline, in zend_jit()
1801 …fo & MAY_BE_LONG) && (op1_def_info & MAY_BE_DOUBLE) && zend_may_overflow(opline, ssa_op, op_array,… in zend_jit()
1802 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
1807 if (opline->op1_type != IS_CV || opline->result_type != IS_UNUSED) { in zend_jit()
1814 opline->extended_value, MAY_BE_ANY, OP1_DATA_INFO())) { in zend_jit()
1817 if (!zend_jit_assign_dim_op(&ctx, opline, in zend_jit()
1819 OP2_INFO(), (opline->op2_type != IS_UNUSED) ? OP2_REG_ADDR() : 0, in zend_jit()
1820 (opline->op2_type != IS_UNUSED) ? OP2_RANGE() : NULL, in zend_jit()
1822 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
1827 if (opline->op1_type != IS_CV) { in zend_jit()
1833 if (!zend_jit_assign_dim(&ctx, opline, in zend_jit()
1835 OP2_INFO(), (opline->op2_type != IS_UNUSED) ? OP2_REG_ADDR() : 0, in zend_jit()
1836 (opline->op2_type != IS_UNUSED) ? OP2_RANGE() : NULL, in zend_jit()
1839 (opline->result_type != IS_UNUSED) ? RES_REG_ADDR() : 0, in zend_jit()
1841 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
1849 if (opline->op2_type != IS_CONST in zend_jit()
1850 || Z_TYPE_P(RT_CONSTANT(opline, opline->op2)) != IS_STRING in zend_jit()
1851 || Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))[0] == '\0') { in zend_jit()
1860 if (opline->op1_type == IS_UNUSED) { in zend_jit()
1876 zend_ssa_op *ssa_op = &ssa->ops[opline - op_array->opcodes]; in zend_jit()
1886 if (!zend_jit_incdec_obj(&ctx, opline, op_array, ssa, ssa_op, in zend_jit()
1893 if (opline->result_type != IS_UNUSED) { in zend_jit()
1896 if (opline->op2_type != IS_CONST in zend_jit()
1897 || Z_TYPE_P(RT_CONSTANT(opline, opline->op2)) != IS_STRING in zend_jit()
1898 || Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))[0] == '\0') { in zend_jit()
1905 opline->extended_value, MAY_BE_ANY, OP1_DATA_INFO())) { in zend_jit()
1911 if (opline->op1_type == IS_UNUSED) { in zend_jit()
1927 zend_ssa_op *ssa_op = &ssa->ops[opline - op_array->opcodes]; in zend_jit()
1937 if (!zend_jit_assign_obj_op(&ctx, opline, op_array, ssa, ssa_op, in zend_jit()
1944 if (opline->op2_type != IS_CONST in zend_jit()
1945 || Z_TYPE_P(RT_CONSTANT(opline, opline->op2)) != IS_STRING in zend_jit()
1946 || Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))[0] == '\0') { in zend_jit()
1955 if (opline->op1_type == IS_UNUSED) { in zend_jit()
1971 zend_ssa_op *ssa_op = &ssa->ops[opline - op_array->opcodes]; in zend_jit()
1981 if (!zend_jit_assign_obj(&ctx, opline, op_array, ssa, ssa_op, in zend_jit()
1983 (opline->result_type != IS_UNUSED) ? RES_REG_ADDR() : 0, in zend_jit()
1985 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
1990 if (opline->op1_type != IS_CV) { in zend_jit()
1998 && ssa->ops[opline - op_array->opcodes].op2_def >= 0 in zend_jit()
1999 && !ssa->vars[ssa->ops[opline - op_array->opcodes].op2_def].no_val) { in zend_jit()
2008 if (opline->result_type == IS_UNUSED) { in zend_jit()
2016 && zend_jit_next_is_send_result(opline) in zend_jit()
2019 res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, (opline+1)->result.var); in zend_jit()
2025 if (!zend_jit_assign(&ctx, opline, in zend_jit()
2031 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
2038 && ssa->ops[opline - op_array->opcodes].op1_def >= 0 in zend_jit()
2039 && !ssa->vars[ssa->ops[opline - op_array->opcodes].op1_def].no_val) { in zend_jit()
2044 if (!zend_jit_qm_assign(&ctx, opline, in zend_jit()
2053 if (!zend_jit_init_fcall(&ctx, opline, b, op_array, ssa, ssa_op, call_level, NULL, 0)) { in zend_jit()
2059 if (opline->op2_type == IS_CONST) { in zend_jit()
2063 if (opline->opcode == ZEND_SEND_VAL_EX in zend_jit()
2064 && opline->op2.num > MAX_ARG_FLAG_NUM) { in zend_jit()
2067 if (!zend_jit_send_val(&ctx, opline, in zend_jit()
2073 if (opline->op2_type == IS_CONST) { in zend_jit()
2077 if (!zend_jit_send_ref(&ctx, opline, op_array, in zend_jit()
2087 if (opline->op2_type == IS_CONST) { in zend_jit()
2091 if ((opline->opcode == ZEND_SEND_VAR_EX in zend_jit()
2092 || opline->opcode == ZEND_SEND_VAR_NO_REF_EX) in zend_jit()
2093 && opline->op2.num > MAX_ARG_FLAG_NUM) { in zend_jit()
2098 && ssa->ops[opline - op_array->opcodes].op1_def >= 0 in zend_jit()
2099 && !ssa->vars[ssa->ops[opline - op_array->opcodes].op1_def].no_val) { in zend_jit()
2104 if (!zend_jit_send_var(&ctx, opline, op_array, in zend_jit()
2110 if (opline->op2_type == IS_CONST) { in zend_jit()
2114 if (opline->op2.num > MAX_ARG_FLAG_NUM) { in zend_jit()
2117 if (!zend_jit_check_func_arg(&ctx, opline)) { in zend_jit()
2122 if (!zend_jit_check_undef_args(&ctx, opline)) { in zend_jit()
2131 if (!zend_jit_do_fcall(&ctx, opline, op_array, ssa, call_level, b + 1, NULL)) { in zend_jit()
2141 if ((opline->result_type & IS_TMP_VAR) in zend_jit()
2143 && ((opline+1)->opcode == ZEND_JMPZ in zend_jit()
2144 || (opline+1)->opcode == ZEND_JMPNZ in zend_jit()
2145 || (opline+1)->opcode == ZEND_JMPZ_EX in zend_jit()
2146 || (opline+1)->opcode == ZEND_JMPNZ_EX) in zend_jit()
2147 && (opline+1)->op1_type == IS_TMP_VAR in zend_jit()
2148 && (opline+1)->op1.var == opline->result.var) { in zend_jit()
2150 smart_branch_opcode = (opline+1)->opcode; in zend_jit()
2154 if ((opline+1)->opcode == ZEND_JMPZ_EX in zend_jit()
2155 || (opline+1)->opcode == ZEND_JMPNZ_EX) { in zend_jit()
2156 res_addr = OP_REG_ADDR(opline + 1, ssa_op + 1, result_type, result, result_def); in zend_jit()
2162 if (!zend_jit_cmp(&ctx, opline, in zend_jit()
2166 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit()
2177 if ((opline->result_type & IS_TMP_VAR) in zend_jit()
2179 && ((opline+1)->opcode == ZEND_JMPZ in zend_jit()
2180 || (opline+1)->opcode == ZEND_JMPZ_EX in zend_jit()
2181 || (opline+1)->opcode == ZEND_JMPNZ_EX in zend_jit()
2182 || (opline+1)->opcode == ZEND_JMPNZ) in zend_jit()
2183 && (opline+1)->op1_type == IS_TMP_VAR in zend_jit()
2184 && (opline+1)->op1.var == opline->result.var) { in zend_jit()
2186 smart_branch_opcode = (opline+1)->opcode; in zend_jit()
2190 if ((opline+1)->opcode == ZEND_JMPZ_EX in zend_jit()
2191 || (opline+1)->opcode == ZEND_JMPNZ_EX) { in zend_jit()
2192 res_addr = OP_REG_ADDR(opline + 1, ssa_op + 1, result_type, result, result_def); in zend_jit()
2198 if (!zend_jit_identical(&ctx, opline, in zend_jit()
2202 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit()
2209 if ((opline->result_type & IS_TMP_VAR) in zend_jit()
2211 && ((opline+1)->opcode == ZEND_JMPZ in zend_jit()
2212 || (opline+1)->opcode == ZEND_JMPNZ) in zend_jit()
2213 && (opline+1)->op1_type == IS_TMP_VAR in zend_jit()
2214 && (opline+1)->op1.var == opline->result.var) { in zend_jit()
2216 smart_branch_opcode = (opline+1)->opcode; in zend_jit()
2223 if (!zend_jit_defined(&ctx, opline, smart_branch_opcode, target_label, target_label2, NULL)) { in zend_jit()
2228 if (opline->extended_value == MAY_BE_RESOURCE) { in zend_jit()
2232 if ((opline->result_type & IS_TMP_VAR) in zend_jit()
2234 && ((opline+1)->opcode == ZEND_JMPZ in zend_jit()
2235 || (opline+1)->opcode == ZEND_JMPNZ) in zend_jit()
2236 && (opline+1)->op1_type == IS_TMP_VAR in zend_jit()
2237 && (opline+1)->op1.var == opline->result.var) { in zend_jit()
2239 smart_branch_opcode = (opline+1)->opcode; in zend_jit()
2246 …if (!zend_jit_type_check(&ctx, opline, OP1_INFO(), smart_branch_opcode, target_label, target_label… in zend_jit()
2258 if (!zend_jit_tail_handler(&ctx, opline)) { in zend_jit()
2262 if (!zend_jit_return(&ctx, opline, op_array, in zend_jit()
2270 if (!zend_jit_bool_jmpznz(&ctx, opline, in zend_jit()
2273 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit()
2274 opline->opcode, NULL)) { in zend_jit()
2280 if (opline > op_array->opcodes + ssa->cfg.blocks[b].start && in zend_jit()
2281 ((opline-1)->result_type & (IS_SMART_BRANCH_JMPZ|IS_SMART_BRANCH_JMPNZ)) != 0) { in zend_jit()
2283 if (!zend_jit_cond_jmp(&ctx, opline + 1, ssa->cfg.blocks[b].successors[0])) { in zend_jit()
2291 if (opline->result_type == IS_UNDEF) { in zend_jit()
2296 if (!zend_jit_bool_jmpznz(&ctx, opline, in zend_jit()
2299 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit()
2300 opline->opcode, NULL)) { in zend_jit()
2305 if ((opline->extended_value & ZEND_ISEMPTY)) { in zend_jit()
2309 if ((opline->result_type & IS_TMP_VAR) in zend_jit()
2311 && ((opline+1)->opcode == ZEND_JMPZ in zend_jit()
2312 || (opline+1)->opcode == ZEND_JMPNZ) in zend_jit()
2313 && (opline+1)->op1_type == IS_TMP_VAR in zend_jit()
2314 && (opline+1)->op1.var == opline->result.var) { in zend_jit()
2316 smart_branch_opcode = (opline+1)->opcode; in zend_jit()
2323 if (!zend_jit_isset_isempty_cv(&ctx, opline, in zend_jit()
2331 if (opline->op1_type == IS_VAR || opline->op1_type == IS_TMP_VAR) { in zend_jit()
2338 if ((opline->result_type & IS_TMP_VAR) in zend_jit()
2340 && ((opline+1)->opcode == ZEND_JMPZ in zend_jit()
2341 || (opline+1)->opcode == ZEND_JMPNZ) in zend_jit()
2342 && (opline+1)->op1_type == IS_TMP_VAR in zend_jit()
2343 && (opline+1)->op1.var == opline->result.var) { in zend_jit()
2345 smart_branch_opcode = (opline+1)->opcode; in zend_jit()
2352 if (!zend_jit_in_array(&ctx, opline, in zend_jit()
2365 if (!zend_jit_fetch_dim_read(&ctx, opline, ssa, ssa_op, in zend_jit()
2379 if (opline->op1_type != IS_CV) { in zend_jit()
2382 if (!zend_jit_fetch_dim(&ctx, opline, in zend_jit()
2384 OP2_INFO(), (opline->op2_type != IS_UNUSED) ? OP2_REG_ADDR() : 0, in zend_jit()
2385 (opline->op2_type != IS_UNUSED) ? OP2_RANGE() : 0, in zend_jit()
2391 if ((opline->extended_value & ZEND_ISEMPTY)) { in zend_jit()
2398 if ((opline->result_type & IS_TMP_VAR) in zend_jit()
2400 && ((opline+1)->opcode == ZEND_JMPZ in zend_jit()
2401 || (opline+1)->opcode == ZEND_JMPNZ) in zend_jit()
2402 && (opline+1)->op1_type == IS_TMP_VAR in zend_jit()
2403 && (opline+1)->op1.var == opline->result.var) { in zend_jit()
2405 smart_branch_opcode = (opline+1)->opcode; in zend_jit()
2412 if (!zend_jit_isset_isempty_dim(&ctx, opline, in zend_jit()
2415 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit()
2424 if (opline->op2_type != IS_CONST in zend_jit()
2425 || Z_TYPE_P(RT_CONSTANT(opline, opline->op2)) != IS_STRING in zend_jit()
2426 || Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))[0] == '\0') { in zend_jit()
2432 if (opline->op1_type == IS_UNUSED) { in zend_jit()
2448 zend_ssa_op *ssa_op = &ssa->ops[opline - op_array->opcodes]; in zend_jit()
2458 if (!zend_jit_fetch_obj(&ctx, opline, op_array, ssa, ssa_op, in zend_jit()
2461 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
2470 if (!(opline->op1_type == IS_CONST in zend_jit()
2471 && (opline->op2_type == IS_CONST in zend_jit()
2472 || (opline->op2_type == IS_UNUSED in zend_jit()
2473 && ((opline->op2.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF in zend_jit()
2474 || (opline->op2.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT))))) { in zend_jit()
2477 if (!zend_jit_fetch_static_prop(&ctx, opline, op_array)) { in zend_jit()
2487 if (!zend_jit_bind_global(&ctx, opline, op1_info)) { in zend_jit()
2492 if (!zend_jit_recv(&ctx, opline, op_array)) { in zend_jit()
2497 if (!zend_jit_recv_init(&ctx, opline, op_array, in zend_jit()
2498 (opline + 1)->opcode != ZEND_RECV_INIT, in zend_jit()
2499 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
2505 if (!zend_jit_free(&ctx, opline, OP1_INFO(), in zend_jit()
2506 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
2515 if (!zend_jit_echo(&ctx, opline, op1_info)) { in zend_jit()
2524 if (!zend_jit_strlen(&ctx, opline, op1_info, OP1_REG_ADDR(), RES_REG_ADDR())) { in zend_jit()
2533 …if (!zend_jit_count(&ctx, opline, op1_info, OP1_REG_ADDR(), RES_REG_ADDR(), zend_may_throw(opline,… in zend_jit()
2538 if (!zend_jit_fetch_this(&ctx, opline, op_array, 0)) { in zend_jit()
2545 if (!zend_jit_switch(&ctx, opline, op_array, ssa, NULL, NULL)) { in zend_jit()
2550 if (opline->op1_type == IS_UNUSED) { in zend_jit()
2554 if (opline->op1_type == IS_CONST) { in zend_jit()
2566 if (!zend_jit_verify_return_type(&ctx, opline, op_array, OP1_INFO())) { in zend_jit()
2575 if (!zend_jit_fe_reset(&ctx, opline, op1_info)) { in zend_jit()
2584 if (!zend_jit_fe_fetch(&ctx, opline, op1_info, OP2_INFO(), in zend_jit()
2585 ssa->cfg.blocks[b].successors[0], opline->opcode, NULL)) { in zend_jit()
2590 if (!zend_jit_fetch_constant(&ctx, opline, op_array, ssa, ssa_op, RES_REG_ADDR())) { in zend_jit()
2595 if (opline->op2_type != IS_CONST in zend_jit()
2596 || Z_TYPE_P(RT_CONSTANT(opline, opline->op2)) != IS_STRING) { in zend_jit()
2602 if (opline->op1_type == IS_UNUSED) { in zend_jit()
2618 zend_ssa_op *ssa_op = &ssa->ops[opline - op_array->opcodes]; in zend_jit()
2628 if (!zend_jit_init_method_call(&ctx, opline, b, op_array, ssa, ssa_op, call_level, in zend_jit()
2637 if (!(opline->op2_type == IS_CONST in zend_jit()
2638 && (opline->op1_type == IS_CONST in zend_jit()
2639 || (opline->op1_type == IS_UNUSED in zend_jit()
2640 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF in zend_jit()
2641 || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT))))) { in zend_jit()
2644 if (!zend_jit_init_static_method_call(&ctx, opline, b, op_array, ssa, ssa_op, call_level, in zend_jit()
2656 if (!zend_jit_rope(&ctx, opline, op2_info)) { in zend_jit()
2665 switch (opline->opcode) { in zend_jit()
2668 if (opline == op_array->opcodes || in zend_jit()
2669 opline->opcode != op_array->opcodes[i-1].opcode) { in zend_jit()
2671 if (!zend_jit_handler(&ctx, opline, in zend_jit()
2672 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
2676 zend_jit_set_last_valid_opline(&ctx, opline+1); in zend_jit()
2686 if (!zend_jit_tail_handler(&ctx, opline)) { in zend_jit()
2692 const zend_op *target = OP_JMP_ADDR(opline, opline->op1); in zend_jit()
2712 if (!zend_jit_tail_handler(&ctx, opline)) { in zend_jit()
2724 if (!zend_jit_call(&ctx, opline, b + 1)) { in zend_jit()
2730 if (opline > op_array->opcodes + ssa->cfg.blocks[b].start && in zend_jit()
2731 ((opline-1)->result_type & (IS_SMART_BRANCH_JMPZ|IS_SMART_BRANCH_JMPNZ)) != 0) { in zend_jit()
2733 if (!zend_jit_cond_jmp(&ctx, opline + 1, ssa->cfg.blocks[b].successors[0])) { in zend_jit()
2750 if (!zend_jit_handler(&ctx, opline, in zend_jit()
2751 zend_may_throw(opline, ssa_op, op_array, ssa)) || in zend_jit()
2752 !zend_jit_cond_jmp(&ctx, opline + 1, ssa->cfg.blocks[b].successors[0])) { in zend_jit()
2757 if (!zend_jit_jmp_frameless(&ctx, opline, /* exit_addr */ NULL, /* guard */ 0)) { in zend_jit()
2762 if (!zend_jit_handler(&ctx, opline, 1)) { in zend_jit()
2765 if (opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL) { in zend_jit()
2770 … zend_ssa_var_info *res_ssa = &ssa->var_info[ssa->ops[opline - op_array->opcodes].result_def]; in zend_jit()
2776 if (opline->op1_type == IS_CONST) { in zend_jit()
2777 zval *zv = RT_CONSTANT(opline, opline->op1); in zend_jit()
2788 const zend_op *next_opline = opline + 1; in zend_jit()
2799 jit_frameless_icall0(jit, opline); in zend_jit()
2803 jit_frameless_icall1(jit, opline, op1_info); in zend_jit()
2808 jit_frameless_icall2(jit, opline, op1_info, op2_info); in zend_jit()
2813 jit_frameless_icall3(jit, opline, op1_info, op2_info, OP1_DATA_INFO()); in zend_jit()
2816 if (!zend_jit_handler(&ctx, opline, in zend_jit()
2817 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit()
2821 && (opline->result_type & (IS_SMART_BRANCH_JMPZ|IS_SMART_BRANCH_JMPNZ)) != 0) { in zend_jit()
2823 if (!zend_jit_set_cond(&ctx, opline + 2, opline->result.var)) { in zend_jit()
2829 switch (opline->opcode) { in zend_jit()
3020 zend_op *opline = op_array->opcodes; in zend_runtime_jit() local
3034 while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { in zend_runtime_jit()
3035 opline++; in zend_runtime_jit()
3039 opline->handler = jit_extension->orig_handler; in zend_runtime_jit()
3062 zend_op *opline; in zend_jit_check_funcs() local
3073 opline = op_array->opcodes; in zend_jit_check_funcs()
3075 while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { in zend_jit_check_funcs()
3076 opline++; in zend_jit_check_funcs()
3079 if (opline->handler == zend_jit_profile_jit_handler) { in zend_jit_check_funcs()
3086 opline->handler = jit_extension->orig_handler; in zend_jit_check_funcs()
3094 void ZEND_FASTCALL zend_jit_hot_func(zend_execute_data *execute_data, const zend_op *opline) in zend_jit_hot_func() argument
3114 zend_real_jit_func(op_array, NULL, opline, ZEND_JIT_ON_HOT_COUNTERS); in zend_jit_hot_func()
3134 zend_op *opline = op_array->opcodes; in zend_jit_setup_hot_counters_ex() local
3137 while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { in zend_jit_setup_hot_counters_ex()
3138 opline++; in zend_jit_setup_hot_counters_ex()
3142 opline->handler = (const void*)zend_jit_func_hot_counter_handler; in zend_jit_setup_hot_counters_ex()
3221 zend_op *opline = op_array->opcodes; in zend_jit_op_array() local
3232 while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { in zend_jit_op_array()
3233 opline++; in zend_jit_op_array()
3243 jit_extension->orig_handler = (void*)opline->handler; in zend_jit_op_array()
3245 opline->handler = (const void*)zend_jit_runtime_jit_handler; in zend_jit_op_array()
3251 zend_op *opline = op_array->opcodes; in zend_jit_op_array() local
3262 while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { in zend_jit_op_array()
3263 opline++; in zend_jit_op_array()
3273 jit_extension->orig_handler = (void*)opline->handler; in zend_jit_op_array()
3275 opline->handler = (const void*)zend_jit_profile_jit_handler; in zend_jit_op_array()
3835 zend_op *opline = op_array->opcodes; in zend_jit_restart_preloaded_op_array()
3840 while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { in zend_jit_restart_preloaded_op_array()
3841 opline++; in zend_jit_restart_preloaded_op_array()
3845 opline->handler = (const void*)zend_jit_runtime_jit_handler; in zend_jit_restart_preloaded_op_array()
3847 opline->handler = (const void*)zend_jit_profile_jit_handler; in zend_jit_restart_preloaded_op_array()