]> granicus.if.org Git - php/commitdiff
Micro-optimization
authorDmitry Stogov <dmitry@zend.com>
Wed, 2 Sep 2020 14:31:48 +0000 (17:31 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 2 Sep 2020 14:31:48 +0000 (17:31 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index af6d41db8640f839d9bd66b0bf37892ada0082c5..b083ad627bab1e6b3c886cc32fe603d01c6e2a76 100644 (file)
@@ -6637,6 +6637,7 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
                                ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
                                ZEND_VM_CONTINUE();
                        }
+                       pos++;
                        value = &p->val;
                        value_type = Z_TYPE_INFO_P(value);
                        if (EXPECTED(value_type != IS_UNDEF)) {
@@ -6650,10 +6651,9 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
                                        break;
                                }
                        }
-                       pos++;
                        p++;
                }
-               Z_FE_POS_P(array) = pos + 1;
+               Z_FE_POS_P(array) = pos;
                if (RETURN_VALUE_USED(opline)) {
                        if (!p->key) {
                                ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -6676,7 +6676,7 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
                                        /* reached end of iteration */
                                        ZEND_VM_C_GOTO(fe_fetch_r_exit);
                                }
-
+                               pos++;
                                value = &p->val;
                                value_type = Z_TYPE_INFO_P(value);
                                if (EXPECTED(value_type != IS_UNDEF)) {
@@ -6693,9 +6693,9 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
                                                break;
                                        }
                                }
-                               pos++;
                                p++;
                        }
+                       EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
                        if (RETURN_VALUE_USED(opline)) {
                                if (UNEXPECTED(!p->key)) {
                                        ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -6709,7 +6709,6 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
                                        ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
                                }
                        }
-                       EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos + 1;
                } else {
                        if (EXPECTED(++iter->index > 0)) {
                                /* This could cause an endless loop if index becomes zero again.
@@ -6790,6 +6789,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
                                /* reached end of iteration */
                                ZEND_VM_C_GOTO(fe_fetch_w_exit);
                        }
+                       pos++;
                        value = &p->val;
                        value_type = Z_TYPE_INFO_P(value);
                        if (EXPECTED(value_type != IS_UNDEF)) {
@@ -6803,9 +6803,9 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
                                        break;
                                }
                        }
-                       pos++;
                        p++;
                }
+               EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
                if (RETURN_VALUE_USED(opline)) {
                        if (!p->key) {
                                ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -6813,7 +6813,6 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
                                ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
                        }
                }
-               EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
        } else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
                zend_object_iterator *iter;
 
@@ -6828,7 +6827,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
                                        /* reached end of iteration */
                                        ZEND_VM_C_GOTO(fe_fetch_w_exit);
                                }
-
+                               pos++;
                                value = &p->val;
                                value_type = Z_TYPE_INFO_P(value);
                                if (EXPECTED(value_type != IS_UNDEF)) {
@@ -6854,9 +6853,9 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
                                                break;
                                        }
                                }
-                               pos++;
                                p++;
                        }
+                       EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
                        if (RETURN_VALUE_USED(opline)) {
                                if (UNEXPECTED(!p->key)) {
                                        ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -6870,7 +6869,6 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
                                        ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
                                }
                        }
-                       EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
                } else {
                        if (++iter->index > 0) {
                                /* This could cause an endless loop if index becomes zero again.
@@ -9605,6 +9603,7 @@ ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FE_FETCH_R, op->op2_type == IS_CV && (op1_inf
                        ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
                        ZEND_VM_CONTINUE();
                }
+               pos++;
                value = &p->val;
                value_type = Z_TYPE_INFO_P(value);
                if (EXPECTED(value_type != IS_UNDEF)) {
@@ -9618,10 +9617,9 @@ ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FE_FETCH_R, op->op2_type == IS_CV && (op1_inf
                                break;
                        }
                }
-               pos++;
                p++;
        }
-       Z_FE_POS_P(array) = pos + 1;
+       Z_FE_POS_P(array) = pos;
        if (RETURN_VALUE_USED(opline)) {
                if (!p->key) {
                        ZVAL_LONG(EX_VAR(opline->result.var), p->h);
index 14d9670ee4649e59d03573493f54ab06b58b025b..bacac7d0517df08ba97ebf6d2d32f9de69f7cf8f 100644 (file)
@@ -22186,6 +22186,7 @@ fe_fetch_r_exit:
                                ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
                                ZEND_VM_CONTINUE();
                        }
+                       pos++;
                        value = &p->val;
                        value_type = Z_TYPE_INFO_P(value);
                        if (EXPECTED(value_type != IS_UNDEF)) {
@@ -22199,10 +22200,9 @@ fe_fetch_r_exit:
                                        break;
                                }
                        }
-                       pos++;
                        p++;
                }
-               Z_FE_POS_P(array) = pos + 1;
+               Z_FE_POS_P(array) = pos;
                if (RETURN_VALUE_USED(opline)) {
                        if (!p->key) {
                                ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -22225,7 +22225,7 @@ fe_fetch_r_exit:
                                        /* reached end of iteration */
                                        goto fe_fetch_r_exit;
                                }
-
+                               pos++;
                                value = &p->val;
                                value_type = Z_TYPE_INFO_P(value);
                                if (EXPECTED(value_type != IS_UNDEF)) {
@@ -22242,9 +22242,9 @@ fe_fetch_r_exit:
                                                break;
                                        }
                                }
-                               pos++;
                                p++;
                        }
+                       EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
                        if (RETURN_VALUE_USED(opline)) {
                                if (UNEXPECTED(!p->key)) {
                                        ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -22258,7 +22258,6 @@ fe_fetch_r_exit:
                                        ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
                                }
                        }
-                       EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos + 1;
                } else {
                        if (EXPECTED(++iter->index > 0)) {
                                /* This could cause an endless loop if index becomes zero again.
@@ -22339,6 +22338,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
                                /* reached end of iteration */
                                goto fe_fetch_w_exit;
                        }
+                       pos++;
                        value = &p->val;
                        value_type = Z_TYPE_INFO_P(value);
                        if (EXPECTED(value_type != IS_UNDEF)) {
@@ -22352,9 +22352,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
                                        break;
                                }
                        }
-                       pos++;
                        p++;
                }
+               EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
                if (RETURN_VALUE_USED(opline)) {
                        if (!p->key) {
                                ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -22362,7 +22362,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
                                ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
                        }
                }
-               EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
        } else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
                zend_object_iterator *iter;
 
@@ -22377,7 +22376,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
                                        /* reached end of iteration */
                                        goto fe_fetch_w_exit;
                                }
-
+                               pos++;
                                value = &p->val;
                                value_type = Z_TYPE_INFO_P(value);
                                if (EXPECTED(value_type != IS_UNDEF)) {
@@ -22403,9 +22402,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
                                                break;
                                        }
                                }
-                               pos++;
                                p++;
                        }
+                       EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
                        if (RETURN_VALUE_USED(opline)) {
                                if (UNEXPECTED(!p->key)) {
                                        ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -22419,7 +22418,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
                                        ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
                                }
                        }
-                       EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
                } else {
                        if (++iter->index > 0) {
                                /* This could cause an endless loop if index becomes zero again.
@@ -31382,6 +31380,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_
                        ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
                        ZEND_VM_CONTINUE();
                }
+               pos++;
                value = &p->val;
                value_type = Z_TYPE_INFO_P(value);
                if (EXPECTED(value_type != IS_UNDEF)) {
@@ -31395,10 +31394,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_
                                break;
                        }
                }
-               pos++;
                p++;
        }
-       Z_FE_POS_P(array) = pos + 1;
+       Z_FE_POS_P(array) = pos;
        if (0) {
                if (!p->key) {
                        ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -31434,6 +31432,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_
                        ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
                        ZEND_VM_CONTINUE();
                }
+               pos++;
                value = &p->val;
                value_type = Z_TYPE_INFO_P(value);
                if (EXPECTED(value_type != IS_UNDEF)) {
@@ -31447,10 +31446,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_
                                break;
                        }
                }
-               pos++;
                p++;
        }
-       Z_FE_POS_P(array) = pos + 1;
+       Z_FE_POS_P(array) = pos;
        if (1) {
                if (!p->key) {
                        ZVAL_LONG(EX_VAR(opline->result.var), p->h);