]> granicus.if.org Git - php/commitdiff
Avoid register reloading
authorDmitry Stogov <dmitry@zend.com>
Thu, 23 Jul 2020 09:08:07 +0000 (12:08 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 23 Jul 2020 09:08:07 +0000 (12:08 +0300)
ext/opcache/jit/zend_jit_x86.dasc

index 97e126932342b7a2b3d54125994de1e5e7e2e0c3..0a5195aeef23df781c9993b8dc4ef9aa870c61d0 100644 (file)
@@ -7967,6 +7967,9 @@ static int zend_jit_qm_assign(dasm_State **Dst, const zend_op *opline, const zen
                if (!zend_jit_update_regs(Dst, op1_addr, op1_def_addr, op1_info)) {
                        return 0;
                }
+               if (Z_MODE(op1_def_addr) == IS_REG && Z_MODE(op1_addr) != IS_REG) {
+                       op1_addr = op1_def_addr;
+               }
        }
 
        if (!zend_jit_simple_assign(Dst, opline, op_array, res_addr, -1, -1, opline->op1_type, opline->op1, op1_addr, op1_info, 0, 0, 0)) {
@@ -7986,6 +7989,9 @@ static int zend_jit_assign(dasm_State **Dst, const zend_op *opline, const zend_o
                if (!zend_jit_update_regs(Dst, op2_addr, op2_def_addr, op2_info)) {
                        return 0;
                }
+               if (Z_MODE(op2_def_addr) == IS_REG && Z_MODE(op2_addr) != IS_REG) {
+                       op2_addr = op2_def_addr;
+               }
        }
 
        if (!zend_jit_assign_to_variable(Dst, opline, op_array, op1_addr, op1_info, op1_def_info, opline->op2_type, opline->op2, op2_addr, op2_info, res_addr,