Skip to content

Commit 2931e0e

Browse files
author
test@test.test
committed
Simplify zend_frameless_observed_call calling
1 parent c8c4aaa commit 2931e0e

File tree

5 files changed

+17
-24
lines changed

5 files changed

+17
-24
lines changed

Zend/zend_execute.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1540,11 +1540,11 @@ static zend_never_inline void zend_assign_to_object_dim(zend_object *obj, zval *
15401540
}
15411541
}
15421542

1543-
ZEND_API void zend_frameless_observed_call(EXECUTE_DATA_D OPLINE_DC)
1543+
ZEND_API void zend_frameless_observed_call(zend_execute_data *execute_data)
15441544
{
1545+
const zend_op *opline = EX(opline);
15451546
uint8_t num_args = ZEND_FLF_NUM_ARGS(opline->opcode);
15461547
zend_function *fbc = ZEND_FLF_FUNC(opline);
1547-
15481548
zval *result = EX_VAR(opline->result.var);
15491549

15501550
zend_execute_data *call = zend_vm_stack_push_call_frame_ex(zend_vm_calc_used_stack(num_args, fbc), ZEND_CALL_NESTED_FUNCTION, fbc, num_args, NULL);

Zend/zend_execute.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,8 @@ ZEND_API void zend_cleanup_unfinished_execution(zend_execute_data *execute_data,
430430
ZEND_API ZEND_ATTRIBUTE_DEPRECATED HashTable *zend_unfinished_execution_gc(zend_execute_data *execute_data, zend_execute_data *call, zend_get_gc_buffer *gc_buffer);
431431
ZEND_API HashTable *zend_unfinished_execution_gc_ex(zend_execute_data *execute_data, zend_execute_data *call, zend_get_gc_buffer *gc_buffer, bool suspended_by_yield);
432432

433+
ZEND_API void zend_frameless_observed_call(zend_execute_data *execute_data);
434+
433435
zval * ZEND_FASTCALL zend_handle_named_arg(
434436
zend_execute_data **call_ptr, zend_string *arg_name,
435437
uint32_t *arg_num_ptr, void **cache_slot);

Zend/zend_vm_def.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9609,7 +9609,7 @@ ZEND_VM_HANDLER(204, ZEND_FRAMELESS_ICALL_0, UNUSED, UNUSED, SPEC(OBSERVER))
96099609

96109610
#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
96119611
if (ZEND_OBSERVER_ENABLED && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
9612-
zend_frameless_observed_call(EXECUTE_DATA_C OPLINE_CC);
9612+
zend_frameless_observed_call(execute_data);
96139613
} else
96149614
#endif
96159615
{
@@ -9634,7 +9634,7 @@ ZEND_VM_HANDLER(205, ZEND_FRAMELESS_ICALL_1, ANY, UNUSED, SPEC(OBSERVER))
96349634

96359635
#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
96369636
if (ZEND_OBSERVER_ENABLED && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
9637-
zend_frameless_observed_call(EXECUTE_DATA_C OPLINE_CC);
9637+
zend_frameless_observed_call(execute_data);
96389638
} else
96399639
#endif
96409640
{
@@ -9662,7 +9662,7 @@ ZEND_VM_HANDLER(206, ZEND_FRAMELESS_ICALL_2, ANY, ANY, SPEC(OBSERVER))
96629662

96639663
#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
96649664
if (ZEND_OBSERVER_ENABLED && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
9665-
zend_frameless_observed_call(EXECUTE_DATA_C OPLINE_CC);
9665+
zend_frameless_observed_call(execute_data);
96669666
} else
96679667
#endif
96689668
{
@@ -9698,7 +9698,7 @@ ZEND_VM_HANDLER(207, ZEND_FRAMELESS_ICALL_3, ANY, ANY, SPEC(OBSERVER))
96989698

96999699
#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
97009700
if (ZEND_OBSERVER_ENABLED && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
9701-
zend_frameless_observed_call(EXECUTE_DATA_C OPLINE_CC);
9701+
zend_frameless_observed_call(execute_data);
97029702
} else
97039703
#endif
97049704
{

Zend/zend_vm_execute.h

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

ext/opcache/jit/zend_jit_ir.c

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17058,7 +17058,6 @@ static bool zend_jit_may_be_in_reg(const zend_op_array *op_array, zend_ssa *ssa,
1705817058
return 1;
1705917059
}
1706017060

17061-
void zend_frameless_observed_call(void); // we just care about the symbol to use it here, IP and FP may need to be passed depending on global regs
1706217061
static ir_ref jit_frameless_observer(zend_jit_ctx *jit, const zend_op *opline) {
1706317062
// JIT: zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(fbc))
1706417063
ir_ref observer_handler;
@@ -17067,15 +17066,7 @@ static ir_ref jit_frameless_observer(zend_jit_ctx *jit, const zend_op *opline) {
1706717066
ir_ref if_unobserved = jit_observer_fcall_is_unobserved_start(jit, fbc, &observer_handler, IR_UNUSED, IR_UNUSED).if_unobserved;
1706817067

1706917068
// Call zend_frameless_observed_call for the main logic.
17070-
if (GCC_GLOBAL_REGS) {
17071-
// FP register will point to the right place, but zend_frameless_observed_call needs IP to be also pointing to the precise opline.
17072-
ir_ref old_ip = ir_HARD_COPY_A(ir_RLOAD_A(ZREG_IP));
17073-
ir_RSTORE(ZREG_IP, ir_CONST_ADDR(opline));
17074-
ir_CALL(IR_VOID, ir_CONST_ADDR((size_t)zend_frameless_observed_call));
17075-
ir_RSTORE(ZREG_IP, old_ip); // restore it so that further offset calculations are not wrong
17076-
} else {
17077-
ir_CALL_2(IR_VOID, ir_CONST_ADDR((size_t)zend_frameless_observed_call), jit_FP(jit), ir_CONST_ADDR(opline));
17078-
}
17069+
ir_CALL_1(IR_VOID, ir_CONST_ADDR((size_t)zend_frameless_observed_call), jit_FP(jit));
1707917070

1708017071
ir_ref skip = ir_END();
1708117072
ir_IF_TRUE(if_unobserved);

0 commit comments

Comments
 (0)