From: Dmitry Stogov Date: Tue, 16 Jun 2020 11:04:05 +0000 (+0300) Subject: Use "lea" to add/sub register with constant X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=77d0587fdbfdd89c901e695cf6f61659c19edaa8;p=php Use "lea" to add/sub register with constant --- diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 2a157c8c11..fb634378f2 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -3826,6 +3826,21 @@ static int zend_jit_math_long_long(dasm_State **Dst, is_power_of_two(Z_LVAL_P(Z_ZV(op2_addr))))) { | GET_ZVAL_LVAL result_reg, op1_addr | shr Ra(result_reg), floor_log2(Z_LVAL_P(Z_ZV(op2_addr))) + } else if (opcode == ZEND_ADD && + !may_overflow && + Z_MODE(op1_addr) == IS_REG && + Z_MODE(op2_addr) == IS_CONST_ZVAL) { + | lea Ra(result_reg), [Ra(Z_REG(op1_addr))+Z_LVAL_P(Z_ZV(op2_addr))] + } else if (opcode == ZEND_ADD && + !may_overflow && + Z_MODE(op2_addr) == IS_REG && + Z_MODE(op1_addr) == IS_CONST_ZVAL) { + | lea Ra(result_reg), [Ra(Z_REG(op2_addr))+Z_LVAL_P(Z_ZV(op1_addr))] + } else if (opcode == ZEND_SUB && + !may_overflow && + Z_MODE(op1_addr) == IS_REG && + Z_MODE(op2_addr) == IS_CONST_ZVAL) { + | lea Ra(result_reg), [Ra(Z_REG(op1_addr))-Z_LVAL_P(Z_ZV(op2_addr))] } else { | GET_ZVAL_LVAL result_reg, op1_addr if (same_ops && opcode != ZEND_DIV) {