mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
gh-137838: Move _PyUOpInstruction buffer to PyInterpreterState (gh-138918)
This commit is contained in:
parent
a9b6b09141
commit
d873fb42f3
8 changed files with 87 additions and 31 deletions
|
|
@ -14,6 +14,7 @@ extern "C" {
|
|||
#include "pycore_structs.h" // PyHamtObject
|
||||
#include "pycore_tstate.h" // _PyThreadStateImpl
|
||||
#include "pycore_typedefs.h" // _PyRuntimeState
|
||||
#include "pycore_uop.h" // struct _PyUOpInstruction
|
||||
|
||||
|
||||
#define CODE_MAX_WATCHERS 8
|
||||
|
|
@ -949,6 +950,8 @@ struct _is {
|
|||
struct callable_cache callable_cache;
|
||||
PyObject *common_consts[NUM_COMMON_CONSTANTS];
|
||||
bool jit;
|
||||
bool compiling;
|
||||
struct _PyUOpInstruction *jit_uop_buffer;
|
||||
struct _PyExecutorObject *executor_list_head;
|
||||
struct _PyExecutorObject *executor_deletion_list_head;
|
||||
struct _PyExecutorObject *cold_executor;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
#include "pycore_typedefs.h" // _PyInterpreterFrame
|
||||
#include "pycore_uop.h" // _PyUOpInstruction
|
||||
#include "pycore_uop_ids.h"
|
||||
#include "pycore_stackref.h" // _PyStackRef
|
||||
#include <stdbool.h>
|
||||
|
|
@ -41,32 +42,6 @@ typedef struct {
|
|||
PyCodeObject *code; // Weak (NULL if no corresponding ENTER_EXECUTOR).
|
||||
} _PyVMData;
|
||||
|
||||
/* Depending on the format,
|
||||
* the 32 bits between the oparg and operand are:
|
||||
* UOP_FORMAT_TARGET:
|
||||
* uint32_t target;
|
||||
* UOP_FORMAT_JUMP
|
||||
* uint16_t jump_target;
|
||||
* uint16_t error_target;
|
||||
*/
|
||||
typedef struct {
|
||||
uint16_t opcode:15;
|
||||
uint16_t format:1;
|
||||
uint16_t oparg;
|
||||
union {
|
||||
uint32_t target;
|
||||
struct {
|
||||
uint16_t jump_target;
|
||||
uint16_t error_target;
|
||||
};
|
||||
};
|
||||
uint64_t operand0; // A cache entry
|
||||
uint64_t operand1;
|
||||
#ifdef Py_STATS
|
||||
uint64_t execution_count;
|
||||
#endif
|
||||
} _PyUOpInstruction;
|
||||
|
||||
typedef struct _PyExitData {
|
||||
uint32_t target;
|
||||
uint16_t index;
|
||||
|
|
@ -118,9 +93,6 @@ PyAPI_FUNC(void) _Py_Executors_InvalidateCold(PyInterpreterState *interp);
|
|||
// trace_run_counter is greater than this value.
|
||||
#define JIT_CLEANUP_THRESHOLD 100000
|
||||
|
||||
// This is the length of the trace we project initially.
|
||||
#define UOP_MAX_TRACE_LENGTH 1200
|
||||
|
||||
#define TRACE_STACK_SIZE 5
|
||||
|
||||
int _Py_uop_analyze_and_optimize(_PyInterpreterFrame *frame,
|
||||
|
|
|
|||
45
Include/internal/pycore_uop.h
Normal file
45
Include/internal/pycore_uop.h
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
#ifndef Py_CORE_UOP_H
|
||||
#define Py_CORE_UOP_H
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef Py_BUILD_CORE
|
||||
# error "this header requires Py_BUILD_CORE define"
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
/* Depending on the format,
|
||||
* the 32 bits between the oparg and operand are:
|
||||
* UOP_FORMAT_TARGET:
|
||||
* uint32_t target;
|
||||
* UOP_FORMAT_JUMP
|
||||
* uint16_t jump_target;
|
||||
* uint16_t error_target;
|
||||
*/
|
||||
typedef struct _PyUOpInstruction{
|
||||
uint16_t opcode:15;
|
||||
uint16_t format:1;
|
||||
uint16_t oparg;
|
||||
union {
|
||||
uint32_t target;
|
||||
struct {
|
||||
uint16_t jump_target;
|
||||
uint16_t error_target;
|
||||
};
|
||||
};
|
||||
uint64_t operand0; // A cache entry
|
||||
uint64_t operand1;
|
||||
#ifdef Py_STATS
|
||||
uint64_t execution_count;
|
||||
#endif
|
||||
} _PyUOpInstruction;
|
||||
|
||||
// This is the length of the trace we project initially.
|
||||
#define UOP_MAX_TRACE_LENGTH 1200
|
||||
#define UOP_BUFFER_SIZE (UOP_MAX_TRACE_LENGTH * sizeof(_PyUOpInstruction))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* !Py_INTERNAL_UOP_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue