]> granicus.if.org Git - php/commitdiff
Move result address calculation from specialized handlers to less specialized helpers
authorDmitry Stogov <dmitry@zend.com>
Wed, 21 Feb 2018 13:06:29 +0000 (16:06 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 21 Feb 2018 13:06:29 +0000 (16:06 +0300)
Zend/zend_execute.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 58a4fa226b002523665a78b13a675d951c2c0501..be5de9cbc7b19965672293d2aec6ebbd8971f712 100644 (file)
@@ -1906,18 +1906,21 @@ fetch_from_array:
        }
 }
 
-static zend_never_inline void zend_fetch_dimension_address_W(zval *result, zval *container_ptr, zval *dim, int dim_type EXECUTE_DATA_DC)
+static zend_never_inline void ZEND_FASTCALL zend_fetch_dimension_address_W(zval *container_ptr, zval *dim, int dim_type OPLINE_DC EXECUTE_DATA_DC)
 {
+       zval *result = EX_VAR(opline->result.var);
        zend_fetch_dimension_address(result, container_ptr, dim, dim_type, BP_VAR_W EXECUTE_DATA_CC);
 }
 
-static zend_never_inline void zend_fetch_dimension_address_RW(zval *result, zval *container_ptr, zval *dim, int dim_type EXECUTE_DATA_DC)
+static zend_never_inline void ZEND_FASTCALL zend_fetch_dimension_address_RW(zval *container_ptr, zval *dim, int dim_type OPLINE_DC EXECUTE_DATA_DC)
 {
+       zval *result = EX_VAR(opline->result.var);
        zend_fetch_dimension_address(result, container_ptr, dim, dim_type, BP_VAR_RW EXECUTE_DATA_CC);
 }
 
-static zend_never_inline void zend_fetch_dimension_address_UNSET(zval *result, zval *container_ptr, zval *dim, int dim_type EXECUTE_DATA_DC)
+static zend_never_inline void ZEND_FASTCALL zend_fetch_dimension_address_UNSET(zval *container_ptr, zval *dim, int dim_type OPLINE_DC EXECUTE_DATA_DC)
 {
+       zval *result = EX_VAR(opline->result.var);
        zend_fetch_dimension_address(result, container_ptr, dim, dim_type, BP_VAR_UNSET EXECUTE_DATA_CC);
 }
 
@@ -2026,38 +2029,39 @@ try_string_offset:
        }
 }
 
-static zend_never_inline void zend_fetch_dimension_address_read_R(zval *result, zval *container, zval *dim, int dim_type EXECUTE_DATA_DC)
+static zend_never_inline void ZEND_FASTCALL zend_fetch_dimension_address_read_R(zval *container, zval *dim, int dim_type OPLINE_DC EXECUTE_DATA_DC)
 {
+       zval *result = EX_VAR(opline->result.var);
        zend_fetch_dimension_address_read(result, container, dim, dim_type, BP_VAR_R, 1, 0 EXECUTE_DATA_CC);
 }
 
-static zend_never_inline void zend_fetch_dimension_address_read_R_slow(zval *result, zval *container, zval *dim EXECUTE_DATA_DC)
+static zend_never_inline void zend_fetch_dimension_address_read_R_slow(zval *container, zval *dim OPLINE_DC OPLINE_DC EXECUTE_DATA_DC)
 {
+       zval *result = EX_VAR(opline->result.var);
        zend_fetch_dimension_address_read(result, container, dim, IS_CV, BP_VAR_R, 1, 1 EXECUTE_DATA_CC);
 }
 
-static zend_never_inline void zend_fetch_dimension_address_read_IS(zval *result, zval *container, zval *dim, int dim_type EXECUTE_DATA_DC)
+static zend_never_inline void ZEND_FASTCALL zend_fetch_dimension_address_read_IS(zval *container, zval *dim, int dim_type OPLINE_DC EXECUTE_DATA_DC)
 {
+       zval *result = EX_VAR(opline->result.var);
        zend_fetch_dimension_address_read(result, container, dim, dim_type, BP_VAR_IS, 1, 0 EXECUTE_DATA_CC);
 }
 
-static zend_never_inline void zend_fetch_dimension_address_LIST_w(zval *result, zval *container, zval *dim EXECUTE_DATA_DC)
+static zend_never_inline void ZEND_FASTCALL zend_fetch_dimension_address_LIST_w(zval *container, zval *dim OPLINE_DC EXECUTE_DATA_DC)
 {
+       zval *result = EX_VAR(opline->result.var);
        zend_fetch_dimension_address(result, container, dim, IS_TMP_VAR, BP_VAR_W EXECUTE_DATA_CC);
 }
 
-static zend_never_inline void zend_fetch_dimension_address_LIST_r(zval *result, zval *container, zval *dim EXECUTE_DATA_DC)
+static zend_never_inline void ZEND_FASTCALL zend_fetch_dimension_address_LIST_r(zval *container, zval *dim OPLINE_DC EXECUTE_DATA_DC)
 {
+       zval *result = EX_VAR(opline->result.var);
        zend_fetch_dimension_address_read(result, container, dim, IS_TMP_VAR, BP_VAR_R, 0, 0 EXECUTE_DATA_CC);
 }
 
 ZEND_API void zend_fetch_dimension_const(zval *result, zval *container, zval *dim, int type)
 {
-       if (type == BP_VAR_IS) {
-               zend_fetch_dimension_address_read_IS(result, container, dim, IS_TMP_VAR NO_EXECUTE_DATA_CC);
-       } else {
-               zend_fetch_dimension_address_read_R(result, container, dim, IS_TMP_VAR NO_EXECUTE_DATA_CC);
-       }
+       zend_fetch_dimension_address_read(result, container, dim, IS_TMP_VAR, type, 1, 0 NO_EXECUTE_DATA_CC);
 }
 
 static zend_never_inline zval* ZEND_FASTCALL zend_find_array_dim_slow(HashTable *ht, zval *offset EXECUTE_DATA_DC)
index a1aa541362c419dab926ca69ed05350f9ab6465e..95da21daadafffbc3bb4cc6187c5443839b01266 100644 (file)
@@ -1686,12 +1686,10 @@ ZEND_VM_C_LABEL(fetch_dim_r_array):
                        }
                } else {
 ZEND_VM_C_LABEL(fetch_dim_r_slow):
-                       result = EX_VAR(opline->result.var);
-                       zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
+                       zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                }
        } else {
-               result = EX_VAR(opline->result.var);
-               zend_fetch_dimension_address_read_R(result, container, dim, OP2_TYPE EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R(container, dim, OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
        }
        FREE_OP2();
        FREE_OP1();
@@ -1702,14 +1700,14 @@ ZEND_VM_HANDLER(84, ZEND_FETCH_DIM_W, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV)
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_W(result, container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_W(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
        FREE_OP2();
        if (OP1_TYPE == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -1719,14 +1717,14 @@ ZEND_VM_HANDLER(87, ZEND_FETCH_DIM_RW, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV)
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_RW(result, container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_RW(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
        FREE_OP2();
        if (OP1_TYPE == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -1740,7 +1738,7 @@ ZEND_VM_HANDLER(90, ZEND_FETCH_DIM_IS, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
 
        SAVE_OPLINE();
        container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_IS);
-       zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_read_IS(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
        FREE_OP2();
        FREE_OP1();
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -1791,14 +1789,14 @@ ZEND_VM_HANDLER(96, ZEND_FETCH_DIM_UNSET, VAR|CV, CONST|TMPVAR|CV)
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_UNSET);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_UNSET(result, container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_UNSET(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
        FREE_OP2();
        if (OP1_TYPE == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -2094,7 +2092,7 @@ ZEND_VM_HANDLER(98, ZEND_FETCH_LIST_R, CONST|TMPVARCV, CONST|TMPVAR|CV)
 
        SAVE_OPLINE();
        container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
-       zend_fetch_dimension_address_LIST_r(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_LIST_r(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R) OPLINE_CC EXECUTE_DATA_CC);
        FREE_OP2();
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
 }
@@ -2103,10 +2101,9 @@ ZEND_VM_HANDLER(198, ZEND_FETCH_LIST_W, VAR|CV, CONST|TMPVAR|CV)
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval *retval, *container, *dim;
+       zval *container, *dim;
 
        SAVE_OPLINE();
-       retval = EX_VAR(opline->result.var);
        container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
        dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
 
@@ -2115,9 +2112,9 @@ ZEND_VM_HANDLER(198, ZEND_FETCH_LIST_W, VAR|CV, CONST|TMPVAR|CV)
                && UNEXPECTED(!Z_ISREF_P(container))
        ) {
                zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
-               zend_fetch_dimension_address_LIST_r(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_r(container, dim OPLINE_CC EXECUTE_DATA_CC);
        } else {
-               zend_fetch_dimension_address_LIST_w(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_w(container, dim OPLINE_CC EXECUTE_DATA_CC);
        }
 
        FREE_OP2();
@@ -8777,6 +8774,7 @@ ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FETCH_DIM_R, (!(op2_info & (MAY_BE_UNDEF|MAY_
        zend_free_op free_op1, free_op2;
        zval *container, *dim, *value;
        zend_long offset;
+       HashTable *ht;
 
        container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
        dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
@@ -8787,7 +8785,8 @@ ZEND_VM_C_LABEL(fetch_dim_r_index_array):
                } else {
                        offset = zval_get_long(dim);
                }
-               ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, ZEND_VM_C_LABEL(fetch_dim_r_index_undef));
+               ht = Z_ARRVAL_P(container);
+               ZEND_HASH_INDEX_FIND(ht, offset, value, ZEND_VM_C_LABEL(fetch_dim_r_index_undef));
                ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
                if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
                        SAVE_OPLINE();
@@ -8806,7 +8805,7 @@ ZEND_VM_C_LABEL(fetch_dim_r_index_array):
        } else {
 ZEND_VM_C_LABEL(fetch_dim_r_index_slow):
                SAVE_OPLINE();
-               zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                FREE_OP1();
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
index 08a6c31fb8612dabcf70f124bae9d4f80950303b..093cf8714235363353c62cce09626c1887191d4b 100644 (file)
@@ -4746,12 +4746,10 @@ fetch_dim_r_array:
                        }
                } else {
 fetch_dim_r_slow:
-                       result = EX_VAR(opline->result.var);
-                       zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
+                       zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                }
        } else {
-               result = EX_VAR(opline->result.var);
-               zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
        }
 
 
@@ -4766,7 +4764,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-       zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, RT_CONSTANT(opline, opline->op2), IS_CONST EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
 
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -5009,7 +5007,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CONST_
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-       zend_fetch_dimension_address_LIST_r(EX_VAR(opline->result.var), container, RT_CONSTANT(opline, opline->op2) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
 }
@@ -6180,6 +6178,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_
 
        zval *container, *dim, *value;
        zend_long offset;
+       HashTable *ht;
 
        container = RT_CONSTANT(opline, opline->op1);
        dim = RT_CONSTANT(opline, opline->op2);
@@ -6190,7 +6189,8 @@ fetch_dim_r_index_array:
                } else {
                        offset = zval_get_long(dim);
                }
-               ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
+               ht = Z_ARRVAL_P(container);
+               ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
                ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
                if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
                        SAVE_OPLINE();
@@ -6209,7 +6209,7 @@ fetch_dim_r_index_array:
        } else {
 fetch_dim_r_index_slow:
                SAVE_OPLINE();
-               zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
 
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
@@ -6835,12 +6835,10 @@ fetch_dim_r_array:
                        }
                } else {
 fetch_dim_r_slow:
-                       result = EX_VAR(opline->result.var);
-                       zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
+                       zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                }
        } else {
-               result = EX_VAR(opline->result.var);
-               zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
        }
        zval_ptr_dtor_nogc(free_op2);
 
@@ -6855,7 +6853,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-       zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
        zval_ptr_dtor_nogc(free_op2);
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -7100,7 +7098,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-       zend_fetch_dimension_address_LIST_r(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
        zval_ptr_dtor_nogc(free_op2);
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
 }
@@ -7801,6 +7799,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_
        zend_free_op free_op2;
        zval *container, *dim, *value;
        zend_long offset;
+       HashTable *ht;
 
        container = RT_CONSTANT(opline, opline->op1);
        dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
@@ -7811,7 +7810,8 @@ fetch_dim_r_index_array:
                } else {
                        offset = zval_get_long(dim);
                }
-               ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
+               ht = Z_ARRVAL_P(container);
+               ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
                ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
                if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
                        SAVE_OPLINE();
@@ -7830,7 +7830,7 @@ fetch_dim_r_index_array:
        } else {
 fetch_dim_r_index_slow:
                SAVE_OPLINE();
-               zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
 
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
@@ -9996,12 +9996,10 @@ fetch_dim_r_array:
                        }
                } else {
 fetch_dim_r_slow:
-                       result = EX_VAR(opline->result.var);
-                       zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
+                       zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                }
        } else {
-               result = EX_VAR(opline->result.var);
-               zend_fetch_dimension_address_read_R(result, container, dim, IS_CV EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
        }
 
 
@@ -10016,7 +10014,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HAN
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-       zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV OPLINE_CC EXECUTE_DATA_CC);
 
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -10259,7 +10257,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CV_HAN
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-       zend_fetch_dimension_address_LIST_r(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
 }
@@ -11094,6 +11092,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_
 
        zval *container, *dim, *value;
        zend_long offset;
+       HashTable *ht;
 
        container = RT_CONSTANT(opline, opline->op1);
        dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
@@ -11104,7 +11103,8 @@ fetch_dim_r_index_array:
                } else {
                        offset = zval_get_long(dim);
                }
-               ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
+               ht = Z_ARRVAL_P(container);
+               ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
                ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
                if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
                        SAVE_OPLINE();
@@ -11123,7 +11123,7 @@ fetch_dim_r_index_array:
        } else {
 fetch_dim_r_index_slow:
                SAVE_OPLINE();
-               zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
 
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
@@ -11414,7 +11414,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CON
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-       zend_fetch_dimension_address_LIST_r(EX_VAR(opline->result.var), container, RT_CONSTANT(opline, opline->op2) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
 }
@@ -12382,7 +12382,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMP
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-       zend_fetch_dimension_address_LIST_r(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
        zval_ptr_dtor_nogc(free_op2);
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
 }
@@ -12395,7 +12395,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-       zend_fetch_dimension_address_LIST_r(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
 }
@@ -13726,12 +13726,10 @@ fetch_dim_r_array:
                        }
                } else {
 fetch_dim_r_slow:
-                       result = EX_VAR(opline->result.var);
-                       zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
+                       zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                }
        } else {
-               result = EX_VAR(opline->result.var);
-               zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
        }
 
        zval_ptr_dtor_nogc(free_op1);
@@ -13746,7 +13744,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST
 
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, RT_CONSTANT(opline, opline->op2), IS_CONST EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
 
        zval_ptr_dtor_nogc(free_op1);
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -14551,6 +14549,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_
        zend_free_op free_op1;
        zval *container, *dim, *value;
        zend_long offset;
+       HashTable *ht;
 
        container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
        dim = RT_CONSTANT(opline, opline->op2);
@@ -14561,7 +14560,8 @@ fetch_dim_r_index_array:
                } else {
                        offset = zval_get_long(dim);
                }
-               ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
+               ht = Z_ARRVAL_P(container);
+               ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
                ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
                if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
                        SAVE_OPLINE();
@@ -14580,7 +14580,7 @@ fetch_dim_r_index_array:
        } else {
 fetch_dim_r_index_slow:
                SAVE_OPLINE();
-               zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                zval_ptr_dtor_nogc(free_op1);
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
@@ -15260,12 +15260,10 @@ fetch_dim_r_array:
                        }
                } else {
 fetch_dim_r_slow:
-                       result = EX_VAR(opline->result.var);
-                       zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
+                       zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                }
        } else {
-               result = EX_VAR(opline->result.var);
-               zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
        }
        zval_ptr_dtor_nogc(free_op2);
        zval_ptr_dtor_nogc(free_op1);
@@ -15280,7 +15278,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVA
 
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
        zval_ptr_dtor_nogc(free_op2);
        zval_ptr_dtor_nogc(free_op1);
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -15909,6 +15907,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_
        zend_free_op free_op1, free_op2;
        zval *container, *dim, *value;
        zend_long offset;
+       HashTable *ht;
 
        container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
        dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
@@ -15919,7 +15918,8 @@ fetch_dim_r_index_array:
                } else {
                        offset = zval_get_long(dim);
                }
-               ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
+               ht = Z_ARRVAL_P(container);
+               ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
                ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
                if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
                        SAVE_OPLINE();
@@ -15938,7 +15938,7 @@ fetch_dim_r_index_array:
        } else {
 fetch_dim_r_index_slow:
                SAVE_OPLINE();
-               zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                zval_ptr_dtor_nogc(free_op1);
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
@@ -17206,12 +17206,10 @@ fetch_dim_r_array:
                        }
                } else {
 fetch_dim_r_slow:
-                       result = EX_VAR(opline->result.var);
-                       zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
+                       zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                }
        } else {
-               result = EX_VAR(opline->result.var);
-               zend_fetch_dimension_address_read_R(result, container, dim, IS_CV EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
        }
 
        zval_ptr_dtor_nogc(free_op1);
@@ -17226,7 +17224,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HA
 
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV OPLINE_CC EXECUTE_DATA_CC);
 
        zval_ptr_dtor_nogc(free_op1);
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -17851,6 +17849,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_
        zend_free_op free_op1;
        zval *container, *dim, *value;
        zend_long offset;
+       HashTable *ht;
 
        container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
        dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
@@ -17861,7 +17860,8 @@ fetch_dim_r_index_array:
                } else {
                        offset = zval_get_long(dim);
                }
-               ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
+               ht = Z_ARRVAL_P(container);
+               ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
                ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
                if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
                        SAVE_OPLINE();
@@ -17880,7 +17880,7 @@ fetch_dim_r_index_array:
        } else {
 fetch_dim_r_index_slow:
                SAVE_OPLINE();
-               zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                zval_ptr_dtor_nogc(free_op1);
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
@@ -22953,14 +22953,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HAN
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_W(result, container, RT_CONSTANT(opline, opline->op2), IS_CONST EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_VAR == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -22970,14 +22970,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HA
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_RW(result, container, RT_CONSTANT(opline, opline->op2), IS_CONST EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_VAR == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -23004,14 +23004,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_UNSET(result, container, RT_CONSTANT(opline, opline->op2), IS_CONST EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_VAR == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -23105,10 +23105,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HA
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *retval, *container, *dim;
+       zval *container, *dim;
 
        SAVE_OPLINE();
-       retval = EX_VAR(opline->result.var);
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
        dim = RT_CONSTANT(opline, opline->op2);
 
@@ -23117,9 +23116,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HA
                && UNEXPECTED(!Z_ISREF_P(container))
        ) {
                zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
-               zend_fetch_dimension_address_LIST_r(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_r(container, dim OPLINE_CC EXECUTE_DATA_CC);
        } else {
-               zend_fetch_dimension_address_LIST_w(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_w(container, dim OPLINE_CC EXECUTE_DATA_CC);
        }
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -25241,14 +25240,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HA
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_W(result, container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
        zval_ptr_dtor_nogc(free_op2);
        if (IS_VAR == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -25258,14 +25257,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_H
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_RW(result, container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
        zval_ptr_dtor_nogc(free_op2);
        if (IS_VAR == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -25292,14 +25291,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVA
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_UNSET(result, container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
        zval_ptr_dtor_nogc(free_op2);
        if (IS_VAR == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -25393,10 +25392,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_H
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval *retval, *container, *dim;
+       zval *container, *dim;
 
        SAVE_OPLINE();
-       retval = EX_VAR(opline->result.var);
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
        dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
 
@@ -25405,9 +25403,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_H
                && UNEXPECTED(!Z_ISREF_P(container))
        ) {
                zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
-               zend_fetch_dimension_address_LIST_r(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_r(container, dim OPLINE_CC EXECUTE_DATA_CC);
        } else {
-               zend_fetch_dimension_address_LIST_w(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_w(container, dim OPLINE_CC EXECUTE_DATA_CC);
        }
 
        zval_ptr_dtor_nogc(free_op2);
@@ -27329,14 +27327,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HA
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_W(result, container, NULL, IS_UNUSED EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_VAR == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -27346,14 +27344,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_H
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_RW(result, container, NULL, IS_UNUSED EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_VAR == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -28964,14 +28962,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLE
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_W(result, container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_W(container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_VAR == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -28981,14 +28979,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDL
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_RW(result, container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_RW(container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_VAR == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -29015,14 +29013,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HA
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_UNSET(result, container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_VAR == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -29116,10 +29114,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDL
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *retval, *container, *dim;
+       zval *container, *dim;
 
        SAVE_OPLINE();
-       retval = EX_VAR(opline->result.var);
        container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
        dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
 
@@ -29128,9 +29125,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDL
                && UNEXPECTED(!Z_ISREF_P(container))
        ) {
                zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
-               zend_fetch_dimension_address_LIST_r(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_r(container, dim OPLINE_CC EXECUTE_DATA_CC);
        } else {
-               zend_fetch_dimension_address_LIST_w(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_w(container, dim OPLINE_CC EXECUTE_DATA_CC);
        }
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -39810,12 +39807,10 @@ fetch_dim_r_array:
                        }
                } else {
 fetch_dim_r_slow:
-                       result = EX_VAR(opline->result.var);
-                       zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
+                       zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                }
        } else {
-               result = EX_VAR(opline->result.var);
-               zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
        }
 
 
@@ -39826,14 +39821,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HAND
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_W(result, container, RT_CONSTANT(opline, opline->op2), IS_CONST EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_CV == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -39843,14 +39838,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HAN
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_RW(result, container, RT_CONSTANT(opline, opline->op2), IS_CONST EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_CV == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -39864,7 +39859,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HAN
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
-       zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, RT_CONSTANT(opline, opline->op2), IS_CONST EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
 
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -39891,14 +39886,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_UNSET(result, container, RT_CONSTANT(opline, opline->op2), IS_CONST EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_CV == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -40188,10 +40183,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_CV_CONST_HAN
 {
        USE_OPLINE
 
-       zval *retval, *container, *dim;
+       zval *container, *dim;
 
        SAVE_OPLINE();
-       retval = EX_VAR(opline->result.var);
        container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
        dim = RT_CONSTANT(opline, opline->op2);
 
@@ -40200,9 +40194,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_CV_CONST_HAN
                && UNEXPECTED(!Z_ISREF_P(container))
        ) {
                zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
-               zend_fetch_dimension_address_LIST_r(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_r(container, dim OPLINE_CC EXECUTE_DATA_CC);
        } else {
-               zend_fetch_dimension_address_LIST_w(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_w(container, dim OPLINE_CC EXECUTE_DATA_CC);
        }
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -42208,6 +42202,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_
 
        zval *container, *dim, *value;
        zend_long offset;
+       HashTable *ht;
 
        container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
        dim = RT_CONSTANT(opline, opline->op2);
@@ -42218,7 +42213,8 @@ fetch_dim_r_index_array:
                } else {
                        offset = zval_get_long(dim);
                }
-               ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
+               ht = Z_ARRVAL_P(container);
+               ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
                ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
                if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
                        SAVE_OPLINE();
@@ -42237,7 +42233,7 @@ fetch_dim_r_index_array:
        } else {
 fetch_dim_r_index_slow:
                SAVE_OPLINE();
-               zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
 
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
@@ -43497,12 +43493,10 @@ fetch_dim_r_array:
                        }
                } else {
 fetch_dim_r_slow:
-                       result = EX_VAR(opline->result.var);
-                       zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
+                       zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                }
        } else {
-               result = EX_VAR(opline->result.var);
-               zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
        }
        zval_ptr_dtor_nogc(free_op2);
 
@@ -43513,14 +43507,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HAN
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_W(result, container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
        zval_ptr_dtor_nogc(free_op2);
        if (IS_CV == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -43530,14 +43524,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HA
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_RW(result, container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
        zval_ptr_dtor_nogc(free_op2);
        if (IS_CV == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -43551,7 +43545,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HA
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
-       zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
        zval_ptr_dtor_nogc(free_op2);
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -43578,14 +43572,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_UNSET(result, container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
        zval_ptr_dtor_nogc(free_op2);
        if (IS_CV == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -43877,10 +43871,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_CV_TMPVAR_HA
 {
        USE_OPLINE
        zend_free_op free_op2;
-       zval *retval, *container, *dim;
+       zval *container, *dim;
 
        SAVE_OPLINE();
-       retval = EX_VAR(opline->result.var);
        container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
        dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
 
@@ -43889,9 +43882,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_CV_TMPVAR_HA
                && UNEXPECTED(!Z_ISREF_P(container))
        ) {
                zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
-               zend_fetch_dimension_address_LIST_r(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_r(container, dim OPLINE_CC EXECUTE_DATA_CC);
        } else {
-               zend_fetch_dimension_address_LIST_w(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_w(container, dim OPLINE_CC EXECUTE_DATA_CC);
        }
 
        zval_ptr_dtor_nogc(free_op2);
@@ -45356,6 +45349,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_
        zend_free_op free_op2;
        zval *container, *dim, *value;
        zend_long offset;
+       HashTable *ht;
 
        container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
        dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
@@ -45366,7 +45360,8 @@ fetch_dim_r_index_array:
                } else {
                        offset = zval_get_long(dim);
                }
-               ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
+               ht = Z_ARRVAL_P(container);
+               ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
                ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
                if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
                        SAVE_OPLINE();
@@ -45385,7 +45380,7 @@ fetch_dim_r_index_array:
        } else {
 fetch_dim_r_index_slow:
                SAVE_OPLINE();
-               zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
 
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
@@ -46672,14 +46667,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HAN
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_W(result, container, NULL, IS_UNUSED EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_CV == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -46689,14 +46684,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HA
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_RW(result, container, NULL, IS_UNUSED EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_CV == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -49089,12 +49084,10 @@ fetch_dim_r_array:
                        }
                } else {
 fetch_dim_r_slow:
-                       result = EX_VAR(opline->result.var);
-                       zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
+                       zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
                }
        } else {
-               result = EX_VAR(opline->result.var);
-               zend_fetch_dimension_address_read_R(result, container, dim, IS_CV EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
        }
 
 
@@ -49105,14 +49098,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_W(result, container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_W(container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_CV == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -49122,14 +49115,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLE
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_RW(result, container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_RW(container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_CV == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -49143,7 +49136,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLE
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
-       zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV OPLINE_CC EXECUTE_DATA_CC);
 
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -49170,14 +49163,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HAN
 {
        USE_OPLINE
        zend_free_op free_op1;
-       zval *container, *result;
+       zval *container;
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
-       result = EX_VAR(opline->result.var);
-       zend_fetch_dimension_address_UNSET(result, container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
+       zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV OPLINE_CC EXECUTE_DATA_CC);
 
        if (IS_CV == IS_VAR) {
+               zval *result = EX_VAR(opline->result.var);
                FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
        }
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -49467,10 +49460,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_CV_CV_HANDLE
 {
        USE_OPLINE
 
-       zval *retval, *container, *dim;
+       zval *container, *dim;
 
        SAVE_OPLINE();
-       retval = EX_VAR(opline->result.var);
        container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
        dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
 
@@ -49479,9 +49471,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_CV_CV_HANDLE
                && UNEXPECTED(!Z_ISREF_P(container))
        ) {
                zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
-               zend_fetch_dimension_address_LIST_r(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_r(container, dim OPLINE_CC EXECUTE_DATA_CC);
        } else {
-               zend_fetch_dimension_address_LIST_w(retval, container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_LIST_w(container, dim OPLINE_CC EXECUTE_DATA_CC);
        }
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -51184,6 +51176,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_
 
        zval *container, *dim, *value;
        zend_long offset;
+       HashTable *ht;
 
        container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
        dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
@@ -51194,7 +51187,8 @@ fetch_dim_r_index_array:
                } else {
                        offset = zval_get_long(dim);
                }
-               ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
+               ht = Z_ARRVAL_P(container);
+               ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
                ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
                if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
                        SAVE_OPLINE();
@@ -51213,7 +51207,7 @@ fetch_dim_r_index_array:
        } else {
 fetch_dim_r_index_slow:
                SAVE_OPLINE();
-               zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
+               zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
 
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }