Skip to content

Commit 8c19e61

Browse files
committed
Make JIT parameters configurable through opcache.jit_... options
1 parent 33b5c02 commit 8c19e61

File tree

6 files changed

+92
-58
lines changed

6 files changed

+92
-58
lines changed

ext/opcache/jit/zend_jit.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ static void *dasm_link_and_encode(dasm_State **dasm_state,
369369
} else {
370370
if (JIT_G(debug) & (ZEND_JIT_DEBUG_ASM_STUBS|ZEND_JIT_DEBUG_ASM)) {
371371
zend_jit_disasm_add_symbol(name, (uintptr_t)entry, size);
372-
if (trace_num || (JIT_G(debug) & ZEND_JIT_DEBUG_ASM_STUBS) != 0) {
372+
if ((JIT_G(debug) & (trace_num ? ZEND_JIT_DEBUG_ASM : ZEND_JIT_DEBUG_ASM_STUBS)) != 0) {
373373
zend_jit_disasm(
374374
name,
375375
(op_array && op_array->filename) ? ZSTR_VAL(op_array->filename) : NULL,
@@ -3206,7 +3206,7 @@ void zend_jit_check_funcs(HashTable *function_table, zend_bool is_method) {
32063206
ZEND_COUNTER_INFO(op_array) = 0;
32073207
jit_extension = (zend_jit_op_array_extension*)ZEND_FUNC_INFO(op_array);
32083208
opline->handler = jit_extension->orig_handler;
3209-
if (((double)counter / (double)zend_jit_profile_counter) > ZEND_JIT_PROF_THRESHOLD) {
3209+
if (((double)counter / (double)zend_jit_profile_counter) > JIT_G(prof_threshold)) {
32103210
zend_real_jit_func(op_array, NULL, NULL);
32113211
}
32123212
}
@@ -3651,7 +3651,7 @@ ZEND_EXT_API int zend_jit_config(zend_string *jit, int stage)
36513651
}
36523652

36533653
failure:
3654-
zend_error(E_WARNING, "Invalid opcache.jit setting. Should be \"disable\", \"on\", \"off\" or 4-digit number");
3654+
zend_error(E_WARNING, "Invalid \"opcache.jit\" setting. Should be \"disable\", \"on\", \"off\" or 4-digit number");
36553655
JIT_G(enabled) = 0;
36563656
JIT_G(on) = 0;
36573657
return FAILURE;

ext/opcache/jit/zend_jit.h

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -37,28 +37,10 @@
3737
#define ZEND_JIT_REG_ALLOC_GLOBAL (1<<1) /* global linear scan register allocation */
3838
#define ZEND_JIT_CPU_AVX (1<<2) /* use AVX instructions, if available */
3939

40-
//#define ZEND_JIT_LEVEL(n) ((n) % 10)
41-
//#define ZEND_JIT_TRIGGER(n) (((n) / 10) % 10)
42-
//#define ZEND_JIT_REG_ALLOC(n) (((n) / 100) % 10)
43-
//#define ZEND_JIT_CPU_FLAGS(n) (((n) / 1000) % 10)
44-
4540
#define ZEND_JIT_DEFAULT_OPTIONS "1205"
4641
#define ZEND_JIT_DEFAULT_BUFFER_SIZE "0"
4742

48-
49-
/* Makes profile based JIT (opcache.jit=2*) to generate code only for most
50-
* often called functions (above the threshold).
51-
* TODO: this setting should be configurable
52-
*/
53-
#define ZEND_JIT_PROF_THRESHOLD 0.005
54-
55-
/* Hot/Trace Counters based JIT parameters.
56-
* TODO: this setting should be configurable
57-
*/
58-
#define ZEND_JIT_COUNTER_FUNC_COST 1
59-
#define ZEND_JIT_COUNTER_RET_COST 15
60-
#define ZEND_JIT_COUNTER_LOOP_COST 2
61-
#define ZEND_JIT_COUNTER_INIT 127
43+
#define ZEND_JIT_COUNTER_INIT 32531
6244

6345
#define ZEND_JIT_DEBUG_ASM (1<<0)
6446
#define ZEND_JIT_DEBUG_SSA (1<<1)
@@ -93,14 +75,7 @@
9375
#define ZEND_JIT_TRACE_MAX_FUNCS 30 /* max number of different functions in a single trace */
9476
#define ZEND_JIT_TRACE_MAX_CALL_DEPTH 10 /* max depth of inlined calls */
9577
#define ZEND_JIT_TRACE_MAX_RET_DEPTH 4 /* max depth of inlined returns */
96-
#define ZEND_JIT_TRACE_MAX_RECURSION 2 /* max number of recursive inlined calls */
97-
#define ZEND_JIT_TRACE_MAX_UNROLL_LOOPS 8 /* max number of unrolled loops */
98-
99-
#define ZEND_JIT_TRACE_HOT_SIDE_COUNT 8 /* number of exits before taking side trace */
100-
#define ZEND_JIT_TRACE_HOT_RETURN_COUNT 8 /* number of returns before taking continuation trace */
101-
102-
#define ZEND_JIT_TRACE_MAX_ROOT_FAILURES 16 /* number of attempts to record/compile a root trace */
103-
#define ZEND_JIT_TRACE_MAX_SIDE_FAILURES 4 /* number of attempts to record/compile a side trace */
78+
#define ZEND_JIT_TRACE_MAX_LOOPS_UNROLL 10 /* max number of unrolled loops */
10479

10580
#define ZEND_JIT_TRACE_BAD_ROOT_SLOTS 64 /* number of slots in bad root trace cache */
10681

@@ -119,6 +94,15 @@ typedef struct _zend_jit_globals {
11994
zend_long buffer_size;
12095
zend_long debug;
12196
zend_long bisect_limit;
97+
double prof_threshold;
98+
zend_long hot_loop;
99+
zend_long hot_func;
100+
zend_long hot_return;
101+
zend_long hot_side_exit; /* number of exits before taking side trace */
102+
zend_long blacklist_root_trace; /* number of attempts to JIT a root trace before blacklist it */
103+
zend_long blacklist_side_trace; /* number of attempts to JIT a side trace before blacklist it */
104+
zend_long max_recursion_unroll; /* max number of recursive inlined calls/returns unrolls */
105+
zend_long max_loops_unroll; /* max number of unrolled loops */
122106

123107
zend_sym_node *symbols; /* symbols for disassembler */
124108

ext/opcache/jit/zend_jit_trace.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4342,7 +4342,7 @@ static zend_bool zend_jit_trace_is_bad_root(const zend_op *opline, zend_jit_trac
43424342

43434343
for (i = 0; i < ZEND_JIT_TRACE_BAD_ROOT_SLOTS; i++) {
43444344
if (cache_opline[i] == opline) {
4345-
if (cache_count[i] >= ZEND_JIT_TRACE_MAX_ROOT_FAILURES - 1) {
4345+
if (cache_count[i] >= JIT_G(blacklist_root_trace) - 1) {
43464346
cache_opline[i] = NULL;
43474347
return 1;
43484348
} else {
@@ -4749,7 +4749,7 @@ static zend_bool zend_jit_trace_exit_is_bad(uint32_t trace_num, uint32_t exit_nu
47494749
uint8_t *counter = JIT_G(exit_counters) +
47504750
zend_jit_traces[trace_num].exit_counters + exit_num;
47514751

4752-
if (*counter + 1 >= ZEND_JIT_TRACE_HOT_SIDE_COUNT + ZEND_JIT_TRACE_MAX_SIDE_FAILURES) {
4752+
if (*counter + 1 >= JIT_G(hot_side_exit) + JIT_G(blacklist_side_trace)) {
47534753
return 1;
47544754
}
47554755
(*counter)++;
@@ -4761,7 +4761,7 @@ static zend_bool zend_jit_trace_exit_is_hot(uint32_t trace_num, uint32_t exit_nu
47614761
uint8_t *counter = JIT_G(exit_counters) +
47624762
zend_jit_traces[trace_num].exit_counters + exit_num;
47634763

4764-
if (*counter + 1 >= ZEND_JIT_TRACE_HOT_SIDE_COUNT) {
4764+
if (*counter + 1 >= JIT_G(hot_side_exit)) {
47654765
return 1;
47664766
}
47674767
(*counter)++;

ext/opcache/jit/zend_jit_vm_helpers.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_jit_func_counter_helper(ZEND_OPCODE_H
199199
const zend_op *opline = EX(opline);
200200
#endif
201201

202-
*(jit_extension->counter) -= ZEND_JIT_COUNTER_FUNC_COST;
202+
*(jit_extension->counter) -= ((ZEND_JIT_COUNTER_INIT + JIT_G(hot_func) - 1) / JIT_G(hot_func));
203203

204204
if (UNEXPECTED(*(jit_extension->counter) <= 0)) {
205205
*(jit_extension->counter) = ZEND_JIT_COUNTER_INIT;
@@ -219,7 +219,7 @@ ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_jit_loop_counter_helper(ZEND_OPCODE_H
219219
const zend_op *opline = EX(opline);
220220
#endif
221221

222-
*(jit_extension->counter) -= ZEND_JIT_COUNTER_LOOP_COST;
222+
*(jit_extension->counter) -= ((ZEND_JIT_COUNTER_INIT + JIT_G(hot_loop) - 1) / JIT_G(hot_loop));
223223

224224
if (UNEXPECTED(*(jit_extension->counter) <= 0)) {
225225
*(jit_extension->counter) = ZEND_JIT_COUNTER_INIT;
@@ -313,17 +313,20 @@ static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_jit_trace_c
313313

314314
ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_jit_func_trace_helper(ZEND_OPCODE_HANDLER_ARGS)
315315
{
316-
ZEND_OPCODE_TAIL_CALL_EX(zend_jit_trace_counter_helper, ZEND_JIT_COUNTER_FUNC_COST);
316+
ZEND_OPCODE_TAIL_CALL_EX(zend_jit_trace_counter_helper,
317+
((ZEND_JIT_COUNTER_INIT + JIT_G(hot_func) - 1) / JIT_G(hot_func)));
317318
}
318319

319320
ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_jit_ret_trace_helper(ZEND_OPCODE_HANDLER_ARGS)
320321
{
321-
ZEND_OPCODE_TAIL_CALL_EX(zend_jit_trace_counter_helper, ZEND_JIT_COUNTER_RET_COST);
322+
ZEND_OPCODE_TAIL_CALL_EX(zend_jit_trace_counter_helper,
323+
((ZEND_JIT_COUNTER_INIT + JIT_G(hot_return) - 1) / JIT_G(hot_return)));
322324
}
323325

324326
ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_jit_loop_trace_helper(ZEND_OPCODE_HANDLER_ARGS)
325327
{
326-
ZEND_OPCODE_TAIL_CALL_EX(zend_jit_trace_counter_helper, ZEND_JIT_COUNTER_LOOP_COST);
328+
ZEND_OPCODE_TAIL_CALL_EX(zend_jit_trace_counter_helper,
329+
((ZEND_JIT_COUNTER_INIT + JIT_G(hot_loop) - 1) / JIT_G(hot_loop)));
327330
}
328331

329332
#define TRACE_RECORD(_op, _info, _ptr) \
@@ -413,7 +416,7 @@ static int zend_jit_trace_bad_inner_loop(const zend_op *opline)
413416
if (cache_opline[i] == opline) {
414417
if ((cache_stop[i] == ZEND_JIT_TRACE_STOP_INNER_LOOP
415418
|| cache_stop[i] == ZEND_JIT_TRACE_STOP_LOOP_EXIT)
416-
&& cache_count[i] > ZEND_JIT_TRACE_MAX_ROOT_FAILURES / 2) {
419+
&& cache_count[i] > JIT_G(blacklist_root_trace) / 2) {
417420
return 1;
418421
}
419422
break;
@@ -432,7 +435,7 @@ static int zend_jit_trace_bad_compiled_loop(const zend_op *opline)
432435
for (i = 0; i < ZEND_JIT_TRACE_BAD_ROOT_SLOTS; i++) {
433436
if (cache_opline[i] == opline) {
434437
if (cache_stop[i] == ZEND_JIT_TRACE_STOP_COMPILED_LOOP
435-
&& cache_count[i] >= ZEND_JIT_TRACE_MAX_ROOT_FAILURES - 1) {
438+
&& cache_count[i] >= JIT_G(blacklist_root_trace) - 1) {
436439
return 1;
437440
}
438441
break;
@@ -451,7 +454,7 @@ static int zend_jit_trace_bad_loop_exit(const zend_op *opline)
451454
for (i = 0; i < ZEND_JIT_TRACE_BAD_ROOT_SLOTS; i++) {
452455
if (cache_opline[i] == opline) {
453456
if (cache_stop[i] == ZEND_JIT_TRACE_STOP_LOOP_EXIT
454-
&& cache_count[i] >= ZEND_JIT_TRACE_MAX_ROOT_FAILURES - 1) {
457+
&& cache_count[i] >= JIT_G(blacklist_root_trace) - 1) {
455458
return 1;
456459
}
457460
break;
@@ -524,9 +527,6 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
524527
int backtrack_ret_recursion_level = 0;
525528
int loop_unroll_limit = 0;
526529
const zend_op_array *unrolled_calls[ZEND_JIT_TRACE_MAX_CALL_DEPTH + ZEND_JIT_TRACE_MAX_RET_DEPTH];
527-
#if ZEND_JIT_DETECT_UNROLLED_LOOPS
528-
uint32_t unrolled_loops[ZEND_JIT_TRACE_MAX_UNROLL_LOOPS];
529-
#endif
530530
zend_bool is_toplevel;
531531
#ifdef HAVE_GCC_GLOBAL_REGS
532532
zend_execute_data *prev_execute_data = ex;
@@ -693,12 +693,12 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
693693
count = zend_jit_trace_recursive_call_count(&EX(func)->op_array, unrolled_calls, ret_level, level);
694694

695695
if (opline == orig_opline) {
696-
if (count + 1 >= ZEND_JIT_TRACE_MAX_RECURSION) {
696+
if (count + 1 >= JIT_G(max_recursion_unroll)) {
697697
stop = ZEND_JIT_TRACE_STOP_RECURSIVE_CALL;
698698
break;
699699
}
700700
backtrack_recursion = idx;
701-
} else if (count >= ZEND_JIT_TRACE_MAX_RECURSION) {
701+
} else if (count >= JIT_G(max_recursion_unroll)) {
702702
stop = ZEND_JIT_TRACE_STOP_DEEP_RECURSION;
703703
break;
704704
}
@@ -725,13 +725,13 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
725725
TRACE_RECORD(ZEND_JIT_TRACE_BACK, 0, &EX(func)->op_array);
726726
count = zend_jit_trace_recursive_ret_count(&EX(func)->op_array, unrolled_calls, ret_level);
727727
if (opline == orig_opline) {
728-
if (count + 1 >= ZEND_JIT_TRACE_MAX_RECURSION) {
728+
if (count + 1 >= JIT_G(max_recursion_unroll)) {
729729
stop = ZEND_JIT_TRACE_STOP_RECURSIVE_RET;
730730
break;
731731
}
732732
backtrack_ret_recursion = idx;
733733
backtrack_ret_recursion_level = ret_level;
734-
} else if (count >= ZEND_JIT_TRACE_MAX_RECURSION) {
734+
} else if (count >= JIT_G(max_recursion_unroll)) {
735735
stop = ZEND_JIT_TRACE_STOP_DEEP_RECURSION;
736736
break;
737737
}
@@ -828,7 +828,7 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
828828
break;
829829
}
830830
}
831-
if (loop_unroll_limit < ZEND_JIT_TRACE_MAX_UNROLL_LOOPS) {
831+
if (loop_unroll_limit < JIT_G(max_loops_unroll)) {
832832
loop_unroll_limit++;
833833
} else {
834834
stop = ZEND_JIT_TRACE_STOP_LOOP_UNROLL;

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2209,7 +2209,7 @@ static int zend_jit_hybrid_func_hot_counter_stub(dasm_State **Dst)
22092209
| mov r0, EX->func
22102210
| mov r1, aword [r0 + offsetof(zend_op_array, reserved[zend_func_info_rid])]
22112211
| mov r2, aword [r1 + offsetof(zend_jit_op_array_hot_extension, counter)]
2212-
| sub word [r2], ZEND_JIT_COUNTER_FUNC_COST
2212+
| sub word [r2], ((ZEND_JIT_COUNTER_INIT + JIT_G(hot_func) - 1) / JIT_G(hot_func))
22132213
| jle >1
22142214
| GET_IP r2
22152215
| sub r2, aword [r0 + offsetof(zend_op_array, opcodes)]
@@ -2246,7 +2246,7 @@ static int zend_jit_hybrid_loop_hot_counter_stub(dasm_State **Dst)
22462246
| mov r0, EX->func
22472247
| mov r1, aword [r0 + offsetof(zend_op_array, reserved[zend_func_info_rid])]
22482248
| mov r2, aword [r1 + offsetof(zend_jit_op_array_hot_extension, counter)]
2249-
| sub word [r2], ZEND_JIT_COUNTER_LOOP_COST
2249+
| sub word [r2], ((ZEND_JIT_COUNTER_INIT + JIT_G(hot_loop) - 1) / JIT_G(hot_loop))
22502250
| jle >1
22512251
| GET_IP r2
22522252
| sub r2, aword [r0 + offsetof(zend_op_array, opcodes)]
@@ -2305,7 +2305,8 @@ static int zend_jit_hybrid_func_trace_counter_stub(dasm_State **Dst)
23052305

23062306
|->hybrid_func_trace_counter:
23072307

2308-
return zend_jit_hybrid_trace_counter_stub(Dst, ZEND_JIT_COUNTER_FUNC_COST);
2308+
return zend_jit_hybrid_trace_counter_stub(Dst,
2309+
((ZEND_JIT_COUNTER_INIT + JIT_G(hot_func) - 1) / JIT_G(hot_func)));
23092310
}
23102311

23112312
static int zend_jit_hybrid_ret_trace_counter_stub(dasm_State **Dst)
@@ -2316,7 +2317,8 @@ static int zend_jit_hybrid_ret_trace_counter_stub(dasm_State **Dst)
23162317

23172318
|->hybrid_ret_trace_counter:
23182319

2319-
return zend_jit_hybrid_trace_counter_stub(Dst, ZEND_JIT_COUNTER_RET_COST);
2320+
return zend_jit_hybrid_trace_counter_stub(Dst,
2321+
((ZEND_JIT_COUNTER_INIT + JIT_G(hot_return) - 1) / JIT_G(hot_return)));
23202322
}
23212323

23222324
static int zend_jit_hybrid_loop_trace_counter_stub(dasm_State **Dst)
@@ -2327,7 +2329,8 @@ static int zend_jit_hybrid_loop_trace_counter_stub(dasm_State **Dst)
23272329

23282330
|->hybrid_loop_trace_counter:
23292331

2330-
return zend_jit_hybrid_trace_counter_stub(Dst, ZEND_JIT_COUNTER_LOOP_COST);
2332+
return zend_jit_hybrid_trace_counter_stub(Dst,
2333+
((ZEND_JIT_COUNTER_INIT + JIT_G(hot_loop) - 1) / JIT_G(hot_loop)));
23312334
}
23322335

23332336
static int zend_jit_trace_halt_stub(dasm_State **Dst)

ext/opcache/zend_accelerator_module.c

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,44 @@ static ZEND_INI_MH(OnUpdateJitDebug)
214214
}
215215
return FAILURE;
216216
}
217+
218+
static ZEND_INI_MH(OnUpdateCounter)
219+
{
220+
zend_long val = zend_atol(ZSTR_VAL(new_value), ZSTR_LEN(new_value));
221+
if (val > 0 && val < 256) {
222+
zend_long *p = (zend_long *) ZEND_INI_GET_ADDR();
223+
*p = val;
224+
return SUCCESS;
225+
}
226+
zend_error(E_WARNING, "Invalid \"%s\" setting. Should be between 1 and 256", ZSTR_VAL(entry->name));
227+
return FAILURE;
228+
}
229+
230+
static ZEND_INI_MH(OnUpdateUnrollR)
231+
{
232+
zend_long val = zend_atol(ZSTR_VAL(new_value), ZSTR_LEN(new_value));
233+
if (val > 0 && val < ZEND_JIT_TRACE_MAX_CALL_DEPTH && val < ZEND_JIT_TRACE_MAX_RET_DEPTH) {
234+
zend_long *p = (zend_long *) ZEND_INI_GET_ADDR();
235+
*p = val;
236+
return SUCCESS;
237+
}
238+
zend_error(E_WARNING, "Invalid \"%s\" setting. Should be between 1 and %d", ZSTR_VAL(entry->name),
239+
MIN(ZEND_JIT_TRACE_MAX_CALL_DEPTH, ZEND_JIT_TRACE_MAX_CALL_DEPTH));
240+
return FAILURE;
241+
}
242+
243+
static ZEND_INI_MH(OnUpdateUnrollL)
244+
{
245+
zend_long val = zend_atol(ZSTR_VAL(new_value), ZSTR_LEN(new_value));
246+
if (val > 0 && val < ZEND_JIT_TRACE_MAX_LOOPS_UNROLL) {
247+
zend_long *p = (zend_long *) ZEND_INI_GET_ADDR();
248+
*p = val;
249+
return SUCCESS;
250+
}
251+
zend_error(E_WARNING, "Invalid \"%s\" setting. Should be between 1 and %d", ZSTR_VAL(entry->name),
252+
ZEND_JIT_TRACE_MAX_LOOPS_UNROLL);
253+
return FAILURE;
254+
}
217255
#endif
218256

219257
ZEND_INI_BEGIN()
@@ -273,10 +311,19 @@ ZEND_INI_BEGIN()
273311
STD_PHP_INI_ENTRY("opcache.cache_id" , "" , PHP_INI_SYSTEM, OnUpdateString, accel_directives.cache_id, zend_accel_globals, accel_globals)
274312
#endif
275313
#ifdef HAVE_JIT
276-
STD_PHP_INI_ENTRY("opcache.jit" , ZEND_JIT_DEFAULT_OPTIONS, PHP_INI_ALL, OnUpdateJit, options, zend_jit_globals, jit_globals)
277-
STD_PHP_INI_ENTRY("opcache.jit_buffer_size" , ZEND_JIT_DEFAULT_BUFFER_SIZE, PHP_INI_SYSTEM, OnUpdateLong, buffer_size, zend_jit_globals, jit_globals)
278-
STD_PHP_INI_ENTRY("opcache.jit_debug" , "0", PHP_INI_ALL, OnUpdateJitDebug, debug, zend_jit_globals, jit_globals)
279-
STD_PHP_INI_ENTRY("opcache.jit_bisect_limit" , "0", PHP_INI_ALL, OnUpdateLong, bisect_limit, zend_jit_globals, jit_globals)
314+
STD_PHP_INI_ENTRY("opcache.jit" , ZEND_JIT_DEFAULT_OPTIONS, PHP_INI_ALL, OnUpdateJit, options, zend_jit_globals, jit_globals)
315+
STD_PHP_INI_ENTRY("opcache.jit_buffer_size" , ZEND_JIT_DEFAULT_BUFFER_SIZE, PHP_INI_SYSTEM, OnUpdateLong, buffer_size, zend_jit_globals, jit_globals)
316+
STD_PHP_INI_ENTRY("opcache.jit_debug" , "0", PHP_INI_ALL, OnUpdateJitDebug, debug, zend_jit_globals, jit_globals)
317+
STD_PHP_INI_ENTRY("opcache.jit_bisect_limit" , "0", PHP_INI_ALL, OnUpdateLong, bisect_limit, zend_jit_globals, jit_globals)
318+
STD_PHP_INI_ENTRY("opcache.jit_prof_threshold" , "0.005", PHP_INI_ALL, OnUpdateReal, prof_threshold, zend_jit_globals, jit_globals)
319+
STD_PHP_INI_ENTRY("opcache.jit_hot_loop" , "64", PHP_INI_SYSTEM, OnUpdateCounter, hot_loop, zend_jit_globals, jit_globals)
320+
STD_PHP_INI_ENTRY("opcache.jit_hot_func" , "127", PHP_INI_SYSTEM, OnUpdateCounter, hot_func, zend_jit_globals, jit_globals)
321+
STD_PHP_INI_ENTRY("opcache.jit_hot_return" , "8", PHP_INI_SYSTEM, OnUpdateCounter, hot_return, zend_jit_globals, jit_globals)
322+
STD_PHP_INI_ENTRY("opcache.jit_hot_side_exit" , "8", PHP_INI_ALL, OnUpdateCounter, hot_side_exit, zend_jit_globals, jit_globals)
323+
STD_PHP_INI_ENTRY("opcache.jit_blacklist_root_trace" , "16", PHP_INI_ALL, OnUpdateCounter, blacklist_root_trace, zend_jit_globals, jit_globals)
324+
STD_PHP_INI_ENTRY("opcache.jit_blacklist_side_trace" , "8", PHP_INI_ALL, OnUpdateCounter, blacklist_side_trace, zend_jit_globals, jit_globals)
325+
STD_PHP_INI_ENTRY("opcache.jit_max_recursion_unroll" , "2", PHP_INI_ALL, OnUpdateUnrollR, max_recursion_unroll, zend_jit_globals, jit_globals)
326+
STD_PHP_INI_ENTRY("opcache.jit_max_loops_unroll" , "8", PHP_INI_ALL, OnUpdateUnrollL, max_loops_unroll, zend_jit_globals, jit_globals)
280327
#endif
281328
ZEND_INI_END()
282329

0 commit comments

Comments
 (0)