#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 /* 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 */