Skip to content

Commit 374f769

Browse files
committed
micro-optimization
1 parent 1e50040 commit 374f769

File tree

4 files changed

+43
-24
lines changed

4 files changed

+43
-24
lines changed

Zend/zend_execute.c

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

35043504
EG(current_execute_data) = execute_data;
3505-
#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
3506-
EX(opline) = opline;
3507-
#endif
35083505
}
35093506
/* }}} */
35103507

Zend/zend_vm_def.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -828,12 +828,12 @@ ZEND_VM_COLD_HELPER(zend_this_not_in_object_context_helper, ANY, ANY)
828828
HANDLE_EXCEPTION();
829829
}
830830

831-
ZEND_VM_COLD_HELPER(zend_abstract_method_helper, ANY, ANY, zend_function *fbc)
831+
ZEND_VM_COLD_HELPER(zend_abstract_method_helper, ANY, ANY, zend_function *_fbc)
832832
{
833833
USE_OPLINE
834834

835835
SAVE_OPLINE();
836-
zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
836+
zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(_fbc->common.scope->name), ZSTR_VAL(_fbc->common.function_name));
837837
UNDEF_RESULT();
838838
HANDLE_EXCEPTION();
839839
}
@@ -3842,7 +3842,7 @@ ZEND_VM_HOT_HANDLER(130, ZEND_DO_UCALL, ANY, ANY, SPEC(RETVAL))
38423842
call->prev_execute_data = execute_data;
38433843
execute_data = call;
38443844
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
3845-
LOAD_OPLINE();
3845+
LOAD_OPLINE_EX();
38463846

38473847
ZEND_VM_ENTER_EX();
38483848
}
@@ -3866,7 +3866,7 @@ ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL))
38663866
call->prev_execute_data = execute_data;
38673867
execute_data = call;
38683868
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
3869-
LOAD_OPLINE();
3869+
LOAD_OPLINE_EX();
38703870

38713871
ZEND_VM_ENTER_EX();
38723872
} else {
@@ -3934,7 +3934,7 @@ ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
39343934
EX(call) = call->prev_execute_data;
39353935
if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
39363936
if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
3937-
ZEND_VM_DISPATCH_TO_HELPER(zend_abstract_method_helper, fbc, fbc);
3937+
ZEND_VM_DISPATCH_TO_HELPER(zend_abstract_method_helper, _fbc, fbc);
39383938
} else {
39393939
zend_deprecated_function(fbc);
39403940
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -3955,11 +3955,11 @@ ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
39553955
i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
39563956

39573957
if (EXPECTED(zend_execute_ex == execute_ex)) {
3958-
LOAD_OPLINE();
3958+
LOAD_OPLINE_EX();
39593959
ZEND_VM_ENTER_EX();
39603960
} else {
39613961
execute_data = EX(prev_execute_data);
3962-
LOAD_OPLINE();
3962+
SAVE_OPLINE_EX();
39633963
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
39643964
zend_execute_ex(call);
39653965
}
@@ -8050,11 +8050,11 @@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY)
80508050
execute_data = call;
80518051
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
80528052
if (EXPECTED(zend_execute_ex == execute_ex)) {
8053-
LOAD_OPLINE();
8053+
LOAD_OPLINE_EX();
80548054
ZEND_VM_ENTER_EX();
80558055
} else {
80568056
execute_data = EX(prev_execute_data);
8057-
LOAD_OPLINE();
8057+
SAVE_OPLINE_EX();
80588058
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
80598059
zend_execute_ex(call);
80608060
}

Zend/zend_vm_execute.h

Lines changed: 17 additions & 12 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
@@ -460,12 +465,12 @@ static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_th
460465
HANDLE_EXCEPTION();
461466
}
462467

463-
static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_abstract_method_helper_SPEC(zend_function *fbc ZEND_OPCODE_HANDLER_ARGS_DC)
468+
static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_abstract_method_helper_SPEC(zend_function *_fbc ZEND_OPCODE_HANDLER_ARGS_DC)
464469
{
465470
USE_OPLINE
466471

467472
SAVE_OPLINE();
468-
zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
473+
zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(_fbc->common.scope->name), ZSTR_VAL(_fbc->common.function_name));
469474
UNDEF_RESULT();
470475
HANDLE_EXCEPTION();
471476
}
@@ -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,11 +1281,11 @@ 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 {
12821287
execute_data = EX(prev_execute_data);
1283-
LOAD_OPLINE();
1288+
SAVE_OPLINE_EX();
12841289
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
12851290
zend_execute_ex(call);
12861291
}
@@ -1386,11 +1391,11 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETV
13861391
i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
13871392

13881393
if (EXPECTED(zend_execute_ex == execute_ex)) {
1389-
LOAD_OPLINE();
1394+
LOAD_OPLINE_EX();
13901395
ZEND_VM_ENTER_EX();
13911396
} else {
13921397
execute_data = EX(prev_execute_data);
1393-
LOAD_OPLINE();
1398+
SAVE_OPLINE_EX();
13941399
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
13951400
zend_execute_ex(call);
13961401
}
@@ -2430,11 +2435,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(Z
24302435
execute_data = call;
24312436
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
24322437
if (EXPECTED(zend_execute_ex == execute_ex)) {
2433-
LOAD_OPLINE();
2438+
LOAD_OPLINE_EX();
24342439
ZEND_VM_ENTER_EX();
24352440
} else {
24362441
execute_data = EX(prev_execute_data);
2437-
LOAD_OPLINE();
2442+
SAVE_OPLINE_EX();
24382443
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
24392444
zend_execute_ex(call);
24402445
}

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)