1
0
mirror of https://github.com/php/php-src.git synced 2026-04-14 19:41:05 +02:00

Better instruction selection

This commit is contained in:
Dmitry Stogov
2020-07-02 23:41:15 +03:00
parent e2be50001b
commit fe1052b177

View File

@@ -1411,12 +1411,15 @@ static void* dasm_labels[zend_lb_MAX];
|.macro SEPARATE_ARRAY, addr, op_info, cold
|| if (RC_MAY_BE_N(op_info)) {
|| if (Z_REG(addr) == ZREG_FCARG1a) {
|| if (Z_REG(addr) != ZREG_FP) {
| GET_ZVAL_LVAL ZREG_R0, addr
|| if (RC_MAY_BE_1(op_info)) {
| cmp dword [r0], 1 // if (GC_REFCOUNT() > 1)
| jbe >2
|| }
|| if (Z_REG(addr) != ZREG_FCARG1a || Z_OFFSET(addr) != 0) {
| LOAD_ZVAL_ADDR FCARG1a, addr
|| }
| EXT_CALL zend_jit_zval_array_dup, r0
|2:
| mov FCARG1a, r0
@@ -11589,16 +11592,15 @@ static zend_bool zend_jit_fetch_reference(dasm_State **Dst, const zend_op *oplin
| IF_NOT_ZVAL_TYPE var_addr, IS_REFERENCE, &exit_addr
| GET_ZVAL_PTR FCARG1a, var_addr
| add FCARG1a, offsetof(zend_reference, val)
var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a, 0);
var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a, offsetof(zend_reference, val));
*var_addr_ptr = var_addr;
var_type &= ~(IS_TRACE_REFERENCE|IS_TRACE_INDIRECT);
if (add_type_guard
&& var_type != IS_UNKNOWN
&& (var_info & (MAY_BE_ANY|MAY_BE_UNDEF)) != (1 << var_type)) {
| IF_NOT_Z_TYPE FCARG1a, var_type, &exit_addr
| IF_NOT_ZVAL_TYPE var_addr, var_type, &exit_addr
ZEND_ASSERT(var_info & (1 << var_type));
if (var_type < IS_STRING) {