]> granicus.if.org Git - php/commitdiff
Assign CPU registers for GOTO and SWITCH executor as well
authorDmitry Stogov <dmitry@zend.com>
Mon, 24 Aug 2015 23:38:06 +0000 (02:38 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 24 Aug 2015 23:38:06 +0000 (02:38 +0300)
Zend/zend_vm_gen.php

index b1637394284a58b6745d85f4f1fba08592bd548b..3a80705b6a204a82882987534fdbfad54f6296b6 100644 (file)
@@ -1111,7 +1111,11 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
                                                        out($f,"#undef LOAD_NEXT_OPLINE\n");
                                                        out($f,"#undef SAVE_OPLINE\n");
                                                        out($f,"#define OPLINE opline\n");
-                                                       out($f,"#define DCL_OPLINE const zend_op *opline;\n");
+                                                       out($f,"#ifdef ZEND_VM_IP_GLOBAL_REG\n");
+                                                       out($f,"# define DCL_OPLINE register const zend_op *opline __asm__(ZEND_VM_IP_GLOBAL_REG);\n");
+                                                       out($f,"#else\n");
+                                                       out($f,"# define DCL_OPLINE const zend_op *opline;\n");
+                                                       out($f,"#endif\n");
                                                        out($f,"#define USE_OPLINE\n");
                                                        out($f,"#define LOAD_OPLINE() opline = EX(opline)\n");
                                                        out($f,"#define LOAD_NEXT_OPLINE() opline = EX(opline) + 1\n");
@@ -1136,7 +1140,11 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
                                                        out($f,"#undef LOAD_NEXT_OPLINE\n");
                                                        out($f,"#undef SAVE_OPLINE\n");
                                                        out($f,"#define OPLINE opline\n");
-                                                       out($f,"#define DCL_OPLINE const zend_op *opline;\n");
+                                                       out($f,"#ifdef ZEND_VM_IP_GLOBAL_REG\n");
+                                                       out($f,"# define DCL_OPLINE register const zend_op *opline __asm__(ZEND_VM_IP_GLOBAL_REG);\n");
+                                                       out($f,"#else\n");
+                                                       out($f,"# define DCL_OPLINE const zend_op *opline;\n");
+                                                       out($f,"#endif\n");
                                                        out($f,"#define USE_OPLINE\n");
                                                        out($f,"#define LOAD_OPLINE() opline = EX(opline)\n");
                                                        out($f,"#define LOAD_NEXT_OPLINE() opline = EX(opline) + 1\n");
@@ -1171,7 +1179,11 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
                                                foreach ($params as $param => $x) {
                                                        out($f,$m[1].$param.";\n");
                                                }
+                                               out($f,"#ifdef ZEND_VM_FP_GLOBAL_REG\n");
+                                               out($f,$m[1]."register zend_execute_data *execute_data __asm__(ZEND_VM_FP_GLOBAL_REG) = ex;\n");
+                                               out($f,"#else\n");
                                                out($f,$m[1]."zend_execute_data *execute_data = ex;\n");
+                                               out($f,"#endif\n");
                                        } else {
                                                out($f,"#ifdef ZEND_VM_IP_GLOBAL_REG\n");
                                                out($f,$m[1]."const zend_op *orig_opline = opline;\n");