]> granicus.if.org Git - php/commitdiff
Micro optimization
authorDmitry Stogov <dmitry@zend.com>
Fri, 28 Dec 2018 12:34:33 +0000 (15:34 +0300)
committerDmitry Stogov <dmitry@zend.com>
Fri, 28 Dec 2018 12:34:33 +0000 (15:34 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 560ee34d388c7e9f60e7e5213a908f377df384c9..b82982bd33ed4c4e34a6d7d401ffea7671875bcb 100644 (file)
@@ -3834,21 +3834,25 @@ ZEND_VM_HOT_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY)
                                }
                        }
                } else if (OP1_TYPE == IS_CV) {
-                       if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
-                               if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
-                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
-                                       if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
-                                               ZVAL_NULL(retval_ptr);
+                       do {
+                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                       if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+                                               if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+                                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
+                                                       ZVAL_NULL(retval_ptr);
+                                                       break;
+                                               } else {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        } else {
-                                               Z_ADDREF_P(return_value);
+                                               retval_ptr = Z_REFVAL_P(retval_ptr);
+                                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        }
-                               } else {
-                                       retval_ptr = Z_REFVAL_P(retval_ptr);
-                                       ZVAL_COPY(return_value, retval_ptr);
                                }
-                       } else {
                                ZVAL_COPY_VALUE(return_value, retval_ptr);
-                       }
+                       } while (0);
                } else /* if (OP1_TYPE == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
index b4f63d12b8cf53114734e51f87ec5617625f46c9..73a47fbc4b17b73200bf2691f71c9e073cab795d 100644 (file)
@@ -2662,21 +2662,25 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_
                                }
                        }
                } else if (IS_CONST == IS_CV) {
-                       if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
-                               if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
-                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
-                                       if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
-                                               ZVAL_NULL(retval_ptr);
+                       do {
+                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                       if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+                                               if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+                                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
+                                                       ZVAL_NULL(retval_ptr);
+                                                       break;
+                                               } else {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        } else {
-                                               Z_ADDREF_P(return_value);
+                                               retval_ptr = Z_REFVAL_P(retval_ptr);
+                                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        }
-                               } else {
-                                       retval_ptr = Z_REFVAL_P(retval_ptr);
-                                       ZVAL_COPY(return_value, retval_ptr);
                                }
-                       } else {
                                ZVAL_COPY_VALUE(return_value, retval_ptr);
-                       }
+                       } while (0);
                } else /* if (IS_CONST == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
@@ -17883,21 +17887,25 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HA
                                }
                        }
                } else if (IS_TMP_VAR == IS_CV) {
-                       if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
-                               if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
-                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
-                                       if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
-                                               ZVAL_NULL(retval_ptr);
+                       do {
+                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                       if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+                                               if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+                                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
+                                                       ZVAL_NULL(retval_ptr);
+                                                       break;
+                                               } else {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        } else {
-                                               Z_ADDREF_P(return_value);
+                                               retval_ptr = Z_REFVAL_P(retval_ptr);
+                                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        }
-                               } else {
-                                       retval_ptr = Z_REFVAL_P(retval_ptr);
-                                       ZVAL_COPY(return_value, retval_ptr);
                                }
-                       } else {
                                ZVAL_COPY_VALUE(return_value, retval_ptr);
-                       }
+                       } while (0);
                } else /* if (IS_TMP_VAR == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
@@ -20653,21 +20661,25 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HA
                                }
                        }
                } else if (IS_VAR == IS_CV) {
-                       if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
-                               if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
-                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
-                                       if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
-                                               ZVAL_NULL(retval_ptr);
+                       do {
+                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                       if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+                                               if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+                                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
+                                                       ZVAL_NULL(retval_ptr);
+                                                       break;
+                                               } else {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        } else {
-                                               Z_ADDREF_P(return_value);
+                                               retval_ptr = Z_REFVAL_P(retval_ptr);
+                                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        }
-                               } else {
-                                       retval_ptr = Z_REFVAL_P(retval_ptr);
-                                       ZVAL_COPY(return_value, retval_ptr);
                                }
-                       } else {
                                ZVAL_COPY_VALUE(return_value, retval_ptr);
-                       }
+                       } while (0);
                } else /* if (IS_VAR == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
@@ -36822,21 +36834,25 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HAN
                                }
                        }
                } else if (IS_CV == IS_CV) {
-                       if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
-                               if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
-                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
-                                       if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
-                                               ZVAL_NULL(retval_ptr);
+                       do {
+                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                       if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+                                               if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+                                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
+                                                       ZVAL_NULL(retval_ptr);
+                                                       break;
+                                               } else {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        } else {
-                                               Z_ADDREF_P(return_value);
+                                               retval_ptr = Z_REFVAL_P(retval_ptr);
+                                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        }
-                               } else {
-                                       retval_ptr = Z_REFVAL_P(retval_ptr);
-                                       ZVAL_COPY(return_value, retval_ptr);
                                }
-                       } else {
                                ZVAL_COPY_VALUE(return_value, retval_ptr);
-                       }
+                       } while (0);
                } else /* if (IS_CV == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
@@ -55337,21 +55353,25 @@ zend_leave_helper_SPEC_LABEL:
                                }
                        }
                } else if (IS_CONST == IS_CV) {
-                       if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
-                               if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
-                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
-                                       if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
-                                               ZVAL_NULL(retval_ptr);
+                       do {
+                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                       if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+                                               if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+                                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
+                                                       ZVAL_NULL(retval_ptr);
+                                                       break;
+                                               } else {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        } else {
-                                               Z_ADDREF_P(return_value);
+                                               retval_ptr = Z_REFVAL_P(retval_ptr);
+                                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        }
-                               } else {
-                                       retval_ptr = Z_REFVAL_P(retval_ptr);
-                                       ZVAL_COPY(return_value, retval_ptr);
                                }
-                       } else {
                                ZVAL_COPY_VALUE(return_value, retval_ptr);
-                       }
+                       } while (0);
                } else /* if (IS_CONST == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
@@ -57047,21 +57067,25 @@ zend_leave_helper_SPEC_LABEL:
                                }
                        }
                } else if (IS_TMP_VAR == IS_CV) {
-                       if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
-                               if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
-                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
-                                       if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
-                                               ZVAL_NULL(retval_ptr);
+                       do {
+                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                       if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+                                               if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+                                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
+                                                       ZVAL_NULL(retval_ptr);
+                                                       break;
+                                               } else {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        } else {
-                                               Z_ADDREF_P(return_value);
+                                               retval_ptr = Z_REFVAL_P(retval_ptr);
+                                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        }
-                               } else {
-                                       retval_ptr = Z_REFVAL_P(retval_ptr);
-                                       ZVAL_COPY(return_value, retval_ptr);
                                }
-                       } else {
                                ZVAL_COPY_VALUE(return_value, retval_ptr);
-                       }
+                       } while (0);
                } else /* if (IS_TMP_VAR == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
@@ -57333,21 +57357,25 @@ zend_leave_helper_SPEC_LABEL:
                                }
                        }
                } else if (IS_VAR == IS_CV) {
-                       if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
-                               if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
-                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
-                                       if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
-                                               ZVAL_NULL(retval_ptr);
+                       do {
+                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                       if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+                                               if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+                                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
+                                                       ZVAL_NULL(retval_ptr);
+                                                       break;
+                                               } else {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        } else {
-                                               Z_ADDREF_P(return_value);
+                                               retval_ptr = Z_REFVAL_P(retval_ptr);
+                                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        }
-                               } else {
-                                       retval_ptr = Z_REFVAL_P(retval_ptr);
-                                       ZVAL_COPY(return_value, retval_ptr);
                                }
-                       } else {
                                ZVAL_COPY_VALUE(return_value, retval_ptr);
-                       }
+                       } while (0);
                } else /* if (IS_VAR == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
@@ -58975,21 +59003,25 @@ zend_leave_helper_SPEC_LABEL:
                                }
                        }
                } else if (IS_CV == IS_CV) {
-                       if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
-                               if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
-                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
-                                       if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
-                                               ZVAL_NULL(retval_ptr);
+                       do {
+                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                       if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+                                               if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+                                                       ZVAL_COPY_VALUE(return_value, retval_ptr);
+                                                       ZVAL_NULL(retval_ptr);
+                                                       break;
+                                               } else {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        } else {
-                                               Z_ADDREF_P(return_value);
+                                               retval_ptr = Z_REFVAL_P(retval_ptr);
+                                               if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+                                                       Z_ADDREF_P(retval_ptr);
+                                               }
                                        }
-                               } else {
-                                       retval_ptr = Z_REFVAL_P(retval_ptr);
-                                       ZVAL_COPY(return_value, retval_ptr);
                                }
-                       } else {
                                ZVAL_COPY_VALUE(return_value, retval_ptr);
-                       }
+                       } while (0);
                } else /* if (IS_CV == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(retval_ptr);