mirror of
https://github.com/python/cpython.git
synced 2025-11-07 21:29:26 +00:00
Added a new, experimental, tracing optimizer and interpreter (a.k.a. "tier 2"). This currently pessimizes, so don't use yet -- this is infrastructure so we can experiment with optimizing passes. To enable it, pass ``-Xuops`` or set ``PYTHONUOPS=1``. To get debug output, set ``PYTHONUOPSDEBUG=N`` where ``N`` is a debug level (0-4, where 0 is no debug output and 4 is excessively verbose). All of this code is likely to change dramatically before the 3.13 feature freeze. But this is a first step.
31 lines
681 B
C
31 lines
681 B
C
#ifndef Py_INTERNAL_UOPS_H
|
|
#define Py_INTERNAL_UOPS_H
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef Py_BUILD_CORE
|
|
# error "this header requires Py_BUILD_CORE define"
|
|
#endif
|
|
|
|
#define _Py_UOP_MAX_TRACE_LENGTH 16
|
|
|
|
typedef struct {
|
|
int opcode;
|
|
uint64_t operand; // Sometimes oparg, sometimes a cache entry
|
|
} _PyUOpInstruction;
|
|
|
|
typedef struct {
|
|
_PyExecutorObject base;
|
|
_PyUOpInstruction trace[_Py_UOP_MAX_TRACE_LENGTH]; // TODO: variable length
|
|
} _PyUOpExecutorObject;
|
|
|
|
_PyInterpreterFrame *_PyUopExecute(
|
|
_PyExecutorObject *executor,
|
|
_PyInterpreterFrame *frame,
|
|
PyObject **stack_pointer);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* !Py_INTERNAL_UOPS_H */
|