]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Change RECORD_PREVIOUS_INST to a label to save an opcode
authorKen Jin <28750310+Fidget-Spinner@users.noreply.github.com>
Mon, 27 Oct 2025 09:56:48 +0000 (09:56 +0000)
committerKen Jin <28750310+Fidget-Spinner@users.noreply.github.com>
Mon, 27 Oct 2025 09:56:48 +0000 (09:56 +0000)
Include/internal/pycore_magic_number.h
Include/internal/pycore_opcode_metadata.h
Include/opcode_ids.h
Lib/_opcode_metadata.py
Programs/test_frozenmain.h
Python/bytecodes.c
Python/generated_cases.c.h
Python/opcode_targets.h
Tools/cases_generator/target_generator.py
Tools/cases_generator/tier1_generator.py

index 09c6b1f5b3927412a5a0fd14f15c32b945750fbb..7ec7bd1c69551604096940545045fc9b64b620d2 100644 (file)
@@ -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 \
index 0156e083b7759f7f9738153a4d151a9c61ca3c9a..2bb915ad62b17f1a85720a116a95fe4976ad166e 100644 (file)
@@ -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: \
index 1c7468456dbd02d4951d3f7b350bed3331d13d96..1d5c74adefcd35d35209509bdd25e85eaaf69266 100644 (file)
@@ -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
index b6bce074f8e5797def02ecdc7dd68846098ea370..f168d169a329489b2d7937366e41956b7eb4646a 100644 (file)
@@ -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,
index 1794032e2b131549d8ff74d258efaa7be04298eb..dbeedb7ffe0ce6249116383947cba6c1bad79bc0 100644 (file)
@@ -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,
index cd098ebe0eb2b6d3f8066a767a5744e4f3f068d7..0328cd3ef9693b884594ced5b5f688f0cab4be7d 100644 (file)
@@ -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 //
index 8a81a6cdcc4929dcb237c0626489fe86a6aadddb..d9fea0e4ae57673a4a420626885f8ff6fa1c58ac 100644 (file)
             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
index 0d28b3d4e69055cfafdc01749e445c3e63514f28..eb43bf63804a32f79f93346ff13814c710e5da53 100644 (file)
@@ -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,
index 209411ca6f50d999c861535c11ba4e96ca92535b..6763e487fbdc924adc58fd45c64d905017e2dd62 100644 (file)
@@ -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:
index fb1874b1658cf91952dfb20c596aeaad092debc5..94ffb0118f078645d01478d623a6a16c5514435a 100644 (file)
@@ -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