@@ -734,7 +734,7 @@ static int find_call_num_args(zend_jit_trace_rec *p)
734
734
|| p -> opline -> opcode == ZEND_NEW
735
735
|| p -> opline -> opcode == ZEND_INIT_METHOD_CALL
736
736
|| p -> opline -> opcode == ZEND_INIT_STATIC_METHOD_CALL ) {
737
- if (p -> opline -> extended_value <= 127 ) {
737
+ if (p -> opline -> extended_value <= TRACE_FRAME_MAX_NUM_ARGS ) {
738
738
return p -> opline -> extended_value ;
739
739
} else {
740
740
return -1 ;
@@ -1147,10 +1147,8 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
1147
1147
1148
1148
frame = JIT_G (current_frame );
1149
1149
top = zend_jit_trace_call_frame (frame , op_array );
1150
- frame -> call = NULL ;
1151
- frame -> prev = NULL ;
1152
- frame -> func = (const zend_function * )op_array ;
1153
- frame -> return_ssa_var = -1 ;
1150
+ TRACE_FRAME_INIT (frame , op_array , 0 , 0 );
1151
+ TRACE_FRAME_SET_RETURN_SSA_VAR (frame , -1 );
1154
1152
for (i = 0 ; i < op_array -> last_var + op_array -> T ; i ++ ) {
1155
1153
frame -> stack [i ] = -1 ;
1156
1154
}
@@ -1444,9 +1442,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
1444
1442
if (!call ) {
1445
1443
/* Trace missed INIT_FCALL opcode */
1446
1444
call = top ;
1447
- call -> call = NULL ;
1448
- call -> prev = NULL ;
1449
- call -> func = (const zend_function * )op_array ;
1445
+ TRACE_FRAME_INIT (call , op_array , 0 , 0 );
1450
1446
top = zend_jit_trace_call_frame (top , op_array );
1451
1447
for (i = 0 ; i < op_array -> last_var + op_array -> T ; i ++ ) {
1452
1448
call -> stack [i ] = -1 ;
@@ -1456,7 +1452,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
1456
1452
}
1457
1453
frame -> call = call -> prev ;
1458
1454
call -> prev = frame ;
1459
- call -> return_ssa_var = find_return_ssa_var (p - 1 , ssa_ops + (idx - 1 ));
1455
+ TRACE_FRAME_SET_RETURN_SSA_VAR ( call , find_return_ssa_var (p - 1 , ssa_ops + (idx - 1 ) ));
1460
1456
frame = call ;
1461
1457
1462
1458
level ++ ;
@@ -1534,8 +1530,8 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
1534
1530
if ((p + 1 )-> op == ZEND_JIT_TRACE_VM ) {
1535
1531
const zend_op * opline = (p + 1 )-> opline - 1 ;
1536
1532
if (opline -> result_type != IS_UNUSED ) {
1537
- if (frame -> return_ssa_var >= 0 ) {
1538
- ssa_var_info [frame -> return_ssa_var ] = return_value_info ;
1533
+ if (TRACE_FRAME_RETURN_SSA_VAR ( frame ) >= 0 ) {
1534
+ ssa_var_info [TRACE_FRAME_RETURN_SSA_VAR ( frame ) ] = return_value_info ;
1539
1535
}
1540
1536
}
1541
1537
}
@@ -1549,20 +1545,17 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
1549
1545
ZEND_ASSERT (& frame -> func -> op_array == op_array );
1550
1546
} else {
1551
1547
frame = zend_jit_trace_ret_frame (frame , op_array );
1552
- frame -> call = NULL ;
1553
- frame -> prev = NULL ;
1554
- frame -> func = (const zend_function * )op_array ;
1555
- frame -> return_ssa_var = -1 ;
1548
+ TRACE_FRAME_INIT (frame , op_array , 0 , 0 );
1549
+ TRACE_FRAME_SET_RETURN_SSA_VAR (frame , -1 );
1556
1550
for (i = 0 ; i < op_array -> last_var + op_array -> T ; i ++ ) {
1557
1551
frame -> stack [i ] = -1 ;
1558
1552
}
1559
1553
}
1560
1554
1561
1555
} else if (p -> op == ZEND_JIT_TRACE_INIT_CALL ) {
1562
1556
call = top ;
1563
- call -> call = NULL ;
1557
+ TRACE_FRAME_INIT ( call , p -> func , 0 , 0 ) ;
1564
1558
call -> prev = frame -> call ;
1565
- call -> func = p -> func ;
1566
1559
frame -> call = call ;
1567
1560
top = zend_jit_trace_call_frame (top , p -> op_array );
1568
1561
if (p -> func -> type == ZEND_USER_FUNCTION ) {
@@ -1662,13 +1655,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
1662
1655
op_array = p -> op_array ;
1663
1656
frame = JIT_G (current_frame );
1664
1657
top = zend_jit_trace_call_frame (frame , op_array );
1665
- frame -> call = NULL ;
1666
- frame -> prev = NULL ;
1667
- frame -> func = (const zend_function * )op_array ;
1668
- frame -> return_value_used = -1 ;
1669
- frame -> nested = 0 ;
1670
- frame -> num_args = -1 ;
1671
- frame -> last_send_by_ref = -1 ;
1658
+ TRACE_FRAME_INIT (frame , op_array , 0 , -1 );
1672
1659
stack = frame -> stack ;
1673
1660
1674
1661
if (trace_buffer -> start == ZEND_JIT_TRACE_START_ENTER ) {
@@ -2885,12 +2872,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
2885
2872
if (!call ) {
2886
2873
/* Trace missed INIT_FCALL opcode */
2887
2874
call = top ;
2888
- call -> call = NULL ;
2889
- call -> prev = NULL ;
2890
- call -> func = (const zend_function * )op_array ;
2891
- call -> nested = 0 ;
2892
- call -> num_args = -1 ; // TODO: should be possible to get the real number ???
2893
- call -> last_send_by_ref = -1 ;
2875
+ TRACE_FRAME_INIT (call , op_array , 0 , -1 ); // TODO: should be possible to get the real number af arguments ???
2894
2876
top = zend_jit_trace_call_frame (top , op_array );
2895
2877
i = 0 ;
2896
2878
while (i < p -> op_array -> num_args ) {
@@ -2916,7 +2898,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
2916
2898
}
2917
2899
frame -> call = call -> prev ;
2918
2900
call -> prev = frame ;
2919
- call -> return_value_used = p -> return_value_used ;
2901
+ if (p -> return_value_used ) {
2902
+ TRACE_FRAME_SET_RETURN_VALUE_USED (call );
2903
+ } else {
2904
+ TRACE_FRAME_SET_RETURN_VALUE_UNUSED (call );
2905
+ }
2920
2906
JIT_G (current_frame ) = frame = call ;
2921
2907
stack = frame -> stack ;
2922
2908
zend_jit_set_opline (& dasm_state , (p + 1 )-> opline );
@@ -2932,13 +2918,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
2932
2918
ZEND_ASSERT (& frame -> func -> op_array == op_array );
2933
2919
} else {
2934
2920
frame = zend_jit_trace_ret_frame (frame , op_array );
2935
- frame -> call = NULL ;
2936
- frame -> prev = NULL ;
2937
- frame -> func = (const zend_function * )op_array ;
2938
- frame -> return_value_used = -1 ;
2939
- frame -> nested = 0 ;
2940
- frame -> num_args = -1 ;
2941
- frame -> last_send_by_ref = -1 ;
2921
+ TRACE_FRAME_INIT (frame , op_array , 0 , -1 );
2942
2922
stack = frame -> stack ;
2943
2923
for (i = 0 ; i < op_array -> last_var + op_array -> T ; i ++ ) {
2944
2924
/* Initialize abstract stack using SSA */
@@ -2963,12 +2943,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
2963
2943
break ;
2964
2944
} else if (p -> op == ZEND_JIT_TRACE_INIT_CALL ) {
2965
2945
call = top ;
2966
- call -> call = NULL ;
2946
+ TRACE_FRAME_INIT ( call , p -> func , 1 , find_call_num_args ( p - 1 )) ;
2967
2947
call -> prev = frame -> call ;
2968
- call -> func = p -> func ;
2969
- call -> nested = 1 ;
2970
- call -> num_args = find_call_num_args (p - 1 );
2971
- call -> last_send_by_ref = p -> fake ? -1 : 0 ;
2948
+ if (!p -> fake ) {
2949
+ TRACE_FRAME_SET_LAST_SEND_BY_VAL (call );
2950
+ }
2972
2951
frame -> call = call ;
2973
2952
top = zend_jit_trace_call_frame (top , p -> op_array );
2974
2953
if (p -> func -> type == ZEND_USER_FUNCTION ) {
0 commit comments