@@ -91,13 +91,15 @@ typedef struct _PyJitTracerInitialState {
9191 _Py_CODEUNIT * jump_backward_instr ;
9292} _PyJitTracerInitialState ;
9393
94+ #define MAX_RECORDED_VALUES 3
9495typedef struct _PyJitTracerPreviousState {
9596 int instr_oparg ;
9697 int instr_stacklevel ;
9798 _Py_CODEUNIT * instr ;
9899 PyCodeObject * instr_code ; // Strong
99100 struct _PyInterpreterFrame * instr_frame ;
100- PyObject * recorded_value ; // Strong, may be NULL
101+ PyObject * recorded_values [MAX_RECORDED_VALUES ]; // Strong, may be NULL
102+ int recorded_count ;
101103} _PyJitTracerPreviousState ;
102104
103105typedef struct _PyJitTracerTranslatorState {
@@ -400,6 +402,7 @@ extern JitOptRef _Py_uop_sym_new_null(JitOptContext *ctx);
400402extern bool _Py_uop_sym_has_type (JitOptRef sym );
401403extern bool _Py_uop_sym_matches_type (JitOptRef sym , PyTypeObject * typ );
402404extern bool _Py_uop_sym_matches_type_version (JitOptRef sym , unsigned int version );
405+ extern unsigned int _Py_uop_sym_get_type_version (JitOptRef sym );
403406extern void _Py_uop_sym_set_null (JitOptContext * ctx , JitOptRef sym );
404407extern void _Py_uop_sym_set_non_null (JitOptContext * ctx , JitOptRef sym );
405408extern void _Py_uop_sym_set_type (JitOptContext * ctx , JitOptRef sym , PyTypeObject * typ );
@@ -424,8 +427,6 @@ extern PyCodeObject *_Py_uop_sym_get_probable_func_code(JitOptRef sym);
424427extern PyObject * _Py_uop_sym_get_probable_value (JitOptRef sym );
425428extern PyTypeObject * _Py_uop_sym_get_probable_type (JitOptRef sym );
426429extern JitOptRef * _Py_uop_sym_set_stack_depth (JitOptContext * ctx , int stack_depth , JitOptRef * current_sp );
427- extern uint32_t _Py_uop_sym_get_func_version (JitOptRef ref );
428- bool _Py_uop_sym_set_func_version (JitOptContext * ctx , JitOptRef ref , uint32_t version );
429430
430431extern void _Py_uop_abstractcontext_init (JitOptContext * ctx , _PyBloomFilter * dependencies );
431432extern void _Py_uop_abstractcontext_fini (JitOptContext * ctx );
@@ -483,7 +484,12 @@ void _PyJit_TracerFree(_PyThreadStateImpl *_tstate);
483484#ifdef _Py_TIER2
484485typedef void (* _Py_RecordFuncPtr )(_PyInterpreterFrame * frame , _PyStackRef * stackpointer , int oparg , PyObject * * recorded_value );
485486PyAPI_DATA (const _Py_RecordFuncPtr ) _PyOpcode_RecordFunctions [];
486- PyAPI_DATA (const uint8_t ) _PyOpcode_RecordFunctionIndices [256 ];
487+
488+ typedef struct {
489+ uint8_t count ;
490+ uint8_t indices [MAX_RECORDED_VALUES ];
491+ } _PyOpcodeRecordEntry ;
492+ PyAPI_DATA (const _PyOpcodeRecordEntry ) _PyOpcode_RecordEntries [256 ];
487493#endif
488494
489495#ifdef __cplusplus
0 commit comments