Skip to content

Commit 07624db

Browse files
committed
Fix build
1 parent b92f8fb commit 07624db

File tree

6 files changed

+48
-22
lines changed

6 files changed

+48
-22
lines changed

Zend/zend_vm_execute.h

Lines changed: 7 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Zend/zend_vm_gen.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1898,8 +1898,8 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
18981898
case ZEND_VM_KIND_CALL:
18991899
out($f,"\n");
19001900
out($f,"#ifdef ZEND_VM_FP_GLOBAL_REG\n");
1901+
out($f,"# define ZEND_OPCODE_HANDLER_ARGS void\n");
19011902
out($f,"# define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU\n");
1902-
out($f,"# define ZEND_OPCODE_HANDLER_ARGS\n");
19031903
out($f,"# define ZEND_OPCODE_HANDLER_ARGS_EX\n");
19041904
out($f,"# define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX\n");
19051905
out($f,"#else\n");
@@ -1950,14 +1950,12 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
19501950
out($f, " ZEND_VM_DISPATCH(t.handler); \\\n");
19511951
out($f, " } while (0) \\\n");
19521952
out($f, "\n");
1953-
out($f,"# define ZEND_VM_DISPATCH_TO_HANDLER(handler) ZEND_VM_DISPATCH(handler)\n");
1954-
out($f,"# define ZEND_VM_DISPATCH_TO_HELPER(helper) ZEND_VM_DISPATCH(helper)\n");
1955-
out($f,"# define ZEND_VM_DISPATCH_TO_HELPER_EX(helper, ...) ZEND_VM_DISPATCH_EX(helper, __VA_ARGS__)\n");
19561953
if ($kind == ZEND_VM_KIND_HYBRID) {
19571954
out($f,"# define ZEND_VM_HOT\n");
19581955
}
19591956
out($f,"# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE\n");
19601957
out($f,"#else\n");
1958+
out($f,"# define ZEND_OPCODE_HANDLER_RET const zend_op *\n");
19611959
out($f,"# define ZEND_OPCODE_HANDLER_RET_EX const zend_op *\n");
19621960
out($f,"# define ZEND_VM_TAIL_CALL(call) return call\n");
19631961
out($f,"# define ZEND_VM_CONTINUE() return opline\n");
@@ -1972,6 +1970,9 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
19721970
}
19731971
out($f,"# define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE\n");
19741972
out($f,"#endif\n");
1973+
out($f,"#define ZEND_VM_DISPATCH_TO_HANDLER(handler) ZEND_VM_DISPATCH(handler)\n");
1974+
out($f,"#define ZEND_VM_DISPATCH_TO_HELPER(helper) ZEND_VM_DISPATCH(helper)\n");
1975+
out($f,"#define ZEND_VM_DISPATCH_TO_HELPER_EX(helper, ...) ZEND_VM_DISPATCH_EX(helper, __VA_ARGS__)\n");
19751976
out($f,"\n");
19761977
out($f,"#if ZEND_VM_TAIL_CALL_DISPATCH\n");
19771978
out($f,"typedef struct _zend_vm_trampoline {\n");
@@ -2504,7 +2505,7 @@ function gen_vm_opcodes_header(
25042505
$str .= "#endif\n";
25052506
$str .= "\n";
25062507
$str .= "#if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID\n";
2507-
$str .= "typedef const void* zend_vm_opcode_handler_t;\n";
2508+
$str .= "typedef void (ZEND_FASTCALL *zend_vm_opcode_handler_t)(void);\n";
25082509
$str .= "typedef void (ZEND_FASTCALL *zend_vm_opcode_handler_func_t)(void);\n";
25092510
$str .= "#elif ZEND_VM_KIND == ZEND_VM_KIND_CALL\n";
25102511
$str .= "typedef const struct _zend_op *(ZEND_OPCODE_HANDLER_CCONV *zend_vm_opcode_handler_t)(struct _zend_execute_data *execute_data, const struct _zend_op *opline);\n";
@@ -2995,7 +2996,7 @@ function gen_vm($def, $skel) {
29952996
}
29962997
out($f, "}\n\n");
29972998
out($f, "#if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID && !ZEND_VM_TAIL_CALL_DISPATCH) || !ZEND_VM_SPEC\n");
2998-
out($f, "static const void *zend_vm_get_opcode_handler(uint8_t opcode, const zend_op* op)\n");
2999+
out($f, "static zend_vm_opcode_handler_t zend_vm_get_opcode_handler(uint8_t opcode, const zend_op* op)\n");
29993000
out($f, "{\n");
30003001
if (!ZEND_VM_SPEC) {
30013002
out($f, "\treturn zend_opcode_handlers[zend_vm_get_opcode_handler_idx(opcode, op)];\n");
@@ -3121,7 +3122,7 @@ function gen_vm($def, $skel) {
31213122
out($f, "{\n");
31223123
if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) {
31233124
out($f,"#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
3124-
out($f, "\topcode_handler_t handler;\n");
3125+
out($f, "\tzend_vm_opcode_handler_func_t handler;\n");
31253126
out($f,"#endif\n");
31263127
}
31273128
out($f, "\tDCL_OPLINE;\n");

Zend/zend_vm_opcodes.h

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/opcache/jit/zend_jit_internal.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -240,10 +240,6 @@ extern const zend_op *zend_jit_halt_op;
240240
# define ZEND_VM_ENTER_BIT 1ULL
241241
#endif
242242

243-
/* VM handlers */
244-
typedef ZEND_OPCODE_HANDLER_RET (ZEND_OPCODE_HANDLER_CCONV *zend_vm_opcode_handler_t)(ZEND_OPCODE_HANDLER_ARGS);
245-
typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *zend_vm_opcode_handler_func_t)(ZEND_OPCODE_HANDLER_ARGS);
246-
247243
/* VM helpers */
248244
ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_jit_leave_nested_func_helper(ZEND_OPCODE_HANDLER_ARGS_EX uint32_t call_info);
249245
ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_jit_leave_top_func_helper(ZEND_OPCODE_HANDLER_ARGS_EX uint32_t call_info);

ext/opcache/jit/zend_jit_ir.c

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2082,10 +2082,36 @@ static int zend_jit_interrupt_handler_stub(zend_jit_ctx *jit)
20822082

20832083
static int zend_jit_leave_function_handler_stub(zend_jit_ctx *jit)
20842084
{
2085-
if (GCC_GLOBAL_REGS) {
2086-
ir_TAILCALL(IR_VOID, ir_CONST_OPCODE_HANDLER_FUNC(zend_jit_leave_func_helper_tailcall));
2087-
} else {
2085+
if (ZEND_VM_TAIL_CALL_DISPATCH) {
20882086
ir_TAILCALL_2(IR_VOID, ir_CONST_OPCODE_HANDLER_FUNC(zend_jit_leave_func_helper_tailcall), jit_FP(jit), jit_IP(jit));
2087+
return 1;
2088+
}
2089+
2090+
ir_ref call_info = ir_LOAD_U32(jit_EX(This.u1.type_info));
2091+
ir_ref if_top = ir_IF(ir_AND_U32(call_info, ir_CONST_U32(ZEND_CALL_TOP)));
2092+
2093+
ir_IF_FALSE(if_top);
2094+
2095+
if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) {
2096+
ir_CALL_1(IR_VOID, ir_CONST_FC_FUNC(zend_jit_leave_nested_func_helper), call_info);
2097+
jit_STORE_IP(jit,
2098+
ir_LOAD_A(jit_EX(opline)));
2099+
ir_TAILCALL(IR_VOID, ir_LOAD_A(jit_IP(jit)));
2100+
} else if (GCC_GLOBAL_REGS) {
2101+
ir_TAILCALL_1(IR_VOID, ir_CONST_FC_FUNC(zend_jit_leave_nested_func_helper), call_info);
2102+
} else {
2103+
ir_TAILCALL_3(IR_ADDR, ir_CONST_FC_FUNC(zend_jit_leave_nested_func_helper), jit_FP(jit), jit_IP(jit), call_info);
2104+
}
2105+
2106+
ir_IF_TRUE(if_top);
2107+
2108+
if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) {
2109+
ir_CALL_1(IR_VOID, ir_CONST_FC_FUNC(zend_jit_leave_top_func_helper), call_info);
2110+
ir_TAILCALL(IR_VOID, ir_LOAD_A(jit_IP(jit)));
2111+
} else if (GCC_GLOBAL_REGS) {
2112+
ir_TAILCALL_1(IR_VOID, ir_CONST_FC_FUNC(zend_jit_leave_top_func_helper), call_info);
2113+
} else {
2114+
ir_TAILCALL_3(IR_ADDR, ir_CONST_FC_FUNC(zend_jit_leave_top_func_helper), jit_FP(jit), jit_IP(jit), call_info);
20892115
}
20902116

20912117
return 1;

ext/opcache/jit/zend_jit_vm_helpers.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV zend_jit_leave_func_helper_tai
8080
} else {
8181
opline = ++EX(opline);
8282
}
83+
#ifndef HAVE_GCC_GLOBAL_REGS
8384
ZEND_OPCODE_TAIL_CALL(opline->handler);
85+
#endif
8486
} else {
8587
if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) {
8688
if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
@@ -139,7 +141,7 @@ ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_jit_leave_nested_func_helper(ZEND_OPC
139141
#ifdef HAVE_GCC_GLOBAL_REGS
140142
opline = EX(opline);
141143
#else
142-
return EX(opline);
144+
return (const zend_op*)((uintptr_t)EX(opline) | ZEND_VM_ENTER_BIT);
143145
#endif
144146
}
145147
}

0 commit comments

Comments
 (0)