]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-142982: Specialize CALL_FUNCTION_EX (GH-143391)
authorKen Jin <kenjin@python.org>
Tue, 6 Jan 2026 20:34:08 +0000 (04:34 +0800)
committerGitHub <noreply@github.com>
Tue, 6 Jan 2026 20:34:08 +0000 (20:34 +0000)
20 files changed:
Include/internal/pycore_code.h
Include/internal/pycore_interpframe.h
Include/internal/pycore_magic_number.h
Include/internal/pycore_opcode_metadata.h
Include/internal/pycore_uop_ids.h
Include/internal/pycore_uop_metadata.h
Include/opcode_ids.h
Lib/_opcode_metadata.py
Lib/opcode.py
Lib/test/test_capi/test_opt.py
Lib/test/test_opcache.py
Misc/NEWS.d/next/Core_and_Builtins/2026-01-03-14-47-49.gh-issue-142982.0lAtc7.rst [new file with mode: 0644]
Python/bytecodes.c
Python/ceval.c
Python/executor_cases.c.h
Python/generated_cases.c.h
Python/opcode_targets.h
Python/optimizer_bytecodes.c
Python/optimizer_cases.c.h
Python/specialize.c

index cb9c0aa27a1785c46903b52b88219f1927055770..9c2bab7c63e3df2e029ddb4dd5fd54953ca80b6f 100644 (file)
@@ -160,6 +160,12 @@ typedef struct {
 
 #define INLINE_CACHE_ENTRIES_CONTAINS_OP CACHE_ENTRIES(_PyContainsOpCache)
 
+typedef struct {
+    _Py_BackoffCounter counter;
+} _PyCallFunctionExCache;
+
+#define INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX CACHE_ENTRIES(_PyCallFunctionExCache)
+
 /* "Locals plus" for a code object is the set of locals + cell vars +
  * free vars.  This relates to variable names as well as offsets into
  * the "fast locals" storage array of execution frames.  The compiler
@@ -326,6 +332,7 @@ PyAPI_FUNC(void) _Py_Specialize_Send(_PyStackRef receiver, _Py_CODEUNIT *instr);
 PyAPI_FUNC(void) _Py_Specialize_ToBool(_PyStackRef value, _Py_CODEUNIT *instr);
 PyAPI_FUNC(void) _Py_Specialize_ContainsOp(_PyStackRef value, _Py_CODEUNIT *instr);
 PyAPI_FUNC(void) _Py_GatherStats_GetIter(_PyStackRef iterable);
+PyAPI_FUNC(void) _Py_Specialize_CallFunctionEx(_PyStackRef func_st, _Py_CODEUNIT *instr);
 
 // Utility functions for reading/writing 32/64-bit values in the inline caches.
 // Great care should be taken to ensure that these functions remain correct and
index 2e9fbd39b276b16ca005279346b98fc7b085c265..94be699f24717010f1eee13b34efaa6745204043 100644 (file)
@@ -395,6 +395,10 @@ _PyEvalFramePushAndInit(PyThreadState *tstate, _PyStackRef func,
                         size_t argcount, PyObject *kwnames,
                         _PyInterpreterFrame *previous);
 
+PyAPI_FUNC(_PyInterpreterFrame *)
+_PyEvalFramePushAndInit_Ex(PyThreadState *tstate, _PyStackRef func,
+    PyObject *locals, Py_ssize_t nargs, PyObject *callargs, PyObject *kwargs, _PyInterpreterFrame *previous);
+
 #ifdef __cplusplus
 }
 #endif
index 0724da99b45ba6fb704f71676b0c0d74febeef1d..eb2e03829e28e173aa881c7176430215cb84d511 100644 (file)
@@ -289,6 +289,7 @@ Known values:
     Python 3.15a2 3656 (Add TRACE_RECORD instruction, for platforms with switch based interpreter)
     Python 3.15a4 3657 (Add BINARY_OP_SUBSCR_USTR_INT)
     Python 3.15a4 3658 (Optimize bytecode for list/set called on genexp)
+    Python 3.15a4 3659 (Add CALL_FUNCTION_EX specialization)
 
 
     Python 3.16 will start with 3700
@@ -302,7 +303,7 @@ PC/launcher.c must also be updated.
 
 */
 
-#define PYC_MAGIC_NUMBER 3658
+#define PYC_MAGIC_NUMBER 3659
 /* 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 3f39ce2aaf6b56bf0ccb3bec028fcb124a84e1ae..05d22ea7c468e991941429c7dda8a656cb7d2182 100644 (file)
@@ -108,6 +108,10 @@ int _PyOpcode_num_popped(int opcode, int oparg)  {
             return 2 + oparg;
         case CALL_BUILTIN_O:
             return 2 + oparg;
+        case CALL_EX_NON_PY_GENERAL:
+            return 4;
+        case CALL_EX_PY:
+            return 4;
         case CALL_FUNCTION_EX:
             return 4;
         case CALL_INTRINSIC_1:
@@ -595,6 +599,10 @@ int _PyOpcode_num_pushed(int opcode, int oparg)  {
             return 1;
         case CALL_BUILTIN_O:
             return 1;
+        case CALL_EX_NON_PY_GENERAL:
+            return 1;
+        case CALL_EX_PY:
+            return 0;
         case CALL_FUNCTION_EX:
             return 1;
         case CALL_INTRINSIC_1:
@@ -1117,7 +1125,9 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = {
     [CALL_BUILTIN_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
     [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
     [CALL_BUILTIN_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
-    [CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
+    [CALL_EX_NON_PY_GENERAL] = { true, INSTR_FMT_IXC, HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
+    [CALL_EX_PY] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
+    [CALL_FUNCTION_EX] = { true, INSTR_FMT_IXC, HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
     [CALL_INTRINSIC_1] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
     [CALL_INTRINSIC_2] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
     [CALL_ISINSTANCE] = { true, INSTR_FMT_IXC00, HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
@@ -1180,7 +1190,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = {
     [IMPORT_FROM] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
     [IMPORT_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
     [INSTRUMENTED_CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
-    [INSTRUMENTED_CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
+    [INSTRUMENTED_CALL_FUNCTION_EX] = { true, INSTR_FMT_IXC, HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
     [INSTRUMENTED_CALL_KW] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
     [INSTRUMENTED_END_ASYNC_FOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
     [INSTRUMENTED_END_FOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NO_SAVE_IP_FLAG },
@@ -1366,6 +1376,8 @@ _PyOpcode_macro_expansion[256] = {
     [CALL_BUILTIN_FAST] = { .nuops = 2, .uops = { { _CALL_BUILTIN_FAST, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
     [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { .nuops = 2, .uops = { { _CALL_BUILTIN_FAST_WITH_KEYWORDS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
     [CALL_BUILTIN_O] = { .nuops = 4, .uops = { { _CALL_BUILTIN_O, OPARG_SIMPLE, 3 }, { _POP_TOP, OPARG_SIMPLE, 3 }, { _POP_TOP, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
+    [CALL_EX_NON_PY_GENERAL] = { .nuops = 4, .uops = { { _CHECK_IS_NOT_PY_CALLABLE_EX, OPARG_SIMPLE, 1 }, { _MAKE_CALLARGS_A_TUPLE, OPARG_SIMPLE, 1 }, { _CALL_FUNCTION_EX_NON_PY_GENERAL, OPARG_SIMPLE, 1 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 1 } } },
+    [CALL_EX_PY] = { .nuops = 6, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _MAKE_CALLARGS_A_TUPLE, OPARG_SIMPLE, 1 }, { _CHECK_IS_PY_CALLABLE_EX, OPARG_SIMPLE, 1 }, { _PY_FRAME_EX, OPARG_SIMPLE, 1 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 1 }, { _PUSH_FRAME, OPARG_SIMPLE, 1 } } },
     [CALL_INTRINSIC_1] = { .nuops = 1, .uops = { { _CALL_INTRINSIC_1, OPARG_SIMPLE, 0 } } },
     [CALL_INTRINSIC_2] = { .nuops = 1, .uops = { { _CALL_INTRINSIC_2, OPARG_SIMPLE, 0 } } },
     [CALL_ISINSTANCE] = { .nuops = 3, .uops = { { _GUARD_THIRD_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_ISINSTANCE, OPARG_SIMPLE, 3 }, { _CALL_ISINSTANCE, OPARG_SIMPLE, 3 } } },
@@ -1561,6 +1573,8 @@ const char *_PyOpcode_OpName[267] = {
     [CALL_BUILTIN_FAST] = "CALL_BUILTIN_FAST",
     [CALL_BUILTIN_FAST_WITH_KEYWORDS] = "CALL_BUILTIN_FAST_WITH_KEYWORDS",
     [CALL_BUILTIN_O] = "CALL_BUILTIN_O",
+    [CALL_EX_NON_PY_GENERAL] = "CALL_EX_NON_PY_GENERAL",
+    [CALL_EX_PY] = "CALL_EX_PY",
     [CALL_FUNCTION_EX] = "CALL_FUNCTION_EX",
     [CALL_INTRINSIC_1] = "CALL_INTRINSIC_1",
     [CALL_INTRINSIC_2] = "CALL_INTRINSIC_2",
@@ -1787,6 +1801,7 @@ const uint8_t _PyOpcode_Caches[256] = {
     [FOR_ITER] = 1,
     [CALL] = 3,
     [CALL_KW] = 3,
+    [CALL_FUNCTION_EX] = 1,
     [BINARY_OP] = 5,
 };
 #endif
@@ -1801,8 +1816,6 @@ const uint8_t _PyOpcode_Deopt[256] = {
     [125] = 125,
     [126] = 126,
     [127] = 127,
-    [211] = 211,
-    [212] = 212,
     [213] = 213,
     [214] = 214,
     [215] = 215,
@@ -1858,6 +1871,8 @@ const uint8_t _PyOpcode_Deopt[256] = {
     [CALL_BUILTIN_FAST] = CALL,
     [CALL_BUILTIN_FAST_WITH_KEYWORDS] = CALL,
     [CALL_BUILTIN_O] = CALL,
+    [CALL_EX_NON_PY_GENERAL] = CALL_FUNCTION_EX,
+    [CALL_EX_PY] = CALL_FUNCTION_EX,
     [CALL_FUNCTION_EX] = CALL_FUNCTION_EX,
     [CALL_INTRINSIC_1] = CALL_INTRINSIC_1,
     [CALL_INTRINSIC_2] = CALL_INTRINSIC_2,
@@ -2062,8 +2077,6 @@ const uint8_t _PyOpcode_Deopt[256] = {
     case 125: \
     case 126: \
     case 127: \
-    case 211: \
-    case 212: \
     case 213: \
     case 214: \
     case 215: \
index 0c17f9c548b84703e2191ef6dd864d19be69d41a..01f99deb05db93d415a1a574a0930de222ff8105 100644 (file)
@@ -42,147 +42,150 @@ extern "C" {
 #define _CALL_BUILTIN_FAST 322
 #define _CALL_BUILTIN_FAST_WITH_KEYWORDS 323
 #define _CALL_BUILTIN_O 324
+#define _CALL_FUNCTION_EX_NON_PY_GENERAL 325
 #define _CALL_INTRINSIC_1 CALL_INTRINSIC_1
 #define _CALL_INTRINSIC_2 CALL_INTRINSIC_2
-#define _CALL_ISINSTANCE 325
-#define _CALL_KW_NON_PY 326
-#define _CALL_LEN 327
-#define _CALL_LIST_APPEND 328
-#define _CALL_METHOD_DESCRIPTOR_FAST 329
-#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 330
-#define _CALL_METHOD_DESCRIPTOR_NOARGS 331
-#define _CALL_METHOD_DESCRIPTOR_O 332
-#define _CALL_NON_PY_GENERAL 333
-#define _CALL_STR_1 334
-#define _CALL_TUPLE_1 335
-#define _CALL_TYPE_1 336
-#define _CHECK_AND_ALLOCATE_OBJECT 337
-#define _CHECK_ATTR_CLASS 338
-#define _CHECK_ATTR_METHOD_LAZY_DICT 339
-#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS 340
+#define _CALL_ISINSTANCE 326
+#define _CALL_KW_NON_PY 327
+#define _CALL_LEN 328
+#define _CALL_LIST_APPEND 329
+#define _CALL_METHOD_DESCRIPTOR_FAST 330
+#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 331
+#define _CALL_METHOD_DESCRIPTOR_NOARGS 332
+#define _CALL_METHOD_DESCRIPTOR_O 333
+#define _CALL_NON_PY_GENERAL 334
+#define _CALL_STR_1 335
+#define _CALL_TUPLE_1 336
+#define _CALL_TYPE_1 337
+#define _CHECK_AND_ALLOCATE_OBJECT 338
+#define _CHECK_ATTR_CLASS 339
+#define _CHECK_ATTR_METHOD_LAZY_DICT 340
+#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS 341
 #define _CHECK_EG_MATCH CHECK_EG_MATCH
 #define _CHECK_EXC_MATCH CHECK_EXC_MATCH
-#define _CHECK_FUNCTION_EXACT_ARGS 341
-#define _CHECK_FUNCTION_VERSION 342
-#define _CHECK_FUNCTION_VERSION_INLINE 343
-#define _CHECK_FUNCTION_VERSION_KW 344
-#define _CHECK_IS_NOT_PY_CALLABLE 345
-#define _CHECK_IS_NOT_PY_CALLABLE_KW 346
-#define _CHECK_MANAGED_OBJECT_HAS_VALUES 347
-#define _CHECK_METHOD_VERSION 348
-#define _CHECK_METHOD_VERSION_KW 349
-#define _CHECK_PEP_523 350
-#define _CHECK_PERIODIC 351
-#define _CHECK_PERIODIC_AT_END 352
-#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM 353
-#define _CHECK_RECURSION_REMAINING 354
-#define _CHECK_STACK_SPACE 355
-#define _CHECK_STACK_SPACE_OPERAND 356
-#define _CHECK_VALIDITY 357
-#define _COLD_DYNAMIC_EXIT 358
-#define _COLD_EXIT 359
-#define _COMPARE_OP 360
-#define _COMPARE_OP_FLOAT 361
-#define _COMPARE_OP_INT 362
-#define _COMPARE_OP_STR 363
-#define _CONTAINS_OP 364
-#define _CONTAINS_OP_DICT 365
-#define _CONTAINS_OP_SET 366
+#define _CHECK_FUNCTION_EXACT_ARGS 342
+#define _CHECK_FUNCTION_VERSION 343
+#define _CHECK_FUNCTION_VERSION_INLINE 344
+#define _CHECK_FUNCTION_VERSION_KW 345
+#define _CHECK_IS_NOT_PY_CALLABLE 346
+#define _CHECK_IS_NOT_PY_CALLABLE_EX 347
+#define _CHECK_IS_NOT_PY_CALLABLE_KW 348
+#define _CHECK_IS_PY_CALLABLE_EX 349
+#define _CHECK_MANAGED_OBJECT_HAS_VALUES 350
+#define _CHECK_METHOD_VERSION 351
+#define _CHECK_METHOD_VERSION_KW 352
+#define _CHECK_PEP_523 353
+#define _CHECK_PERIODIC 354
+#define _CHECK_PERIODIC_AT_END 355
+#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM 356
+#define _CHECK_RECURSION_REMAINING 357
+#define _CHECK_STACK_SPACE 358
+#define _CHECK_STACK_SPACE_OPERAND 359
+#define _CHECK_VALIDITY 360
+#define _COLD_DYNAMIC_EXIT 361
+#define _COLD_EXIT 362
+#define _COMPARE_OP 363
+#define _COMPARE_OP_FLOAT 364
+#define _COMPARE_OP_INT 365
+#define _COMPARE_OP_STR 366
+#define _CONTAINS_OP 367
+#define _CONTAINS_OP_DICT 368
+#define _CONTAINS_OP_SET 369
 #define _CONVERT_VALUE CONVERT_VALUE
-#define _COPY 367
-#define _COPY_1 368
-#define _COPY_2 369
-#define _COPY_3 370
+#define _COPY 370
+#define _COPY_1 371
+#define _COPY_2 372
+#define _COPY_3 373
 #define _COPY_FREE_VARS COPY_FREE_VARS
-#define _CREATE_INIT_FRAME 371
+#define _CREATE_INIT_FRAME 374
 #define _DELETE_ATTR DELETE_ATTR
 #define _DELETE_DEREF DELETE_DEREF
 #define _DELETE_FAST DELETE_FAST
 #define _DELETE_GLOBAL DELETE_GLOBAL
 #define _DELETE_NAME DELETE_NAME
 #define _DELETE_SUBSCR DELETE_SUBSCR
-#define _DEOPT 372
+#define _DEOPT 375
 #define _DICT_MERGE DICT_MERGE
 #define _DICT_UPDATE DICT_UPDATE
-#define _DO_CALL 373
-#define _DO_CALL_FUNCTION_EX 374
-#define _DO_CALL_KW 375
-#define _DYNAMIC_EXIT 376
+#define _DO_CALL 376
+#define _DO_CALL_FUNCTION_EX 377
+#define _DO_CALL_KW 378
+#define _DYNAMIC_EXIT 379
 #define _END_FOR END_FOR
 #define _END_SEND END_SEND
-#define _ERROR_POP_N 377
+#define _ERROR_POP_N 380
 #define _EXIT_INIT_CHECK EXIT_INIT_CHECK
-#define _EXPAND_METHOD 378
-#define _EXPAND_METHOD_KW 379
-#define _FATAL_ERROR 380
+#define _EXPAND_METHOD 381
+#define _EXPAND_METHOD_KW 382
+#define _FATAL_ERROR 383
 #define _FORMAT_SIMPLE FORMAT_SIMPLE
 #define _FORMAT_WITH_SPEC FORMAT_WITH_SPEC
-#define _FOR_ITER 381
-#define _FOR_ITER_GEN_FRAME 382
-#define _FOR_ITER_TIER_TWO 383
+#define _FOR_ITER 384
+#define _FOR_ITER_GEN_FRAME 385
+#define _FOR_ITER_TIER_TWO 386
 #define _GET_AITER GET_AITER
 #define _GET_ANEXT GET_ANEXT
 #define _GET_AWAITABLE GET_AWAITABLE
 #define _GET_ITER GET_ITER
 #define _GET_LEN GET_LEN
 #define _GET_YIELD_FROM_ITER GET_YIELD_FROM_ITER
-#define _GUARD_BINARY_OP_EXTEND 384
-#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS 385
-#define _GUARD_CALLABLE_ISINSTANCE 386
-#define _GUARD_CALLABLE_LEN 387
-#define _GUARD_CALLABLE_LIST_APPEND 388
-#define _GUARD_CALLABLE_STR_1 389
-#define _GUARD_CALLABLE_TUPLE_1 390
-#define _GUARD_CALLABLE_TYPE_1 391
-#define _GUARD_DORV_NO_DICT 392
-#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT 393
-#define _GUARD_GLOBALS_VERSION 394
-#define _GUARD_IP_RETURN_GENERATOR 395
-#define _GUARD_IP_RETURN_VALUE 396
-#define _GUARD_IP_YIELD_VALUE 397
-#define _GUARD_IP__PUSH_FRAME 398
-#define _GUARD_IS_FALSE_POP 399
-#define _GUARD_IS_NONE_POP 400
-#define _GUARD_IS_NOT_NONE_POP 401
-#define _GUARD_IS_TRUE_POP 402
-#define _GUARD_KEYS_VERSION 403
-#define _GUARD_NOS_COMPACT_ASCII 404
-#define _GUARD_NOS_DICT 405
-#define _GUARD_NOS_FLOAT 406
-#define _GUARD_NOS_INT 407
-#define _GUARD_NOS_LIST 408
-#define _GUARD_NOS_NOT_NULL 409
-#define _GUARD_NOS_NULL 410
-#define _GUARD_NOS_OVERFLOWED 411
-#define _GUARD_NOS_TUPLE 412
-#define _GUARD_NOS_UNICODE 413
-#define _GUARD_NOT_EXHAUSTED_LIST 414
-#define _GUARD_NOT_EXHAUSTED_RANGE 415
-#define _GUARD_NOT_EXHAUSTED_TUPLE 416
-#define _GUARD_THIRD_NULL 417
-#define _GUARD_TOS_ANY_SET 418
-#define _GUARD_TOS_DICT 419
-#define _GUARD_TOS_FLOAT 420
-#define _GUARD_TOS_INT 421
-#define _GUARD_TOS_LIST 422
-#define _GUARD_TOS_OVERFLOWED 423
-#define _GUARD_TOS_SLICE 424
-#define _GUARD_TOS_TUPLE 425
-#define _GUARD_TOS_UNICODE 426
-#define _GUARD_TYPE_VERSION 427
-#define _GUARD_TYPE_VERSION_AND_LOCK 428
-#define _HANDLE_PENDING_AND_DEOPT 429
+#define _GUARD_BINARY_OP_EXTEND 387
+#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS 388
+#define _GUARD_CALLABLE_ISINSTANCE 389
+#define _GUARD_CALLABLE_LEN 390
+#define _GUARD_CALLABLE_LIST_APPEND 391
+#define _GUARD_CALLABLE_STR_1 392
+#define _GUARD_CALLABLE_TUPLE_1 393
+#define _GUARD_CALLABLE_TYPE_1 394
+#define _GUARD_DORV_NO_DICT 395
+#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT 396
+#define _GUARD_GLOBALS_VERSION 397
+#define _GUARD_IP_RETURN_GENERATOR 398
+#define _GUARD_IP_RETURN_VALUE 399
+#define _GUARD_IP_YIELD_VALUE 400
+#define _GUARD_IP__PUSH_FRAME 401
+#define _GUARD_IS_FALSE_POP 402
+#define _GUARD_IS_NONE_POP 403
+#define _GUARD_IS_NOT_NONE_POP 404
+#define _GUARD_IS_TRUE_POP 405
+#define _GUARD_KEYS_VERSION 406
+#define _GUARD_NOS_COMPACT_ASCII 407
+#define _GUARD_NOS_DICT 408
+#define _GUARD_NOS_FLOAT 409
+#define _GUARD_NOS_INT 410
+#define _GUARD_NOS_LIST 411
+#define _GUARD_NOS_NOT_NULL 412
+#define _GUARD_NOS_NULL 413
+#define _GUARD_NOS_OVERFLOWED 414
+#define _GUARD_NOS_TUPLE 415
+#define _GUARD_NOS_UNICODE 416
+#define _GUARD_NOT_EXHAUSTED_LIST 417
+#define _GUARD_NOT_EXHAUSTED_RANGE 418
+#define _GUARD_NOT_EXHAUSTED_TUPLE 419
+#define _GUARD_THIRD_NULL 420
+#define _GUARD_TOS_ANY_SET 421
+#define _GUARD_TOS_DICT 422
+#define _GUARD_TOS_FLOAT 423
+#define _GUARD_TOS_INT 424
+#define _GUARD_TOS_LIST 425
+#define _GUARD_TOS_OVERFLOWED 426
+#define _GUARD_TOS_SLICE 427
+#define _GUARD_TOS_TUPLE 428
+#define _GUARD_TOS_UNICODE 429
+#define _GUARD_TYPE_VERSION 430
+#define _GUARD_TYPE_VERSION_AND_LOCK 431
+#define _HANDLE_PENDING_AND_DEOPT 432
 #define _IMPORT_FROM IMPORT_FROM
 #define _IMPORT_NAME IMPORT_NAME
-#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS 430
-#define _INIT_CALL_PY_EXACT_ARGS 431
-#define _INIT_CALL_PY_EXACT_ARGS_0 432
-#define _INIT_CALL_PY_EXACT_ARGS_1 433
-#define _INIT_CALL_PY_EXACT_ARGS_2 434
-#define _INIT_CALL_PY_EXACT_ARGS_3 435
-#define _INIT_CALL_PY_EXACT_ARGS_4 436
-#define _INSERT_1_LOAD_CONST_INLINE_BORROW 437
-#define _INSERT_NULL 438
+#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS 433
+#define _INIT_CALL_PY_EXACT_ARGS 434
+#define _INIT_CALL_PY_EXACT_ARGS_0 435
+#define _INIT_CALL_PY_EXACT_ARGS_1 436
+#define _INIT_CALL_PY_EXACT_ARGS_2 437
+#define _INIT_CALL_PY_EXACT_ARGS_3 438
+#define _INIT_CALL_PY_EXACT_ARGS_4 439
+#define _INSERT_1_LOAD_CONST_INLINE_BORROW 440
+#define _INSERT_NULL 441
 #define _INSTRUMENTED_FOR_ITER INSTRUMENTED_FOR_ITER
 #define _INSTRUMENTED_INSTRUCTION INSTRUMENTED_INSTRUCTION
 #define _INSTRUMENTED_JUMP_FORWARD INSTRUMENTED_JUMP_FORWARD
@@ -192,975 +195,986 @@ extern "C" {
 #define _INSTRUMENTED_POP_JUMP_IF_NONE INSTRUMENTED_POP_JUMP_IF_NONE
 #define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE INSTRUMENTED_POP_JUMP_IF_NOT_NONE
 #define _INSTRUMENTED_POP_JUMP_IF_TRUE INSTRUMENTED_POP_JUMP_IF_TRUE
-#define _IS_NONE 439
-#define _IS_OP 440
-#define _ITER_CHECK_LIST 441
-#define _ITER_CHECK_RANGE 442
-#define _ITER_CHECK_TUPLE 443
-#define _ITER_JUMP_LIST 444
-#define _ITER_JUMP_RANGE 445
-#define _ITER_JUMP_TUPLE 446
-#define _ITER_NEXT_LIST 447
-#define _ITER_NEXT_LIST_TIER_TWO 448
-#define _ITER_NEXT_RANGE 449
-#define _ITER_NEXT_TUPLE 450
+#define _IS_NONE 442
+#define _IS_OP 443
+#define _ITER_CHECK_LIST 444
+#define _ITER_CHECK_RANGE 445
+#define _ITER_CHECK_TUPLE 446
+#define _ITER_JUMP_LIST 447
+#define _ITER_JUMP_RANGE 448
+#define _ITER_JUMP_TUPLE 449
+#define _ITER_NEXT_LIST 450
+#define _ITER_NEXT_LIST_TIER_TWO 451
+#define _ITER_NEXT_RANGE 452
+#define _ITER_NEXT_TUPLE 453
 #define _JUMP_BACKWARD_NO_INTERRUPT JUMP_BACKWARD_NO_INTERRUPT
-#define _JUMP_TO_TOP 451
+#define _JUMP_TO_TOP 454
 #define _LIST_APPEND LIST_APPEND
 #define _LIST_EXTEND LIST_EXTEND
-#define _LOAD_ATTR 452
-#define _LOAD_ATTR_CLASS 453
+#define _LOAD_ATTR 455
+#define _LOAD_ATTR_CLASS 456
 #define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN
-#define _LOAD_ATTR_INSTANCE_VALUE 454
-#define _LOAD_ATTR_METHOD_LAZY_DICT 455
-#define _LOAD_ATTR_METHOD_NO_DICT 456
-#define _LOAD_ATTR_METHOD_WITH_VALUES 457
-#define _LOAD_ATTR_MODULE 458
-#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT 459
-#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 460
-#define _LOAD_ATTR_PROPERTY_FRAME 461
-#define _LOAD_ATTR_SLOT 462
-#define _LOAD_ATTR_WITH_HINT 463
+#define _LOAD_ATTR_INSTANCE_VALUE 457
+#define _LOAD_ATTR_METHOD_LAZY_DICT 458
+#define _LOAD_ATTR_METHOD_NO_DICT 459
+#define _LOAD_ATTR_METHOD_WITH_VALUES 460
+#define _LOAD_ATTR_MODULE 461
+#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT 462
+#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 463
+#define _LOAD_ATTR_PROPERTY_FRAME 464
+#define _LOAD_ATTR_SLOT 465
+#define _LOAD_ATTR_WITH_HINT 466
 #define _LOAD_BUILD_CLASS LOAD_BUILD_CLASS
-#define _LOAD_BYTECODE 464
+#define _LOAD_BYTECODE 467
 #define _LOAD_COMMON_CONSTANT LOAD_COMMON_CONSTANT
 #define _LOAD_CONST LOAD_CONST
-#define _LOAD_CONST_INLINE 465
-#define _LOAD_CONST_INLINE_BORROW 466
-#define _LOAD_CONST_UNDER_INLINE 467
-#define _LOAD_CONST_UNDER_INLINE_BORROW 468
+#define _LOAD_CONST_INLINE 468
+#define _LOAD_CONST_INLINE_BORROW 469
+#define _LOAD_CONST_UNDER_INLINE 470
+#define _LOAD_CONST_UNDER_INLINE_BORROW 471
 #define _LOAD_DEREF LOAD_DEREF
-#define _LOAD_FAST 469
-#define _LOAD_FAST_0 470
-#define _LOAD_FAST_1 471
-#define _LOAD_FAST_2 472
-#define _LOAD_FAST_3 473
-#define _LOAD_FAST_4 474
-#define _LOAD_FAST_5 475
-#define _LOAD_FAST_6 476
-#define _LOAD_FAST_7 477
+#define _LOAD_FAST 472
+#define _LOAD_FAST_0 473
+#define _LOAD_FAST_1 474
+#define _LOAD_FAST_2 475
+#define _LOAD_FAST_3 476
+#define _LOAD_FAST_4 477
+#define _LOAD_FAST_5 478
+#define _LOAD_FAST_6 479
+#define _LOAD_FAST_7 480
 #define _LOAD_FAST_AND_CLEAR LOAD_FAST_AND_CLEAR
-#define _LOAD_FAST_BORROW 478
-#define _LOAD_FAST_BORROW_0 479
-#define _LOAD_FAST_BORROW_1 480
-#define _LOAD_FAST_BORROW_2 481
-#define _LOAD_FAST_BORROW_3 482
-#define _LOAD_FAST_BORROW_4 483
-#define _LOAD_FAST_BORROW_5 484
-#define _LOAD_FAST_BORROW_6 485
-#define _LOAD_FAST_BORROW_7 486
+#define _LOAD_FAST_BORROW 481
+#define _LOAD_FAST_BORROW_0 482
+#define _LOAD_FAST_BORROW_1 483
+#define _LOAD_FAST_BORROW_2 484
+#define _LOAD_FAST_BORROW_3 485
+#define _LOAD_FAST_BORROW_4 486
+#define _LOAD_FAST_BORROW_5 487
+#define _LOAD_FAST_BORROW_6 488
+#define _LOAD_FAST_BORROW_7 489
 #define _LOAD_FAST_CHECK LOAD_FAST_CHECK
 #define _LOAD_FROM_DICT_OR_DEREF LOAD_FROM_DICT_OR_DEREF
 #define _LOAD_FROM_DICT_OR_GLOBALS LOAD_FROM_DICT_OR_GLOBALS
-#define _LOAD_GLOBAL 487
-#define _LOAD_GLOBAL_BUILTINS 488
-#define _LOAD_GLOBAL_MODULE 489
+#define _LOAD_GLOBAL 490
+#define _LOAD_GLOBAL_BUILTINS 491
+#define _LOAD_GLOBAL_MODULE 492
 #define _LOAD_LOCALS LOAD_LOCALS
 #define _LOAD_NAME LOAD_NAME
-#define _LOAD_SMALL_INT 490
-#define _LOAD_SMALL_INT_0 491
-#define _LOAD_SMALL_INT_1 492
-#define _LOAD_SMALL_INT_2 493
-#define _LOAD_SMALL_INT_3 494
-#define _LOAD_SPECIAL 495
+#define _LOAD_SMALL_INT 493
+#define _LOAD_SMALL_INT_0 494
+#define _LOAD_SMALL_INT_1 495
+#define _LOAD_SMALL_INT_2 496
+#define _LOAD_SMALL_INT_3 497
+#define _LOAD_SPECIAL 498
 #define _LOAD_SUPER_ATTR_ATTR LOAD_SUPER_ATTR_ATTR
 #define _LOAD_SUPER_ATTR_METHOD LOAD_SUPER_ATTR_METHOD
-#define _MAKE_CALLARGS_A_TUPLE 496
+#define _MAKE_CALLARGS_A_TUPLE 499
 #define _MAKE_CELL MAKE_CELL
 #define _MAKE_FUNCTION MAKE_FUNCTION
-#define _MAKE_WARM 497
+#define _MAKE_WARM 500
 #define _MAP_ADD MAP_ADD
 #define _MATCH_CLASS MATCH_CLASS
 #define _MATCH_KEYS MATCH_KEYS
 #define _MATCH_MAPPING MATCH_MAPPING
 #define _MATCH_SEQUENCE MATCH_SEQUENCE
-#define _MAYBE_EXPAND_METHOD 498
-#define _MAYBE_EXPAND_METHOD_KW 499
-#define _MONITOR_CALL 500
-#define _MONITOR_CALL_KW 501
-#define _MONITOR_JUMP_BACKWARD 502
-#define _MONITOR_RESUME 503
+#define _MAYBE_EXPAND_METHOD 501
+#define _MAYBE_EXPAND_METHOD_KW 502
+#define _MONITOR_CALL 503
+#define _MONITOR_CALL_KW 504
+#define _MONITOR_JUMP_BACKWARD 505
+#define _MONITOR_RESUME 506
 #define _NOP NOP
-#define _POP_CALL 504
-#define _POP_CALL_LOAD_CONST_INLINE_BORROW 505
-#define _POP_CALL_ONE 506
-#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW 507
-#define _POP_CALL_TWO 508
-#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW 509
+#define _POP_CALL 507
+#define _POP_CALL_LOAD_CONST_INLINE_BORROW 508
+#define _POP_CALL_ONE 509
+#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW 510
+#define _POP_CALL_TWO 511
+#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW 512
 #define _POP_EXCEPT POP_EXCEPT
 #define _POP_ITER POP_ITER
-#define _POP_JUMP_IF_FALSE 510
-#define _POP_JUMP_IF_TRUE 511
+#define _POP_JUMP_IF_FALSE 513
+#define _POP_JUMP_IF_TRUE 514
 #define _POP_TOP POP_TOP
-#define _POP_TOP_FLOAT 512
-#define _POP_TOP_INT 513
-#define _POP_TOP_LOAD_CONST_INLINE 514
-#define _POP_TOP_LOAD_CONST_INLINE_BORROW 515
-#define _POP_TOP_NOP 516
-#define _POP_TOP_UNICODE 517
-#define _POP_TWO 518
-#define _POP_TWO_LOAD_CONST_INLINE_BORROW 519
+#define _POP_TOP_FLOAT 515
+#define _POP_TOP_INT 516
+#define _POP_TOP_LOAD_CONST_INLINE 517
+#define _POP_TOP_LOAD_CONST_INLINE_BORROW 518
+#define _POP_TOP_NOP 519
+#define _POP_TOP_UNICODE 520
+#define _POP_TWO 521
+#define _POP_TWO_LOAD_CONST_INLINE_BORROW 522
 #define _PUSH_EXC_INFO PUSH_EXC_INFO
-#define _PUSH_FRAME 520
+#define _PUSH_FRAME 523
 #define _PUSH_NULL PUSH_NULL
-#define _PUSH_NULL_CONDITIONAL 521
-#define _PY_FRAME_GENERAL 522
-#define _PY_FRAME_KW 523
-#define _QUICKEN_RESUME 524
-#define _REPLACE_WITH_TRUE 525
+#define _PUSH_NULL_CONDITIONAL 524
+#define _PY_FRAME_EX 525
+#define _PY_FRAME_GENERAL 526
+#define _PY_FRAME_KW 527
+#define _QUICKEN_RESUME 528
+#define _REPLACE_WITH_TRUE 529
 #define _RESUME_CHECK RESUME_CHECK
 #define _RETURN_GENERATOR RETURN_GENERATOR
 #define _RETURN_VALUE RETURN_VALUE
-#define _SAVE_RETURN_OFFSET 526
-#define _SEND 527
-#define _SEND_GEN_FRAME 528
+#define _SAVE_RETURN_OFFSET 530
+#define _SEND 531
+#define _SEND_GEN_FRAME 532
 #define _SETUP_ANNOTATIONS SETUP_ANNOTATIONS
 #define _SET_ADD SET_ADD
 #define _SET_FUNCTION_ATTRIBUTE SET_FUNCTION_ATTRIBUTE
 #define _SET_UPDATE SET_UPDATE
-#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW 529
-#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW 530
-#define _SPILL_OR_RELOAD 531
-#define _START_EXECUTOR 532
-#define _STORE_ATTR 533
-#define _STORE_ATTR_INSTANCE_VALUE 534
-#define _STORE_ATTR_SLOT 535
-#define _STORE_ATTR_WITH_HINT 536
+#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW 533
+#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW 534
+#define _SPILL_OR_RELOAD 535
+#define _START_EXECUTOR 536
+#define _STORE_ATTR 537
+#define _STORE_ATTR_INSTANCE_VALUE 538
+#define _STORE_ATTR_SLOT 539
+#define _STORE_ATTR_WITH_HINT 540
 #define _STORE_DEREF STORE_DEREF
 #define _STORE_GLOBAL STORE_GLOBAL
 #define _STORE_NAME STORE_NAME
-#define _STORE_SLICE 537
-#define _STORE_SUBSCR 538
-#define _STORE_SUBSCR_DICT 539
-#define _STORE_SUBSCR_LIST_INT 540
-#define _SWAP 541
-#define _SWAP_2 542
-#define _SWAP_3 543
-#define _SWAP_FAST 544
-#define _SWAP_FAST_0 545
-#define _SWAP_FAST_1 546
-#define _SWAP_FAST_2 547
-#define _SWAP_FAST_3 548
-#define _SWAP_FAST_4 549
-#define _SWAP_FAST_5 550
-#define _SWAP_FAST_6 551
-#define _SWAP_FAST_7 552
-#define _TIER2_RESUME_CHECK 553
-#define _TO_BOOL 554
+#define _STORE_SLICE 541
+#define _STORE_SUBSCR 542
+#define _STORE_SUBSCR_DICT 543
+#define _STORE_SUBSCR_LIST_INT 544
+#define _SWAP 545
+#define _SWAP_2 546
+#define _SWAP_3 547
+#define _SWAP_FAST 548
+#define _SWAP_FAST_0 549
+#define _SWAP_FAST_1 550
+#define _SWAP_FAST_2 551
+#define _SWAP_FAST_3 552
+#define _SWAP_FAST_4 553
+#define _SWAP_FAST_5 554
+#define _SWAP_FAST_6 555
+#define _SWAP_FAST_7 556
+#define _TIER2_RESUME_CHECK 557
+#define _TO_BOOL 558
 #define _TO_BOOL_BOOL TO_BOOL_BOOL
 #define _TO_BOOL_INT TO_BOOL_INT
-#define _TO_BOOL_LIST 555
+#define _TO_BOOL_LIST 559
 #define _TO_BOOL_NONE TO_BOOL_NONE
-#define _TO_BOOL_STR 556
+#define _TO_BOOL_STR 560
 #define _TRACE_RECORD TRACE_RECORD
 #define _UNARY_INVERT UNARY_INVERT
 #define _UNARY_NEGATIVE UNARY_NEGATIVE
 #define _UNARY_NOT UNARY_NOT
 #define _UNPACK_EX UNPACK_EX
-#define _UNPACK_SEQUENCE 557
-#define _UNPACK_SEQUENCE_LIST 558
-#define _UNPACK_SEQUENCE_TUPLE 559
-#define _UNPACK_SEQUENCE_TWO_TUPLE 560
+#define _UNPACK_SEQUENCE 561
+#define _UNPACK_SEQUENCE_LIST 562
+#define _UNPACK_SEQUENCE_TUPLE 563
+#define _UNPACK_SEQUENCE_TWO_TUPLE 564
 #define _WITH_EXCEPT_START WITH_EXCEPT_START
 #define _YIELD_VALUE YIELD_VALUE
-#define MAX_UOP_ID 560
-#define _BINARY_OP_r21 561
-#define _BINARY_OP_ADD_FLOAT_r03 562
-#define _BINARY_OP_ADD_FLOAT_r13 563
-#define _BINARY_OP_ADD_FLOAT_r23 564
-#define _BINARY_OP_ADD_INT_r03 565
-#define _BINARY_OP_ADD_INT_r13 566
-#define _BINARY_OP_ADD_INT_r23 567
-#define _BINARY_OP_ADD_UNICODE_r03 568
-#define _BINARY_OP_ADD_UNICODE_r13 569
-#define _BINARY_OP_ADD_UNICODE_r23 570
-#define _BINARY_OP_EXTEND_r21 571
-#define _BINARY_OP_INPLACE_ADD_UNICODE_r21 572
-#define _BINARY_OP_MULTIPLY_FLOAT_r03 573
-#define _BINARY_OP_MULTIPLY_FLOAT_r13 574
-#define _BINARY_OP_MULTIPLY_FLOAT_r23 575
-#define _BINARY_OP_MULTIPLY_INT_r03 576
-#define _BINARY_OP_MULTIPLY_INT_r13 577
-#define _BINARY_OP_MULTIPLY_INT_r23 578
-#define _BINARY_OP_SUBSCR_CHECK_FUNC_r23 579
-#define _BINARY_OP_SUBSCR_DICT_r21 580
-#define _BINARY_OP_SUBSCR_INIT_CALL_r01 581
-#define _BINARY_OP_SUBSCR_INIT_CALL_r11 582
-#define _BINARY_OP_SUBSCR_INIT_CALL_r21 583
-#define _BINARY_OP_SUBSCR_INIT_CALL_r31 584
-#define _BINARY_OP_SUBSCR_LIST_INT_r23 585
-#define _BINARY_OP_SUBSCR_LIST_SLICE_r21 586
-#define _BINARY_OP_SUBSCR_STR_INT_r23 587
-#define _BINARY_OP_SUBSCR_TUPLE_INT_r03 588
-#define _BINARY_OP_SUBSCR_TUPLE_INT_r13 589
-#define _BINARY_OP_SUBSCR_TUPLE_INT_r23 590
-#define _BINARY_OP_SUBSCR_USTR_INT_r23 591
-#define _BINARY_OP_SUBTRACT_FLOAT_r03 592
-#define _BINARY_OP_SUBTRACT_FLOAT_r13 593
-#define _BINARY_OP_SUBTRACT_FLOAT_r23 594
-#define _BINARY_OP_SUBTRACT_INT_r03 595
-#define _BINARY_OP_SUBTRACT_INT_r13 596
-#define _BINARY_OP_SUBTRACT_INT_r23 597
-#define _BINARY_SLICE_r31 598
-#define _BUILD_INTERPOLATION_r01 599
-#define _BUILD_LIST_r01 600
-#define _BUILD_MAP_r01 601
-#define _BUILD_SET_r01 602
-#define _BUILD_SLICE_r01 603
-#define _BUILD_STRING_r01 604
-#define _BUILD_TEMPLATE_r21 605
-#define _BUILD_TUPLE_r01 606
-#define _CALL_BUILTIN_CLASS_r01 607
-#define _CALL_BUILTIN_FAST_r01 608
-#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01 609
-#define _CALL_BUILTIN_O_r03 610
-#define _CALL_INTRINSIC_1_r11 611
-#define _CALL_INTRINSIC_2_r21 612
-#define _CALL_ISINSTANCE_r31 613
-#define _CALL_KW_NON_PY_r11 614
-#define _CALL_LEN_r33 615
-#define _CALL_LIST_APPEND_r03 616
-#define _CALL_LIST_APPEND_r13 617
-#define _CALL_LIST_APPEND_r23 618
-#define _CALL_LIST_APPEND_r33 619
-#define _CALL_METHOD_DESCRIPTOR_FAST_r01 620
-#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01 621
-#define _CALL_METHOD_DESCRIPTOR_NOARGS_r01 622
-#define _CALL_METHOD_DESCRIPTOR_O_r03 623
-#define _CALL_NON_PY_GENERAL_r01 624
-#define _CALL_STR_1_r32 625
-#define _CALL_TUPLE_1_r32 626
-#define _CALL_TYPE_1_r02 627
-#define _CALL_TYPE_1_r12 628
-#define _CALL_TYPE_1_r22 629
-#define _CALL_TYPE_1_r32 630
-#define _CHECK_AND_ALLOCATE_OBJECT_r00 631
-#define _CHECK_ATTR_CLASS_r01 632
-#define _CHECK_ATTR_CLASS_r11 633
-#define _CHECK_ATTR_CLASS_r22 634
-#define _CHECK_ATTR_CLASS_r33 635
-#define _CHECK_ATTR_METHOD_LAZY_DICT_r01 636
-#define _CHECK_ATTR_METHOD_LAZY_DICT_r11 637
-#define _CHECK_ATTR_METHOD_LAZY_DICT_r22 638
-#define _CHECK_ATTR_METHOD_LAZY_DICT_r33 639
-#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00 640
-#define _CHECK_EG_MATCH_r22 641
-#define _CHECK_EXC_MATCH_r22 642
-#define _CHECK_FUNCTION_EXACT_ARGS_r00 643
-#define _CHECK_FUNCTION_VERSION_r00 644
-#define _CHECK_FUNCTION_VERSION_INLINE_r00 645
-#define _CHECK_FUNCTION_VERSION_INLINE_r11 646
-#define _CHECK_FUNCTION_VERSION_INLINE_r22 647
-#define _CHECK_FUNCTION_VERSION_INLINE_r33 648
-#define _CHECK_FUNCTION_VERSION_KW_r11 649
-#define _CHECK_IS_NOT_PY_CALLABLE_r00 650
-#define _CHECK_IS_NOT_PY_CALLABLE_KW_r11 651
-#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r01 652
-#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r11 653
-#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r22 654
-#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 655
-#define _CHECK_METHOD_VERSION_r00 656
-#define _CHECK_METHOD_VERSION_KW_r11 657
-#define _CHECK_PEP_523_r00 658
-#define _CHECK_PEP_523_r11 659
-#define _CHECK_PEP_523_r22 660
-#define _CHECK_PEP_523_r33 661
-#define _CHECK_PERIODIC_r00 662
-#define _CHECK_PERIODIC_AT_END_r00 663
-#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00 664
-#define _CHECK_RECURSION_REMAINING_r00 665
-#define _CHECK_RECURSION_REMAINING_r11 666
-#define _CHECK_RECURSION_REMAINING_r22 667
-#define _CHECK_RECURSION_REMAINING_r33 668
-#define _CHECK_STACK_SPACE_r00 669
-#define _CHECK_STACK_SPACE_OPERAND_r00 670
-#define _CHECK_STACK_SPACE_OPERAND_r11 671
-#define _CHECK_STACK_SPACE_OPERAND_r22 672
-#define _CHECK_STACK_SPACE_OPERAND_r33 673
-#define _CHECK_VALIDITY_r00 674
-#define _CHECK_VALIDITY_r11 675
-#define _CHECK_VALIDITY_r22 676
-#define _CHECK_VALIDITY_r33 677
-#define _COLD_DYNAMIC_EXIT_r00 678
-#define _COLD_EXIT_r00 679
-#define _COMPARE_OP_r21 680
-#define _COMPARE_OP_FLOAT_r03 681
-#define _COMPARE_OP_FLOAT_r13 682
-#define _COMPARE_OP_FLOAT_r23 683
-#define _COMPARE_OP_INT_r23 684
-#define _COMPARE_OP_STR_r23 685
-#define _CONTAINS_OP_r21 686
-#define _CONTAINS_OP_DICT_r21 687
-#define _CONTAINS_OP_SET_r21 688
-#define _CONVERT_VALUE_r11 689
-#define _COPY_r01 690
-#define _COPY_1_r02 691
-#define _COPY_1_r12 692
-#define _COPY_1_r23 693
-#define _COPY_2_r03 694
-#define _COPY_2_r13 695
-#define _COPY_2_r23 696
-#define _COPY_3_r03 697
-#define _COPY_3_r13 698
-#define _COPY_3_r23 699
-#define _COPY_3_r33 700
-#define _COPY_FREE_VARS_r00 701
-#define _COPY_FREE_VARS_r11 702
-#define _COPY_FREE_VARS_r22 703
-#define _COPY_FREE_VARS_r33 704
-#define _CREATE_INIT_FRAME_r01 705
-#define _DELETE_ATTR_r10 706
-#define _DELETE_DEREF_r00 707
-#define _DELETE_FAST_r00 708
-#define _DELETE_GLOBAL_r00 709
-#define _DELETE_NAME_r00 710
-#define _DELETE_SUBSCR_r20 711
-#define _DEOPT_r00 712
-#define _DEOPT_r10 713
-#define _DEOPT_r20 714
-#define _DEOPT_r30 715
-#define _DICT_MERGE_r10 716
-#define _DICT_UPDATE_r10 717
-#define _DO_CALL_r01 718
-#define _DO_CALL_FUNCTION_EX_r31 719
-#define _DO_CALL_KW_r11 720
-#define _DYNAMIC_EXIT_r00 721
-#define _DYNAMIC_EXIT_r10 722
-#define _DYNAMIC_EXIT_r20 723
-#define _DYNAMIC_EXIT_r30 724
-#define _END_FOR_r10 725
-#define _END_SEND_r21 726
-#define _ERROR_POP_N_r00 727
-#define _EXIT_INIT_CHECK_r10 728
-#define _EXIT_TRACE_r00 729
-#define _EXIT_TRACE_r10 730
-#define _EXIT_TRACE_r20 731
-#define _EXIT_TRACE_r30 732
-#define _EXPAND_METHOD_r00 733
-#define _EXPAND_METHOD_KW_r11 734
-#define _FATAL_ERROR_r00 735
-#define _FATAL_ERROR_r11 736
-#define _FATAL_ERROR_r22 737
-#define _FATAL_ERROR_r33 738
-#define _FORMAT_SIMPLE_r11 739
-#define _FORMAT_WITH_SPEC_r21 740
-#define _FOR_ITER_r23 741
-#define _FOR_ITER_GEN_FRAME_r03 742
-#define _FOR_ITER_GEN_FRAME_r13 743
-#define _FOR_ITER_GEN_FRAME_r23 744
-#define _FOR_ITER_TIER_TWO_r23 745
-#define _GET_AITER_r11 746
-#define _GET_ANEXT_r12 747
-#define _GET_AWAITABLE_r11 748
-#define _GET_ITER_r12 749
-#define _GET_LEN_r12 750
-#define _GET_YIELD_FROM_ITER_r11 751
-#define _GUARD_BINARY_OP_EXTEND_r22 752
-#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r02 753
-#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r12 754
-#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r22 755
-#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r33 756
-#define _GUARD_CALLABLE_ISINSTANCE_r03 757
-#define _GUARD_CALLABLE_ISINSTANCE_r13 758
-#define _GUARD_CALLABLE_ISINSTANCE_r23 759
-#define _GUARD_CALLABLE_ISINSTANCE_r33 760
-#define _GUARD_CALLABLE_LEN_r03 761
-#define _GUARD_CALLABLE_LEN_r13 762
-#define _GUARD_CALLABLE_LEN_r23 763
-#define _GUARD_CALLABLE_LEN_r33 764
-#define _GUARD_CALLABLE_LIST_APPEND_r03 765
-#define _GUARD_CALLABLE_LIST_APPEND_r13 766
-#define _GUARD_CALLABLE_LIST_APPEND_r23 767
-#define _GUARD_CALLABLE_LIST_APPEND_r33 768
-#define _GUARD_CALLABLE_STR_1_r03 769
-#define _GUARD_CALLABLE_STR_1_r13 770
-#define _GUARD_CALLABLE_STR_1_r23 771
-#define _GUARD_CALLABLE_STR_1_r33 772
-#define _GUARD_CALLABLE_TUPLE_1_r03 773
-#define _GUARD_CALLABLE_TUPLE_1_r13 774
-#define _GUARD_CALLABLE_TUPLE_1_r23 775
-#define _GUARD_CALLABLE_TUPLE_1_r33 776
-#define _GUARD_CALLABLE_TYPE_1_r03 777
-#define _GUARD_CALLABLE_TYPE_1_r13 778
-#define _GUARD_CALLABLE_TYPE_1_r23 779
-#define _GUARD_CALLABLE_TYPE_1_r33 780
-#define _GUARD_DORV_NO_DICT_r01 781
-#define _GUARD_DORV_NO_DICT_r11 782
-#define _GUARD_DORV_NO_DICT_r22 783
-#define _GUARD_DORV_NO_DICT_r33 784
-#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r01 785
-#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 786
-#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 787
-#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 788
-#define _GUARD_GLOBALS_VERSION_r00 789
-#define _GUARD_GLOBALS_VERSION_r11 790
-#define _GUARD_GLOBALS_VERSION_r22 791
-#define _GUARD_GLOBALS_VERSION_r33 792
-#define _GUARD_IP_RETURN_GENERATOR_r00 793
-#define _GUARD_IP_RETURN_GENERATOR_r11 794
-#define _GUARD_IP_RETURN_GENERATOR_r22 795
-#define _GUARD_IP_RETURN_GENERATOR_r33 796
-#define _GUARD_IP_RETURN_VALUE_r00 797
-#define _GUARD_IP_RETURN_VALUE_r11 798
-#define _GUARD_IP_RETURN_VALUE_r22 799
-#define _GUARD_IP_RETURN_VALUE_r33 800
-#define _GUARD_IP_YIELD_VALUE_r00 801
-#define _GUARD_IP_YIELD_VALUE_r11 802
-#define _GUARD_IP_YIELD_VALUE_r22 803
-#define _GUARD_IP_YIELD_VALUE_r33 804
-#define _GUARD_IP__PUSH_FRAME_r00 805
-#define _GUARD_IP__PUSH_FRAME_r11 806
-#define _GUARD_IP__PUSH_FRAME_r22 807
-#define _GUARD_IP__PUSH_FRAME_r33 808
-#define _GUARD_IS_FALSE_POP_r00 809
-#define _GUARD_IS_FALSE_POP_r10 810
-#define _GUARD_IS_FALSE_POP_r21 811
-#define _GUARD_IS_FALSE_POP_r32 812
-#define _GUARD_IS_NONE_POP_r00 813
-#define _GUARD_IS_NONE_POP_r10 814
-#define _GUARD_IS_NONE_POP_r21 815
-#define _GUARD_IS_NONE_POP_r32 816
-#define _GUARD_IS_NOT_NONE_POP_r10 817
-#define _GUARD_IS_TRUE_POP_r00 818
-#define _GUARD_IS_TRUE_POP_r10 819
-#define _GUARD_IS_TRUE_POP_r21 820
-#define _GUARD_IS_TRUE_POP_r32 821
-#define _GUARD_KEYS_VERSION_r01 822
-#define _GUARD_KEYS_VERSION_r11 823
-#define _GUARD_KEYS_VERSION_r22 824
-#define _GUARD_KEYS_VERSION_r33 825
-#define _GUARD_NOS_COMPACT_ASCII_r02 826
-#define _GUARD_NOS_COMPACT_ASCII_r12 827
-#define _GUARD_NOS_COMPACT_ASCII_r22 828
-#define _GUARD_NOS_COMPACT_ASCII_r33 829
-#define _GUARD_NOS_DICT_r02 830
-#define _GUARD_NOS_DICT_r12 831
-#define _GUARD_NOS_DICT_r22 832
-#define _GUARD_NOS_DICT_r33 833
-#define _GUARD_NOS_FLOAT_r02 834
-#define _GUARD_NOS_FLOAT_r12 835
-#define _GUARD_NOS_FLOAT_r22 836
-#define _GUARD_NOS_FLOAT_r33 837
-#define _GUARD_NOS_INT_r02 838
-#define _GUARD_NOS_INT_r12 839
-#define _GUARD_NOS_INT_r22 840
-#define _GUARD_NOS_INT_r33 841
-#define _GUARD_NOS_LIST_r02 842
-#define _GUARD_NOS_LIST_r12 843
-#define _GUARD_NOS_LIST_r22 844
-#define _GUARD_NOS_LIST_r33 845
-#define _GUARD_NOS_NOT_NULL_r02 846
-#define _GUARD_NOS_NOT_NULL_r12 847
-#define _GUARD_NOS_NOT_NULL_r22 848
-#define _GUARD_NOS_NOT_NULL_r33 849
-#define _GUARD_NOS_NULL_r02 850
-#define _GUARD_NOS_NULL_r12 851
-#define _GUARD_NOS_NULL_r22 852
-#define _GUARD_NOS_NULL_r33 853
-#define _GUARD_NOS_OVERFLOWED_r02 854
-#define _GUARD_NOS_OVERFLOWED_r12 855
-#define _GUARD_NOS_OVERFLOWED_r22 856
-#define _GUARD_NOS_OVERFLOWED_r33 857
-#define _GUARD_NOS_TUPLE_r02 858
-#define _GUARD_NOS_TUPLE_r12 859
-#define _GUARD_NOS_TUPLE_r22 860
-#define _GUARD_NOS_TUPLE_r33 861
-#define _GUARD_NOS_UNICODE_r02 862
-#define _GUARD_NOS_UNICODE_r12 863
-#define _GUARD_NOS_UNICODE_r22 864
-#define _GUARD_NOS_UNICODE_r33 865
-#define _GUARD_NOT_EXHAUSTED_LIST_r02 866
-#define _GUARD_NOT_EXHAUSTED_LIST_r12 867
-#define _GUARD_NOT_EXHAUSTED_LIST_r22 868
-#define _GUARD_NOT_EXHAUSTED_LIST_r33 869
-#define _GUARD_NOT_EXHAUSTED_RANGE_r02 870
-#define _GUARD_NOT_EXHAUSTED_RANGE_r12 871
-#define _GUARD_NOT_EXHAUSTED_RANGE_r22 872
-#define _GUARD_NOT_EXHAUSTED_RANGE_r33 873
-#define _GUARD_NOT_EXHAUSTED_TUPLE_r02 874
-#define _GUARD_NOT_EXHAUSTED_TUPLE_r12 875
-#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 876
-#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 877
-#define _GUARD_THIRD_NULL_r03 878
-#define _GUARD_THIRD_NULL_r13 879
-#define _GUARD_THIRD_NULL_r23 880
-#define _GUARD_THIRD_NULL_r33 881
-#define _GUARD_TOS_ANY_SET_r01 882
-#define _GUARD_TOS_ANY_SET_r11 883
-#define _GUARD_TOS_ANY_SET_r22 884
-#define _GUARD_TOS_ANY_SET_r33 885
-#define _GUARD_TOS_DICT_r01 886
-#define _GUARD_TOS_DICT_r11 887
-#define _GUARD_TOS_DICT_r22 888
-#define _GUARD_TOS_DICT_r33 889
-#define _GUARD_TOS_FLOAT_r01 890
-#define _GUARD_TOS_FLOAT_r11 891
-#define _GUARD_TOS_FLOAT_r22 892
-#define _GUARD_TOS_FLOAT_r33 893
-#define _GUARD_TOS_INT_r01 894
-#define _GUARD_TOS_INT_r11 895
-#define _GUARD_TOS_INT_r22 896
-#define _GUARD_TOS_INT_r33 897
-#define _GUARD_TOS_LIST_r01 898
-#define _GUARD_TOS_LIST_r11 899
-#define _GUARD_TOS_LIST_r22 900
-#define _GUARD_TOS_LIST_r33 901
-#define _GUARD_TOS_OVERFLOWED_r01 902
-#define _GUARD_TOS_OVERFLOWED_r11 903
-#define _GUARD_TOS_OVERFLOWED_r22 904
-#define _GUARD_TOS_OVERFLOWED_r33 905
-#define _GUARD_TOS_SLICE_r01 906
-#define _GUARD_TOS_SLICE_r11 907
-#define _GUARD_TOS_SLICE_r22 908
-#define _GUARD_TOS_SLICE_r33 909
-#define _GUARD_TOS_TUPLE_r01 910
-#define _GUARD_TOS_TUPLE_r11 911
-#define _GUARD_TOS_TUPLE_r22 912
-#define _GUARD_TOS_TUPLE_r33 913
-#define _GUARD_TOS_UNICODE_r01 914
-#define _GUARD_TOS_UNICODE_r11 915
-#define _GUARD_TOS_UNICODE_r22 916
-#define _GUARD_TOS_UNICODE_r33 917
-#define _GUARD_TYPE_VERSION_r01 918
-#define _GUARD_TYPE_VERSION_r11 919
-#define _GUARD_TYPE_VERSION_r22 920
-#define _GUARD_TYPE_VERSION_r33 921
-#define _GUARD_TYPE_VERSION_AND_LOCK_r01 922
-#define _GUARD_TYPE_VERSION_AND_LOCK_r11 923
-#define _GUARD_TYPE_VERSION_AND_LOCK_r22 924
-#define _GUARD_TYPE_VERSION_AND_LOCK_r33 925
-#define _HANDLE_PENDING_AND_DEOPT_r00 926
-#define _HANDLE_PENDING_AND_DEOPT_r10 927
-#define _HANDLE_PENDING_AND_DEOPT_r20 928
-#define _HANDLE_PENDING_AND_DEOPT_r30 929
-#define _IMPORT_FROM_r12 930
-#define _IMPORT_NAME_r21 931
-#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 932
-#define _INIT_CALL_PY_EXACT_ARGS_r01 933
-#define _INIT_CALL_PY_EXACT_ARGS_0_r01 934
-#define _INIT_CALL_PY_EXACT_ARGS_1_r01 935
-#define _INIT_CALL_PY_EXACT_ARGS_2_r01 936
-#define _INIT_CALL_PY_EXACT_ARGS_3_r01 937
-#define _INIT_CALL_PY_EXACT_ARGS_4_r01 938
-#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r02 939
-#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r12 940
-#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r23 941
-#define _INSERT_NULL_r10 942
-#define _INSTRUMENTED_FOR_ITER_r23 943
-#define _INSTRUMENTED_INSTRUCTION_r00 944
-#define _INSTRUMENTED_JUMP_FORWARD_r00 945
-#define _INSTRUMENTED_JUMP_FORWARD_r11 946
-#define _INSTRUMENTED_JUMP_FORWARD_r22 947
-#define _INSTRUMENTED_JUMP_FORWARD_r33 948
-#define _INSTRUMENTED_LINE_r00 949
-#define _INSTRUMENTED_NOT_TAKEN_r00 950
-#define _INSTRUMENTED_NOT_TAKEN_r11 951
-#define _INSTRUMENTED_NOT_TAKEN_r22 952
-#define _INSTRUMENTED_NOT_TAKEN_r33 953
-#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r00 954
-#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 955
-#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 956
-#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 957
-#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 958
-#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 959
-#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r00 960
-#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 961
-#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 962
-#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 963
-#define _IS_NONE_r11 964
-#define _IS_OP_r03 965
-#define _IS_OP_r13 966
-#define _IS_OP_r23 967
-#define _ITER_CHECK_LIST_r02 968
-#define _ITER_CHECK_LIST_r12 969
-#define _ITER_CHECK_LIST_r22 970
-#define _ITER_CHECK_LIST_r33 971
-#define _ITER_CHECK_RANGE_r02 972
-#define _ITER_CHECK_RANGE_r12 973
-#define _ITER_CHECK_RANGE_r22 974
-#define _ITER_CHECK_RANGE_r33 975
-#define _ITER_CHECK_TUPLE_r02 976
-#define _ITER_CHECK_TUPLE_r12 977
-#define _ITER_CHECK_TUPLE_r22 978
-#define _ITER_CHECK_TUPLE_r33 979
-#define _ITER_JUMP_LIST_r02 980
-#define _ITER_JUMP_LIST_r12 981
-#define _ITER_JUMP_LIST_r22 982
-#define _ITER_JUMP_LIST_r33 983
-#define _ITER_JUMP_RANGE_r02 984
-#define _ITER_JUMP_RANGE_r12 985
-#define _ITER_JUMP_RANGE_r22 986
-#define _ITER_JUMP_RANGE_r33 987
-#define _ITER_JUMP_TUPLE_r02 988
-#define _ITER_JUMP_TUPLE_r12 989
-#define _ITER_JUMP_TUPLE_r22 990
-#define _ITER_JUMP_TUPLE_r33 991
-#define _ITER_NEXT_LIST_r23 992
-#define _ITER_NEXT_LIST_TIER_TWO_r23 993
-#define _ITER_NEXT_RANGE_r03 994
-#define _ITER_NEXT_RANGE_r13 995
-#define _ITER_NEXT_RANGE_r23 996
-#define _ITER_NEXT_TUPLE_r03 997
-#define _ITER_NEXT_TUPLE_r13 998
-#define _ITER_NEXT_TUPLE_r23 999
-#define _JUMP_BACKWARD_NO_INTERRUPT_r00 1000
-#define _JUMP_BACKWARD_NO_INTERRUPT_r11 1001
-#define _JUMP_BACKWARD_NO_INTERRUPT_r22 1002
-#define _JUMP_BACKWARD_NO_INTERRUPT_r33 1003
-#define _JUMP_TO_TOP_r00 1004
-#define _LIST_APPEND_r10 1005
-#define _LIST_EXTEND_r10 1006
-#define _LOAD_ATTR_r10 1007
-#define _LOAD_ATTR_CLASS_r11 1008
-#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 1009
-#define _LOAD_ATTR_INSTANCE_VALUE_r02 1010
-#define _LOAD_ATTR_INSTANCE_VALUE_r12 1011
-#define _LOAD_ATTR_INSTANCE_VALUE_r23 1012
-#define _LOAD_ATTR_METHOD_LAZY_DICT_r02 1013
-#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 1014
-#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 1015
-#define _LOAD_ATTR_METHOD_NO_DICT_r02 1016
-#define _LOAD_ATTR_METHOD_NO_DICT_r12 1017
-#define _LOAD_ATTR_METHOD_NO_DICT_r23 1018
-#define _LOAD_ATTR_METHOD_WITH_VALUES_r02 1019
-#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 1020
-#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 1021
-#define _LOAD_ATTR_MODULE_r11 1022
-#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 1023
-#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 1024
-#define _LOAD_ATTR_PROPERTY_FRAME_r11 1025
-#define _LOAD_ATTR_SLOT_r02 1026
-#define _LOAD_ATTR_SLOT_r12 1027
-#define _LOAD_ATTR_SLOT_r23 1028
-#define _LOAD_ATTR_WITH_HINT_r12 1029
-#define _LOAD_BUILD_CLASS_r01 1030
-#define _LOAD_BYTECODE_r00 1031
-#define _LOAD_COMMON_CONSTANT_r01 1032
-#define _LOAD_COMMON_CONSTANT_r12 1033
-#define _LOAD_COMMON_CONSTANT_r23 1034
-#define _LOAD_CONST_r01 1035
-#define _LOAD_CONST_r12 1036
-#define _LOAD_CONST_r23 1037
-#define _LOAD_CONST_INLINE_r01 1038
-#define _LOAD_CONST_INLINE_r12 1039
-#define _LOAD_CONST_INLINE_r23 1040
-#define _LOAD_CONST_INLINE_BORROW_r01 1041
-#define _LOAD_CONST_INLINE_BORROW_r12 1042
-#define _LOAD_CONST_INLINE_BORROW_r23 1043
-#define _LOAD_CONST_UNDER_INLINE_r02 1044
-#define _LOAD_CONST_UNDER_INLINE_r12 1045
-#define _LOAD_CONST_UNDER_INLINE_r23 1046
-#define _LOAD_CONST_UNDER_INLINE_BORROW_r02 1047
-#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 1048
-#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 1049
-#define _LOAD_DEREF_r01 1050
-#define _LOAD_FAST_r01 1051
-#define _LOAD_FAST_r12 1052
-#define _LOAD_FAST_r23 1053
-#define _LOAD_FAST_0_r01 1054
-#define _LOAD_FAST_0_r12 1055
-#define _LOAD_FAST_0_r23 1056
-#define _LOAD_FAST_1_r01 1057
-#define _LOAD_FAST_1_r12 1058
-#define _LOAD_FAST_1_r23 1059
-#define _LOAD_FAST_2_r01 1060
-#define _LOAD_FAST_2_r12 1061
-#define _LOAD_FAST_2_r23 1062
-#define _LOAD_FAST_3_r01 1063
-#define _LOAD_FAST_3_r12 1064
-#define _LOAD_FAST_3_r23 1065
-#define _LOAD_FAST_4_r01 1066
-#define _LOAD_FAST_4_r12 1067
-#define _LOAD_FAST_4_r23 1068
-#define _LOAD_FAST_5_r01 1069
-#define _LOAD_FAST_5_r12 1070
-#define _LOAD_FAST_5_r23 1071
-#define _LOAD_FAST_6_r01 1072
-#define _LOAD_FAST_6_r12 1073
-#define _LOAD_FAST_6_r23 1074
-#define _LOAD_FAST_7_r01 1075
-#define _LOAD_FAST_7_r12 1076
-#define _LOAD_FAST_7_r23 1077
-#define _LOAD_FAST_AND_CLEAR_r01 1078
-#define _LOAD_FAST_AND_CLEAR_r12 1079
-#define _LOAD_FAST_AND_CLEAR_r23 1080
-#define _LOAD_FAST_BORROW_r01 1081
-#define _LOAD_FAST_BORROW_r12 1082
-#define _LOAD_FAST_BORROW_r23 1083
-#define _LOAD_FAST_BORROW_0_r01 1084
-#define _LOAD_FAST_BORROW_0_r12 1085
-#define _LOAD_FAST_BORROW_0_r23 1086
-#define _LOAD_FAST_BORROW_1_r01 1087
-#define _LOAD_FAST_BORROW_1_r12 1088
-#define _LOAD_FAST_BORROW_1_r23 1089
-#define _LOAD_FAST_BORROW_2_r01 1090
-#define _LOAD_FAST_BORROW_2_r12 1091
-#define _LOAD_FAST_BORROW_2_r23 1092
-#define _LOAD_FAST_BORROW_3_r01 1093
-#define _LOAD_FAST_BORROW_3_r12 1094
-#define _LOAD_FAST_BORROW_3_r23 1095
-#define _LOAD_FAST_BORROW_4_r01 1096
-#define _LOAD_FAST_BORROW_4_r12 1097
-#define _LOAD_FAST_BORROW_4_r23 1098
-#define _LOAD_FAST_BORROW_5_r01 1099
-#define _LOAD_FAST_BORROW_5_r12 1100
-#define _LOAD_FAST_BORROW_5_r23 1101
-#define _LOAD_FAST_BORROW_6_r01 1102
-#define _LOAD_FAST_BORROW_6_r12 1103
-#define _LOAD_FAST_BORROW_6_r23 1104
-#define _LOAD_FAST_BORROW_7_r01 1105
-#define _LOAD_FAST_BORROW_7_r12 1106
-#define _LOAD_FAST_BORROW_7_r23 1107
-#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1108
-#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1109
-#define _LOAD_FAST_CHECK_r01 1110
-#define _LOAD_FAST_CHECK_r12 1111
-#define _LOAD_FAST_CHECK_r23 1112
-#define _LOAD_FAST_LOAD_FAST_r02 1113
-#define _LOAD_FAST_LOAD_FAST_r13 1114
-#define _LOAD_FROM_DICT_OR_DEREF_r11 1115
-#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1116
-#define _LOAD_GLOBAL_r00 1117
-#define _LOAD_GLOBAL_BUILTINS_r01 1118
-#define _LOAD_GLOBAL_MODULE_r01 1119
-#define _LOAD_LOCALS_r01 1120
-#define _LOAD_LOCALS_r12 1121
-#define _LOAD_LOCALS_r23 1122
-#define _LOAD_NAME_r01 1123
-#define _LOAD_SMALL_INT_r01 1124
-#define _LOAD_SMALL_INT_r12 1125
-#define _LOAD_SMALL_INT_r23 1126
-#define _LOAD_SMALL_INT_0_r01 1127
-#define _LOAD_SMALL_INT_0_r12 1128
-#define _LOAD_SMALL_INT_0_r23 1129
-#define _LOAD_SMALL_INT_1_r01 1130
-#define _LOAD_SMALL_INT_1_r12 1131
-#define _LOAD_SMALL_INT_1_r23 1132
-#define _LOAD_SMALL_INT_2_r01 1133
-#define _LOAD_SMALL_INT_2_r12 1134
-#define _LOAD_SMALL_INT_2_r23 1135
-#define _LOAD_SMALL_INT_3_r01 1136
-#define _LOAD_SMALL_INT_3_r12 1137
-#define _LOAD_SMALL_INT_3_r23 1138
-#define _LOAD_SPECIAL_r00 1139
-#define _LOAD_SUPER_ATTR_ATTR_r31 1140
-#define _LOAD_SUPER_ATTR_METHOD_r32 1141
-#define _MAKE_CALLARGS_A_TUPLE_r33 1142
-#define _MAKE_CELL_r00 1143
-#define _MAKE_FUNCTION_r11 1144
-#define _MAKE_WARM_r00 1145
-#define _MAKE_WARM_r11 1146
-#define _MAKE_WARM_r22 1147
-#define _MAKE_WARM_r33 1148
-#define _MAP_ADD_r20 1149
-#define _MATCH_CLASS_r31 1150
-#define _MATCH_KEYS_r23 1151
-#define _MATCH_MAPPING_r02 1152
-#define _MATCH_MAPPING_r12 1153
-#define _MATCH_MAPPING_r23 1154
-#define _MATCH_SEQUENCE_r02 1155
-#define _MATCH_SEQUENCE_r12 1156
-#define _MATCH_SEQUENCE_r23 1157
-#define _MAYBE_EXPAND_METHOD_r00 1158
-#define _MAYBE_EXPAND_METHOD_KW_r11 1159
-#define _MONITOR_CALL_r00 1160
-#define _MONITOR_CALL_KW_r11 1161
-#define _MONITOR_JUMP_BACKWARD_r00 1162
-#define _MONITOR_JUMP_BACKWARD_r11 1163
-#define _MONITOR_JUMP_BACKWARD_r22 1164
-#define _MONITOR_JUMP_BACKWARD_r33 1165
-#define _MONITOR_RESUME_r00 1166
-#define _NOP_r00 1167
-#define _NOP_r11 1168
-#define _NOP_r22 1169
-#define _NOP_r33 1170
-#define _POP_CALL_r20 1171
-#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1172
-#define _POP_CALL_ONE_r30 1173
-#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1174
-#define _POP_CALL_TWO_r30 1175
-#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1176
-#define _POP_EXCEPT_r10 1177
-#define _POP_ITER_r20 1178
-#define _POP_JUMP_IF_FALSE_r00 1179
-#define _POP_JUMP_IF_FALSE_r10 1180
-#define _POP_JUMP_IF_FALSE_r21 1181
-#define _POP_JUMP_IF_FALSE_r32 1182
-#define _POP_JUMP_IF_TRUE_r00 1183
-#define _POP_JUMP_IF_TRUE_r10 1184
-#define _POP_JUMP_IF_TRUE_r21 1185
-#define _POP_JUMP_IF_TRUE_r32 1186
-#define _POP_TOP_r10 1187
-#define _POP_TOP_FLOAT_r00 1188
-#define _POP_TOP_FLOAT_r10 1189
-#define _POP_TOP_FLOAT_r21 1190
-#define _POP_TOP_FLOAT_r32 1191
-#define _POP_TOP_INT_r00 1192
-#define _POP_TOP_INT_r10 1193
-#define _POP_TOP_INT_r21 1194
-#define _POP_TOP_INT_r32 1195
-#define _POP_TOP_LOAD_CONST_INLINE_r11 1196
-#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1197
-#define _POP_TOP_NOP_r00 1198
-#define _POP_TOP_NOP_r10 1199
-#define _POP_TOP_NOP_r21 1200
-#define _POP_TOP_NOP_r32 1201
-#define _POP_TOP_UNICODE_r00 1202
-#define _POP_TOP_UNICODE_r10 1203
-#define _POP_TOP_UNICODE_r21 1204
-#define _POP_TOP_UNICODE_r32 1205
-#define _POP_TWO_r20 1206
-#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1207
-#define _PUSH_EXC_INFO_r02 1208
-#define _PUSH_EXC_INFO_r12 1209
-#define _PUSH_EXC_INFO_r23 1210
-#define _PUSH_FRAME_r10 1211
-#define _PUSH_NULL_r01 1212
-#define _PUSH_NULL_r12 1213
-#define _PUSH_NULL_r23 1214
-#define _PUSH_NULL_CONDITIONAL_r00 1215
-#define _PY_FRAME_GENERAL_r01 1216
-#define _PY_FRAME_KW_r11 1217
-#define _QUICKEN_RESUME_r00 1218
-#define _QUICKEN_RESUME_r11 1219
-#define _QUICKEN_RESUME_r22 1220
-#define _QUICKEN_RESUME_r33 1221
-#define _REPLACE_WITH_TRUE_r02 1222
-#define _REPLACE_WITH_TRUE_r12 1223
-#define _REPLACE_WITH_TRUE_r23 1224
-#define _RESUME_CHECK_r00 1225
-#define _RESUME_CHECK_r11 1226
-#define _RESUME_CHECK_r22 1227
-#define _RESUME_CHECK_r33 1228
-#define _RETURN_GENERATOR_r01 1229
-#define _RETURN_VALUE_r11 1230
-#define _SAVE_RETURN_OFFSET_r00 1231
-#define _SAVE_RETURN_OFFSET_r11 1232
-#define _SAVE_RETURN_OFFSET_r22 1233
-#define _SAVE_RETURN_OFFSET_r33 1234
-#define _SEND_r22 1235
-#define _SEND_GEN_FRAME_r22 1236
-#define _SETUP_ANNOTATIONS_r00 1237
-#define _SET_ADD_r10 1238
-#define _SET_FUNCTION_ATTRIBUTE_r01 1239
-#define _SET_FUNCTION_ATTRIBUTE_r11 1240
-#define _SET_FUNCTION_ATTRIBUTE_r21 1241
-#define _SET_FUNCTION_ATTRIBUTE_r32 1242
-#define _SET_IP_r00 1243
-#define _SET_IP_r11 1244
-#define _SET_IP_r22 1245
-#define _SET_IP_r33 1246
-#define _SET_UPDATE_r10 1247
-#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r02 1248
-#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r12 1249
-#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r22 1250
-#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r32 1251
-#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r03 1252
-#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r13 1253
-#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r23 1254
-#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r33 1255
-#define _SPILL_OR_RELOAD_r01 1256
-#define _SPILL_OR_RELOAD_r02 1257
-#define _SPILL_OR_RELOAD_r03 1258
-#define _SPILL_OR_RELOAD_r10 1259
-#define _SPILL_OR_RELOAD_r12 1260
-#define _SPILL_OR_RELOAD_r13 1261
-#define _SPILL_OR_RELOAD_r20 1262
-#define _SPILL_OR_RELOAD_r21 1263
-#define _SPILL_OR_RELOAD_r23 1264
-#define _SPILL_OR_RELOAD_r30 1265
-#define _SPILL_OR_RELOAD_r31 1266
-#define _SPILL_OR_RELOAD_r32 1267
-#define _START_EXECUTOR_r00 1268
-#define _STORE_ATTR_r20 1269
-#define _STORE_ATTR_INSTANCE_VALUE_r21 1270
-#define _STORE_ATTR_SLOT_r21 1271
-#define _STORE_ATTR_WITH_HINT_r21 1272
-#define _STORE_DEREF_r10 1273
-#define _STORE_FAST_LOAD_FAST_r11 1274
-#define _STORE_FAST_STORE_FAST_r20 1275
-#define _STORE_GLOBAL_r10 1276
-#define _STORE_NAME_r10 1277
-#define _STORE_SLICE_r30 1278
-#define _STORE_SUBSCR_r30 1279
-#define _STORE_SUBSCR_DICT_r31 1280
-#define _STORE_SUBSCR_LIST_INT_r32 1281
-#define _SWAP_r11 1282
-#define _SWAP_2_r02 1283
-#define _SWAP_2_r12 1284
-#define _SWAP_2_r22 1285
-#define _SWAP_2_r33 1286
-#define _SWAP_3_r03 1287
-#define _SWAP_3_r13 1288
-#define _SWAP_3_r23 1289
-#define _SWAP_3_r33 1290
-#define _SWAP_FAST_r01 1291
-#define _SWAP_FAST_r11 1292
-#define _SWAP_FAST_r22 1293
-#define _SWAP_FAST_r33 1294
-#define _SWAP_FAST_0_r01 1295
-#define _SWAP_FAST_0_r11 1296
-#define _SWAP_FAST_0_r22 1297
-#define _SWAP_FAST_0_r33 1298
-#define _SWAP_FAST_1_r01 1299
-#define _SWAP_FAST_1_r11 1300
-#define _SWAP_FAST_1_r22 1301
-#define _SWAP_FAST_1_r33 1302
-#define _SWAP_FAST_2_r01 1303
-#define _SWAP_FAST_2_r11 1304
-#define _SWAP_FAST_2_r22 1305
-#define _SWAP_FAST_2_r33 1306
-#define _SWAP_FAST_3_r01 1307
-#define _SWAP_FAST_3_r11 1308
-#define _SWAP_FAST_3_r22 1309
-#define _SWAP_FAST_3_r33 1310
-#define _SWAP_FAST_4_r01 1311
-#define _SWAP_FAST_4_r11 1312
-#define _SWAP_FAST_4_r22 1313
-#define _SWAP_FAST_4_r33 1314
-#define _SWAP_FAST_5_r01 1315
-#define _SWAP_FAST_5_r11 1316
-#define _SWAP_FAST_5_r22 1317
-#define _SWAP_FAST_5_r33 1318
-#define _SWAP_FAST_6_r01 1319
-#define _SWAP_FAST_6_r11 1320
-#define _SWAP_FAST_6_r22 1321
-#define _SWAP_FAST_6_r33 1322
-#define _SWAP_FAST_7_r01 1323
-#define _SWAP_FAST_7_r11 1324
-#define _SWAP_FAST_7_r22 1325
-#define _SWAP_FAST_7_r33 1326
-#define _TIER2_RESUME_CHECK_r00 1327
-#define _TIER2_RESUME_CHECK_r11 1328
-#define _TIER2_RESUME_CHECK_r22 1329
-#define _TIER2_RESUME_CHECK_r33 1330
-#define _TO_BOOL_r11 1331
-#define _TO_BOOL_BOOL_r01 1332
-#define _TO_BOOL_BOOL_r11 1333
-#define _TO_BOOL_BOOL_r22 1334
-#define _TO_BOOL_BOOL_r33 1335
-#define _TO_BOOL_INT_r11 1336
-#define _TO_BOOL_LIST_r11 1337
-#define _TO_BOOL_NONE_r01 1338
-#define _TO_BOOL_NONE_r11 1339
-#define _TO_BOOL_NONE_r22 1340
-#define _TO_BOOL_NONE_r33 1341
-#define _TO_BOOL_STR_r11 1342
-#define _TRACE_RECORD_r00 1343
-#define _UNARY_INVERT_r11 1344
-#define _UNARY_NEGATIVE_r11 1345
-#define _UNARY_NOT_r01 1346
-#define _UNARY_NOT_r11 1347
-#define _UNARY_NOT_r22 1348
-#define _UNARY_NOT_r33 1349
-#define _UNPACK_EX_r10 1350
-#define _UNPACK_SEQUENCE_r10 1351
-#define _UNPACK_SEQUENCE_LIST_r10 1352
-#define _UNPACK_SEQUENCE_TUPLE_r10 1353
-#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1354
-#define _WITH_EXCEPT_START_r33 1355
-#define _YIELD_VALUE_r11 1356
-#define MAX_UOP_REGS_ID 1356
+#define MAX_UOP_ID 564
+#define _BINARY_OP_r21 565
+#define _BINARY_OP_ADD_FLOAT_r03 566
+#define _BINARY_OP_ADD_FLOAT_r13 567
+#define _BINARY_OP_ADD_FLOAT_r23 568
+#define _BINARY_OP_ADD_INT_r03 569
+#define _BINARY_OP_ADD_INT_r13 570
+#define _BINARY_OP_ADD_INT_r23 571
+#define _BINARY_OP_ADD_UNICODE_r03 572
+#define _BINARY_OP_ADD_UNICODE_r13 573
+#define _BINARY_OP_ADD_UNICODE_r23 574
+#define _BINARY_OP_EXTEND_r21 575
+#define _BINARY_OP_INPLACE_ADD_UNICODE_r21 576
+#define _BINARY_OP_MULTIPLY_FLOAT_r03 577
+#define _BINARY_OP_MULTIPLY_FLOAT_r13 578
+#define _BINARY_OP_MULTIPLY_FLOAT_r23 579
+#define _BINARY_OP_MULTIPLY_INT_r03 580
+#define _BINARY_OP_MULTIPLY_INT_r13 581
+#define _BINARY_OP_MULTIPLY_INT_r23 582
+#define _BINARY_OP_SUBSCR_CHECK_FUNC_r23 583
+#define _BINARY_OP_SUBSCR_DICT_r21 584
+#define _BINARY_OP_SUBSCR_INIT_CALL_r01 585
+#define _BINARY_OP_SUBSCR_INIT_CALL_r11 586
+#define _BINARY_OP_SUBSCR_INIT_CALL_r21 587
+#define _BINARY_OP_SUBSCR_INIT_CALL_r31 588
+#define _BINARY_OP_SUBSCR_LIST_INT_r23 589
+#define _BINARY_OP_SUBSCR_LIST_SLICE_r21 590
+#define _BINARY_OP_SUBSCR_STR_INT_r23 591
+#define _BINARY_OP_SUBSCR_TUPLE_INT_r03 592
+#define _BINARY_OP_SUBSCR_TUPLE_INT_r13 593
+#define _BINARY_OP_SUBSCR_TUPLE_INT_r23 594
+#define _BINARY_OP_SUBSCR_USTR_INT_r23 595
+#define _BINARY_OP_SUBTRACT_FLOAT_r03 596
+#define _BINARY_OP_SUBTRACT_FLOAT_r13 597
+#define _BINARY_OP_SUBTRACT_FLOAT_r23 598
+#define _BINARY_OP_SUBTRACT_INT_r03 599
+#define _BINARY_OP_SUBTRACT_INT_r13 600
+#define _BINARY_OP_SUBTRACT_INT_r23 601
+#define _BINARY_SLICE_r31 602
+#define _BUILD_INTERPOLATION_r01 603
+#define _BUILD_LIST_r01 604
+#define _BUILD_MAP_r01 605
+#define _BUILD_SET_r01 606
+#define _BUILD_SLICE_r01 607
+#define _BUILD_STRING_r01 608
+#define _BUILD_TEMPLATE_r21 609
+#define _BUILD_TUPLE_r01 610
+#define _CALL_BUILTIN_CLASS_r01 611
+#define _CALL_BUILTIN_FAST_r01 612
+#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01 613
+#define _CALL_BUILTIN_O_r03 614
+#define _CALL_FUNCTION_EX_NON_PY_GENERAL_r31 615
+#define _CALL_INTRINSIC_1_r11 616
+#define _CALL_INTRINSIC_2_r21 617
+#define _CALL_ISINSTANCE_r31 618
+#define _CALL_KW_NON_PY_r11 619
+#define _CALL_LEN_r33 620
+#define _CALL_LIST_APPEND_r03 621
+#define _CALL_LIST_APPEND_r13 622
+#define _CALL_LIST_APPEND_r23 623
+#define _CALL_LIST_APPEND_r33 624
+#define _CALL_METHOD_DESCRIPTOR_FAST_r01 625
+#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01 626
+#define _CALL_METHOD_DESCRIPTOR_NOARGS_r01 627
+#define _CALL_METHOD_DESCRIPTOR_O_r03 628
+#define _CALL_NON_PY_GENERAL_r01 629
+#define _CALL_STR_1_r32 630
+#define _CALL_TUPLE_1_r32 631
+#define _CALL_TYPE_1_r02 632
+#define _CALL_TYPE_1_r12 633
+#define _CALL_TYPE_1_r22 634
+#define _CALL_TYPE_1_r32 635
+#define _CHECK_AND_ALLOCATE_OBJECT_r00 636
+#define _CHECK_ATTR_CLASS_r01 637
+#define _CHECK_ATTR_CLASS_r11 638
+#define _CHECK_ATTR_CLASS_r22 639
+#define _CHECK_ATTR_CLASS_r33 640
+#define _CHECK_ATTR_METHOD_LAZY_DICT_r01 641
+#define _CHECK_ATTR_METHOD_LAZY_DICT_r11 642
+#define _CHECK_ATTR_METHOD_LAZY_DICT_r22 643
+#define _CHECK_ATTR_METHOD_LAZY_DICT_r33 644
+#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00 645
+#define _CHECK_EG_MATCH_r22 646
+#define _CHECK_EXC_MATCH_r22 647
+#define _CHECK_FUNCTION_EXACT_ARGS_r00 648
+#define _CHECK_FUNCTION_VERSION_r00 649
+#define _CHECK_FUNCTION_VERSION_INLINE_r00 650
+#define _CHECK_FUNCTION_VERSION_INLINE_r11 651
+#define _CHECK_FUNCTION_VERSION_INLINE_r22 652
+#define _CHECK_FUNCTION_VERSION_INLINE_r33 653
+#define _CHECK_FUNCTION_VERSION_KW_r11 654
+#define _CHECK_IS_NOT_PY_CALLABLE_r00 655
+#define _CHECK_IS_NOT_PY_CALLABLE_EX_r03 656
+#define _CHECK_IS_NOT_PY_CALLABLE_EX_r13 657
+#define _CHECK_IS_NOT_PY_CALLABLE_EX_r23 658
+#define _CHECK_IS_NOT_PY_CALLABLE_EX_r33 659
+#define _CHECK_IS_NOT_PY_CALLABLE_KW_r11 660
+#define _CHECK_IS_PY_CALLABLE_EX_r03 661
+#define _CHECK_IS_PY_CALLABLE_EX_r13 662
+#define _CHECK_IS_PY_CALLABLE_EX_r23 663
+#define _CHECK_IS_PY_CALLABLE_EX_r33 664
+#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r01 665
+#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r11 666
+#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r22 667
+#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 668
+#define _CHECK_METHOD_VERSION_r00 669
+#define _CHECK_METHOD_VERSION_KW_r11 670
+#define _CHECK_PEP_523_r00 671
+#define _CHECK_PEP_523_r11 672
+#define _CHECK_PEP_523_r22 673
+#define _CHECK_PEP_523_r33 674
+#define _CHECK_PERIODIC_r00 675
+#define _CHECK_PERIODIC_AT_END_r00 676
+#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00 677
+#define _CHECK_RECURSION_REMAINING_r00 678
+#define _CHECK_RECURSION_REMAINING_r11 679
+#define _CHECK_RECURSION_REMAINING_r22 680
+#define _CHECK_RECURSION_REMAINING_r33 681
+#define _CHECK_STACK_SPACE_r00 682
+#define _CHECK_STACK_SPACE_OPERAND_r00 683
+#define _CHECK_STACK_SPACE_OPERAND_r11 684
+#define _CHECK_STACK_SPACE_OPERAND_r22 685
+#define _CHECK_STACK_SPACE_OPERAND_r33 686
+#define _CHECK_VALIDITY_r00 687
+#define _CHECK_VALIDITY_r11 688
+#define _CHECK_VALIDITY_r22 689
+#define _CHECK_VALIDITY_r33 690
+#define _COLD_DYNAMIC_EXIT_r00 691
+#define _COLD_EXIT_r00 692
+#define _COMPARE_OP_r21 693
+#define _COMPARE_OP_FLOAT_r03 694
+#define _COMPARE_OP_FLOAT_r13 695
+#define _COMPARE_OP_FLOAT_r23 696
+#define _COMPARE_OP_INT_r23 697
+#define _COMPARE_OP_STR_r23 698
+#define _CONTAINS_OP_r21 699
+#define _CONTAINS_OP_DICT_r21 700
+#define _CONTAINS_OP_SET_r21 701
+#define _CONVERT_VALUE_r11 702
+#define _COPY_r01 703
+#define _COPY_1_r02 704
+#define _COPY_1_r12 705
+#define _COPY_1_r23 706
+#define _COPY_2_r03 707
+#define _COPY_2_r13 708
+#define _COPY_2_r23 709
+#define _COPY_3_r03 710
+#define _COPY_3_r13 711
+#define _COPY_3_r23 712
+#define _COPY_3_r33 713
+#define _COPY_FREE_VARS_r00 714
+#define _COPY_FREE_VARS_r11 715
+#define _COPY_FREE_VARS_r22 716
+#define _COPY_FREE_VARS_r33 717
+#define _CREATE_INIT_FRAME_r01 718
+#define _DELETE_ATTR_r10 719
+#define _DELETE_DEREF_r00 720
+#define _DELETE_FAST_r00 721
+#define _DELETE_GLOBAL_r00 722
+#define _DELETE_NAME_r00 723
+#define _DELETE_SUBSCR_r20 724
+#define _DEOPT_r00 725
+#define _DEOPT_r10 726
+#define _DEOPT_r20 727
+#define _DEOPT_r30 728
+#define _DICT_MERGE_r10 729
+#define _DICT_UPDATE_r10 730
+#define _DO_CALL_r01 731
+#define _DO_CALL_FUNCTION_EX_r31 732
+#define _DO_CALL_KW_r11 733
+#define _DYNAMIC_EXIT_r00 734
+#define _DYNAMIC_EXIT_r10 735
+#define _DYNAMIC_EXIT_r20 736
+#define _DYNAMIC_EXIT_r30 737
+#define _END_FOR_r10 738
+#define _END_SEND_r21 739
+#define _ERROR_POP_N_r00 740
+#define _EXIT_INIT_CHECK_r10 741
+#define _EXIT_TRACE_r00 742
+#define _EXIT_TRACE_r10 743
+#define _EXIT_TRACE_r20 744
+#define _EXIT_TRACE_r30 745
+#define _EXPAND_METHOD_r00 746
+#define _EXPAND_METHOD_KW_r11 747
+#define _FATAL_ERROR_r00 748
+#define _FATAL_ERROR_r11 749
+#define _FATAL_ERROR_r22 750
+#define _FATAL_ERROR_r33 751
+#define _FORMAT_SIMPLE_r11 752
+#define _FORMAT_WITH_SPEC_r21 753
+#define _FOR_ITER_r23 754
+#define _FOR_ITER_GEN_FRAME_r03 755
+#define _FOR_ITER_GEN_FRAME_r13 756
+#define _FOR_ITER_GEN_FRAME_r23 757
+#define _FOR_ITER_TIER_TWO_r23 758
+#define _GET_AITER_r11 759
+#define _GET_ANEXT_r12 760
+#define _GET_AWAITABLE_r11 761
+#define _GET_ITER_r12 762
+#define _GET_LEN_r12 763
+#define _GET_YIELD_FROM_ITER_r11 764
+#define _GUARD_BINARY_OP_EXTEND_r22 765
+#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r02 766
+#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r12 767
+#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r22 768
+#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r33 769
+#define _GUARD_CALLABLE_ISINSTANCE_r03 770
+#define _GUARD_CALLABLE_ISINSTANCE_r13 771
+#define _GUARD_CALLABLE_ISINSTANCE_r23 772
+#define _GUARD_CALLABLE_ISINSTANCE_r33 773
+#define _GUARD_CALLABLE_LEN_r03 774
+#define _GUARD_CALLABLE_LEN_r13 775
+#define _GUARD_CALLABLE_LEN_r23 776
+#define _GUARD_CALLABLE_LEN_r33 777
+#define _GUARD_CALLABLE_LIST_APPEND_r03 778
+#define _GUARD_CALLABLE_LIST_APPEND_r13 779
+#define _GUARD_CALLABLE_LIST_APPEND_r23 780
+#define _GUARD_CALLABLE_LIST_APPEND_r33 781
+#define _GUARD_CALLABLE_STR_1_r03 782
+#define _GUARD_CALLABLE_STR_1_r13 783
+#define _GUARD_CALLABLE_STR_1_r23 784
+#define _GUARD_CALLABLE_STR_1_r33 785
+#define _GUARD_CALLABLE_TUPLE_1_r03 786
+#define _GUARD_CALLABLE_TUPLE_1_r13 787
+#define _GUARD_CALLABLE_TUPLE_1_r23 788
+#define _GUARD_CALLABLE_TUPLE_1_r33 789
+#define _GUARD_CALLABLE_TYPE_1_r03 790
+#define _GUARD_CALLABLE_TYPE_1_r13 791
+#define _GUARD_CALLABLE_TYPE_1_r23 792
+#define _GUARD_CALLABLE_TYPE_1_r33 793
+#define _GUARD_DORV_NO_DICT_r01 794
+#define _GUARD_DORV_NO_DICT_r11 795
+#define _GUARD_DORV_NO_DICT_r22 796
+#define _GUARD_DORV_NO_DICT_r33 797
+#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r01 798
+#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 799
+#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 800
+#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 801
+#define _GUARD_GLOBALS_VERSION_r00 802
+#define _GUARD_GLOBALS_VERSION_r11 803
+#define _GUARD_GLOBALS_VERSION_r22 804
+#define _GUARD_GLOBALS_VERSION_r33 805
+#define _GUARD_IP_RETURN_GENERATOR_r00 806
+#define _GUARD_IP_RETURN_GENERATOR_r11 807
+#define _GUARD_IP_RETURN_GENERATOR_r22 808
+#define _GUARD_IP_RETURN_GENERATOR_r33 809
+#define _GUARD_IP_RETURN_VALUE_r00 810
+#define _GUARD_IP_RETURN_VALUE_r11 811
+#define _GUARD_IP_RETURN_VALUE_r22 812
+#define _GUARD_IP_RETURN_VALUE_r33 813
+#define _GUARD_IP_YIELD_VALUE_r00 814
+#define _GUARD_IP_YIELD_VALUE_r11 815
+#define _GUARD_IP_YIELD_VALUE_r22 816
+#define _GUARD_IP_YIELD_VALUE_r33 817
+#define _GUARD_IP__PUSH_FRAME_r00 818
+#define _GUARD_IP__PUSH_FRAME_r11 819
+#define _GUARD_IP__PUSH_FRAME_r22 820
+#define _GUARD_IP__PUSH_FRAME_r33 821
+#define _GUARD_IS_FALSE_POP_r00 822
+#define _GUARD_IS_FALSE_POP_r10 823
+#define _GUARD_IS_FALSE_POP_r21 824
+#define _GUARD_IS_FALSE_POP_r32 825
+#define _GUARD_IS_NONE_POP_r00 826
+#define _GUARD_IS_NONE_POP_r10 827
+#define _GUARD_IS_NONE_POP_r21 828
+#define _GUARD_IS_NONE_POP_r32 829
+#define _GUARD_IS_NOT_NONE_POP_r10 830
+#define _GUARD_IS_TRUE_POP_r00 831
+#define _GUARD_IS_TRUE_POP_r10 832
+#define _GUARD_IS_TRUE_POP_r21 833
+#define _GUARD_IS_TRUE_POP_r32 834
+#define _GUARD_KEYS_VERSION_r01 835
+#define _GUARD_KEYS_VERSION_r11 836
+#define _GUARD_KEYS_VERSION_r22 837
+#define _GUARD_KEYS_VERSION_r33 838
+#define _GUARD_NOS_COMPACT_ASCII_r02 839
+#define _GUARD_NOS_COMPACT_ASCII_r12 840
+#define _GUARD_NOS_COMPACT_ASCII_r22 841
+#define _GUARD_NOS_COMPACT_ASCII_r33 842
+#define _GUARD_NOS_DICT_r02 843
+#define _GUARD_NOS_DICT_r12 844
+#define _GUARD_NOS_DICT_r22 845
+#define _GUARD_NOS_DICT_r33 846
+#define _GUARD_NOS_FLOAT_r02 847
+#define _GUARD_NOS_FLOAT_r12 848
+#define _GUARD_NOS_FLOAT_r22 849
+#define _GUARD_NOS_FLOAT_r33 850
+#define _GUARD_NOS_INT_r02 851
+#define _GUARD_NOS_INT_r12 852
+#define _GUARD_NOS_INT_r22 853
+#define _GUARD_NOS_INT_r33 854
+#define _GUARD_NOS_LIST_r02 855
+#define _GUARD_NOS_LIST_r12 856
+#define _GUARD_NOS_LIST_r22 857
+#define _GUARD_NOS_LIST_r33 858
+#define _GUARD_NOS_NOT_NULL_r02 859
+#define _GUARD_NOS_NOT_NULL_r12 860
+#define _GUARD_NOS_NOT_NULL_r22 861
+#define _GUARD_NOS_NOT_NULL_r33 862
+#define _GUARD_NOS_NULL_r02 863
+#define _GUARD_NOS_NULL_r12 864
+#define _GUARD_NOS_NULL_r22 865
+#define _GUARD_NOS_NULL_r33 866
+#define _GUARD_NOS_OVERFLOWED_r02 867
+#define _GUARD_NOS_OVERFLOWED_r12 868
+#define _GUARD_NOS_OVERFLOWED_r22 869
+#define _GUARD_NOS_OVERFLOWED_r33 870
+#define _GUARD_NOS_TUPLE_r02 871
+#define _GUARD_NOS_TUPLE_r12 872
+#define _GUARD_NOS_TUPLE_r22 873
+#define _GUARD_NOS_TUPLE_r33 874
+#define _GUARD_NOS_UNICODE_r02 875
+#define _GUARD_NOS_UNICODE_r12 876
+#define _GUARD_NOS_UNICODE_r22 877
+#define _GUARD_NOS_UNICODE_r33 878
+#define _GUARD_NOT_EXHAUSTED_LIST_r02 879
+#define _GUARD_NOT_EXHAUSTED_LIST_r12 880
+#define _GUARD_NOT_EXHAUSTED_LIST_r22 881
+#define _GUARD_NOT_EXHAUSTED_LIST_r33 882
+#define _GUARD_NOT_EXHAUSTED_RANGE_r02 883
+#define _GUARD_NOT_EXHAUSTED_RANGE_r12 884
+#define _GUARD_NOT_EXHAUSTED_RANGE_r22 885
+#define _GUARD_NOT_EXHAUSTED_RANGE_r33 886
+#define _GUARD_NOT_EXHAUSTED_TUPLE_r02 887
+#define _GUARD_NOT_EXHAUSTED_TUPLE_r12 888
+#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 889
+#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 890
+#define _GUARD_THIRD_NULL_r03 891
+#define _GUARD_THIRD_NULL_r13 892
+#define _GUARD_THIRD_NULL_r23 893
+#define _GUARD_THIRD_NULL_r33 894
+#define _GUARD_TOS_ANY_SET_r01 895
+#define _GUARD_TOS_ANY_SET_r11 896
+#define _GUARD_TOS_ANY_SET_r22 897
+#define _GUARD_TOS_ANY_SET_r33 898
+#define _GUARD_TOS_DICT_r01 899
+#define _GUARD_TOS_DICT_r11 900
+#define _GUARD_TOS_DICT_r22 901
+#define _GUARD_TOS_DICT_r33 902
+#define _GUARD_TOS_FLOAT_r01 903
+#define _GUARD_TOS_FLOAT_r11 904
+#define _GUARD_TOS_FLOAT_r22 905
+#define _GUARD_TOS_FLOAT_r33 906
+#define _GUARD_TOS_INT_r01 907
+#define _GUARD_TOS_INT_r11 908
+#define _GUARD_TOS_INT_r22 909
+#define _GUARD_TOS_INT_r33 910
+#define _GUARD_TOS_LIST_r01 911
+#define _GUARD_TOS_LIST_r11 912
+#define _GUARD_TOS_LIST_r22 913
+#define _GUARD_TOS_LIST_r33 914
+#define _GUARD_TOS_OVERFLOWED_r01 915
+#define _GUARD_TOS_OVERFLOWED_r11 916
+#define _GUARD_TOS_OVERFLOWED_r22 917
+#define _GUARD_TOS_OVERFLOWED_r33 918
+#define _GUARD_TOS_SLICE_r01 919
+#define _GUARD_TOS_SLICE_r11 920
+#define _GUARD_TOS_SLICE_r22 921
+#define _GUARD_TOS_SLICE_r33 922
+#define _GUARD_TOS_TUPLE_r01 923
+#define _GUARD_TOS_TUPLE_r11 924
+#define _GUARD_TOS_TUPLE_r22 925
+#define _GUARD_TOS_TUPLE_r33 926
+#define _GUARD_TOS_UNICODE_r01 927
+#define _GUARD_TOS_UNICODE_r11 928
+#define _GUARD_TOS_UNICODE_r22 929
+#define _GUARD_TOS_UNICODE_r33 930
+#define _GUARD_TYPE_VERSION_r01 931
+#define _GUARD_TYPE_VERSION_r11 932
+#define _GUARD_TYPE_VERSION_r22 933
+#define _GUARD_TYPE_VERSION_r33 934
+#define _GUARD_TYPE_VERSION_AND_LOCK_r01 935
+#define _GUARD_TYPE_VERSION_AND_LOCK_r11 936
+#define _GUARD_TYPE_VERSION_AND_LOCK_r22 937
+#define _GUARD_TYPE_VERSION_AND_LOCK_r33 938
+#define _HANDLE_PENDING_AND_DEOPT_r00 939
+#define _HANDLE_PENDING_AND_DEOPT_r10 940
+#define _HANDLE_PENDING_AND_DEOPT_r20 941
+#define _HANDLE_PENDING_AND_DEOPT_r30 942
+#define _IMPORT_FROM_r12 943
+#define _IMPORT_NAME_r21 944
+#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 945
+#define _INIT_CALL_PY_EXACT_ARGS_r01 946
+#define _INIT_CALL_PY_EXACT_ARGS_0_r01 947
+#define _INIT_CALL_PY_EXACT_ARGS_1_r01 948
+#define _INIT_CALL_PY_EXACT_ARGS_2_r01 949
+#define _INIT_CALL_PY_EXACT_ARGS_3_r01 950
+#define _INIT_CALL_PY_EXACT_ARGS_4_r01 951
+#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r02 952
+#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r12 953
+#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r23 954
+#define _INSERT_NULL_r10 955
+#define _INSTRUMENTED_FOR_ITER_r23 956
+#define _INSTRUMENTED_INSTRUCTION_r00 957
+#define _INSTRUMENTED_JUMP_FORWARD_r00 958
+#define _INSTRUMENTED_JUMP_FORWARD_r11 959
+#define _INSTRUMENTED_JUMP_FORWARD_r22 960
+#define _INSTRUMENTED_JUMP_FORWARD_r33 961
+#define _INSTRUMENTED_LINE_r00 962
+#define _INSTRUMENTED_NOT_TAKEN_r00 963
+#define _INSTRUMENTED_NOT_TAKEN_r11 964
+#define _INSTRUMENTED_NOT_TAKEN_r22 965
+#define _INSTRUMENTED_NOT_TAKEN_r33 966
+#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r00 967
+#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 968
+#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 969
+#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 970
+#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 971
+#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 972
+#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r00 973
+#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 974
+#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 975
+#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 976
+#define _IS_NONE_r11 977
+#define _IS_OP_r03 978
+#define _IS_OP_r13 979
+#define _IS_OP_r23 980
+#define _ITER_CHECK_LIST_r02 981
+#define _ITER_CHECK_LIST_r12 982
+#define _ITER_CHECK_LIST_r22 983
+#define _ITER_CHECK_LIST_r33 984
+#define _ITER_CHECK_RANGE_r02 985
+#define _ITER_CHECK_RANGE_r12 986
+#define _ITER_CHECK_RANGE_r22 987
+#define _ITER_CHECK_RANGE_r33 988
+#define _ITER_CHECK_TUPLE_r02 989
+#define _ITER_CHECK_TUPLE_r12 990
+#define _ITER_CHECK_TUPLE_r22 991
+#define _ITER_CHECK_TUPLE_r33 992
+#define _ITER_JUMP_LIST_r02 993
+#define _ITER_JUMP_LIST_r12 994
+#define _ITER_JUMP_LIST_r22 995
+#define _ITER_JUMP_LIST_r33 996
+#define _ITER_JUMP_RANGE_r02 997
+#define _ITER_JUMP_RANGE_r12 998
+#define _ITER_JUMP_RANGE_r22 999
+#define _ITER_JUMP_RANGE_r33 1000
+#define _ITER_JUMP_TUPLE_r02 1001
+#define _ITER_JUMP_TUPLE_r12 1002
+#define _ITER_JUMP_TUPLE_r22 1003
+#define _ITER_JUMP_TUPLE_r33 1004
+#define _ITER_NEXT_LIST_r23 1005
+#define _ITER_NEXT_LIST_TIER_TWO_r23 1006
+#define _ITER_NEXT_RANGE_r03 1007
+#define _ITER_NEXT_RANGE_r13 1008
+#define _ITER_NEXT_RANGE_r23 1009
+#define _ITER_NEXT_TUPLE_r03 1010
+#define _ITER_NEXT_TUPLE_r13 1011
+#define _ITER_NEXT_TUPLE_r23 1012
+#define _JUMP_BACKWARD_NO_INTERRUPT_r00 1013
+#define _JUMP_BACKWARD_NO_INTERRUPT_r11 1014
+#define _JUMP_BACKWARD_NO_INTERRUPT_r22 1015
+#define _JUMP_BACKWARD_NO_INTERRUPT_r33 1016
+#define _JUMP_TO_TOP_r00 1017
+#define _LIST_APPEND_r10 1018
+#define _LIST_EXTEND_r10 1019
+#define _LOAD_ATTR_r10 1020
+#define _LOAD_ATTR_CLASS_r11 1021
+#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 1022
+#define _LOAD_ATTR_INSTANCE_VALUE_r02 1023
+#define _LOAD_ATTR_INSTANCE_VALUE_r12 1024
+#define _LOAD_ATTR_INSTANCE_VALUE_r23 1025
+#define _LOAD_ATTR_METHOD_LAZY_DICT_r02 1026
+#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 1027
+#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 1028
+#define _LOAD_ATTR_METHOD_NO_DICT_r02 1029
+#define _LOAD_ATTR_METHOD_NO_DICT_r12 1030
+#define _LOAD_ATTR_METHOD_NO_DICT_r23 1031
+#define _LOAD_ATTR_METHOD_WITH_VALUES_r02 1032
+#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 1033
+#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 1034
+#define _LOAD_ATTR_MODULE_r11 1035
+#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 1036
+#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 1037
+#define _LOAD_ATTR_PROPERTY_FRAME_r11 1038
+#define _LOAD_ATTR_SLOT_r02 1039
+#define _LOAD_ATTR_SLOT_r12 1040
+#define _LOAD_ATTR_SLOT_r23 1041
+#define _LOAD_ATTR_WITH_HINT_r12 1042
+#define _LOAD_BUILD_CLASS_r01 1043
+#define _LOAD_BYTECODE_r00 1044
+#define _LOAD_COMMON_CONSTANT_r01 1045
+#define _LOAD_COMMON_CONSTANT_r12 1046
+#define _LOAD_COMMON_CONSTANT_r23 1047
+#define _LOAD_CONST_r01 1048
+#define _LOAD_CONST_r12 1049
+#define _LOAD_CONST_r23 1050
+#define _LOAD_CONST_INLINE_r01 1051
+#define _LOAD_CONST_INLINE_r12 1052
+#define _LOAD_CONST_INLINE_r23 1053
+#define _LOAD_CONST_INLINE_BORROW_r01 1054
+#define _LOAD_CONST_INLINE_BORROW_r12 1055
+#define _LOAD_CONST_INLINE_BORROW_r23 1056
+#define _LOAD_CONST_UNDER_INLINE_r02 1057
+#define _LOAD_CONST_UNDER_INLINE_r12 1058
+#define _LOAD_CONST_UNDER_INLINE_r23 1059
+#define _LOAD_CONST_UNDER_INLINE_BORROW_r02 1060
+#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 1061
+#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 1062
+#define _LOAD_DEREF_r01 1063
+#define _LOAD_FAST_r01 1064
+#define _LOAD_FAST_r12 1065
+#define _LOAD_FAST_r23 1066
+#define _LOAD_FAST_0_r01 1067
+#define _LOAD_FAST_0_r12 1068
+#define _LOAD_FAST_0_r23 1069
+#define _LOAD_FAST_1_r01 1070
+#define _LOAD_FAST_1_r12 1071
+#define _LOAD_FAST_1_r23 1072
+#define _LOAD_FAST_2_r01 1073
+#define _LOAD_FAST_2_r12 1074
+#define _LOAD_FAST_2_r23 1075
+#define _LOAD_FAST_3_r01 1076
+#define _LOAD_FAST_3_r12 1077
+#define _LOAD_FAST_3_r23 1078
+#define _LOAD_FAST_4_r01 1079
+#define _LOAD_FAST_4_r12 1080
+#define _LOAD_FAST_4_r23 1081
+#define _LOAD_FAST_5_r01 1082
+#define _LOAD_FAST_5_r12 1083
+#define _LOAD_FAST_5_r23 1084
+#define _LOAD_FAST_6_r01 1085
+#define _LOAD_FAST_6_r12 1086
+#define _LOAD_FAST_6_r23 1087
+#define _LOAD_FAST_7_r01 1088
+#define _LOAD_FAST_7_r12 1089
+#define _LOAD_FAST_7_r23 1090
+#define _LOAD_FAST_AND_CLEAR_r01 1091
+#define _LOAD_FAST_AND_CLEAR_r12 1092
+#define _LOAD_FAST_AND_CLEAR_r23 1093
+#define _LOAD_FAST_BORROW_r01 1094
+#define _LOAD_FAST_BORROW_r12 1095
+#define _LOAD_FAST_BORROW_r23 1096
+#define _LOAD_FAST_BORROW_0_r01 1097
+#define _LOAD_FAST_BORROW_0_r12 1098
+#define _LOAD_FAST_BORROW_0_r23 1099
+#define _LOAD_FAST_BORROW_1_r01 1100
+#define _LOAD_FAST_BORROW_1_r12 1101
+#define _LOAD_FAST_BORROW_1_r23 1102
+#define _LOAD_FAST_BORROW_2_r01 1103
+#define _LOAD_FAST_BORROW_2_r12 1104
+#define _LOAD_FAST_BORROW_2_r23 1105
+#define _LOAD_FAST_BORROW_3_r01 1106
+#define _LOAD_FAST_BORROW_3_r12 1107
+#define _LOAD_FAST_BORROW_3_r23 1108
+#define _LOAD_FAST_BORROW_4_r01 1109
+#define _LOAD_FAST_BORROW_4_r12 1110
+#define _LOAD_FAST_BORROW_4_r23 1111
+#define _LOAD_FAST_BORROW_5_r01 1112
+#define _LOAD_FAST_BORROW_5_r12 1113
+#define _LOAD_FAST_BORROW_5_r23 1114
+#define _LOAD_FAST_BORROW_6_r01 1115
+#define _LOAD_FAST_BORROW_6_r12 1116
+#define _LOAD_FAST_BORROW_6_r23 1117
+#define _LOAD_FAST_BORROW_7_r01 1118
+#define _LOAD_FAST_BORROW_7_r12 1119
+#define _LOAD_FAST_BORROW_7_r23 1120
+#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1121
+#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1122
+#define _LOAD_FAST_CHECK_r01 1123
+#define _LOAD_FAST_CHECK_r12 1124
+#define _LOAD_FAST_CHECK_r23 1125
+#define _LOAD_FAST_LOAD_FAST_r02 1126
+#define _LOAD_FAST_LOAD_FAST_r13 1127
+#define _LOAD_FROM_DICT_OR_DEREF_r11 1128
+#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1129
+#define _LOAD_GLOBAL_r00 1130
+#define _LOAD_GLOBAL_BUILTINS_r01 1131
+#define _LOAD_GLOBAL_MODULE_r01 1132
+#define _LOAD_LOCALS_r01 1133
+#define _LOAD_LOCALS_r12 1134
+#define _LOAD_LOCALS_r23 1135
+#define _LOAD_NAME_r01 1136
+#define _LOAD_SMALL_INT_r01 1137
+#define _LOAD_SMALL_INT_r12 1138
+#define _LOAD_SMALL_INT_r23 1139
+#define _LOAD_SMALL_INT_0_r01 1140
+#define _LOAD_SMALL_INT_0_r12 1141
+#define _LOAD_SMALL_INT_0_r23 1142
+#define _LOAD_SMALL_INT_1_r01 1143
+#define _LOAD_SMALL_INT_1_r12 1144
+#define _LOAD_SMALL_INT_1_r23 1145
+#define _LOAD_SMALL_INT_2_r01 1146
+#define _LOAD_SMALL_INT_2_r12 1147
+#define _LOAD_SMALL_INT_2_r23 1148
+#define _LOAD_SMALL_INT_3_r01 1149
+#define _LOAD_SMALL_INT_3_r12 1150
+#define _LOAD_SMALL_INT_3_r23 1151
+#define _LOAD_SPECIAL_r00 1152
+#define _LOAD_SUPER_ATTR_ATTR_r31 1153
+#define _LOAD_SUPER_ATTR_METHOD_r32 1154
+#define _MAKE_CALLARGS_A_TUPLE_r33 1155
+#define _MAKE_CELL_r00 1156
+#define _MAKE_FUNCTION_r11 1157
+#define _MAKE_WARM_r00 1158
+#define _MAKE_WARM_r11 1159
+#define _MAKE_WARM_r22 1160
+#define _MAKE_WARM_r33 1161
+#define _MAP_ADD_r20 1162
+#define _MATCH_CLASS_r31 1163
+#define _MATCH_KEYS_r23 1164
+#define _MATCH_MAPPING_r02 1165
+#define _MATCH_MAPPING_r12 1166
+#define _MATCH_MAPPING_r23 1167
+#define _MATCH_SEQUENCE_r02 1168
+#define _MATCH_SEQUENCE_r12 1169
+#define _MATCH_SEQUENCE_r23 1170
+#define _MAYBE_EXPAND_METHOD_r00 1171
+#define _MAYBE_EXPAND_METHOD_KW_r11 1172
+#define _MONITOR_CALL_r00 1173
+#define _MONITOR_CALL_KW_r11 1174
+#define _MONITOR_JUMP_BACKWARD_r00 1175
+#define _MONITOR_JUMP_BACKWARD_r11 1176
+#define _MONITOR_JUMP_BACKWARD_r22 1177
+#define _MONITOR_JUMP_BACKWARD_r33 1178
+#define _MONITOR_RESUME_r00 1179
+#define _NOP_r00 1180
+#define _NOP_r11 1181
+#define _NOP_r22 1182
+#define _NOP_r33 1183
+#define _POP_CALL_r20 1184
+#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1185
+#define _POP_CALL_ONE_r30 1186
+#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1187
+#define _POP_CALL_TWO_r30 1188
+#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1189
+#define _POP_EXCEPT_r10 1190
+#define _POP_ITER_r20 1191
+#define _POP_JUMP_IF_FALSE_r00 1192
+#define _POP_JUMP_IF_FALSE_r10 1193
+#define _POP_JUMP_IF_FALSE_r21 1194
+#define _POP_JUMP_IF_FALSE_r32 1195
+#define _POP_JUMP_IF_TRUE_r00 1196
+#define _POP_JUMP_IF_TRUE_r10 1197
+#define _POP_JUMP_IF_TRUE_r21 1198
+#define _POP_JUMP_IF_TRUE_r32 1199
+#define _POP_TOP_r10 1200
+#define _POP_TOP_FLOAT_r00 1201
+#define _POP_TOP_FLOAT_r10 1202
+#define _POP_TOP_FLOAT_r21 1203
+#define _POP_TOP_FLOAT_r32 1204
+#define _POP_TOP_INT_r00 1205
+#define _POP_TOP_INT_r10 1206
+#define _POP_TOP_INT_r21 1207
+#define _POP_TOP_INT_r32 1208
+#define _POP_TOP_LOAD_CONST_INLINE_r11 1209
+#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1210
+#define _POP_TOP_NOP_r00 1211
+#define _POP_TOP_NOP_r10 1212
+#define _POP_TOP_NOP_r21 1213
+#define _POP_TOP_NOP_r32 1214
+#define _POP_TOP_UNICODE_r00 1215
+#define _POP_TOP_UNICODE_r10 1216
+#define _POP_TOP_UNICODE_r21 1217
+#define _POP_TOP_UNICODE_r32 1218
+#define _POP_TWO_r20 1219
+#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1220
+#define _PUSH_EXC_INFO_r02 1221
+#define _PUSH_EXC_INFO_r12 1222
+#define _PUSH_EXC_INFO_r23 1223
+#define _PUSH_FRAME_r10 1224
+#define _PUSH_NULL_r01 1225
+#define _PUSH_NULL_r12 1226
+#define _PUSH_NULL_r23 1227
+#define _PUSH_NULL_CONDITIONAL_r00 1228
+#define _PY_FRAME_EX_r31 1229
+#define _PY_FRAME_GENERAL_r01 1230
+#define _PY_FRAME_KW_r11 1231
+#define _QUICKEN_RESUME_r00 1232
+#define _QUICKEN_RESUME_r11 1233
+#define _QUICKEN_RESUME_r22 1234
+#define _QUICKEN_RESUME_r33 1235
+#define _REPLACE_WITH_TRUE_r02 1236
+#define _REPLACE_WITH_TRUE_r12 1237
+#define _REPLACE_WITH_TRUE_r23 1238
+#define _RESUME_CHECK_r00 1239
+#define _RESUME_CHECK_r11 1240
+#define _RESUME_CHECK_r22 1241
+#define _RESUME_CHECK_r33 1242
+#define _RETURN_GENERATOR_r01 1243
+#define _RETURN_VALUE_r11 1244
+#define _SAVE_RETURN_OFFSET_r00 1245
+#define _SAVE_RETURN_OFFSET_r11 1246
+#define _SAVE_RETURN_OFFSET_r22 1247
+#define _SAVE_RETURN_OFFSET_r33 1248
+#define _SEND_r22 1249
+#define _SEND_GEN_FRAME_r22 1250
+#define _SETUP_ANNOTATIONS_r00 1251
+#define _SET_ADD_r10 1252
+#define _SET_FUNCTION_ATTRIBUTE_r01 1253
+#define _SET_FUNCTION_ATTRIBUTE_r11 1254
+#define _SET_FUNCTION_ATTRIBUTE_r21 1255
+#define _SET_FUNCTION_ATTRIBUTE_r32 1256
+#define _SET_IP_r00 1257
+#define _SET_IP_r11 1258
+#define _SET_IP_r22 1259
+#define _SET_IP_r33 1260
+#define _SET_UPDATE_r10 1261
+#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r02 1262
+#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r12 1263
+#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r22 1264
+#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r32 1265
+#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r03 1266
+#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r13 1267
+#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r23 1268
+#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r33 1269
+#define _SPILL_OR_RELOAD_r01 1270
+#define _SPILL_OR_RELOAD_r02 1271
+#define _SPILL_OR_RELOAD_r03 1272
+#define _SPILL_OR_RELOAD_r10 1273
+#define _SPILL_OR_RELOAD_r12 1274
+#define _SPILL_OR_RELOAD_r13 1275
+#define _SPILL_OR_RELOAD_r20 1276
+#define _SPILL_OR_RELOAD_r21 1277
+#define _SPILL_OR_RELOAD_r23 1278
+#define _SPILL_OR_RELOAD_r30 1279
+#define _SPILL_OR_RELOAD_r31 1280
+#define _SPILL_OR_RELOAD_r32 1281
+#define _START_EXECUTOR_r00 1282
+#define _STORE_ATTR_r20 1283
+#define _STORE_ATTR_INSTANCE_VALUE_r21 1284
+#define _STORE_ATTR_SLOT_r21 1285
+#define _STORE_ATTR_WITH_HINT_r21 1286
+#define _STORE_DEREF_r10 1287
+#define _STORE_FAST_LOAD_FAST_r11 1288
+#define _STORE_FAST_STORE_FAST_r20 1289
+#define _STORE_GLOBAL_r10 1290
+#define _STORE_NAME_r10 1291
+#define _STORE_SLICE_r30 1292
+#define _STORE_SUBSCR_r30 1293
+#define _STORE_SUBSCR_DICT_r31 1294
+#define _STORE_SUBSCR_LIST_INT_r32 1295
+#define _SWAP_r11 1296
+#define _SWAP_2_r02 1297
+#define _SWAP_2_r12 1298
+#define _SWAP_2_r22 1299
+#define _SWAP_2_r33 1300
+#define _SWAP_3_r03 1301
+#define _SWAP_3_r13 1302
+#define _SWAP_3_r23 1303
+#define _SWAP_3_r33 1304
+#define _SWAP_FAST_r01 1305
+#define _SWAP_FAST_r11 1306
+#define _SWAP_FAST_r22 1307
+#define _SWAP_FAST_r33 1308
+#define _SWAP_FAST_0_r01 1309
+#define _SWAP_FAST_0_r11 1310
+#define _SWAP_FAST_0_r22 1311
+#define _SWAP_FAST_0_r33 1312
+#define _SWAP_FAST_1_r01 1313
+#define _SWAP_FAST_1_r11 1314
+#define _SWAP_FAST_1_r22 1315
+#define _SWAP_FAST_1_r33 1316
+#define _SWAP_FAST_2_r01 1317
+#define _SWAP_FAST_2_r11 1318
+#define _SWAP_FAST_2_r22 1319
+#define _SWAP_FAST_2_r33 1320
+#define _SWAP_FAST_3_r01 1321
+#define _SWAP_FAST_3_r11 1322
+#define _SWAP_FAST_3_r22 1323
+#define _SWAP_FAST_3_r33 1324
+#define _SWAP_FAST_4_r01 1325
+#define _SWAP_FAST_4_r11 1326
+#define _SWAP_FAST_4_r22 1327
+#define _SWAP_FAST_4_r33 1328
+#define _SWAP_FAST_5_r01 1329
+#define _SWAP_FAST_5_r11 1330
+#define _SWAP_FAST_5_r22 1331
+#define _SWAP_FAST_5_r33 1332
+#define _SWAP_FAST_6_r01 1333
+#define _SWAP_FAST_6_r11 1334
+#define _SWAP_FAST_6_r22 1335
+#define _SWAP_FAST_6_r33 1336
+#define _SWAP_FAST_7_r01 1337
+#define _SWAP_FAST_7_r11 1338
+#define _SWAP_FAST_7_r22 1339
+#define _SWAP_FAST_7_r33 1340
+#define _TIER2_RESUME_CHECK_r00 1341
+#define _TIER2_RESUME_CHECK_r11 1342
+#define _TIER2_RESUME_CHECK_r22 1343
+#define _TIER2_RESUME_CHECK_r33 1344
+#define _TO_BOOL_r11 1345
+#define _TO_BOOL_BOOL_r01 1346
+#define _TO_BOOL_BOOL_r11 1347
+#define _TO_BOOL_BOOL_r22 1348
+#define _TO_BOOL_BOOL_r33 1349
+#define _TO_BOOL_INT_r11 1350
+#define _TO_BOOL_LIST_r11 1351
+#define _TO_BOOL_NONE_r01 1352
+#define _TO_BOOL_NONE_r11 1353
+#define _TO_BOOL_NONE_r22 1354
+#define _TO_BOOL_NONE_r33 1355
+#define _TO_BOOL_STR_r11 1356
+#define _TRACE_RECORD_r00 1357
+#define _UNARY_INVERT_r11 1358
+#define _UNARY_NEGATIVE_r11 1359
+#define _UNARY_NOT_r01 1360
+#define _UNARY_NOT_r11 1361
+#define _UNARY_NOT_r22 1362
+#define _UNARY_NOT_r33 1363
+#define _UNPACK_EX_r10 1364
+#define _UNPACK_SEQUENCE_r10 1365
+#define _UNPACK_SEQUENCE_LIST_r10 1366
+#define _UNPACK_SEQUENCE_TUPLE_r10 1367
+#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1368
+#define _WITH_EXCEPT_START_r33 1369
+#define _YIELD_VALUE_r11 1370
+#define MAX_UOP_REGS_ID 1370
 
 #ifdef __cplusplus
 }
index 7dc7f456215d85a472696429b961c510382a8a14..4e00651573328bd31de869c181d7cad6b275d175 100644 (file)
@@ -302,6 +302,10 @@ const uint32_t _PyUop_Flags[MAX_UOP_ID+1] = {
     [_CHECK_IS_NOT_PY_CALLABLE_KW] = HAS_ARG_FLAG | HAS_EXIT_FLAG,
     [_CALL_KW_NON_PY] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
     [_MAKE_CALLARGS_A_TUPLE] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
+    [_CHECK_IS_PY_CALLABLE_EX] = HAS_EXIT_FLAG,
+    [_PY_FRAME_EX] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG,
+    [_CHECK_IS_NOT_PY_CALLABLE_EX] = HAS_EXIT_FLAG,
+    [_CALL_FUNCTION_EX_NON_PY_GENERAL] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
     [_MAKE_FUNCTION] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
     [_SET_FUNCTION_ATTRIBUTE] = HAS_ARG_FLAG,
     [_RETURN_GENERATOR] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG,
@@ -2774,6 +2778,42 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = {
             { 3, 3, _MAKE_CALLARGS_A_TUPLE_r33 },
         },
     },
+    [_CHECK_IS_PY_CALLABLE_EX] = {
+        .best = { 0, 1, 2, 3 },
+        .entries = {
+            { 3, 0, _CHECK_IS_PY_CALLABLE_EX_r03 },
+            { 3, 1, _CHECK_IS_PY_CALLABLE_EX_r13 },
+            { 3, 2, _CHECK_IS_PY_CALLABLE_EX_r23 },
+            { 3, 3, _CHECK_IS_PY_CALLABLE_EX_r33 },
+        },
+    },
+    [_PY_FRAME_EX] = {
+        .best = { 3, 3, 3, 3 },
+        .entries = {
+            { -1, -1, -1 },
+            { -1, -1, -1 },
+            { -1, -1, -1 },
+            { 1, 1, _PY_FRAME_EX_r31 },
+        },
+    },
+    [_CHECK_IS_NOT_PY_CALLABLE_EX] = {
+        .best = { 0, 1, 2, 3 },
+        .entries = {
+            { 3, 0, _CHECK_IS_NOT_PY_CALLABLE_EX_r03 },
+            { 3, 1, _CHECK_IS_NOT_PY_CALLABLE_EX_r13 },
+            { 3, 2, _CHECK_IS_NOT_PY_CALLABLE_EX_r23 },
+            { 3, 3, _CHECK_IS_NOT_PY_CALLABLE_EX_r33 },
+        },
+    },
+    [_CALL_FUNCTION_EX_NON_PY_GENERAL] = {
+        .best = { 3, 3, 3, 3 },
+        .entries = {
+            { -1, -1, -1 },
+            { -1, -1, -1 },
+            { -1, -1, -1 },
+            { 1, 3, _CALL_FUNCTION_EX_NON_PY_GENERAL_r31 },
+        },
+    },
     [_MAKE_FUNCTION] = {
         .best = { 1, 1, 1, 1 },
         .entries = {
@@ -3842,6 +3882,16 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = {
     [_CHECK_IS_NOT_PY_CALLABLE_KW_r11] = _CHECK_IS_NOT_PY_CALLABLE_KW,
     [_CALL_KW_NON_PY_r11] = _CALL_KW_NON_PY,
     [_MAKE_CALLARGS_A_TUPLE_r33] = _MAKE_CALLARGS_A_TUPLE,
+    [_CHECK_IS_PY_CALLABLE_EX_r03] = _CHECK_IS_PY_CALLABLE_EX,
+    [_CHECK_IS_PY_CALLABLE_EX_r13] = _CHECK_IS_PY_CALLABLE_EX,
+    [_CHECK_IS_PY_CALLABLE_EX_r23] = _CHECK_IS_PY_CALLABLE_EX,
+    [_CHECK_IS_PY_CALLABLE_EX_r33] = _CHECK_IS_PY_CALLABLE_EX,
+    [_PY_FRAME_EX_r31] = _PY_FRAME_EX,
+    [_CHECK_IS_NOT_PY_CALLABLE_EX_r03] = _CHECK_IS_NOT_PY_CALLABLE_EX,
+    [_CHECK_IS_NOT_PY_CALLABLE_EX_r13] = _CHECK_IS_NOT_PY_CALLABLE_EX,
+    [_CHECK_IS_NOT_PY_CALLABLE_EX_r23] = _CHECK_IS_NOT_PY_CALLABLE_EX,
+    [_CHECK_IS_NOT_PY_CALLABLE_EX_r33] = _CHECK_IS_NOT_PY_CALLABLE_EX,
+    [_CALL_FUNCTION_EX_NON_PY_GENERAL_r31] = _CALL_FUNCTION_EX_NON_PY_GENERAL,
     [_MAKE_FUNCTION_r11] = _MAKE_FUNCTION,
     [_SET_FUNCTION_ATTRIBUTE_r01] = _SET_FUNCTION_ATTRIBUTE,
     [_SET_FUNCTION_ATTRIBUTE_r11] = _SET_FUNCTION_ATTRIBUTE,
@@ -4094,6 +4144,8 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = {
     [_CALL_BUILTIN_FAST_WITH_KEYWORDS_r01] = "_CALL_BUILTIN_FAST_WITH_KEYWORDS_r01",
     [_CALL_BUILTIN_O] = "_CALL_BUILTIN_O",
     [_CALL_BUILTIN_O_r03] = "_CALL_BUILTIN_O_r03",
+    [_CALL_FUNCTION_EX_NON_PY_GENERAL] = "_CALL_FUNCTION_EX_NON_PY_GENERAL",
+    [_CALL_FUNCTION_EX_NON_PY_GENERAL_r31] = "_CALL_FUNCTION_EX_NON_PY_GENERAL_r31",
     [_CALL_INTRINSIC_1] = "_CALL_INTRINSIC_1",
     [_CALL_INTRINSIC_1_r11] = "_CALL_INTRINSIC_1_r11",
     [_CALL_INTRINSIC_2] = "_CALL_INTRINSIC_2",
@@ -4159,8 +4211,18 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = {
     [_CHECK_FUNCTION_VERSION_KW_r11] = "_CHECK_FUNCTION_VERSION_KW_r11",
     [_CHECK_IS_NOT_PY_CALLABLE] = "_CHECK_IS_NOT_PY_CALLABLE",
     [_CHECK_IS_NOT_PY_CALLABLE_r00] = "_CHECK_IS_NOT_PY_CALLABLE_r00",
+    [_CHECK_IS_NOT_PY_CALLABLE_EX] = "_CHECK_IS_NOT_PY_CALLABLE_EX",
+    [_CHECK_IS_NOT_PY_CALLABLE_EX_r03] = "_CHECK_IS_NOT_PY_CALLABLE_EX_r03",
+    [_CHECK_IS_NOT_PY_CALLABLE_EX_r13] = "_CHECK_IS_NOT_PY_CALLABLE_EX_r13",
+    [_CHECK_IS_NOT_PY_CALLABLE_EX_r23] = "_CHECK_IS_NOT_PY_CALLABLE_EX_r23",
+    [_CHECK_IS_NOT_PY_CALLABLE_EX_r33] = "_CHECK_IS_NOT_PY_CALLABLE_EX_r33",
     [_CHECK_IS_NOT_PY_CALLABLE_KW] = "_CHECK_IS_NOT_PY_CALLABLE_KW",
     [_CHECK_IS_NOT_PY_CALLABLE_KW_r11] = "_CHECK_IS_NOT_PY_CALLABLE_KW_r11",
+    [_CHECK_IS_PY_CALLABLE_EX] = "_CHECK_IS_PY_CALLABLE_EX",
+    [_CHECK_IS_PY_CALLABLE_EX_r03] = "_CHECK_IS_PY_CALLABLE_EX_r03",
+    [_CHECK_IS_PY_CALLABLE_EX_r13] = "_CHECK_IS_PY_CALLABLE_EX_r13",
+    [_CHECK_IS_PY_CALLABLE_EX_r23] = "_CHECK_IS_PY_CALLABLE_EX_r23",
+    [_CHECK_IS_PY_CALLABLE_EX_r33] = "_CHECK_IS_PY_CALLABLE_EX_r33",
     [_CHECK_MANAGED_OBJECT_HAS_VALUES] = "_CHECK_MANAGED_OBJECT_HAS_VALUES",
     [_CHECK_MANAGED_OBJECT_HAS_VALUES_r01] = "_CHECK_MANAGED_OBJECT_HAS_VALUES_r01",
     [_CHECK_MANAGED_OBJECT_HAS_VALUES_r11] = "_CHECK_MANAGED_OBJECT_HAS_VALUES_r11",
@@ -4869,6 +4931,8 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = {
     [_PUSH_NULL_r23] = "_PUSH_NULL_r23",
     [_PUSH_NULL_CONDITIONAL] = "_PUSH_NULL_CONDITIONAL",
     [_PUSH_NULL_CONDITIONAL_r00] = "_PUSH_NULL_CONDITIONAL_r00",
+    [_PY_FRAME_EX] = "_PY_FRAME_EX",
+    [_PY_FRAME_EX_r31] = "_PY_FRAME_EX_r31",
     [_PY_FRAME_GENERAL] = "_PY_FRAME_GENERAL",
     [_PY_FRAME_GENERAL_r01] = "_PY_FRAME_GENERAL_r01",
     [_PY_FRAME_KW] = "_PY_FRAME_KW",
@@ -5597,6 +5661,14 @@ int _PyUop_num_popped(int opcode, int oparg)
             return 3 + oparg;
         case _MAKE_CALLARGS_A_TUPLE:
             return 0;
+        case _CHECK_IS_PY_CALLABLE_EX:
+            return 0;
+        case _PY_FRAME_EX:
+            return 4;
+        case _CHECK_IS_NOT_PY_CALLABLE_EX:
+            return 0;
+        case _CALL_FUNCTION_EX_NON_PY_GENERAL:
+            return 4;
         case _MAKE_FUNCTION:
             return 1;
         case _SET_FUNCTION_ATTRIBUTE:
index b17c1fa140d904b6bd8c90522cfbb5f23c988ef2..c46368444f4c597f9ea59c5a2a07bd15dda24fcf 100644 (file)
@@ -154,66 +154,68 @@ extern "C" {
 #define CALL_BUILTIN_FAST                      148
 #define CALL_BUILTIN_FAST_WITH_KEYWORDS        149
 #define CALL_BUILTIN_O                         150
-#define CALL_ISINSTANCE                        151
-#define CALL_KW_BOUND_METHOD                   152
-#define CALL_KW_NON_PY                         153
-#define CALL_KW_PY                             154
-#define CALL_LEN                               155
-#define CALL_LIST_APPEND                       156
-#define CALL_METHOD_DESCRIPTOR_FAST            157
-#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 158
-#define CALL_METHOD_DESCRIPTOR_NOARGS          159
-#define CALL_METHOD_DESCRIPTOR_O               160
-#define CALL_NON_PY_GENERAL                    161
-#define CALL_PY_EXACT_ARGS                     162
-#define CALL_PY_GENERAL                        163
-#define CALL_STR_1                             164
-#define CALL_TUPLE_1                           165
-#define CALL_TYPE_1                            166
-#define COMPARE_OP_FLOAT                       167
-#define COMPARE_OP_INT                         168
-#define COMPARE_OP_STR                         169
-#define CONTAINS_OP_DICT                       170
-#define CONTAINS_OP_SET                        171
-#define FOR_ITER_GEN                           172
-#define FOR_ITER_LIST                          173
-#define FOR_ITER_RANGE                         174
-#define FOR_ITER_TUPLE                         175
-#define JUMP_BACKWARD_JIT                      176
-#define JUMP_BACKWARD_NO_JIT                   177
-#define LOAD_ATTR_CLASS                        178
-#define LOAD_ATTR_CLASS_WITH_METACLASS_CHECK   179
-#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN      180
-#define LOAD_ATTR_INSTANCE_VALUE               181
-#define LOAD_ATTR_METHOD_LAZY_DICT             182
-#define LOAD_ATTR_METHOD_NO_DICT               183
-#define LOAD_ATTR_METHOD_WITH_VALUES           184
-#define LOAD_ATTR_MODULE                       185
-#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT        186
-#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES    187
-#define LOAD_ATTR_PROPERTY                     188
-#define LOAD_ATTR_SLOT                         189
-#define LOAD_ATTR_WITH_HINT                    190
-#define LOAD_GLOBAL_BUILTIN                    191
-#define LOAD_GLOBAL_MODULE                     192
-#define LOAD_SUPER_ATTR_ATTR                   193
-#define LOAD_SUPER_ATTR_METHOD                 194
-#define RESUME_CHECK                           195
-#define SEND_GEN                               196
-#define STORE_ATTR_INSTANCE_VALUE              197
-#define STORE_ATTR_SLOT                        198
-#define STORE_ATTR_WITH_HINT                   199
-#define STORE_SUBSCR_DICT                      200
-#define STORE_SUBSCR_LIST_INT                  201
-#define TO_BOOL_ALWAYS_TRUE                    202
-#define TO_BOOL_BOOL                           203
-#define TO_BOOL_INT                            204
-#define TO_BOOL_LIST                           205
-#define TO_BOOL_NONE                           206
-#define TO_BOOL_STR                            207
-#define UNPACK_SEQUENCE_LIST                   208
-#define UNPACK_SEQUENCE_TUPLE                  209
-#define UNPACK_SEQUENCE_TWO_TUPLE              210
+#define CALL_EX_NON_PY_GENERAL                 151
+#define CALL_EX_PY                             152
+#define CALL_ISINSTANCE                        153
+#define CALL_KW_BOUND_METHOD                   154
+#define CALL_KW_NON_PY                         155
+#define CALL_KW_PY                             156
+#define CALL_LEN                               157
+#define CALL_LIST_APPEND                       158
+#define CALL_METHOD_DESCRIPTOR_FAST            159
+#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 160
+#define CALL_METHOD_DESCRIPTOR_NOARGS          161
+#define CALL_METHOD_DESCRIPTOR_O               162
+#define CALL_NON_PY_GENERAL                    163
+#define CALL_PY_EXACT_ARGS                     164
+#define CALL_PY_GENERAL                        165
+#define CALL_STR_1                             166
+#define CALL_TUPLE_1                           167
+#define CALL_TYPE_1                            168
+#define COMPARE_OP_FLOAT                       169
+#define COMPARE_OP_INT                         170
+#define COMPARE_OP_STR                         171
+#define CONTAINS_OP_DICT                       172
+#define CONTAINS_OP_SET                        173
+#define FOR_ITER_GEN                           174
+#define FOR_ITER_LIST                          175
+#define FOR_ITER_RANGE                         176
+#define FOR_ITER_TUPLE                         177
+#define JUMP_BACKWARD_JIT                      178
+#define JUMP_BACKWARD_NO_JIT                   179
+#define LOAD_ATTR_CLASS                        180
+#define LOAD_ATTR_CLASS_WITH_METACLASS_CHECK   181
+#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN      182
+#define LOAD_ATTR_INSTANCE_VALUE               183
+#define LOAD_ATTR_METHOD_LAZY_DICT             184
+#define LOAD_ATTR_METHOD_NO_DICT               185
+#define LOAD_ATTR_METHOD_WITH_VALUES           186
+#define LOAD_ATTR_MODULE                       187
+#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT        188
+#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES    189
+#define LOAD_ATTR_PROPERTY                     190
+#define LOAD_ATTR_SLOT                         191
+#define LOAD_ATTR_WITH_HINT                    192
+#define LOAD_GLOBAL_BUILTIN                    193
+#define LOAD_GLOBAL_MODULE                     194
+#define LOAD_SUPER_ATTR_ATTR                   195
+#define LOAD_SUPER_ATTR_METHOD                 196
+#define RESUME_CHECK                           197
+#define SEND_GEN                               198
+#define STORE_ATTR_INSTANCE_VALUE              199
+#define STORE_ATTR_SLOT                        200
+#define STORE_ATTR_WITH_HINT                   201
+#define STORE_SUBSCR_DICT                      202
+#define STORE_SUBSCR_LIST_INT                  203
+#define TO_BOOL_ALWAYS_TRUE                    204
+#define TO_BOOL_BOOL                           205
+#define TO_BOOL_INT                            206
+#define TO_BOOL_LIST                           207
+#define TO_BOOL_NONE                           208
+#define TO_BOOL_STR                            209
+#define UNPACK_SEQUENCE_LIST                   210
+#define UNPACK_SEQUENCE_TUPLE                  211
+#define UNPACK_SEQUENCE_TWO_TUPLE              212
 #define INSTRUMENTED_END_FOR                   233
 #define INSTRUMENTED_POP_ITER                  234
 #define INSTRUMENTED_END_SEND                  235
index 7d6997a88696c0ae2db4b23ef38647d174b87fdc..8f14d81a43ee7523b9e064014b29940c7f2553ce 100644 (file)
@@ -119,6 +119,10 @@ _specializations = {
         "CALL_KW_PY",
         "CALL_KW_NON_PY",
     ],
+    "CALL_FUNCTION_EX": [
+        "CALL_EX_PY",
+        "CALL_EX_NON_PY_GENERAL",
+    ],
 }
 
 _specialized_opmap = {
@@ -146,66 +150,68 @@ _specialized_opmap = {
     'CALL_BUILTIN_FAST': 148,
     'CALL_BUILTIN_FAST_WITH_KEYWORDS': 149,
     'CALL_BUILTIN_O': 150,
-    'CALL_ISINSTANCE': 151,
-    'CALL_KW_BOUND_METHOD': 152,
-    'CALL_KW_NON_PY': 153,
-    'CALL_KW_PY': 154,
-    'CALL_LEN': 155,
-    'CALL_LIST_APPEND': 156,
-    'CALL_METHOD_DESCRIPTOR_FAST': 157,
-    'CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS': 158,
-    'CALL_METHOD_DESCRIPTOR_NOARGS': 159,
-    'CALL_METHOD_DESCRIPTOR_O': 160,
-    'CALL_NON_PY_GENERAL': 161,
-    'CALL_PY_EXACT_ARGS': 162,
-    'CALL_PY_GENERAL': 163,
-    'CALL_STR_1': 164,
-    'CALL_TUPLE_1': 165,
-    'CALL_TYPE_1': 166,
-    'COMPARE_OP_FLOAT': 167,
-    'COMPARE_OP_INT': 168,
-    'COMPARE_OP_STR': 169,
-    'CONTAINS_OP_DICT': 170,
-    'CONTAINS_OP_SET': 171,
-    'FOR_ITER_GEN': 172,
-    'FOR_ITER_LIST': 173,
-    'FOR_ITER_RANGE': 174,
-    'FOR_ITER_TUPLE': 175,
-    'JUMP_BACKWARD_JIT': 176,
-    'JUMP_BACKWARD_NO_JIT': 177,
-    'LOAD_ATTR_CLASS': 178,
-    'LOAD_ATTR_CLASS_WITH_METACLASS_CHECK': 179,
-    'LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN': 180,
-    'LOAD_ATTR_INSTANCE_VALUE': 181,
-    'LOAD_ATTR_METHOD_LAZY_DICT': 182,
-    'LOAD_ATTR_METHOD_NO_DICT': 183,
-    'LOAD_ATTR_METHOD_WITH_VALUES': 184,
-    'LOAD_ATTR_MODULE': 185,
-    'LOAD_ATTR_NONDESCRIPTOR_NO_DICT': 186,
-    'LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES': 187,
-    'LOAD_ATTR_PROPERTY': 188,
-    'LOAD_ATTR_SLOT': 189,
-    'LOAD_ATTR_WITH_HINT': 190,
-    'LOAD_GLOBAL_BUILTIN': 191,
-    'LOAD_GLOBAL_MODULE': 192,
-    'LOAD_SUPER_ATTR_ATTR': 193,
-    'LOAD_SUPER_ATTR_METHOD': 194,
-    'RESUME_CHECK': 195,
-    'SEND_GEN': 196,
-    'STORE_ATTR_INSTANCE_VALUE': 197,
-    'STORE_ATTR_SLOT': 198,
-    'STORE_ATTR_WITH_HINT': 199,
-    'STORE_SUBSCR_DICT': 200,
-    'STORE_SUBSCR_LIST_INT': 201,
-    'TO_BOOL_ALWAYS_TRUE': 202,
-    'TO_BOOL_BOOL': 203,
-    'TO_BOOL_INT': 204,
-    'TO_BOOL_LIST': 205,
-    'TO_BOOL_NONE': 206,
-    'TO_BOOL_STR': 207,
-    'UNPACK_SEQUENCE_LIST': 208,
-    'UNPACK_SEQUENCE_TUPLE': 209,
-    'UNPACK_SEQUENCE_TWO_TUPLE': 210,
+    'CALL_EX_NON_PY_GENERAL': 151,
+    'CALL_EX_PY': 152,
+    'CALL_ISINSTANCE': 153,
+    'CALL_KW_BOUND_METHOD': 154,
+    'CALL_KW_NON_PY': 155,
+    'CALL_KW_PY': 156,
+    'CALL_LEN': 157,
+    'CALL_LIST_APPEND': 158,
+    'CALL_METHOD_DESCRIPTOR_FAST': 159,
+    'CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS': 160,
+    'CALL_METHOD_DESCRIPTOR_NOARGS': 161,
+    'CALL_METHOD_DESCRIPTOR_O': 162,
+    'CALL_NON_PY_GENERAL': 163,
+    'CALL_PY_EXACT_ARGS': 164,
+    'CALL_PY_GENERAL': 165,
+    'CALL_STR_1': 166,
+    'CALL_TUPLE_1': 167,
+    'CALL_TYPE_1': 168,
+    'COMPARE_OP_FLOAT': 169,
+    'COMPARE_OP_INT': 170,
+    'COMPARE_OP_STR': 171,
+    'CONTAINS_OP_DICT': 172,
+    'CONTAINS_OP_SET': 173,
+    'FOR_ITER_GEN': 174,
+    'FOR_ITER_LIST': 175,
+    'FOR_ITER_RANGE': 176,
+    'FOR_ITER_TUPLE': 177,
+    'JUMP_BACKWARD_JIT': 178,
+    'JUMP_BACKWARD_NO_JIT': 179,
+    'LOAD_ATTR_CLASS': 180,
+    'LOAD_ATTR_CLASS_WITH_METACLASS_CHECK': 181,
+    'LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN': 182,
+    'LOAD_ATTR_INSTANCE_VALUE': 183,
+    'LOAD_ATTR_METHOD_LAZY_DICT': 184,
+    'LOAD_ATTR_METHOD_NO_DICT': 185,
+    'LOAD_ATTR_METHOD_WITH_VALUES': 186,
+    'LOAD_ATTR_MODULE': 187,
+    'LOAD_ATTR_NONDESCRIPTOR_NO_DICT': 188,
+    'LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES': 189,
+    'LOAD_ATTR_PROPERTY': 190,
+    'LOAD_ATTR_SLOT': 191,
+    'LOAD_ATTR_WITH_HINT': 192,
+    'LOAD_GLOBAL_BUILTIN': 193,
+    'LOAD_GLOBAL_MODULE': 194,
+    'LOAD_SUPER_ATTR_ATTR': 195,
+    'LOAD_SUPER_ATTR_METHOD': 196,
+    'RESUME_CHECK': 197,
+    'SEND_GEN': 198,
+    'STORE_ATTR_INSTANCE_VALUE': 199,
+    'STORE_ATTR_SLOT': 200,
+    'STORE_ATTR_WITH_HINT': 201,
+    'STORE_SUBSCR_DICT': 202,
+    'STORE_SUBSCR_LIST_INT': 203,
+    'TO_BOOL_ALWAYS_TRUE': 204,
+    'TO_BOOL_BOOL': 205,
+    'TO_BOOL_INT': 206,
+    'TO_BOOL_LIST': 207,
+    'TO_BOOL_NONE': 208,
+    'TO_BOOL_STR': 209,
+    'UNPACK_SEQUENCE_LIST': 210,
+    'UNPACK_SEQUENCE_TUPLE': 211,
+    'UNPACK_SEQUENCE_TWO_TUPLE': 212,
 }
 
 opmap = {
index d8374c45481a944b915ba3f8a02b94b0b99596a6..f016b8dc4a50b2ffc0d271924ec3d28bbdf8e5bf 100644 (file)
@@ -91,6 +91,9 @@ _cache_format = {
         "counter": 1,
         "func_version": 2,
     },
+    "CALL_FUNCTION_EX": {
+        "counter": 1,
+    },
     "STORE_SUBSCR": {
         "counter": 1,
     },
index 4f092beeea179b4e96d77724a2f107958d2f557f..271681a80d62acb86bb116565d460126a2f82f86 100644 (file)
@@ -400,6 +400,24 @@ class TestUops(unittest.TestCase):
         self.assertIn("_PUSH_FRAME", uops)
         self.assertIn("_BINARY_OP_ADD_INT", uops)
 
+    def test_call_py_ex(self):
+        def testfunc(n):
+            def ex_py(*args, **kwargs):
+                return 1
+
+            for _ in range(n):
+                args = (1, 2, 3)
+                kwargs = {}
+                ex_py(*args, **kwargs)
+
+        testfunc(TIER2_THRESHOLD)
+
+        ex = get_first_executor(testfunc)
+        self.assertIsNotNone(ex)
+        uops = get_opnames(ex)
+        self.assertIn("_PUSH_FRAME", uops)
+        self.assertIn("_PY_FRAME_EX", uops)
+
     def test_branch_taken(self):
         def testfunc(n):
             for i in range(n):
index 0344f08faecce79cdd987c48f7a35008b01e6420..56634d34366412ef7a5e0224ad149a4c215f26c9 100644 (file)
@@ -575,6 +575,39 @@ class TestCallCache(TestBase):
         for _ in range(_testinternalcapi.SPECIALIZATION_THRESHOLD):
             f()
 
+    @requires_jit_disabled
+    @requires_specialization_ft
+    def test_specialize_call_function_ex_py(self):
+        def ex_py(*args, **kwargs):
+            return 1
+
+        def instantiate():
+            args = (1, 2, 3)
+            kwargs = {}
+            return ex_py(*args, **kwargs)
+
+        # Trigger specialization
+        for _ in range(_testinternalcapi.SPECIALIZATION_THRESHOLD):
+            instantiate()
+        self.assert_specialized(instantiate, "CALL_EX_PY")
+
+    @requires_jit_disabled
+    @requires_specialization_ft
+    def test_specialize_call_function_ex_py_fail(self):
+        def ex_py(*args, **kwargs):
+            return 1
+
+        def instantiate():
+            args = (1, 2, 3)
+            kwargs = {}
+            return ex_py(*args, **kwargs)
+
+        _testinternalcapi.set_vectorcall_nop(ex_py)
+        # Trigger specialization
+        for _ in range(_testinternalcapi.SPECIALIZATION_THRESHOLD):
+            instantiate()
+        self.assert_no_opcode(instantiate, "CALL_EX_PY")
+        self.assert_specialized(instantiate, "CALL_EX_NON_PY_GENERAL")
 
 def make_deferred_ref_count_obj():
     """Create an object that uses deferred reference counting.
diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-01-03-14-47-49.gh-issue-142982.0lAtc7.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-01-03-14-47-49.gh-issue-142982.0lAtc7.rst
new file mode 100644 (file)
index 0000000..cb4c237
--- /dev/null
@@ -0,0 +1 @@
+Specialize :opcode:`CALL_FUNCTION_EX` for Python and non-Python callables.
index f5586400402cfe693dfc516c6e762fac23e2dd83..c83f5033af7b0ac707b0952e4419c8d35a0060df 100644 (file)
@@ -4794,6 +4794,11 @@ dummy_func(
             _CALL_KW_NON_PY +
             _CHECK_PERIODIC_AT_END;
 
+        family(CALL_FUNCTION_EX, INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX) = {
+            CALL_EX_PY,
+            CALL_EX_NON_PY_GENERAL,
+        };
+
         op(_MAKE_CALLARGS_A_TUPLE, (func, unused, callargs, kwargs -- func, unused, callargs, kwargs)) {
             PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs);
             if (!PyTuple_CheckExact(callargs_o)) {
@@ -4872,8 +4877,8 @@ dummy_func(
                     if (new_frame == NULL) {
                         ERROR_NO_POP();
                     }
-                    assert(INSTRUCTION_SIZE == 1);
-                    frame->return_offset = 1;
+                    assert(INSTRUCTION_SIZE == 1 + INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX);
+                    frame->return_offset = INSTRUCTION_SIZE;
                     DISPATCH_INLINED(new_frame);
                 }
                 PyObject *callargs = PyStackRef_AsPyObjectBorrow(callargs_st);
@@ -4890,12 +4895,92 @@ dummy_func(
             result = PyStackRef_FromPyObjectSteal(result_o);
         }
 
+        specializing op(_SPECIALIZE_CALL_FUNCTION_EX, (counter/1, func, unused, unused, unused -- func, unused, unused, unused)) {
+        #if ENABLE_SPECIALIZATION_FT
+            if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
+                next_instr = this_instr;
+                _Py_Specialize_CallFunctionEx(func, next_instr);
+                DISPATCH_SAME_OPARG();
+            }
+            OPCODE_DEFERRED_INC(CALL_FUNCTION_EX);
+            ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
+        #endif  /* ENABLE_SPECIALIZATION_FT */
+        }
+
         macro(CALL_FUNCTION_EX) =
+            _SPECIALIZE_CALL_FUNCTION_EX +
             _MAKE_CALLARGS_A_TUPLE +
             _DO_CALL_FUNCTION_EX +
             _CHECK_PERIODIC_AT_END;
 
+        op(_CHECK_IS_PY_CALLABLE_EX, (func_st, unused, unused, unused -- func_st, unused, unused, unused)) {
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            EXIT_IF(Py_TYPE(func) != &PyFunction_Type);
+            EXIT_IF(((PyFunctionObject *)func)->vectorcall != _PyFunction_Vectorcall);
+        }
+
+        op(_PY_FRAME_EX, (func_st, null, callargs_st, kwargs_st -- ex_frame)) {
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            PyObject *callargs = PyStackRef_AsPyObjectSteal(callargs_st);
+            assert(PyTuple_CheckExact(callargs));
+            assert(Py_TYPE(func) == &PyFunction_Type);
+            assert(((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall);
+            PyObject *kwargs = PyStackRef_IsNull(kwargs_st) ? NULL : PyStackRef_AsPyObjectSteal(kwargs_st);
+            assert(kwargs == NULL || PyDict_CheckExact(kwargs));
+            Py_ssize_t nargs = PyTuple_GET_SIZE(callargs);
+            int code_flags = ((PyCodeObject *)PyFunction_GET_CODE(func))->co_flags;
+            PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func));
+
+            _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex(
+                tstate, func_st, locals,
+                nargs, callargs, kwargs, frame);
+            INPUTS_DEAD();
+            SYNC_SP();
+            if (new_frame == NULL) {
+                ERROR_NO_POP();
+            }
+            ex_frame = PyStackRef_Wrap(new_frame);
+        }
+
+        macro(CALL_EX_PY) =
+            unused/1 +
+            _CHECK_PEP_523 +
+            _MAKE_CALLARGS_A_TUPLE +
+            _CHECK_IS_PY_CALLABLE_EX +
+            _PY_FRAME_EX +
+            _SAVE_RETURN_OFFSET +
+            _PUSH_FRAME;
+
+        op(_CHECK_IS_NOT_PY_CALLABLE_EX, (func_st, unused, unused, unused -- func_st, unused, unused, unused)) {
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            EXIT_IF(Py_TYPE(func) == &PyFunction_Type && ((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall);
+        }
+
+        op(_CALL_FUNCTION_EX_NON_PY_GENERAL, (func_st, null, callargs_st, kwargs_st -- result)) {
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            PyObject *callargs = PyStackRef_AsPyObjectBorrow(callargs_st);
+            (void)null;
+            assert(PyTuple_CheckExact(callargs));
+            PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st);
+            assert(kwargs == NULL || PyDict_CheckExact(kwargs));
+            PyObject *result_o = PyObject_Call(func, callargs, kwargs);
+            PyStackRef_XCLOSE(kwargs_st);
+            PyStackRef_CLOSE(callargs_st);
+            DEAD(null);
+            PyStackRef_CLOSE(func_st);
+            ERROR_IF(result_o == NULL);
+            result = PyStackRef_FromPyObjectSteal(result_o);
+        }
+
+        macro(CALL_EX_NON_PY_GENERAL) =
+            unused/1 +
+            _CHECK_IS_NOT_PY_CALLABLE_EX +
+            _MAKE_CALLARGS_A_TUPLE +
+            _CALL_FUNCTION_EX_NON_PY_GENERAL +
+            _CHECK_PERIODIC_AT_END;
+
         macro(INSTRUMENTED_CALL_FUNCTION_EX) =
+            unused/1 +
             _MAKE_CALLARGS_A_TUPLE +
             _DO_CALL_FUNCTION_EX +
             _CHECK_PERIODIC_AT_END;
index c9868ef8cc6525513fe998255e227cdfdbe17ddd..a2b9933c144b620eab3afddfab54252872e12fea 100644 (file)
@@ -329,9 +329,6 @@ static void monitor_throw(PyThreadState *tstate,
                  _Py_CODEUNIT *instr);
 
 static int get_exception_handler(PyCodeObject *, int, int*, int*, int*);
-static  _PyInterpreterFrame *
-_PyEvalFramePushAndInit_Ex(PyThreadState *tstate, _PyStackRef func,
-    PyObject *locals, Py_ssize_t nargs, PyObject *callargs, PyObject *kwargs, _PyInterpreterFrame *previous);
 
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -2435,7 +2432,7 @@ fail:
 /* Same as _PyEvalFramePushAndInit but takes an args tuple and kwargs dict.
    Steals references to func, callargs and kwargs.
 */
-static _PyInterpreterFrame *
+_PyInterpreterFrame *
 _PyEvalFramePushAndInit_Ex(PyThreadState *tstate, _PyStackRef func,
     PyObject *locals, Py_ssize_t nargs, PyObject *callargs, PyObject *kwargs, _PyInterpreterFrame *previous)
 {
index 4ba6f7cfeee1f3326f7369b45e1d93362560c794..a56482d411fe1b45030456f7ad18a3ec1613d3b1 100644 (file)
 
         /* _DO_CALL_FUNCTION_EX is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */
 
+        case _CHECK_IS_PY_CALLABLE_EX_r03: {
+            CHECK_CURRENT_CACHED_VALUES(0);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef func_st;
+            func_st = stack_pointer[-4];
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            if (Py_TYPE(func) != &PyFunction_Type) {
+                UOP_STAT_INC(uopcode, miss);
+                SET_CURRENT_CACHED_VALUES(0);
+                JUMP_TO_JUMP_TARGET();
+            }
+            if (((PyFunctionObject *)func)->vectorcall != _PyFunction_Vectorcall) {
+                UOP_STAT_INC(uopcode, miss);
+                SET_CURRENT_CACHED_VALUES(0);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache2 = stack_pointer[-1];
+            _tos_cache1 = stack_pointer[-2];
+            _tos_cache0 = stack_pointer[-3];
+            SET_CURRENT_CACHED_VALUES(3);
+            stack_pointer += -3;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _CHECK_IS_PY_CALLABLE_EX_r13: {
+            CHECK_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef func_st;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            func_st = stack_pointer[-3];
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            if (Py_TYPE(func) != &PyFunction_Type) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(1);
+                JUMP_TO_JUMP_TARGET();
+            }
+            if (((PyFunctionObject *)func)->vectorcall != _PyFunction_Vectorcall) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(1);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache2 = _stack_item_0;
+            _tos_cache1 = stack_pointer[-1];
+            _tos_cache0 = stack_pointer[-2];
+            SET_CURRENT_CACHED_VALUES(3);
+            stack_pointer += -2;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _CHECK_IS_PY_CALLABLE_EX_r23: {
+            CHECK_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef func_st;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            func_st = stack_pointer[-2];
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            if (Py_TYPE(func) != &PyFunction_Type) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache1 = _stack_item_1;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(2);
+                JUMP_TO_JUMP_TARGET();
+            }
+            if (((PyFunctionObject *)func)->vectorcall != _PyFunction_Vectorcall) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache1 = _stack_item_1;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(2);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache2 = _stack_item_1;
+            _tos_cache1 = _stack_item_0;
+            _tos_cache0 = stack_pointer[-1];
+            SET_CURRENT_CACHED_VALUES(3);
+            stack_pointer += -1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _CHECK_IS_PY_CALLABLE_EX_r33: {
+            CHECK_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef func_st;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            _PyStackRef _stack_item_2 = _tos_cache2;
+            func_st = stack_pointer[-1];
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            if (Py_TYPE(func) != &PyFunction_Type) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache2 = _stack_item_2;
+                _tos_cache1 = _stack_item_1;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(3);
+                JUMP_TO_JUMP_TARGET();
+            }
+            if (((PyFunctionObject *)func)->vectorcall != _PyFunction_Vectorcall) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache2 = _stack_item_2;
+                _tos_cache1 = _stack_item_1;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(3);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache2 = _stack_item_2;
+            _tos_cache1 = _stack_item_1;
+            _tos_cache0 = _stack_item_0;
+            SET_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _PY_FRAME_EX_r31: {
+            CHECK_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef kwargs_st;
+            _PyStackRef callargs_st;
+            _PyStackRef func_st;
+            _PyStackRef ex_frame;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            _PyStackRef _stack_item_2 = _tos_cache2;
+            kwargs_st = _stack_item_2;
+            callargs_st = _stack_item_1;
+            func_st = stack_pointer[-1];
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            PyObject *callargs = PyStackRef_AsPyObjectSteal(callargs_st);
+            assert(PyTuple_CheckExact(callargs));
+            assert(Py_TYPE(func) == &PyFunction_Type);
+            assert(((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall);
+            PyObject *kwargs = PyStackRef_IsNull(kwargs_st) ? NULL : PyStackRef_AsPyObjectSteal(kwargs_st);
+            assert(kwargs == NULL || PyDict_CheckExact(kwargs));
+            Py_ssize_t nargs = PyTuple_GET_SIZE(callargs);
+            int code_flags = ((PyCodeObject *)PyFunction_GET_CODE(func))->co_flags;
+            PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func));
+            stack_pointer[0] = _stack_item_0;
+            stack_pointer += 1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            _PyFrame_SetStackPointer(frame, stack_pointer);
+            _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex(
+                tstate, func_st, locals,
+                nargs, callargs, kwargs, frame);
+            stack_pointer = _PyFrame_GetStackPointer(frame);
+            stack_pointer += -2;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            if (new_frame == NULL) {
+                SET_CURRENT_CACHED_VALUES(0);
+                JUMP_TO_ERROR();
+            }
+            ex_frame = PyStackRef_Wrap(new_frame);
+            _tos_cache0 = ex_frame;
+            _tos_cache1 = PyStackRef_ZERO_BITS;
+            _tos_cache2 = PyStackRef_ZERO_BITS;
+            SET_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _CHECK_IS_NOT_PY_CALLABLE_EX_r03: {
+            CHECK_CURRENT_CACHED_VALUES(0);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef func_st;
+            func_st = stack_pointer[-4];
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            if (Py_TYPE(func) == &PyFunction_Type && ((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall) {
+                UOP_STAT_INC(uopcode, miss);
+                SET_CURRENT_CACHED_VALUES(0);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache2 = stack_pointer[-1];
+            _tos_cache1 = stack_pointer[-2];
+            _tos_cache0 = stack_pointer[-3];
+            SET_CURRENT_CACHED_VALUES(3);
+            stack_pointer += -3;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _CHECK_IS_NOT_PY_CALLABLE_EX_r13: {
+            CHECK_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef func_st;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            func_st = stack_pointer[-3];
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            if (Py_TYPE(func) == &PyFunction_Type && ((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(1);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache2 = _stack_item_0;
+            _tos_cache1 = stack_pointer[-1];
+            _tos_cache0 = stack_pointer[-2];
+            SET_CURRENT_CACHED_VALUES(3);
+            stack_pointer += -2;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _CHECK_IS_NOT_PY_CALLABLE_EX_r23: {
+            CHECK_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef func_st;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            func_st = stack_pointer[-2];
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            if (Py_TYPE(func) == &PyFunction_Type && ((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache1 = _stack_item_1;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(2);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache2 = _stack_item_1;
+            _tos_cache1 = _stack_item_0;
+            _tos_cache0 = stack_pointer[-1];
+            SET_CURRENT_CACHED_VALUES(3);
+            stack_pointer += -1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _CHECK_IS_NOT_PY_CALLABLE_EX_r33: {
+            CHECK_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef func_st;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            _PyStackRef _stack_item_2 = _tos_cache2;
+            func_st = stack_pointer[-1];
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            if (Py_TYPE(func) == &PyFunction_Type && ((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache2 = _stack_item_2;
+                _tos_cache1 = _stack_item_1;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(3);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache2 = _stack_item_2;
+            _tos_cache1 = _stack_item_1;
+            _tos_cache0 = _stack_item_0;
+            SET_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _CALL_FUNCTION_EX_NON_PY_GENERAL_r31: {
+            CHECK_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef kwargs_st;
+            _PyStackRef callargs_st;
+            _PyStackRef null;
+            _PyStackRef func_st;
+            _PyStackRef result;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            _PyStackRef _stack_item_2 = _tos_cache2;
+            kwargs_st = _stack_item_2;
+            callargs_st = _stack_item_1;
+            null = _stack_item_0;
+            func_st = stack_pointer[-1];
+            PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+            PyObject *callargs = PyStackRef_AsPyObjectBorrow(callargs_st);
+            (void)null;
+            assert(PyTuple_CheckExact(callargs));
+            PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st);
+            assert(kwargs == NULL || PyDict_CheckExact(kwargs));
+            stack_pointer[0] = null;
+            stack_pointer[1] = callargs_st;
+            stack_pointer[2] = kwargs_st;
+            stack_pointer += 3;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            _PyFrame_SetStackPointer(frame, stack_pointer);
+            PyObject *result_o = PyObject_Call(func, callargs, kwargs);
+            stack_pointer = _PyFrame_GetStackPointer(frame);
+            stack_pointer += -1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            _PyFrame_SetStackPointer(frame, stack_pointer);
+            PyStackRef_XCLOSE(kwargs_st);
+            stack_pointer = _PyFrame_GetStackPointer(frame);
+            stack_pointer += -1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            _PyFrame_SetStackPointer(frame, stack_pointer);
+            PyStackRef_CLOSE(callargs_st);
+            stack_pointer = _PyFrame_GetStackPointer(frame);
+            stack_pointer += -2;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            _PyFrame_SetStackPointer(frame, stack_pointer);
+            PyStackRef_CLOSE(func_st);
+            stack_pointer = _PyFrame_GetStackPointer(frame);
+            if (result_o == NULL) {
+                SET_CURRENT_CACHED_VALUES(0);
+                JUMP_TO_ERROR();
+            }
+            result = PyStackRef_FromPyObjectSteal(result_o);
+            _tos_cache0 = result;
+            _tos_cache1 = PyStackRef_ZERO_BITS;
+            _tos_cache2 = PyStackRef_ZERO_BITS;
+            SET_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
         case _MAKE_FUNCTION_r11: {
             CHECK_CURRENT_CACHED_VALUES(1);
             assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
index 8ad62cd9a1e8137e39400d20e137cd9a8a68be58..b134d6c12cf4b71a751058f07befc1f26f469464 100644 (file)
             DISPATCH();
         }
 
-        TARGET(CALL_FUNCTION_EX) {
+        TARGET(CALL_EX_NON_PY_GENERAL) {
             #if _Py_TAIL_CALL_INTERP
-            int opcode = CALL_FUNCTION_EX;
+            int opcode = CALL_EX_NON_PY_GENERAL;
             (void)(opcode);
             #endif
             _Py_CODEUNIT* const this_instr = next_instr;
             (void)this_instr;
             frame->instr_ptr = next_instr;
-            next_instr += 1;
+            next_instr += 2;
+            INSTRUCTION_STATS(CALL_EX_NON_PY_GENERAL);
+            static_assert(INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX == 1, "incorrect cache size");
+            _PyStackRef func_st;
+            _PyStackRef func;
+            _PyStackRef callargs;
+            _PyStackRef null;
+            _PyStackRef callargs_st;
+            _PyStackRef kwargs_st;
+            _PyStackRef result;
+            /* Skip 1 cache entry */
+            // _CHECK_IS_NOT_PY_CALLABLE_EX
+            {
+                func_st = stack_pointer[-4];
+                PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+                if (Py_TYPE(func) == &PyFunction_Type && ((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall) {
+                    UPDATE_MISS_STATS(CALL_FUNCTION_EX);
+                    assert(_PyOpcode_Deopt[opcode] == (CALL_FUNCTION_EX));
+                    JUMP_TO_PREDICTED(CALL_FUNCTION_EX);
+                }
+            }
+            // _MAKE_CALLARGS_A_TUPLE
+            {
+                callargs = stack_pointer[-2];
+                func = func_st;
+                PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs);
+                if (!PyTuple_CheckExact(callargs_o)) {
+                    _PyFrame_SetStackPointer(frame, stack_pointer);
+                    int err = _Py_Check_ArgsIterable(tstate, PyStackRef_AsPyObjectBorrow(func), callargs_o);
+                    stack_pointer = _PyFrame_GetStackPointer(frame);
+                    if (err < 0) {
+                        JUMP_TO_LABEL(error);
+                    }
+                    _PyFrame_SetStackPointer(frame, stack_pointer);
+                    PyObject *tuple_o = PySequence_Tuple(callargs_o);
+                    stack_pointer = _PyFrame_GetStackPointer(frame);
+                    if (tuple_o == NULL) {
+                        JUMP_TO_LABEL(error);
+                    }
+                    _PyStackRef temp = callargs;
+                    callargs = PyStackRef_FromPyObjectSteal(tuple_o);
+                    stack_pointer[-2] = callargs;
+                    _PyFrame_SetStackPointer(frame, stack_pointer);
+                    PyStackRef_CLOSE(temp);
+                    stack_pointer = _PyFrame_GetStackPointer(frame);
+                }
+            }
+            // _CALL_FUNCTION_EX_NON_PY_GENERAL
+            {
+                kwargs_st = stack_pointer[-1];
+                callargs_st = callargs;
+                null = stack_pointer[-3];
+                func_st = func;
+                PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+                PyObject *callargs = PyStackRef_AsPyObjectBorrow(callargs_st);
+                (void)null;
+                assert(PyTuple_CheckExact(callargs));
+                PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st);
+                assert(kwargs == NULL || PyDict_CheckExact(kwargs));
+                stack_pointer[-2] = callargs_st;
+                _PyFrame_SetStackPointer(frame, stack_pointer);
+                PyObject *result_o = PyObject_Call(func, callargs, kwargs);
+                stack_pointer = _PyFrame_GetStackPointer(frame);
+                stack_pointer += -1;
+                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+                _PyFrame_SetStackPointer(frame, stack_pointer);
+                PyStackRef_XCLOSE(kwargs_st);
+                stack_pointer = _PyFrame_GetStackPointer(frame);
+                stack_pointer += -1;
+                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+                _PyFrame_SetStackPointer(frame, stack_pointer);
+                PyStackRef_CLOSE(callargs_st);
+                stack_pointer = _PyFrame_GetStackPointer(frame);
+                stack_pointer += -2;
+                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+                _PyFrame_SetStackPointer(frame, stack_pointer);
+                PyStackRef_CLOSE(func_st);
+                stack_pointer = _PyFrame_GetStackPointer(frame);
+                if (result_o == NULL) {
+                    JUMP_TO_LABEL(error);
+                }
+                result = PyStackRef_FromPyObjectSteal(result_o);
+            }
+            // _CHECK_PERIODIC_AT_END
+            {
+                stack_pointer[0] = result;
+                stack_pointer += 1;
+                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+                _PyFrame_SetStackPointer(frame, stack_pointer);
+                int err = check_periodics(tstate);
+                stack_pointer = _PyFrame_GetStackPointer(frame);
+                if (err != 0) {
+                    JUMP_TO_LABEL(error);
+                }
+            }
+            DISPATCH();
+        }
+
+        TARGET(CALL_EX_PY) {
+            #if _Py_TAIL_CALL_INTERP
+            int opcode = CALL_EX_PY;
+            (void)(opcode);
+            #endif
+            _Py_CODEUNIT* const this_instr = next_instr;
+            (void)this_instr;
+            frame->instr_ptr = next_instr;
+            next_instr += 2;
+            INSTRUCTION_STATS(CALL_EX_PY);
+            static_assert(INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX == 1, "incorrect cache size");
+            _PyStackRef func;
+            _PyStackRef callargs;
+            _PyStackRef func_st;
+            _PyStackRef callargs_st;
+            _PyStackRef kwargs_st;
+            _PyStackRef ex_frame;
+            _PyStackRef new_frame;
+            /* Skip 1 cache entry */
+            // _CHECK_PEP_523
+            {
+                if (tstate->interp->eval_frame) {
+                    UPDATE_MISS_STATS(CALL_FUNCTION_EX);
+                    assert(_PyOpcode_Deopt[opcode] == (CALL_FUNCTION_EX));
+                    JUMP_TO_PREDICTED(CALL_FUNCTION_EX);
+                }
+            }
+            // _MAKE_CALLARGS_A_TUPLE
+            {
+                callargs = stack_pointer[-2];
+                func = stack_pointer[-4];
+                PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs);
+                if (!PyTuple_CheckExact(callargs_o)) {
+                    _PyFrame_SetStackPointer(frame, stack_pointer);
+                    int err = _Py_Check_ArgsIterable(tstate, PyStackRef_AsPyObjectBorrow(func), callargs_o);
+                    stack_pointer = _PyFrame_GetStackPointer(frame);
+                    if (err < 0) {
+                        JUMP_TO_LABEL(error);
+                    }
+                    _PyFrame_SetStackPointer(frame, stack_pointer);
+                    PyObject *tuple_o = PySequence_Tuple(callargs_o);
+                    stack_pointer = _PyFrame_GetStackPointer(frame);
+                    if (tuple_o == NULL) {
+                        JUMP_TO_LABEL(error);
+                    }
+                    _PyStackRef temp = callargs;
+                    callargs = PyStackRef_FromPyObjectSteal(tuple_o);
+                    stack_pointer[-2] = callargs;
+                    _PyFrame_SetStackPointer(frame, stack_pointer);
+                    PyStackRef_CLOSE(temp);
+                    stack_pointer = _PyFrame_GetStackPointer(frame);
+                }
+            }
+            // _CHECK_IS_PY_CALLABLE_EX
+            {
+                func_st = func;
+                PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+                if (Py_TYPE(func) != &PyFunction_Type) {
+                    UPDATE_MISS_STATS(CALL_FUNCTION_EX);
+                    assert(_PyOpcode_Deopt[opcode] == (CALL_FUNCTION_EX));
+                    JUMP_TO_PREDICTED(CALL_FUNCTION_EX);
+                }
+                if (((PyFunctionObject *)func)->vectorcall != _PyFunction_Vectorcall) {
+                    UPDATE_MISS_STATS(CALL_FUNCTION_EX);
+                    assert(_PyOpcode_Deopt[opcode] == (CALL_FUNCTION_EX));
+                    JUMP_TO_PREDICTED(CALL_FUNCTION_EX);
+                }
+            }
+            // _PY_FRAME_EX
+            {
+                kwargs_st = stack_pointer[-1];
+                callargs_st = callargs;
+                PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+                PyObject *callargs = PyStackRef_AsPyObjectSteal(callargs_st);
+                assert(PyTuple_CheckExact(callargs));
+                assert(Py_TYPE(func) == &PyFunction_Type);
+                assert(((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall);
+                PyObject *kwargs = PyStackRef_IsNull(kwargs_st) ? NULL : PyStackRef_AsPyObjectSteal(kwargs_st);
+                assert(kwargs == NULL || PyDict_CheckExact(kwargs));
+                Py_ssize_t nargs = PyTuple_GET_SIZE(callargs);
+                int code_flags = ((PyCodeObject *)PyFunction_GET_CODE(func))->co_flags;
+                PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func));
+                stack_pointer += -3;
+                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+                _PyFrame_SetStackPointer(frame, stack_pointer);
+                _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex(
+                    tstate, func_st, locals,
+                    nargs, callargs, kwargs, frame);
+                stack_pointer = _PyFrame_GetStackPointer(frame);
+                stack_pointer += -1;
+                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+                if (new_frame == NULL) {
+                    JUMP_TO_LABEL(error);
+                }
+                ex_frame = PyStackRef_Wrap(new_frame);
+            }
+            // _SAVE_RETURN_OFFSET
+            {
+                #if TIER_ONE
+                frame->return_offset = (uint16_t)(next_instr - this_instr);
+                #endif
+                #if TIER_TWO
+                frame->return_offset = oparg;
+                #endif
+            }
+            // _PUSH_FRAME
+            {
+                new_frame = ex_frame;
+                assert(tstate->interp->eval_frame == NULL);
+                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
+                _PyFrame_SetStackPointer(frame, stack_pointer);
+                assert(temp->previous == frame || temp->previous->previous == frame);
+                CALL_STAT_INC(inlined_py_calls);
+                frame = tstate->current_frame = temp;
+                tstate->py_recursion_remaining--;
+                LOAD_SP();
+                LOAD_IP(0);
+                LLTRACE_RESUME_FRAME();
+            }
+            DISPATCH();
+        }
+
+        TARGET(CALL_FUNCTION_EX) {
+            #if _Py_TAIL_CALL_INTERP
+            int opcode = CALL_FUNCTION_EX;
+            (void)(opcode);
+            #endif
+            frame->instr_ptr = next_instr;
+            next_instr += 2;
             INSTRUCTION_STATS(CALL_FUNCTION_EX);
+            PREDICTED_CALL_FUNCTION_EX:;
+            _Py_CODEUNIT* const this_instr = next_instr - 2;
+            (void)this_instr;
             opcode = CALL_FUNCTION_EX;
             _PyStackRef func;
             _PyStackRef callargs;
             _PyStackRef callargs_st;
             _PyStackRef kwargs_st;
             _PyStackRef result;
+            // _SPECIALIZE_CALL_FUNCTION_EX
+            {
+                func = stack_pointer[-4];
+                uint16_t counter = read_u16(&this_instr[1].cache);
+                (void)counter;
+                #if ENABLE_SPECIALIZATION_FT
+                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
+                    next_instr = this_instr;
+                    _PyFrame_SetStackPointer(frame, stack_pointer);
+                    _Py_Specialize_CallFunctionEx(func, next_instr);
+                    stack_pointer = _PyFrame_GetStackPointer(frame);
+                    DISPATCH_SAME_OPARG();
+                }
+                OPCODE_DEFERRED_INC(CALL_FUNCTION_EX);
+                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
+                #endif  /* ENABLE_SPECIALIZATION_FT */
+            }
             // _MAKE_CALLARGS_A_TUPLE
             {
                 callargs = stack_pointer[-2];
-                func = stack_pointer[-4];
                 PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs);
                 if (!PyTuple_CheckExact(callargs_o)) {
                     _PyFrame_SetStackPointer(frame, stack_pointer);
                         if (new_frame == NULL) {
                             JUMP_TO_LABEL(error);
                         }
-                        assert( 1u == 1);
-                        frame->return_offset = 1;
+                        assert( 2u == 1 + INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX);
+                        frame->return_offset = 2u ;
                         DISPATCH_INLINED(new_frame);
                     }
                     PyObject *callargs = PyStackRef_AsPyObjectBorrow(callargs_st);
             _Py_CODEUNIT* const this_instr = next_instr;
             (void)this_instr;
             frame->instr_ptr = next_instr;
-            next_instr += 1;
+            next_instr += 2;
             INSTRUCTION_STATS(INSTRUMENTED_CALL_FUNCTION_EX);
             opcode = INSTRUMENTED_CALL_FUNCTION_EX;
             _PyStackRef func;
             _PyStackRef callargs_st;
             _PyStackRef kwargs_st;
             _PyStackRef result;
+            /* Skip 1 cache entry */
             // _MAKE_CALLARGS_A_TUPLE
             {
                 callargs = stack_pointer[-2];
                         if (new_frame == NULL) {
                             JUMP_TO_LABEL(error);
                         }
-                        assert( 1u == 1);
-                        frame->return_offset = 1;
+                        assert( 2u == 1 + INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX);
+                        frame->return_offset = 2u ;
                         DISPATCH_INLINED(new_frame);
                     }
                     PyObject *callargs = PyStackRef_AsPyObjectBorrow(callargs_st);
index 01c93f51b97a0db06bb796aa16e15c9718028f4d..f57c33feec2ac291e1646433a21065f83e5e8429 100644 (file)
@@ -151,6 +151,8 @@ static void *opcode_targets_table[256] = {
     &&TARGET_CALL_BUILTIN_FAST,
     &&TARGET_CALL_BUILTIN_FAST_WITH_KEYWORDS,
     &&TARGET_CALL_BUILTIN_O,
+    &&TARGET_CALL_EX_NON_PY_GENERAL,
+    &&TARGET_CALL_EX_PY,
     &&TARGET_CALL_ISINSTANCE,
     &&TARGET_CALL_KW_BOUND_METHOD,
     &&TARGET_CALL_KW_NON_PY,
@@ -231,8 +233,6 @@ static void *opcode_targets_table[256] = {
     &&_unknown_opcode,
     &&_unknown_opcode,
     &&_unknown_opcode,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
     &&TARGET_INSTRUMENTED_END_FOR,
     &&TARGET_INSTRUMENTED_POP_ITER,
     &&TARGET_INSTRUMENTED_END_SEND,
@@ -470,8 +470,8 @@ static void *opcode_tracing_targets_table[256] = {
     &&TARGET_TRACE_RECORD,
     &&TARGET_TRACE_RECORD,
     &&TARGET_TRACE_RECORD,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
+    &&TARGET_TRACE_RECORD,
+    &&TARGET_TRACE_RECORD,
     &&_unknown_opcode,
     &&_unknown_opcode,
     &&_unknown_opcode,
@@ -565,6 +565,8 @@ static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_BUILTIN_CLASS(TAIL_CALL_PAR
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_BUILTIN_FAST(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_BUILTIN_FAST_WITH_KEYWORDS(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_BUILTIN_O(TAIL_CALL_PARAMS);
+static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_EX_NON_PY_GENERAL(TAIL_CALL_PARAMS);
+static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_EX_PY(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_FUNCTION_EX(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_INTRINSIC_1(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_INTRINSIC_2(TAIL_CALL_PARAMS);
@@ -804,6 +806,8 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = {
     [CALL_BUILTIN_FAST] = _TAIL_CALL_CALL_BUILTIN_FAST,
     [CALL_BUILTIN_FAST_WITH_KEYWORDS] = _TAIL_CALL_CALL_BUILTIN_FAST_WITH_KEYWORDS,
     [CALL_BUILTIN_O] = _TAIL_CALL_CALL_BUILTIN_O,
+    [CALL_EX_NON_PY_GENERAL] = _TAIL_CALL_CALL_EX_NON_PY_GENERAL,
+    [CALL_EX_PY] = _TAIL_CALL_CALL_EX_PY,
     [CALL_FUNCTION_EX] = _TAIL_CALL_CALL_FUNCTION_EX,
     [CALL_INTRINSIC_1] = _TAIL_CALL_CALL_INTRINSIC_1,
     [CALL_INTRINSIC_2] = _TAIL_CALL_CALL_INTRINSIC_2,
@@ -1003,8 +1007,6 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = {
     [125] = _TAIL_CALL_UNKNOWN_OPCODE,
     [126] = _TAIL_CALL_UNKNOWN_OPCODE,
     [127] = _TAIL_CALL_UNKNOWN_OPCODE,
-    [211] = _TAIL_CALL_UNKNOWN_OPCODE,
-    [212] = _TAIL_CALL_UNKNOWN_OPCODE,
     [213] = _TAIL_CALL_UNKNOWN_OPCODE,
     [214] = _TAIL_CALL_UNKNOWN_OPCODE,
     [215] = _TAIL_CALL_UNKNOWN_OPCODE,
@@ -1062,6 +1064,8 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = {
     [CALL_BUILTIN_FAST] = _TAIL_CALL_TRACE_RECORD,
     [CALL_BUILTIN_FAST_WITH_KEYWORDS] = _TAIL_CALL_TRACE_RECORD,
     [CALL_BUILTIN_O] = _TAIL_CALL_TRACE_RECORD,
+    [CALL_EX_NON_PY_GENERAL] = _TAIL_CALL_TRACE_RECORD,
+    [CALL_EX_PY] = _TAIL_CALL_TRACE_RECORD,
     [CALL_FUNCTION_EX] = _TAIL_CALL_TRACE_RECORD,
     [CALL_INTRINSIC_1] = _TAIL_CALL_TRACE_RECORD,
     [CALL_INTRINSIC_2] = _TAIL_CALL_TRACE_RECORD,
@@ -1261,8 +1265,6 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = {
     [125] = _TAIL_CALL_UNKNOWN_OPCODE,
     [126] = _TAIL_CALL_UNKNOWN_OPCODE,
     [127] = _TAIL_CALL_UNKNOWN_OPCODE,
-    [211] = _TAIL_CALL_UNKNOWN_OPCODE,
-    [212] = _TAIL_CALL_UNKNOWN_OPCODE,
     [213] = _TAIL_CALL_UNKNOWN_OPCODE,
     [214] = _TAIL_CALL_UNKNOWN_OPCODE,
     [215] = _TAIL_CALL_UNKNOWN_OPCODE,
index cbcae5075a279d5421efb99b71d4e6d3526202cd..9388862e7dbc89bed0e1dc8788a5b2d14063bccc 100644 (file)
@@ -837,6 +837,17 @@ dummy_func(void) {
         new_frame = PyJitRef_Wrap((JitOptSymbol *)frame_new(ctx, co, 0, NULL, 0));
     }
 
+    op(_PY_FRAME_EX, (func_st, null, callargs_st, kwargs_st -- ex_frame)) {
+        assert((this_instr + 2)->opcode == _PUSH_FRAME);
+        PyCodeObject *co = get_code_with_logging((this_instr + 2));
+        if (co == NULL) {
+            ctx->done = true;
+            break;
+        }
+
+        ex_frame = PyJitRef_Wrap((JitOptSymbol *)frame_new(ctx, co, 0, NULL, 0));
+    }
+
     op(_CHECK_AND_ALLOCATE_OBJECT, (type_version/2, callable, self_or_null, args[oparg] -- callable, self_or_null, args[oparg])) {
         (void)type_version;
         (void)args;
@@ -1000,8 +1011,7 @@ dummy_func(void) {
             ctx->frame->func = func;
         }
         // Fixed calls don't need IP guards.
-        if ((this_instr-1)->opcode == _SAVE_RETURN_OFFSET ||
-            (this_instr-1)->opcode == _CREATE_INIT_FRAME) {
+        if ((this_instr-1)->opcode == _CREATE_INIT_FRAME) {
             assert((this_instr+1)->opcode == _GUARD_IP__PUSH_FRAME);
             REPLACE_OP(this_instr+1, _NOP, 0, 0);
         }
index 96aee7830b9e249a5cf7c53167549505c44f6ee3..9e877cea8c8d47c056bf7b14087e348659a1d292 100644 (file)
                 PyFunctionObject *func = (PyFunctionObject *)operand;
                 ctx->frame->func = func;
             }
-            if ((this_instr-1)->opcode == _SAVE_RETURN_OFFSET ||
-                (this_instr-1)->opcode == _CREATE_INIT_FRAME) {
+            if ((this_instr-1)->opcode == _CREATE_INIT_FRAME) {
                 assert((this_instr+1)->opcode == _GUARD_IP__PUSH_FRAME);
                 REPLACE_OP(this_instr+1, _NOP, 0, 0);
             }
 
         /* _DO_CALL_FUNCTION_EX is not a viable micro-op for tier 2 */
 
+        case _CHECK_IS_PY_CALLABLE_EX: {
+            break;
+        }
+
+        case _PY_FRAME_EX: {
+            JitOptRef ex_frame;
+            assert((this_instr + 2)->opcode == _PUSH_FRAME);
+            PyCodeObject *co = get_code_with_logging((this_instr + 2));
+            if (co == NULL) {
+                ctx->done = true;
+                break;
+            }
+            ex_frame = PyJitRef_Wrap((JitOptSymbol *)frame_new(ctx, co, 0, NULL, 0));
+            CHECK_STACK_BOUNDS(-3);
+            stack_pointer[-4] = ex_frame;
+            stack_pointer += -3;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            break;
+        }
+
+        case _CHECK_IS_NOT_PY_CALLABLE_EX: {
+            break;
+        }
+
+        case _CALL_FUNCTION_EX_NON_PY_GENERAL: {
+            JitOptRef result;
+            result = sym_new_not_null(ctx);
+            CHECK_STACK_BOUNDS(-3);
+            stack_pointer[-4] = result;
+            stack_pointer += -3;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            break;
+        }
+
         case _MAKE_FUNCTION: {
             JitOptRef func;
             func = sym_new_not_null(ctx);
index b7fa5f8ad4c04e6713ab952dd2523d526042de56..fee54695c7f3c62551b86317e9396b0bfca98b74 100644 (file)
@@ -2587,6 +2587,28 @@ failure:
     unspecialize(instr);
 }
 
+Py_NO_INLINE void
+_Py_Specialize_CallFunctionEx(_PyStackRef func_st, _Py_CODEUNIT *instr)
+{
+    PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
+
+    assert(ENABLE_SPECIALIZATION_FT);
+    assert(_PyOpcode_Caches[CALL_FUNCTION_EX] == INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX);
+
+    if (Py_TYPE(func) == &PyFunction_Type &&
+        ((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall) {
+        if (_PyInterpreterState_GET()->eval_frame) {
+            goto failure;
+        }
+        specialize(instr, CALL_EX_PY);
+        return;
+    }
+    specialize(instr, CALL_EX_NON_PY_GENERAL);
+    return;
+failure:
+    unspecialize(instr);
+}
+
 #ifdef Py_STATS
 static int
 to_bool_fail_kind(PyObject *value)