mirror of
https://github.com/python/cpython.git
synced 2025-11-27 21:55:35 +00:00
45 lines
998 B
C
45 lines
998 B
C
#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 */
|