From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> Date: Mon, 27 Oct 2025 09:56:48 +0000 (+0000) Subject: Change RECORD_PREVIOUS_INST to a label to save an opcode X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5d918e0c52aea8cb6ad4330815491c734fcd090;p=thirdparty%2FPython%2Fcpython.git Change RECORD_PREVIOUS_INST to a label to save an opcode --- diff --git a/Include/internal/pycore_magic_number.h b/Include/internal/pycore_magic_number.h index 09c6b1f5b392..7ec7bd1c6955 100644 --- a/Include/internal/pycore_magic_number.h +++ b/Include/internal/pycore_magic_number.h @@ -286,7 +286,6 @@ Known values: Python 3.15a1 3653 (Fix handling of opcodes that may leave operands on the stack when optimizing LOAD_FAST) Python 3.15a1 3654 (Fix missing exception handlers in logical expression) Python 3.15a1 3655 (Fix miscompilation of some module-level annotations) - Python 3.15a2 3656 (Add RECORD_PREVIOUS_INST for a tracing JIT) Python 3.16 will start with 3700 @@ -300,7 +299,7 @@ PC/launcher.c must also be updated. */ -#define PYC_MAGIC_NUMBER 3656 +#define PYC_MAGIC_NUMBER 3655 /* This is equivalent to converting PYC_MAGIC_NUMBER to 2 bytes (little-endian) and then appending b'\r\n'. */ #define PYC_MAGIC_NUMBER_TOKEN \ diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 0156e083b775..2bb915ad62b1 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -412,8 +412,6 @@ int _PyOpcode_num_popped(int opcode, int oparg) { return 0; case RAISE_VARARGS: return oparg; - case RECORD_PREVIOUS_INST: - return 0; case RERAISE: return 1 + oparg; case RESERVED: @@ -897,8 +895,6 @@ int _PyOpcode_num_pushed(int opcode, int oparg) { return 1; case RAISE_VARARGS: return 0; - case RECORD_PREVIOUS_INST: - return 0; case RERAISE: return oparg; case RESERVED: @@ -1253,7 +1249,6 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [PUSH_EXC_INFO] = { true, INSTR_FMT_IX, 0 }, [PUSH_NULL] = { true, INSTR_FMT_IX, HAS_PURE_FLAG }, [RAISE_VARARGS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG }, - [RECORD_PREVIOUS_INST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_NO_SAVE_IP_FLAG }, [RERAISE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, [RESERVED] = { true, INSTR_FMT_IX, 0 }, [RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, @@ -1701,7 +1696,6 @@ const char *_PyOpcode_OpName[267] = { [PUSH_EXC_INFO] = "PUSH_EXC_INFO", [PUSH_NULL] = "PUSH_NULL", [RAISE_VARARGS] = "RAISE_VARARGS", - [RECORD_PREVIOUS_INST] = "RECORD_PREVIOUS_INST", [RERAISE] = "RERAISE", [RESERVED] = "RESERVED", [RESUME] = "RESUME", @@ -1812,6 +1806,7 @@ const uint8_t _PyOpcode_NeedsGuardIp[256] = { extern const uint8_t _PyOpcode_Deopt[256]; #ifdef NEED_OPCODE_METADATA const uint8_t _PyOpcode_Deopt[256] = { + [121] = 121, [122] = 122, [123] = 123, [124] = 124, @@ -2023,7 +2018,6 @@ const uint8_t _PyOpcode_Deopt[256] = { [PUSH_EXC_INFO] = PUSH_EXC_INFO, [PUSH_NULL] = PUSH_NULL, [RAISE_VARARGS] = RAISE_VARARGS, - [RECORD_PREVIOUS_INST] = RECORD_PREVIOUS_INST, [RERAISE] = RERAISE, [RESERVED] = RESERVED, [RESUME] = RESUME, @@ -2073,6 +2067,7 @@ const uint8_t _PyOpcode_Deopt[256] = { #endif // NEED_OPCODE_METADATA #define EXTRA_CASES \ + case 121: \ case 122: \ case 123: \ case 124: \ diff --git a/Include/opcode_ids.h b/Include/opcode_ids.h index 1c7468456dbd..1d5c74adefcd 100644 --- a/Include/opcode_ids.h +++ b/Include/opcode_ids.h @@ -115,23 +115,22 @@ extern "C" { #define POP_JUMP_IF_NOT_NONE 102 #define POP_JUMP_IF_TRUE 103 #define RAISE_VARARGS 104 -#define RECORD_PREVIOUS_INST 105 -#define RERAISE 106 -#define SEND 107 -#define SET_ADD 108 -#define SET_FUNCTION_ATTRIBUTE 109 -#define SET_UPDATE 110 -#define STORE_ATTR 111 -#define STORE_DEREF 112 -#define STORE_FAST 113 -#define STORE_FAST_LOAD_FAST 114 -#define STORE_FAST_STORE_FAST 115 -#define STORE_GLOBAL 116 -#define STORE_NAME 117 -#define SWAP 118 -#define UNPACK_EX 119 -#define UNPACK_SEQUENCE 120 -#define YIELD_VALUE 121 +#define RERAISE 105 +#define SEND 106 +#define SET_ADD 107 +#define SET_FUNCTION_ATTRIBUTE 108 +#define SET_UPDATE 109 +#define STORE_ATTR 110 +#define STORE_DEREF 111 +#define STORE_FAST 112 +#define STORE_FAST_LOAD_FAST 113 +#define STORE_FAST_STORE_FAST 114 +#define STORE_GLOBAL 115 +#define STORE_NAME 116 +#define SWAP 117 +#define UNPACK_EX 118 +#define UNPACK_SEQUENCE 119 +#define YIELD_VALUE 120 #define RESUME 128 #define BINARY_OP_ADD_FLOAT 129 #define BINARY_OP_ADD_INT 130 diff --git a/Lib/_opcode_metadata.py b/Lib/_opcode_metadata.py index b6bce074f8e5..f168d169a329 100644 --- a/Lib/_opcode_metadata.py +++ b/Lib/_opcode_metadata.py @@ -312,23 +312,22 @@ opmap = { 'POP_JUMP_IF_NOT_NONE': 102, 'POP_JUMP_IF_TRUE': 103, 'RAISE_VARARGS': 104, - 'RECORD_PREVIOUS_INST': 105, - 'RERAISE': 106, - 'SEND': 107, - 'SET_ADD': 108, - 'SET_FUNCTION_ATTRIBUTE': 109, - 'SET_UPDATE': 110, - 'STORE_ATTR': 111, - 'STORE_DEREF': 112, - 'STORE_FAST': 113, - 'STORE_FAST_LOAD_FAST': 114, - 'STORE_FAST_STORE_FAST': 115, - 'STORE_GLOBAL': 116, - 'STORE_NAME': 117, - 'SWAP': 118, - 'UNPACK_EX': 119, - 'UNPACK_SEQUENCE': 120, - 'YIELD_VALUE': 121, + 'RERAISE': 105, + 'SEND': 106, + 'SET_ADD': 107, + 'SET_FUNCTION_ATTRIBUTE': 108, + 'SET_UPDATE': 109, + 'STORE_ATTR': 110, + 'STORE_DEREF': 111, + 'STORE_FAST': 112, + 'STORE_FAST_LOAD_FAST': 113, + 'STORE_FAST_STORE_FAST': 114, + 'STORE_GLOBAL': 115, + 'STORE_NAME': 116, + 'SWAP': 117, + 'UNPACK_EX': 118, + 'UNPACK_SEQUENCE': 119, + 'YIELD_VALUE': 120, 'INSTRUMENTED_END_FOR': 234, 'INSTRUMENTED_POP_ITER': 235, 'INSTRUMENTED_END_SEND': 236, diff --git a/Programs/test_frozenmain.h b/Programs/test_frozenmain.h index 1794032e2b13..dbeedb7ffe0c 100644 --- a/Programs/test_frozenmain.h +++ b/Programs/test_frozenmain.h @@ -2,14 +2,14 @@ unsigned char M_test_frozenmain[] = { 227,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0, 0,0,0,0,0,243,184,0,0,0,128,0,94,0,82,1, - 73,0,117,0,94,0,82,1,73,1,117,1,93,2,33,0, + 73,0,116,0,94,0,82,1,73,1,116,1,93,2,33,0, 82,2,52,1,0,0,0,0,0,0,31,0,93,2,33,0, 82,3,93,0,80,6,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,52,2,0,0,0,0,0,0, 31,0,93,1,80,8,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,33,0,52,0,0,0,0,0, 0,0,82,4,44,26,0,0,0,0,0,0,0,0,0,0, - 117,5,82,7,16,0,70,24,0,0,117,6,93,2,33,0, + 116,5,82,7,16,0,70,24,0,0,116,6,93,2,33,0, 82,5,93,6,12,0,82,6,93,5,93,6,44,26,0,0, 0,0,0,0,0,0,0,0,12,0,50,4,52,1,0,0, 0,0,0,0,31,0,75,26,0,0,9,0,30,0,82,1, diff --git a/Python/bytecodes.c b/Python/bytecodes.c index cd098ebe0eb2..0328cd3ef969 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -5193,40 +5193,6 @@ dummy_func( Py_FatalError("Executing RESERVED instruction."); } - tier1 no_save_ip inst(RECORD_PREVIOUS_INST, (--)) { -#if _Py_TIER2 - assert(IS_JIT_TRACING()); - int opcode = next_instr->op.code; - int full = !_PyJit_translate_single_bytecode_to_trace(tstate, frame, next_instr); - if (full) { - LEAVE_TRACING(); - int err = bail_tracing_and_jit(tstate, frame); - ERROR_IF(err < 0); - DISPATCH_GOTO_NON_TRACING(); - } - // Super instructions. Instruction deopted. There's a mismatch in what the stack expects - // in the optimizer. So we have to reflect in the trace correctly. - if ((tstate->interp->jit_state.prev_instr->op.code == CALL_LIST_APPEND && - opcode == POP_TOP) || - (tstate->interp->jit_state.prev_instr->op.code == BINARY_OP_INPLACE_ADD_UNICODE && - opcode == STORE_FAST)) { - tstate->interp->jit_state.prev_instr_is_super = true; - } - else { - tstate->interp->jit_state.prev_instr = next_instr; - } - tstate->interp->jit_state.specialize_counter = 0; - PyCodeObject *prev_code = (PyCodeObject *)Py_NewRef(_PyFrame_GetCode(frame)); - Py_SETREF(tstate->interp->jit_state.prev_instr_code, prev_code); - - tstate->interp->jit_state.prev_instr_frame = frame; - tstate->interp->jit_state.prev_instr_oparg = oparg; - tstate->interp->jit_state.prev_instr_stacklevel = STACK_LEVEL(); - DISPATCH_GOTO_NON_TRACING(); -#else - Py_FatalError("JIT instruction executed in non-jit build."); -#endif - } ///////// Tier-2 only opcodes ///////// op (_GUARD_IS_TRUE_POP, (flag -- )) { @@ -5646,6 +5612,40 @@ dummy_func( DISPATCH(); } + label(record_previous_inst) { +#if _Py_TIER2 + assert(IS_JIT_TRACING()); + int opcode = next_instr->op.code; + int full = !_PyJit_translate_single_bytecode_to_trace(tstate, frame, next_instr); + if (full) { + LEAVE_TRACING(); + int err = bail_tracing_and_jit(tstate, frame); + ERROR_IF(err < 0); + DISPATCH_GOTO_NON_TRACING(); + } + // Super instructions. Instruction deopted. There's a mismatch in what the stack expects + // in the optimizer. So we have to reflect in the trace correctly. + if ((tstate->interp->jit_state.prev_instr->op.code == CALL_LIST_APPEND && + opcode == POP_TOP) || + (tstate->interp->jit_state.prev_instr->op.code == BINARY_OP_INPLACE_ADD_UNICODE && + opcode == STORE_FAST)) { + tstate->interp->jit_state.prev_instr_is_super = true; + } + else { + tstate->interp->jit_state.prev_instr = next_instr; + } + tstate->interp->jit_state.specialize_counter = 0; + PyCodeObject *prev_code = (PyCodeObject *)Py_NewRef(_PyFrame_GetCode(frame)); + Py_SETREF(tstate->interp->jit_state.prev_instr_code, prev_code); + + tstate->interp->jit_state.prev_instr_frame = frame; + tstate->interp->jit_state.prev_instr_oparg = oparg; + tstate->interp->jit_state.prev_instr_stacklevel = STACK_LEVEL(); + DISPATCH_GOTO_NON_TRACING(); +#else + Py_FatalError("JIT label executed in non-jit build."); +#endif + } // END BYTECODES // diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 8a81a6cdcc49..d9fea0e4ae57 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -10218,48 +10218,6 @@ JUMP_TO_LABEL(error); } - - TARGET(RECORD_PREVIOUS_INST) { - INSTRUCTION_STATS(RECORD_PREVIOUS_INST); - #if _Py_TIER2 - assert(IS_JIT_TRACING()); - int opcode = next_instr->op.code; - _PyFrame_SetStackPointer(frame, stack_pointer); - int full = !_PyJit_translate_single_bytecode_to_trace(tstate, frame, next_instr); - stack_pointer = _PyFrame_GetStackPointer(frame); - if (full) { - LEAVE_TRACING(); - _PyFrame_SetStackPointer(frame, stack_pointer); - int err = bail_tracing_and_jit(tstate, frame); - stack_pointer = _PyFrame_GetStackPointer(frame); - if (err < 0) { - JUMP_TO_LABEL(error); - } - DISPATCH_GOTO_NON_TRACING(); - } - if ((tstate->interp->jit_state.prev_instr->op.code == CALL_LIST_APPEND && - opcode == POP_TOP) || - (tstate->interp->jit_state.prev_instr->op.code == BINARY_OP_INPLACE_ADD_UNICODE && - opcode == STORE_FAST)) { - tstate->interp->jit_state.prev_instr_is_super = true; - } - else { - tstate->interp->jit_state.prev_instr = next_instr; - } - tstate->interp->jit_state.specialize_counter = 0; - PyCodeObject *prev_code = (PyCodeObject *)Py_NewRef(_PyFrame_GetCode(frame)); - _PyFrame_SetStackPointer(frame, stack_pointer); - Py_SETREF(tstate->interp->jit_state.prev_instr_code, prev_code); - stack_pointer = _PyFrame_GetStackPointer(frame); - tstate->interp->jit_state.prev_instr_frame = frame; - tstate->interp->jit_state.prev_instr_oparg = oparg; - tstate->interp->jit_state.prev_instr_stacklevel = STACK_LEVEL(); - DISPATCH_GOTO_NON_TRACING(); - #else - Py_FatalError("JIT instruction executed in non-jit build."); - #endif - } - TARGET(RERAISE) { #if _Py_TAIL_CALL_INTERP int opcode = RERAISE; @@ -12355,5 +12313,46 @@ JUMP_TO_LABEL(error); DISPATCH(); } + LABEL(record_previous_inst) + { + #if _Py_TIER2 + assert(IS_JIT_TRACING()); + int opcode = next_instr->op.code; + _PyFrame_SetStackPointer(frame, stack_pointer); + int full = !_PyJit_translate_single_bytecode_to_trace(tstate, frame, next_instr); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (full) { + LEAVE_TRACING(); + _PyFrame_SetStackPointer(frame, stack_pointer); + int err = bail_tracing_and_jit(tstate, frame); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (err < 0) { + JUMP_TO_LABEL(error); + } + DISPATCH_GOTO_NON_TRACING(); + } + if ((tstate->interp->jit_state.prev_instr->op.code == CALL_LIST_APPEND && + opcode == POP_TOP) || + (tstate->interp->jit_state.prev_instr->op.code == BINARY_OP_INPLACE_ADD_UNICODE && + opcode == STORE_FAST)) { + tstate->interp->jit_state.prev_instr_is_super = true; + } + else { + tstate->interp->jit_state.prev_instr = next_instr; + } + tstate->interp->jit_state.specialize_counter = 0; + PyCodeObject *prev_code = (PyCodeObject *)Py_NewRef(_PyFrame_GetCode(frame)); + _PyFrame_SetStackPointer(frame, stack_pointer); + Py_SETREF(tstate->interp->jit_state.prev_instr_code, prev_code); + stack_pointer = _PyFrame_GetStackPointer(frame); + tstate->interp->jit_state.prev_instr_frame = frame; + tstate->interp->jit_state.prev_instr_oparg = oparg; + tstate->interp->jit_state.prev_instr_stacklevel = STACK_LEVEL(); + DISPATCH_GOTO_NON_TRACING(); + #else + Py_FatalError("JIT label executed in non-jit build."); + #endif + } + /* END LABELS */ #undef TIER_ONE diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 0d28b3d4e690..eb43bf63804a 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -105,7 +105,6 @@ static void *opcode_targets_table[256] = { &&TARGET_POP_JUMP_IF_NOT_NONE, &&TARGET_POP_JUMP_IF_TRUE, &&TARGET_RAISE_VARARGS, - &&TARGET_RECORD_PREVIOUS_INST, &&TARGET_RERAISE, &&TARGET_SEND, &&TARGET_SET_ADD, @@ -128,6 +127,7 @@ static void *opcode_targets_table[256] = { &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, + &&_unknown_opcode, &&TARGET_RESUME, &&TARGET_BINARY_OP_ADD_FLOAT, &&TARGET_BINARY_OP_ADD_INT, @@ -259,216 +259,216 @@ static void *opcode_targets_table[256] = { }; #if _Py_TIER2 static void *opcode_tracing_targets_table[256] = { - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, @@ -493,28 +493,28 @@ static void *opcode_tracing_targets_table[256] = { &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, - &&TARGET_RECORD_PREVIOUS_INST, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, + &&TARGET_record_previous_inst, }; #endif #else /* _Py_TAIL_CALL_INTERP */ @@ -528,6 +528,7 @@ Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_error(TAIL_CALL_PARAMS); Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_exception_unwind(TAIL_CALL_PARAMS); Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_exit_unwind(TAIL_CALL_PARAMS); Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_start_frame(TAIL_CALL_PARAMS); +Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_record_previous_inst(TAIL_CALL_PARAMS); Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_BINARY_OP(TAIL_CALL_PARAMS); Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_BINARY_OP_ADD_FLOAT(TAIL_CALL_PARAMS); @@ -710,7 +711,6 @@ Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_POP_TOP(TAIL_CALL_PARAMS); Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_PUSH_EXC_INFO(TAIL_CALL_PARAMS); Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_PUSH_NULL(TAIL_CALL_PARAMS); Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_RAISE_VARARGS(TAIL_CALL_PARAMS); -Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_RECORD_PREVIOUS_INST(TAIL_CALL_PARAMS); Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_RERAISE(TAIL_CALL_PARAMS); Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_RESERVED(TAIL_CALL_PARAMS); Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_RESUME(TAIL_CALL_PARAMS); @@ -948,7 +948,6 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [PUSH_EXC_INFO] = _TAIL_CALL_PUSH_EXC_INFO, [PUSH_NULL] = _TAIL_CALL_PUSH_NULL, [RAISE_VARARGS] = _TAIL_CALL_RAISE_VARARGS, - [RECORD_PREVIOUS_INST] = _TAIL_CALL_RECORD_PREVIOUS_INST, [RERAISE] = _TAIL_CALL_RERAISE, [RESERVED] = _TAIL_CALL_RESERVED, [RESUME] = _TAIL_CALL_RESUME, @@ -993,6 +992,7 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_UNPACK_SEQUENCE_TWO_TUPLE, [WITH_EXCEPT_START] = _TAIL_CALL_WITH_EXCEPT_START, [YIELD_VALUE] = _TAIL_CALL_YIELD_VALUE, + [121] = _TAIL_CALL_UNKNOWN_OPCODE, [122] = _TAIL_CALL_UNKNOWN_OPCODE, [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, @@ -1025,232 +1025,232 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [233] = _TAIL_CALL_UNKNOWN_OPCODE, }; static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { - [BINARY_OP] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_ADD_FLOAT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_ADD_INT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_ADD_UNICODE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_EXTEND] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_INPLACE_ADD_UNICODE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_MULTIPLY_FLOAT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_MULTIPLY_INT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_SUBSCR_DICT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_SUBSCR_GETITEM] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_SUBSCR_LIST_INT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_SUBSCR_LIST_SLICE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_SUBSCR_STR_INT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_SUBSCR_TUPLE_INT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_SUBTRACT_FLOAT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_OP_SUBTRACT_INT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BINARY_SLICE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BUILD_INTERPOLATION] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BUILD_LIST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BUILD_MAP] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BUILD_SET] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BUILD_SLICE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BUILD_STRING] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BUILD_TEMPLATE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [BUILD_TUPLE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CACHE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_ALLOC_AND_ENTER_INIT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_BOUND_METHOD_EXACT_ARGS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_BOUND_METHOD_GENERAL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_BUILTIN_CLASS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_BUILTIN_FAST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_BUILTIN_FAST_WITH_KEYWORDS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_BUILTIN_O] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_FUNCTION_EX] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_INTRINSIC_1] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_INTRINSIC_2] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_ISINSTANCE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_KW] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_KW_BOUND_METHOD] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_KW_NON_PY] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_KW_PY] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_LEN] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_LIST_APPEND] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_METHOD_DESCRIPTOR_FAST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_METHOD_DESCRIPTOR_NOARGS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_METHOD_DESCRIPTOR_O] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_NON_PY_GENERAL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_PY_EXACT_ARGS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_PY_GENERAL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_STR_1] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_TUPLE_1] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CALL_TYPE_1] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CHECK_EG_MATCH] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CHECK_EXC_MATCH] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CLEANUP_THROW] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [COMPARE_OP] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [COMPARE_OP_FLOAT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [COMPARE_OP_INT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [COMPARE_OP_STR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CONTAINS_OP] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CONTAINS_OP_DICT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CONTAINS_OP_SET] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [CONVERT_VALUE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [COPY] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [COPY_FREE_VARS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [DELETE_ATTR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [DELETE_DEREF] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [DELETE_FAST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [DELETE_GLOBAL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [DELETE_NAME] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [DELETE_SUBSCR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [DICT_MERGE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [DICT_UPDATE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [END_ASYNC_FOR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [END_FOR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [END_SEND] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [ENTER_EXECUTOR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [EXIT_INIT_CHECK] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [EXTENDED_ARG] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [FORMAT_SIMPLE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [FORMAT_WITH_SPEC] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [FOR_ITER] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [FOR_ITER_GEN] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [FOR_ITER_LIST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [FOR_ITER_RANGE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [FOR_ITER_TUPLE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [GET_AITER] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [GET_ANEXT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [GET_AWAITABLE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [GET_ITER] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [GET_LEN] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [GET_YIELD_FROM_ITER] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [IMPORT_FROM] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [IMPORT_NAME] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_CALL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_CALL_FUNCTION_EX] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_CALL_KW] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_END_ASYNC_FOR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_END_FOR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_END_SEND] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_FOR_ITER] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_INSTRUCTION] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_JUMP_BACKWARD] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_JUMP_FORWARD] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_LINE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_LOAD_SUPER_ATTR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_NOT_TAKEN] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_POP_ITER] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_POP_JUMP_IF_FALSE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_POP_JUMP_IF_NONE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_POP_JUMP_IF_TRUE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_RESUME] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_RETURN_VALUE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INSTRUMENTED_YIELD_VALUE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [INTERPRETER_EXIT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [IS_OP] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [JUMP_BACKWARD] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [JUMP_BACKWARD_JIT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [JUMP_BACKWARD_NO_INTERRUPT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [JUMP_BACKWARD_NO_JIT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [JUMP_FORWARD] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LIST_APPEND] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LIST_EXTEND] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_CLASS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_INSTANCE_VALUE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_METHOD_LAZY_DICT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_METHOD_NO_DICT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_METHOD_WITH_VALUES] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_MODULE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_PROPERTY] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_SLOT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_ATTR_WITH_HINT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_BUILD_CLASS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_COMMON_CONSTANT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_CONST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_DEREF] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_FAST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_FAST_AND_CLEAR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_FAST_BORROW] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_FAST_BORROW_LOAD_FAST_BORROW] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_FAST_CHECK] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_FAST_LOAD_FAST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_FROM_DICT_OR_DEREF] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_FROM_DICT_OR_GLOBALS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_GLOBAL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_GLOBAL_BUILTIN] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_GLOBAL_MODULE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_LOCALS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_NAME] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_SMALL_INT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_SPECIAL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_SUPER_ATTR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_SUPER_ATTR_ATTR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [LOAD_SUPER_ATTR_METHOD] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [MAKE_CELL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [MAKE_FUNCTION] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [MAP_ADD] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [MATCH_CLASS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [MATCH_KEYS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [MATCH_MAPPING] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [MATCH_SEQUENCE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [NOP] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [NOT_TAKEN] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [POP_EXCEPT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [POP_ITER] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [POP_JUMP_IF_FALSE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [POP_JUMP_IF_NONE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [POP_JUMP_IF_NOT_NONE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [POP_JUMP_IF_TRUE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [POP_TOP] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [PUSH_EXC_INFO] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [PUSH_NULL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [RAISE_VARARGS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [RECORD_PREVIOUS_INST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [RERAISE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [RESERVED] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [RESUME] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [RESUME_CHECK] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [RETURN_GENERATOR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [RETURN_VALUE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [SEND] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [SEND_GEN] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [SETUP_ANNOTATIONS] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [SET_ADD] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [SET_FUNCTION_ATTRIBUTE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [SET_UPDATE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_ATTR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_ATTR_INSTANCE_VALUE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_ATTR_SLOT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_ATTR_WITH_HINT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_DEREF] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_FAST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_FAST_LOAD_FAST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_FAST_STORE_FAST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_GLOBAL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_NAME] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_SLICE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_SUBSCR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_SUBSCR_DICT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [STORE_SUBSCR_LIST_INT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [SWAP] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [TO_BOOL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [TO_BOOL_ALWAYS_TRUE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [TO_BOOL_BOOL] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [TO_BOOL_INT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [TO_BOOL_LIST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [TO_BOOL_NONE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [TO_BOOL_STR] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [UNARY_INVERT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [UNARY_NEGATIVE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [UNARY_NOT] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [UNPACK_EX] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [UNPACK_SEQUENCE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [UNPACK_SEQUENCE_LIST] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [UNPACK_SEQUENCE_TUPLE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [WITH_EXCEPT_START] = _TAIL_CALL_RECORD_PREVIOUS_INST, - [YIELD_VALUE] = _TAIL_CALL_RECORD_PREVIOUS_INST, + [BINARY_OP] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_ADD_FLOAT] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_ADD_INT] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_ADD_UNICODE] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_EXTEND] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_INPLACE_ADD_UNICODE] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_MULTIPLY_FLOAT] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_MULTIPLY_INT] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_SUBSCR_DICT] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_SUBSCR_GETITEM] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_SUBSCR_LIST_INT] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_SUBSCR_LIST_SLICE] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_SUBSCR_STR_INT] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_SUBSCR_TUPLE_INT] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_SUBTRACT_FLOAT] = _TAIL_CALL_record_previous_inst, + [BINARY_OP_SUBTRACT_INT] = _TAIL_CALL_record_previous_inst, + [BINARY_SLICE] = _TAIL_CALL_record_previous_inst, + [BUILD_INTERPOLATION] = _TAIL_CALL_record_previous_inst, + [BUILD_LIST] = _TAIL_CALL_record_previous_inst, + [BUILD_MAP] = _TAIL_CALL_record_previous_inst, + [BUILD_SET] = _TAIL_CALL_record_previous_inst, + [BUILD_SLICE] = _TAIL_CALL_record_previous_inst, + [BUILD_STRING] = _TAIL_CALL_record_previous_inst, + [BUILD_TEMPLATE] = _TAIL_CALL_record_previous_inst, + [BUILD_TUPLE] = _TAIL_CALL_record_previous_inst, + [CACHE] = _TAIL_CALL_record_previous_inst, + [CALL] = _TAIL_CALL_record_previous_inst, + [CALL_ALLOC_AND_ENTER_INIT] = _TAIL_CALL_record_previous_inst, + [CALL_BOUND_METHOD_EXACT_ARGS] = _TAIL_CALL_record_previous_inst, + [CALL_BOUND_METHOD_GENERAL] = _TAIL_CALL_record_previous_inst, + [CALL_BUILTIN_CLASS] = _TAIL_CALL_record_previous_inst, + [CALL_BUILTIN_FAST] = _TAIL_CALL_record_previous_inst, + [CALL_BUILTIN_FAST_WITH_KEYWORDS] = _TAIL_CALL_record_previous_inst, + [CALL_BUILTIN_O] = _TAIL_CALL_record_previous_inst, + [CALL_FUNCTION_EX] = _TAIL_CALL_record_previous_inst, + [CALL_INTRINSIC_1] = _TAIL_CALL_record_previous_inst, + [CALL_INTRINSIC_2] = _TAIL_CALL_record_previous_inst, + [CALL_ISINSTANCE] = _TAIL_CALL_record_previous_inst, + [CALL_KW] = _TAIL_CALL_record_previous_inst, + [CALL_KW_BOUND_METHOD] = _TAIL_CALL_record_previous_inst, + [CALL_KW_NON_PY] = _TAIL_CALL_record_previous_inst, + [CALL_KW_PY] = _TAIL_CALL_record_previous_inst, + [CALL_LEN] = _TAIL_CALL_record_previous_inst, + [CALL_LIST_APPEND] = _TAIL_CALL_record_previous_inst, + [CALL_METHOD_DESCRIPTOR_FAST] = _TAIL_CALL_record_previous_inst, + [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = _TAIL_CALL_record_previous_inst, + [CALL_METHOD_DESCRIPTOR_NOARGS] = _TAIL_CALL_record_previous_inst, + [CALL_METHOD_DESCRIPTOR_O] = _TAIL_CALL_record_previous_inst, + [CALL_NON_PY_GENERAL] = _TAIL_CALL_record_previous_inst, + [CALL_PY_EXACT_ARGS] = _TAIL_CALL_record_previous_inst, + [CALL_PY_GENERAL] = _TAIL_CALL_record_previous_inst, + [CALL_STR_1] = _TAIL_CALL_record_previous_inst, + [CALL_TUPLE_1] = _TAIL_CALL_record_previous_inst, + [CALL_TYPE_1] = _TAIL_CALL_record_previous_inst, + [CHECK_EG_MATCH] = _TAIL_CALL_record_previous_inst, + [CHECK_EXC_MATCH] = _TAIL_CALL_record_previous_inst, + [CLEANUP_THROW] = _TAIL_CALL_record_previous_inst, + [COMPARE_OP] = _TAIL_CALL_record_previous_inst, + [COMPARE_OP_FLOAT] = _TAIL_CALL_record_previous_inst, + [COMPARE_OP_INT] = _TAIL_CALL_record_previous_inst, + [COMPARE_OP_STR] = _TAIL_CALL_record_previous_inst, + [CONTAINS_OP] = _TAIL_CALL_record_previous_inst, + [CONTAINS_OP_DICT] = _TAIL_CALL_record_previous_inst, + [CONTAINS_OP_SET] = _TAIL_CALL_record_previous_inst, + [CONVERT_VALUE] = _TAIL_CALL_record_previous_inst, + [COPY] = _TAIL_CALL_record_previous_inst, + [COPY_FREE_VARS] = _TAIL_CALL_record_previous_inst, + [DELETE_ATTR] = _TAIL_CALL_record_previous_inst, + [DELETE_DEREF] = _TAIL_CALL_record_previous_inst, + [DELETE_FAST] = _TAIL_CALL_record_previous_inst, + [DELETE_GLOBAL] = _TAIL_CALL_record_previous_inst, + [DELETE_NAME] = _TAIL_CALL_record_previous_inst, + [DELETE_SUBSCR] = _TAIL_CALL_record_previous_inst, + [DICT_MERGE] = _TAIL_CALL_record_previous_inst, + [DICT_UPDATE] = _TAIL_CALL_record_previous_inst, + [END_ASYNC_FOR] = _TAIL_CALL_record_previous_inst, + [END_FOR] = _TAIL_CALL_record_previous_inst, + [END_SEND] = _TAIL_CALL_record_previous_inst, + [ENTER_EXECUTOR] = _TAIL_CALL_record_previous_inst, + [EXIT_INIT_CHECK] = _TAIL_CALL_record_previous_inst, + [EXTENDED_ARG] = _TAIL_CALL_record_previous_inst, + [FORMAT_SIMPLE] = _TAIL_CALL_record_previous_inst, + [FORMAT_WITH_SPEC] = _TAIL_CALL_record_previous_inst, + [FOR_ITER] = _TAIL_CALL_record_previous_inst, + [FOR_ITER_GEN] = _TAIL_CALL_record_previous_inst, + [FOR_ITER_LIST] = _TAIL_CALL_record_previous_inst, + [FOR_ITER_RANGE] = _TAIL_CALL_record_previous_inst, + [FOR_ITER_TUPLE] = _TAIL_CALL_record_previous_inst, + [GET_AITER] = _TAIL_CALL_record_previous_inst, + [GET_ANEXT] = _TAIL_CALL_record_previous_inst, + [GET_AWAITABLE] = _TAIL_CALL_record_previous_inst, + [GET_ITER] = _TAIL_CALL_record_previous_inst, + [GET_LEN] = _TAIL_CALL_record_previous_inst, + [GET_YIELD_FROM_ITER] = _TAIL_CALL_record_previous_inst, + [IMPORT_FROM] = _TAIL_CALL_record_previous_inst, + [IMPORT_NAME] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_CALL] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_CALL_FUNCTION_EX] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_CALL_KW] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_END_ASYNC_FOR] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_END_FOR] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_END_SEND] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_FOR_ITER] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_INSTRUCTION] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_JUMP_BACKWARD] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_JUMP_FORWARD] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_LINE] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_LOAD_SUPER_ATTR] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_NOT_TAKEN] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_POP_ITER] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_POP_JUMP_IF_FALSE] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_POP_JUMP_IF_NONE] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_POP_JUMP_IF_TRUE] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_RESUME] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_RETURN_VALUE] = _TAIL_CALL_record_previous_inst, + [INSTRUMENTED_YIELD_VALUE] = _TAIL_CALL_record_previous_inst, + [INTERPRETER_EXIT] = _TAIL_CALL_record_previous_inst, + [IS_OP] = _TAIL_CALL_record_previous_inst, + [JUMP_BACKWARD] = _TAIL_CALL_record_previous_inst, + [JUMP_BACKWARD_JIT] = _TAIL_CALL_record_previous_inst, + [JUMP_BACKWARD_NO_INTERRUPT] = _TAIL_CALL_record_previous_inst, + [JUMP_BACKWARD_NO_JIT] = _TAIL_CALL_record_previous_inst, + [JUMP_FORWARD] = _TAIL_CALL_record_previous_inst, + [LIST_APPEND] = _TAIL_CALL_record_previous_inst, + [LIST_EXTEND] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_CLASS] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_INSTANCE_VALUE] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_METHOD_LAZY_DICT] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_METHOD_NO_DICT] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_METHOD_WITH_VALUES] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_MODULE] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_PROPERTY] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_SLOT] = _TAIL_CALL_record_previous_inst, + [LOAD_ATTR_WITH_HINT] = _TAIL_CALL_record_previous_inst, + [LOAD_BUILD_CLASS] = _TAIL_CALL_record_previous_inst, + [LOAD_COMMON_CONSTANT] = _TAIL_CALL_record_previous_inst, + [LOAD_CONST] = _TAIL_CALL_record_previous_inst, + [LOAD_DEREF] = _TAIL_CALL_record_previous_inst, + [LOAD_FAST] = _TAIL_CALL_record_previous_inst, + [LOAD_FAST_AND_CLEAR] = _TAIL_CALL_record_previous_inst, + [LOAD_FAST_BORROW] = _TAIL_CALL_record_previous_inst, + [LOAD_FAST_BORROW_LOAD_FAST_BORROW] = _TAIL_CALL_record_previous_inst, + [LOAD_FAST_CHECK] = _TAIL_CALL_record_previous_inst, + [LOAD_FAST_LOAD_FAST] = _TAIL_CALL_record_previous_inst, + [LOAD_FROM_DICT_OR_DEREF] = _TAIL_CALL_record_previous_inst, + [LOAD_FROM_DICT_OR_GLOBALS] = _TAIL_CALL_record_previous_inst, + [LOAD_GLOBAL] = _TAIL_CALL_record_previous_inst, + [LOAD_GLOBAL_BUILTIN] = _TAIL_CALL_record_previous_inst, + [LOAD_GLOBAL_MODULE] = _TAIL_CALL_record_previous_inst, + [LOAD_LOCALS] = _TAIL_CALL_record_previous_inst, + [LOAD_NAME] = _TAIL_CALL_record_previous_inst, + [LOAD_SMALL_INT] = _TAIL_CALL_record_previous_inst, + [LOAD_SPECIAL] = _TAIL_CALL_record_previous_inst, + [LOAD_SUPER_ATTR] = _TAIL_CALL_record_previous_inst, + [LOAD_SUPER_ATTR_ATTR] = _TAIL_CALL_record_previous_inst, + [LOAD_SUPER_ATTR_METHOD] = _TAIL_CALL_record_previous_inst, + [MAKE_CELL] = _TAIL_CALL_record_previous_inst, + [MAKE_FUNCTION] = _TAIL_CALL_record_previous_inst, + [MAP_ADD] = _TAIL_CALL_record_previous_inst, + [MATCH_CLASS] = _TAIL_CALL_record_previous_inst, + [MATCH_KEYS] = _TAIL_CALL_record_previous_inst, + [MATCH_MAPPING] = _TAIL_CALL_record_previous_inst, + [MATCH_SEQUENCE] = _TAIL_CALL_record_previous_inst, + [NOP] = _TAIL_CALL_record_previous_inst, + [NOT_TAKEN] = _TAIL_CALL_record_previous_inst, + [POP_EXCEPT] = _TAIL_CALL_record_previous_inst, + [POP_ITER] = _TAIL_CALL_record_previous_inst, + [POP_JUMP_IF_FALSE] = _TAIL_CALL_record_previous_inst, + [POP_JUMP_IF_NONE] = _TAIL_CALL_record_previous_inst, + [POP_JUMP_IF_NOT_NONE] = _TAIL_CALL_record_previous_inst, + [POP_JUMP_IF_TRUE] = _TAIL_CALL_record_previous_inst, + [POP_TOP] = _TAIL_CALL_record_previous_inst, + [PUSH_EXC_INFO] = _TAIL_CALL_record_previous_inst, + [PUSH_NULL] = _TAIL_CALL_record_previous_inst, + [RAISE_VARARGS] = _TAIL_CALL_record_previous_inst, + [RERAISE] = _TAIL_CALL_record_previous_inst, + [RESERVED] = _TAIL_CALL_record_previous_inst, + [RESUME] = _TAIL_CALL_record_previous_inst, + [RESUME_CHECK] = _TAIL_CALL_record_previous_inst, + [RETURN_GENERATOR] = _TAIL_CALL_record_previous_inst, + [RETURN_VALUE] = _TAIL_CALL_record_previous_inst, + [SEND] = _TAIL_CALL_record_previous_inst, + [SEND_GEN] = _TAIL_CALL_record_previous_inst, + [SETUP_ANNOTATIONS] = _TAIL_CALL_record_previous_inst, + [SET_ADD] = _TAIL_CALL_record_previous_inst, + [SET_FUNCTION_ATTRIBUTE] = _TAIL_CALL_record_previous_inst, + [SET_UPDATE] = _TAIL_CALL_record_previous_inst, + [STORE_ATTR] = _TAIL_CALL_record_previous_inst, + [STORE_ATTR_INSTANCE_VALUE] = _TAIL_CALL_record_previous_inst, + [STORE_ATTR_SLOT] = _TAIL_CALL_record_previous_inst, + [STORE_ATTR_WITH_HINT] = _TAIL_CALL_record_previous_inst, + [STORE_DEREF] = _TAIL_CALL_record_previous_inst, + [STORE_FAST] = _TAIL_CALL_record_previous_inst, + [STORE_FAST_LOAD_FAST] = _TAIL_CALL_record_previous_inst, + [STORE_FAST_STORE_FAST] = _TAIL_CALL_record_previous_inst, + [STORE_GLOBAL] = _TAIL_CALL_record_previous_inst, + [STORE_NAME] = _TAIL_CALL_record_previous_inst, + [STORE_SLICE] = _TAIL_CALL_record_previous_inst, + [STORE_SUBSCR] = _TAIL_CALL_record_previous_inst, + [STORE_SUBSCR_DICT] = _TAIL_CALL_record_previous_inst, + [STORE_SUBSCR_LIST_INT] = _TAIL_CALL_record_previous_inst, + [SWAP] = _TAIL_CALL_record_previous_inst, + [TO_BOOL] = _TAIL_CALL_record_previous_inst, + [TO_BOOL_ALWAYS_TRUE] = _TAIL_CALL_record_previous_inst, + [TO_BOOL_BOOL] = _TAIL_CALL_record_previous_inst, + [TO_BOOL_INT] = _TAIL_CALL_record_previous_inst, + [TO_BOOL_LIST] = _TAIL_CALL_record_previous_inst, + [TO_BOOL_NONE] = _TAIL_CALL_record_previous_inst, + [TO_BOOL_STR] = _TAIL_CALL_record_previous_inst, + [UNARY_INVERT] = _TAIL_CALL_record_previous_inst, + [UNARY_NEGATIVE] = _TAIL_CALL_record_previous_inst, + [UNARY_NOT] = _TAIL_CALL_record_previous_inst, + [UNPACK_EX] = _TAIL_CALL_record_previous_inst, + [UNPACK_SEQUENCE] = _TAIL_CALL_record_previous_inst, + [UNPACK_SEQUENCE_LIST] = _TAIL_CALL_record_previous_inst, + [UNPACK_SEQUENCE_TUPLE] = _TAIL_CALL_record_previous_inst, + [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_record_previous_inst, + [WITH_EXCEPT_START] = _TAIL_CALL_record_previous_inst, + [YIELD_VALUE] = _TAIL_CALL_record_previous_inst, + [121] = _TAIL_CALL_UNKNOWN_OPCODE, [122] = _TAIL_CALL_UNKNOWN_OPCODE, [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, diff --git a/Tools/cases_generator/target_generator.py b/Tools/cases_generator/target_generator.py index 209411ca6f50..6763e487fbdc 100644 --- a/Tools/cases_generator/target_generator.py +++ b/Tools/cases_generator/target_generator.py @@ -34,7 +34,7 @@ def write_opcode_targets(analysis: Analysis, out: CWriter) -> None: targets = ["&&_unknown_opcode,\n"] * 256 for name, op in analysis.opmap.items(): if op < 256: - targets[op] = f"&&TARGET_RECORD_PREVIOUS_INST,\n" + targets[op] = f"&&TARGET_record_previous_inst,\n" out.emit("#if _Py_TIER2\n") out.emit("static void *opcode_tracing_targets_table[256] = {\n") for target in targets: @@ -84,7 +84,7 @@ def write_tailcall_dispatch_table(analysis: Analysis, out: CWriter) -> None: # Emit the tracing dispatch table. out.emit("static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = {\n") for name in sorted(analysis.instructions.keys()): - out.emit(f"[{name}] = _TAIL_CALL_RECORD_PREVIOUS_INST,\n") + out.emit(f"[{name}] = _TAIL_CALL_record_previous_inst,\n") named_values = analysis.opmap.values() for rest in range(256): if rest not in named_values: diff --git a/Tools/cases_generator/tier1_generator.py b/Tools/cases_generator/tier1_generator.py index fb1874b1658c..94ffb0118f07 100644 --- a/Tools/cases_generator/tier1_generator.py +++ b/Tools/cases_generator/tier1_generator.py @@ -167,9 +167,7 @@ def generate_tier1( {INSTRUCTION_START_MARKER} """ ) - out = CWriter(outfile, 2, lines) - emitter = Emitter(out, analysis.labels) - generate_tier1_cases(analysis, out, emitter) + generate_tier1_cases(analysis, outfile, lines) outfile.write(f""" {INSTRUCTION_END_MARKER} #if !_Py_TAIL_CALL_INTERP @@ -216,35 +214,14 @@ def get_popped(inst: Instruction, analysis: Analysis) -> str: stack = get_stack_effect(inst) return (-stack.base_offset).to_c() - -def generate_record_previous_inst(out: CWriter, emitter: Emitter, inst: Instruction) -> None: - out.emit("\n") - out.emit(f"TARGET(RECORD_PREVIOUS_INST) {{\n") - out.emit(f"INSTRUCTION_STATS(RECORD_PREVIOUS_INST);\n") - declare_variables(inst, out) - offset = 1 # The instruction itself - stack = Stack() - for part in inst.parts: - # Only emit braces if more than one uop - insert_braces = len([p for p in inst.parts if isinstance(p, Uop)]) > 1 - reachable, offset, stack = write_uop(part, emitter, offset, stack, inst, insert_braces) - out.start_line() - if reachable: # type: ignore[possibly-undefined] - stack.flush(out) - out.emit(f"DISPATCH();\n") - out.start_line() - out.emit("}") - out.emit("\n") - def generate_tier1_cases( - analysis: Analysis, out: CWriter, emitter: Emitter + analysis: Analysis, outfile: TextIO, lines: bool ) -> None: + out = CWriter(outfile, 2, lines) + emitter = Emitter(out, analysis.labels) out.emit("\n") for name, inst in sorted(analysis.instructions.items()): out.emit("\n") - if name == "RECORD_PREVIOUS_INST": - generate_record_previous_inst(out, emitter, inst) - continue out.emit(f"TARGET({name}) {{\n") popped = get_popped(inst, analysis) # We need to ifdef it because this breaks platforms