Skip to content

Instantly share code, notes, and snippets.

@dstogov
Created March 31, 2021 09:00
Show Gist options
  • Save dstogov/2ba3a8f340a2f22147e15a119701b7e7 to your computer and use it in GitHub Desktop.
Save dstogov/2ba3a8f340a2f22147e15a119701b7e7 to your computer and use it in GitHub Desktop.
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index dc49bcd434..ff2c678373 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -374,11 +374,19 @@ static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend
# if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
# define ZEND_VM_RETURN() opline = &hybrid_halt_op; return
# define ZEND_VM_HOT zend_always_inline ZEND_COLD ZEND_OPT_SIZE
-# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE
+# if (defined(HAVE_GCC_GLOBAL_REGS) && defined(__powerpc64__))
+# define ZEND_VM_COLD ZEND_COLD
+# else
+# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE
+# endif
# else
# define ZEND_VM_RETURN() opline = NULL; return
# define ZEND_VM_HOT
-# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE
+# if (defined(HAVE_GCC_GLOBAL_REGS) && defined(__powerpc64__))
+# define ZEND_VM_COLD ZEND_COLD
+# else
+# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE
+# endif
# endif
#else
# define ZEND_OPCODE_HANDLER_RET int
@@ -386,7 +394,11 @@ static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend
# define ZEND_VM_CONTINUE() return 0
# define ZEND_VM_RETURN() return -1
# define ZEND_VM_HOT
-# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE
+# if (defined(HAVE_GCC_GLOBAL_REGS) && defined(__powerpc64__))
+# define ZEND_VM_COLD ZEND_COLD
+# else
+# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE
+# endif
#endif
typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);
diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php
index 22586cbd0b..112e53ef05 100755
--- a/Zend/zend_vm_gen.php
+++ b/Zend/zend_vm_gen.php
@@ -1916,15 +1916,27 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
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 ZEND_COLD ZEND_OPT_SIZE\n");
- out($f,"# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE\n");
+ out($f,"# if (defined(HAVE_GCC_GLOBAL_REGS) && defined(__powerpc64__))\n");
+ out($f,"# define ZEND_VM_COLD ZEND_COLD\n");
+ out($f,"# else\n");
+ out($f,"# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE\n");
+ out($f,"# endif\n");
out($f,"# else\n");
out($f,"# define ZEND_VM_RETURN() opline = NULL; return\n");
out($f,"# define ZEND_VM_HOT\n");
- out($f,"# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE\n");
+ out($f,"# if (defined(HAVE_GCC_GLOBAL_REGS) && defined(__powerpc64__))\n");
+ out($f,"# define ZEND_VM_COLD ZEND_COLD\n");
+ out($f,"# else\n");
+ out($f,"# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE\n");
+ out($f,"# endif\n");
out($f,"# endif\n");
} else {
out($f,"# define ZEND_VM_RETURN() opline = NULL; return\n");
- out($f,"# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE\n");
+ out($f,"# if (defined(HAVE_GCC_GLOBAL_REGS) && defined(__powerpc64__))\n");
+ out($f,"# define ZEND_VM_COLD ZEND_COLD\n");
+ out($f,"# else\n");
+ out($f,"# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE\n");
+ out($f,"# endif\n");
}
out($f,"#else\n");
out($f,"# define ZEND_OPCODE_HANDLER_RET int\n");
@@ -1934,7 +1946,11 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
if ($kind == ZEND_VM_KIND_HYBRID) {
out($f,"# define ZEND_VM_HOT\n");
}
- out($f,"# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE\n");
+ out($f,"# if (defined(HAVE_GCC_GLOBAL_REGS) && defined(__powerpc64__))\n");
+ out($f,"# define ZEND_VM_COLD ZEND_COLD\n");
+ out($f,"# else\n");
+ out($f,"# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE\n");
+ out($f,"# endif\n");
out($f,"#endif\n");
out($f,"\n");
out($f,"typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);\n");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment