Skip to content

Commit f2b6b2e

Browse files
committed
Micro-optimization
1 parent 39a0854 commit f2b6b2e

File tree

4 files changed

+38
-14
lines changed

4 files changed

+38
-14
lines changed

Zend/zend_execute.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3490,9 +3490,6 @@ static zend_always_inline void i_init_func_execute_data(zend_op_array *op_array,
34903490
EX(run_time_cache) = RUN_TIME_CACHE(op_array);
34913491

34923492
EG(current_execute_data) = execute_data;
3493-
#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
3494-
EX(opline) = opline;
3495-
#endif
34963493
}
34973494
/* }}} */
34983495

Zend/zend_vm_def.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3844,7 +3844,7 @@ ZEND_VM_HOT_HANDLER(130, ZEND_DO_UCALL, ANY, ANY, SPEC(RETVAL))
38443844
call->prev_execute_data = execute_data;
38453845
execute_data = call;
38463846
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
3847-
LOAD_OPLINE();
3847+
LOAD_OPLINE_EX();
38483848

38493849
ZEND_VM_ENTER_EX();
38503850
}
@@ -3868,7 +3868,7 @@ ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL))
38683868
call->prev_execute_data = execute_data;
38693869
execute_data = call;
38703870
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
3871-
LOAD_OPLINE();
3871+
LOAD_OPLINE_EX();
38723872

38733873
ZEND_VM_ENTER_EX();
38743874
} else {
@@ -3957,9 +3957,10 @@ ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
39573957
i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
39583958

39593959
if (EXPECTED(zend_execute_ex == execute_ex)) {
3960-
LOAD_OPLINE();
3960+
LOAD_OPLINE_EX();
39613961
ZEND_VM_ENTER_EX();
39623962
} else {
3963+
SAVE_OPLINE_EX();
39633964
execute_data = EX(prev_execute_data);
39643965
LOAD_OPLINE();
39653966
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
@@ -8006,9 +8007,10 @@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY)
80068007
execute_data = call;
80078008
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
80088009
if (EXPECTED(zend_execute_ex == execute_ex)) {
8009-
LOAD_OPLINE();
8010+
LOAD_OPLINE_EX();
80108011
ZEND_VM_ENTER_EX();
80118012
} else {
8013+
SAVE_OPLINE_EX();
80128014
execute_data = EX(prev_execute_data);
80138015
LOAD_OPLINE();
80148016
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);

Zend/zend_vm_execute.h

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -398,19 +398,24 @@ typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_H
398398
#undef LOAD_OPLINE
399399
#undef LOAD_OPLINE_EX
400400
#undef SAVE_OPLINE
401+
#undef SAVE_OPLINE_EX
401402
#define DCL_OPLINE
402403
#ifdef ZEND_VM_IP_GLOBAL_REG
403404
# define OPLINE opline
404405
# define USE_OPLINE
405406
# define LOAD_OPLINE() opline = EX(opline)
407+
# define LOAD_OPLINE_EX()
406408
# define LOAD_NEXT_OPLINE() opline = EX(opline) + 1
407409
# define SAVE_OPLINE() EX(opline) = opline
410+
# define SAVE_OPLINE_EX() SAVE_OPLINE()
408411
#else
409412
# define OPLINE EX(opline)
410413
# define USE_OPLINE const zend_op *opline = EX(opline);
411414
# define LOAD_OPLINE()
415+
# define LOAD_OPLINE_EX()
412416
# define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()
413417
# define SAVE_OPLINE()
418+
# define SAVE_OPLINE_EX()
414419
#endif
415420
#undef HANDLE_EXCEPTION
416421
#undef HANDLE_EXCEPTION_LEAVE
@@ -1064,7 +1069,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETV
10641069
call->prev_execute_data = execute_data;
10651070
execute_data = call;
10661071
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1067-
LOAD_OPLINE();
1072+
LOAD_OPLINE_EX();
10681073

10691074
ZEND_VM_ENTER_EX();
10701075
}
@@ -1087,7 +1092,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETV
10871092
call->prev_execute_data = execute_data;
10881093
execute_data = call;
10891094
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1090-
LOAD_OPLINE();
1095+
LOAD_OPLINE_EX();
10911096

10921097
ZEND_VM_ENTER_EX();
10931098
}
@@ -1111,7 +1116,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_S
11111116
call->prev_execute_data = execute_data;
11121117
execute_data = call;
11131118
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1114-
LOAD_OPLINE();
1119+
LOAD_OPLINE_EX();
11151120

11161121
ZEND_VM_ENTER_EX();
11171122
} else {
@@ -1187,7 +1192,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_S
11871192
call->prev_execute_data = execute_data;
11881193
execute_data = call;
11891194
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1190-
LOAD_OPLINE();
1195+
LOAD_OPLINE_EX();
11911196

11921197
ZEND_VM_ENTER_EX();
11931198
} else {
@@ -1276,9 +1281,10 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETV
12761281
i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
12771282

12781283
if (EXPECTED(zend_execute_ex == execute_ex)) {
1279-
LOAD_OPLINE();
1284+
LOAD_OPLINE_EX();
12801285
ZEND_VM_ENTER_EX();
12811286
} else {
1287+
SAVE_OPLINE_EX();
12821288
execute_data = EX(prev_execute_data);
12831289
LOAD_OPLINE();
12841290
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
@@ -1386,9 +1392,10 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETV
13861392
i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
13871393

13881394
if (EXPECTED(zend_execute_ex == execute_ex)) {
1389-
LOAD_OPLINE();
1395+
LOAD_OPLINE_EX();
13901396
ZEND_VM_ENTER_EX();
13911397
} else {
1398+
SAVE_OPLINE_EX();
13921399
execute_data = EX(prev_execute_data);
13931400
LOAD_OPLINE();
13941401
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
@@ -2429,9 +2436,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(Z
24292436
execute_data = call;
24302437
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
24312438
if (EXPECTED(zend_execute_ex == execute_ex)) {
2432-
LOAD_OPLINE();
2439+
LOAD_OPLINE_EX();
24332440
ZEND_VM_ENTER_EX();
24342441
} else {
2442+
SAVE_OPLINE_EX();
24352443
execute_data = EX(prev_execute_data);
24362444
LOAD_OPLINE();
24372445
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);

Zend/zend_vm_gen.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1947,19 +1947,24 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
19471947
out($f,"#undef LOAD_OPLINE\n");
19481948
out($f,"#undef LOAD_OPLINE_EX\n");
19491949
out($f,"#undef SAVE_OPLINE\n");
1950+
out($f,"#undef SAVE_OPLINE_EX\n");
19501951
out($f,"#define DCL_OPLINE\n");
19511952
out($f,"#ifdef ZEND_VM_IP_GLOBAL_REG\n");
19521953
out($f,"# define OPLINE opline\n");
19531954
out($f,"# define USE_OPLINE\n");
19541955
out($f,"# define LOAD_OPLINE() opline = EX(opline)\n");
1956+
out($f,"# define LOAD_OPLINE_EX()\n");
19551957
out($f,"# define LOAD_NEXT_OPLINE() opline = EX(opline) + 1\n");
19561958
out($f,"# define SAVE_OPLINE() EX(opline) = opline\n");
1959+
out($f,"# define SAVE_OPLINE_EX() SAVE_OPLINE()\n");
19571960
out($f,"#else\n");
19581961
out($f,"# define OPLINE EX(opline)\n");
19591962
out($f,"# define USE_OPLINE const zend_op *opline = EX(opline);\n");
19601963
out($f,"# define LOAD_OPLINE()\n");
1964+
out($f,"# define LOAD_OPLINE_EX()\n");
19611965
out($f,"# define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()\n");
19621966
out($f,"# define SAVE_OPLINE()\n");
1967+
out($f,"# define SAVE_OPLINE_EX()\n");
19631968
out($f,"#endif\n");
19641969
out($f,"#undef HANDLE_EXCEPTION\n");
19651970
out($f,"#undef HANDLE_EXCEPTION_LEAVE\n");
@@ -1996,8 +2001,10 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
19962001
out($f,"#undef DCL_OPLINE\n");
19972002
out($f,"#undef USE_OPLINE\n");
19982003
out($f,"#undef LOAD_OPLINE\n");
2004+
out($f,"#undef LOAD_OPLINE_EX\n");
19992005
out($f,"#undef LOAD_NEXT_OPLINE\n");
20002006
out($f,"#undef SAVE_OPLINE\n");
2007+
out($f,"#undef SAVE_OPLINE_EX\n");
20012008
out($f,"#define OPLINE opline\n");
20022009
out($f,"#ifdef ZEND_VM_IP_GLOBAL_REG\n");
20032010
out($f,"# define DCL_OPLINE register const zend_op *opline __asm__(ZEND_VM_IP_GLOBAL_REG);\n");
@@ -2006,8 +2013,10 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
20062013
out($f,"#endif\n");
20072014
out($f,"#define USE_OPLINE\n");
20082015
out($f,"#define LOAD_OPLINE() opline = EX(opline)\n");
2016+
out($f,"# define LOAD_OPLINE_EX() LOAD_OPLINE()\n");
20092017
out($f,"#define LOAD_NEXT_OPLINE() opline = EX(opline) + 1\n");
20102018
out($f,"#define SAVE_OPLINE() EX(opline) = opline\n");
2019+
out($f,"#define SAVE_OPLINE_EX()\n");
20112020
out($f,"#undef HANDLE_EXCEPTION\n");
20122021
out($f,"#undef HANDLE_EXCEPTION_LEAVE\n");
20132022
out($f,"#define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()\n");
@@ -2028,8 +2037,10 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
20282037
out($f,"#undef DCL_OPLINE\n");
20292038
out($f,"#undef USE_OPLINE\n");
20302039
out($f,"#undef LOAD_OPLINE\n");
2040+
out($f,"#undef LOAD_OPLINE_EX\n");
20312041
out($f,"#undef LOAD_NEXT_OPLINE\n");
20322042
out($f,"#undef SAVE_OPLINE\n");
2043+
out($f,"#undef SAVE_OPLINE_EX\n");
20332044
out($f,"#define OPLINE opline\n");
20342045
out($f,"#ifdef ZEND_VM_IP_GLOBAL_REG\n");
20352046
out($f,"# define DCL_OPLINE register const zend_op *opline __asm__(ZEND_VM_IP_GLOBAL_REG);\n");
@@ -2038,8 +2049,10 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
20382049
out($f,"#endif\n");
20392050
out($f,"#define USE_OPLINE\n");
20402051
out($f,"#define LOAD_OPLINE() opline = EX(opline)\n");
2052+
out($f,"#define LOAD_OPLINE_EX() LOAD_OPLINE()\n");
20412053
out($f,"#define LOAD_NEXT_OPLINE() opline = EX(opline) + 1\n");
20422054
out($f,"#define SAVE_OPLINE() EX(opline) = opline\n");
2055+
out($f,"#define SAVE_OPLINE_EX()\n");
20432056
out($f,"#undef HANDLE_EXCEPTION\n");
20442057
out($f,"#undef HANDLE_EXCEPTION_LEAVE\n");
20452058
if (ZEND_VM_SPEC) {
@@ -3059,14 +3072,18 @@ function gen_vm($def, $skel) {
30593072
out($f,"#undef DCL_OPLINE\n");
30603073
out($f,"#undef USE_OPLINE\n");
30613074
out($f,"#undef LOAD_OPLINE\n");
3075+
out($f,"#undef LOAD_OPLINE_EX\n");
30623076
out($f,"#undef LOAD_NEXT_OPLINE\n");
30633077
out($f,"#undef SAVE_OPLINE\n");
3078+
out($f,"#undef SAVE_OPLINE_EX\n");
30643079
out($f,"#define OPLINE EX(opline)\n");
30653080
out($f,"#define DCL_OPLINE\n");
30663081
out($f,"#define USE_OPLINE const zend_op *opline = EX(opline);\n");
30673082
out($f,"#define LOAD_OPLINE()\n");
3083+
out($f,"#define LOAD_OPLINE_EX()\n");
30683084
out($f,"#define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()\n");
30693085
out($f,"#define SAVE_OPLINE()\n");
3086+
out($f,"#define SAVE_OPLINE_EX()\n");
30703087
out($f,"#undef HANDLE_EXCEPTION\n");
30713088
out($f,"#undef HANDLE_EXCEPTION_LEAVE\n");
30723089
out($f,"#define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()\n");

0 commit comments

Comments
 (0)