From: Dmitry Stogov <dmitry@zend.com>
Date: Thu, 15 Feb 2018 14:04:41 +0000 (+0300)
Subject: Optimize "backup" functions of inlined opcode handlers for size
X-Git-Tag: php-7.3.0alpha1~420
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=285bfb96fe701a4b06c22b8e5472076acdeba936;p=php

Optimize "backup" functions of inlined opcode handlers for size
---

diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h
index abf7dcc5a4..ed8f07389b 100644
--- a/Zend/zend_portability.h
+++ b/Zend/zend_portability.h
@@ -221,10 +221,19 @@ char *alloca();
 # define ZEND_ATTRIBUTE_UNUSED __attribute__((unused))
 # define ZEND_COLD __attribute__((cold))
 # define ZEND_HOT __attribute__((hot))
+# ifdef __OPTIMIZE__
+#  define ZEND_OPT_SIZE  __attribute__((optimize("Os")))
+#  define ZEND_OPT_SPEED __attribute__((optimize("Ofast")))
+# else
+#  define ZEND_OPT_SIZE
+#  define ZEND_OPT_SPEED
+# endif
 #else
 # define ZEND_ATTRIBUTE_UNUSED
 # define ZEND_COLD
 # define ZEND_HOT
+# define ZEND_OPT_SIZE
+# define ZEND_OPT_SPEED
 #endif
 
 #if defined(__GNUC__) && ZEND_GCC_VERSION >= 5000
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 4b8466f73e..44ca3f4ef8 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -366,7 +366,7 @@ static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend
 # endif
 # if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
 #  define ZEND_VM_RETURN()        opline = &hybrid_halt_op; return
-#  define ZEND_VM_HOT             zend_always_inline
+#  define ZEND_VM_HOT             zend_always_inline ZEND_OPT_SIZE
 # else
 #  define ZEND_VM_RETURN()        opline = NULL; return
 #  define ZEND_VM_HOT
diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php
index d06cd89628..37a660127f 100644
--- a/Zend/zend_vm_gen.php
+++ b/Zend/zend_vm_gen.php
@@ -1745,7 +1745,7 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
 							if ($kind == ZEND_VM_KIND_HYBRID) {
 								out($f,"# if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
 								out($f,"#  define ZEND_VM_RETURN()        opline = &hybrid_halt_op; return\n");
-								out($f,"#  define ZEND_VM_HOT             zend_always_inline\n");
+								out($f,"#  define ZEND_VM_HOT             zend_always_inline ZEND_OPT_SIZE\n");
 								out($f,"# else\n");
 								out($f,"#  define ZEND_VM_RETURN()        opline = NULL; return\n");
 								out($f,"#  define ZEND_VM_HOT\n");