@@ -1656,6 +1656,16 @@ static void zend_jit_start_reuse_ip(void)
1656
1656
reuse_ip = 1;
1657
1657
}
1658
1658
1659
+ static int zend_jit_reuse_ip(dasm_State **Dst)
1660
+ {
1661
+ if (!reuse_ip) {
1662
+ zend_jit_start_reuse_ip();
1663
+ | // call = EX(call);
1664
+ | mov RX, EX->call
1665
+ }
1666
+ return 1;
1667
+ }
1668
+
1659
1669
static void zend_jit_stop_reuse_ip(void)
1660
1670
{
1661
1671
reuse_ip = 0;
@@ -4709,21 +4719,12 @@ static int zend_jit_math_helper(dasm_State **Dst,
4709
4719
return 1;
4710
4720
}
4711
4721
4712
- static int zend_jit_math(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, zend_bool send_result, int may_overflow, int may_throw)
4722
+ static int zend_jit_math(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, int may_overflow, int may_throw)
4713
4723
{
4714
4724
ZEND_ASSERT(!(op1_info & MAY_BE_UNDEF) && !(op2_info & MAY_BE_UNDEF));
4715
4725
ZEND_ASSERT((op1_info & (MAY_BE_LONG|MAY_BE_DOUBLE)) &&
4716
4726
(op2_info & (MAY_BE_LONG|MAY_BE_DOUBLE)));
4717
4727
4718
- if (send_result) {
4719
- if (!reuse_ip) {
4720
- zend_jit_start_reuse_ip();
4721
- | // call = EX(call);
4722
- | mov RX, EX->call
4723
- }
4724
- res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, (opline+1)->result.var);
4725
- }
4726
-
4727
4728
if (!zend_jit_math_helper(Dst, opline, opline->opcode, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, opline->result.var, res_addr, res_info, res_use_info, may_overflow, may_throw)) {
4728
4729
return 0;
4729
4730
}
@@ -5049,20 +5050,11 @@ static int zend_jit_long_math_helper(dasm_State **Dst,
5049
5050
return 1;
5050
5051
}
5051
5052
5052
- static int zend_jit_long_math(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_ssa_range *op1_range, zend_jit_addr op1_addr, uint32_t op2_info, zend_ssa_range *op2_range, zend_jit_addr op2_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, zend_bool send_result, int may_throw)
5053
+ static int zend_jit_long_math(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_ssa_range *op1_range, zend_jit_addr op1_addr, uint32_t op2_info, zend_ssa_range *op2_range, zend_jit_addr op2_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, int may_throw)
5053
5054
{
5054
5055
ZEND_ASSERT(!(op1_info & MAY_BE_UNDEF) && !(op2_info & MAY_BE_UNDEF));
5055
5056
ZEND_ASSERT((op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG));
5056
5057
5057
- if (send_result) {
5058
- if (!reuse_ip) {
5059
- zend_jit_start_reuse_ip();
5060
- | // call = EX(call);
5061
- | mov RX, EX->call
5062
- }
5063
- res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, (opline+1)->result.var);
5064
- }
5065
-
5066
5058
if (!zend_jit_long_math_helper(Dst, opline, opline->opcode,
5067
5059
opline->op1_type, opline->op1, op1_addr, op1_info, op1_range,
5068
5060
opline->op2_type, opline->op2, op2_addr, op2_info, op2_range,
@@ -5160,26 +5152,16 @@ static int zend_jit_concat_helper(dasm_State **Dst,
5160
5152
return 1;
5161
5153
}
5162
5154
5163
- static int zend_jit_concat(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op2_info, zend_bool send_result , int may_throw)
5155
+ static int zend_jit_concat(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op2_info, zend_jit_addr res_addr , int may_throw)
5164
5156
{
5165
- zend_jit_addr op1_addr, op2_addr, res_addr ;
5157
+ zend_jit_addr op1_addr, op2_addr;
5166
5158
5167
5159
ZEND_ASSERT(!(op1_info & MAY_BE_UNDEF) && !(op2_info & MAY_BE_UNDEF));
5168
5160
ZEND_ASSERT((op1_info & MAY_BE_STRING) && (op2_info & MAY_BE_STRING));
5169
5161
5170
5162
op1_addr = OP1_ADDR();
5171
5163
op2_addr = OP2_ADDR();
5172
5164
5173
- if (send_result) {
5174
- if (!reuse_ip) {
5175
- zend_jit_start_reuse_ip();
5176
- | // call = EX(call);
5177
- | mov RX, EX->call
5178
- }
5179
- res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, (opline+1)->result.var);
5180
- } else {
5181
- res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var);
5182
- }
5183
5165
return zend_jit_concat_helper(Dst, opline, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, res_addr, may_throw);
5184
5166
}
5185
5167
@@ -10011,10 +9993,8 @@ static int zend_jit_send_val(dasm_State **Dst, const zend_op *opline, uint32_t o
10011
9993
10012
9994
ZEND_ASSERT(opline->opcode == ZEND_SEND_VAL || arg_num <= MAX_ARG_FLAG_NUM);
10013
9995
10014
- if (!reuse_ip) {
10015
- zend_jit_start_reuse_ip();
10016
- | // call = EX(call);
10017
- | mov RX, EX->call
9996
+ if (!zend_jit_reuse_ip(Dst)) {
9997
+ return 0;
10018
9998
}
10019
9999
10020
10000
if (opline->opcode == ZEND_SEND_VAL_EX) {
@@ -10093,10 +10073,8 @@ static int zend_jit_send_ref(dasm_State **Dst, const zend_op *opline, const zend
10093
10073
op1_addr = OP1_ADDR();
10094
10074
arg_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, opline->result.var);
10095
10075
10096
- if (!reuse_ip) {
10097
- zend_jit_start_reuse_ip();
10098
- | // call = EX(call);
10099
- | mov RX, EX->call
10076
+ if (!zend_jit_reuse_ip(Dst)) {
10077
+ return 0;
10100
10078
}
10101
10079
10102
10080
if (opline->op1_type == IS_VAR) {
@@ -10180,10 +10158,8 @@ static int zend_jit_send_var(dasm_State **Dst, const zend_op *opline, const zend
10180
10158
10181
10159
arg_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, opline->result.var);
10182
10160
10183
- if (!reuse_ip) {
10184
- zend_jit_start_reuse_ip();
10185
- | // call = EX(call);
10186
- | mov RX, EX->call
10161
+ if (!zend_jit_reuse_ip(Dst)) {
10162
+ return 0;
10187
10163
}
10188
10164
10189
10165
if (opline->opcode == ZEND_SEND_VAR_EX) {
@@ -10427,11 +10403,10 @@ static int zend_jit_check_func_arg(dasm_State **Dst, const zend_op *opline)
10427
10403
// if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10428
10404
uint32_t mask = (ZEND_SEND_BY_REF|ZEND_SEND_PREFER_REF) << ((arg_num + 3) * 2);
10429
10405
10430
- if (!reuse_ip) {
10431
- zend_jit_start_reuse_ip();
10432
- | // call = EX(call);
10433
- | mov RX, EX->call
10406
+ if (!zend_jit_reuse_ip(Dst)) {
10407
+ return 0;
10434
10408
}
10409
+
10435
10410
| mov r0, EX:RX->func
10436
10411
| test dword [r0 + offsetof(zend_function, quick_arg_flags)], mask
10437
10412
| jnz >1
0 commit comments