GH-125837: Split LOAD_CONST into three. (GH-125972)

* Add LOAD_CONST_IMMORTAL opcode

* Add LOAD_SMALL_INT opcode

* Remove RETURN_CONST opcode
This commit is contained in:
Mark Shannon 2024-10-29 11:15:42 +00:00 committed by GitHub
parent 67f5c5bd6f
commit faa3272fb8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
33 changed files with 706 additions and 538 deletions

View file

@ -261,6 +261,7 @@ Known values:
Python 3.14a1 3606 (Specialize CALL_KW)
Python 3.14a1 3607 (Add pseudo instructions JUMP_IF_TRUE/FALSE)
Python 3.14a1 3608 (Add support for slices)
Python 3.14a2 3609 (Add LOAD_SMALL_INT and LOAD_CONST_IMMORTAL instructions, remove RETURN_CONST)
Python 3.15 will start with 3650
@ -273,7 +274,7 @@ PC/launcher.c must also be updated.
*/
#define PYC_MAGIC_NUMBER 3608
#define PYC_MAGIC_NUMBER 3609
/* This is equivalent to converting PYC_MAGIC_NUMBER to 2 bytes
(little-endian) and then appending b'\r\n'. */
#define PYC_MAGIC_NUMBER_TOKEN \

View file

@ -253,8 +253,6 @@ int _PyOpcode_num_popped(int opcode, int oparg) {
return 0;
case INSTRUMENTED_RESUME:
return 0;
case INSTRUMENTED_RETURN_CONST:
return 0;
case INSTRUMENTED_RETURN_VALUE:
return 1;
case INSTRUMENTED_YIELD_VALUE:
@ -317,6 +315,8 @@ int _PyOpcode_num_popped(int opcode, int oparg) {
return 0;
case LOAD_CONST:
return 0;
case LOAD_CONST_IMMORTAL:
return 0;
case LOAD_DEREF:
return 0;
case LOAD_FAST:
@ -341,6 +341,8 @@ int _PyOpcode_num_popped(int opcode, int oparg) {
return 0;
case LOAD_NAME:
return 0;
case LOAD_SMALL_INT:
return 0;
case LOAD_SPECIAL:
return 1;
case LOAD_SUPER_ATTR:
@ -393,8 +395,6 @@ int _PyOpcode_num_popped(int opcode, int oparg) {
return 0;
case RESUME_CHECK:
return 0;
case RETURN_CONST:
return 0;
case RETURN_GENERATOR:
return 0;
case RETURN_VALUE:
@ -712,8 +712,6 @@ int _PyOpcode_num_pushed(int opcode, int oparg) {
return 0;
case INSTRUMENTED_RESUME:
return 0;
case INSTRUMENTED_RETURN_CONST:
return 1;
case INSTRUMENTED_RETURN_VALUE:
return 1;
case INSTRUMENTED_YIELD_VALUE:
@ -776,6 +774,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg) {
return 1;
case LOAD_CONST:
return 1;
case LOAD_CONST_IMMORTAL:
return 1;
case LOAD_DEREF:
return 1;
case LOAD_FAST:
@ -800,6 +800,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg) {
return 1;
case LOAD_NAME:
return 1;
case LOAD_SMALL_INT:
return 1;
case LOAD_SPECIAL:
return 2;
case LOAD_SUPER_ATTR:
@ -852,8 +854,6 @@ int _PyOpcode_num_pushed(int opcode, int oparg) {
return 0;
case RESUME_CHECK:
return 0;
case RETURN_CONST:
return 1;
case RETURN_GENERATOR:
return 1;
case RETURN_VALUE:
@ -1123,7 +1123,6 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[266] = {
[INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
[INSTRUMENTED_POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
[INSTRUMENTED_RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
[INSTRUMENTED_RETURN_CONST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_CONST_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[INSTRUMENTED_RETURN_VALUE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[INSTRUMENTED_YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
[INTERPRETER_EXIT] = { true, INSTR_FMT_IX, 0 },
@ -1150,6 +1149,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[266] = {
[LOAD_BUILD_CLASS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[LOAD_COMMON_CONSTANT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
[LOAD_CONST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_CONST_FLAG | HAS_PURE_FLAG },
[LOAD_CONST_IMMORTAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_CONST_FLAG },
[LOAD_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[LOAD_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG },
[LOAD_FAST_AND_CLEAR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG },
@ -1162,6 +1162,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[266] = {
[LOAD_GLOBAL_MODULE] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
[LOAD_LOCALS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[LOAD_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[LOAD_SMALL_INT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
[LOAD_SPECIAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[LOAD_SUPER_ATTR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[LOAD_SUPER_ATTR_ATTR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
@ -1187,7 +1188,6 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[266] = {
[RESERVED] = { true, INSTR_FMT_IX, 0 },
[RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
[RESUME_CHECK] = { true, INSTR_FMT_IX, HAS_DEOPT_FLAG },
[RETURN_CONST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_CONST_FLAG },
[RETURN_GENERATOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[RETURN_VALUE] = { true, INSTR_FMT_IX, 0 },
[SEND] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
@ -1355,6 +1355,7 @@ _PyOpcode_macro_expansion[256] = {
[LOAD_BUILD_CLASS] = { .nuops = 1, .uops = { { _LOAD_BUILD_CLASS, 0, 0 } } },
[LOAD_COMMON_CONSTANT] = { .nuops = 1, .uops = { { _LOAD_COMMON_CONSTANT, 0, 0 } } },
[LOAD_CONST] = { .nuops = 1, .uops = { { _LOAD_CONST, 0, 0 } } },
[LOAD_CONST_IMMORTAL] = { .nuops = 1, .uops = { { _LOAD_CONST_IMMORTAL, 0, 0 } } },
[LOAD_DEREF] = { .nuops = 1, .uops = { { _LOAD_DEREF, 0, 0 } } },
[LOAD_FAST] = { .nuops = 1, .uops = { { _LOAD_FAST, 0, 0 } } },
[LOAD_FAST_AND_CLEAR] = { .nuops = 1, .uops = { { _LOAD_FAST_AND_CLEAR, 0, 0 } } },
@ -1366,6 +1367,7 @@ _PyOpcode_macro_expansion[256] = {
[LOAD_GLOBAL_MODULE] = { .nuops = 2, .uops = { { _GUARD_GLOBALS_VERSION_PUSH_KEYS, 1, 1 }, { _LOAD_GLOBAL_MODULE_FROM_KEYS, 1, 3 } } },
[LOAD_LOCALS] = { .nuops = 1, .uops = { { _LOAD_LOCALS, 0, 0 } } },
[LOAD_NAME] = { .nuops = 1, .uops = { { _LOAD_NAME, 0, 0 } } },
[LOAD_SMALL_INT] = { .nuops = 1, .uops = { { _LOAD_SMALL_INT, 0, 0 } } },
[LOAD_SPECIAL] = { .nuops = 1, .uops = { { _LOAD_SPECIAL, 0, 0 } } },
[LOAD_SUPER_ATTR_ATTR] = { .nuops = 1, .uops = { { _LOAD_SUPER_ATTR_ATTR, 0, 0 } } },
[LOAD_SUPER_ATTR_METHOD] = { .nuops = 1, .uops = { { _LOAD_SUPER_ATTR_METHOD, 0, 0 } } },
@ -1386,7 +1388,6 @@ _PyOpcode_macro_expansion[256] = {
[PUSH_EXC_INFO] = { .nuops = 1, .uops = { { _PUSH_EXC_INFO, 0, 0 } } },
[PUSH_NULL] = { .nuops = 1, .uops = { { _PUSH_NULL, 0, 0 } } },
[RESUME_CHECK] = { .nuops = 1, .uops = { { _RESUME_CHECK, 0, 0 } } },
[RETURN_CONST] = { .nuops = 2, .uops = { { _LOAD_CONST, 0, 0 }, { _RETURN_VALUE, 0, 0 } } },
[RETURN_GENERATOR] = { .nuops = 1, .uops = { { _RETURN_GENERATOR, 0, 0 } } },
[RETURN_VALUE] = { .nuops = 1, .uops = { { _RETURN_VALUE, 0, 0 } } },
[SEND_GEN] = { .nuops = 3, .uops = { { _CHECK_PEP_523, 0, 0 }, { _SEND_GEN_FRAME, 0, 0 }, { _PUSH_FRAME, 0, 0 } } },
@ -1541,7 +1542,6 @@ const char *_PyOpcode_OpName[266] = {
[INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = "INSTRUMENTED_POP_JUMP_IF_NOT_NONE",
[INSTRUMENTED_POP_JUMP_IF_TRUE] = "INSTRUMENTED_POP_JUMP_IF_TRUE",
[INSTRUMENTED_RESUME] = "INSTRUMENTED_RESUME",
[INSTRUMENTED_RETURN_CONST] = "INSTRUMENTED_RETURN_CONST",
[INSTRUMENTED_RETURN_VALUE] = "INSTRUMENTED_RETURN_VALUE",
[INSTRUMENTED_YIELD_VALUE] = "INSTRUMENTED_YIELD_VALUE",
[INTERPRETER_EXIT] = "INTERPRETER_EXIT",
@ -1573,6 +1573,7 @@ const char *_PyOpcode_OpName[266] = {
[LOAD_CLOSURE] = "LOAD_CLOSURE",
[LOAD_COMMON_CONSTANT] = "LOAD_COMMON_CONSTANT",
[LOAD_CONST] = "LOAD_CONST",
[LOAD_CONST_IMMORTAL] = "LOAD_CONST_IMMORTAL",
[LOAD_DEREF] = "LOAD_DEREF",
[LOAD_FAST] = "LOAD_FAST",
[LOAD_FAST_AND_CLEAR] = "LOAD_FAST_AND_CLEAR",
@ -1585,6 +1586,7 @@ const char *_PyOpcode_OpName[266] = {
[LOAD_GLOBAL_MODULE] = "LOAD_GLOBAL_MODULE",
[LOAD_LOCALS] = "LOAD_LOCALS",
[LOAD_NAME] = "LOAD_NAME",
[LOAD_SMALL_INT] = "LOAD_SMALL_INT",
[LOAD_SPECIAL] = "LOAD_SPECIAL",
[LOAD_SUPER_ATTR] = "LOAD_SUPER_ATTR",
[LOAD_SUPER_ATTR_ATTR] = "LOAD_SUPER_ATTR_ATTR",
@ -1611,7 +1613,6 @@ const char *_PyOpcode_OpName[266] = {
[RESERVED] = "RESERVED",
[RESUME] = "RESUME",
[RESUME_CHECK] = "RESUME_CHECK",
[RETURN_CONST] = "RETURN_CONST",
[RETURN_GENERATOR] = "RETURN_GENERATOR",
[RETURN_VALUE] = "RETURN_VALUE",
[SEND] = "SEND",
@ -1797,7 +1798,6 @@ const uint8_t _PyOpcode_Deopt[256] = {
[INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = INSTRUMENTED_POP_JUMP_IF_NOT_NONE,
[INSTRUMENTED_POP_JUMP_IF_TRUE] = INSTRUMENTED_POP_JUMP_IF_TRUE,
[INSTRUMENTED_RESUME] = INSTRUMENTED_RESUME,
[INSTRUMENTED_RETURN_CONST] = INSTRUMENTED_RETURN_CONST,
[INSTRUMENTED_RETURN_VALUE] = INSTRUMENTED_RETURN_VALUE,
[INSTRUMENTED_YIELD_VALUE] = INSTRUMENTED_YIELD_VALUE,
[INTERPRETER_EXIT] = INTERPRETER_EXIT,
@ -1824,6 +1824,7 @@ const uint8_t _PyOpcode_Deopt[256] = {
[LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS,
[LOAD_COMMON_CONSTANT] = LOAD_COMMON_CONSTANT,
[LOAD_CONST] = LOAD_CONST,
[LOAD_CONST_IMMORTAL] = LOAD_CONST,
[LOAD_DEREF] = LOAD_DEREF,
[LOAD_FAST] = LOAD_FAST,
[LOAD_FAST_AND_CLEAR] = LOAD_FAST_AND_CLEAR,
@ -1836,6 +1837,7 @@ const uint8_t _PyOpcode_Deopt[256] = {
[LOAD_GLOBAL_MODULE] = LOAD_GLOBAL,
[LOAD_LOCALS] = LOAD_LOCALS,
[LOAD_NAME] = LOAD_NAME,
[LOAD_SMALL_INT] = LOAD_SMALL_INT,
[LOAD_SPECIAL] = LOAD_SPECIAL,
[LOAD_SUPER_ATTR] = LOAD_SUPER_ATTR,
[LOAD_SUPER_ATTR_ATTR] = LOAD_SUPER_ATTR,
@ -1861,7 +1863,6 @@ const uint8_t _PyOpcode_Deopt[256] = {
[RESERVED] = RESERVED,
[RESUME] = RESUME,
[RESUME_CHECK] = RESUME,
[RETURN_CONST] = RETURN_CONST,
[RETURN_GENERATOR] = RETURN_GENERATOR,
[RETURN_VALUE] = RETURN_VALUE,
[SEND] = SEND,
@ -1940,7 +1941,6 @@ const uint8_t _PyOpcode_Deopt[256] = {
case 146: \
case 147: \
case 148: \
case 227: \
case 228: \
case 229: \
case 230: \
@ -1949,6 +1949,7 @@ const uint8_t _PyOpcode_Deopt[256] = {
case 233: \
case 234: \
case 235: \
case 236: \
;
struct pseudo_targets {
uint8_t as_sequence;

View file

@ -47,7 +47,6 @@ extern "C" {
#define IS_SCOPE_EXIT_OPCODE(opcode) \
((opcode) == RETURN_VALUE || \
(opcode) == RETURN_CONST || \
(opcode) == RAISE_VARARGS || \
(opcode) == RERAISE)

View file

@ -195,6 +195,7 @@ extern "C" {
#define _LOAD_BUILD_CLASS LOAD_BUILD_CLASS
#define _LOAD_COMMON_CONSTANT LOAD_COMMON_CONSTANT
#define _LOAD_CONST LOAD_CONST
#define _LOAD_CONST_IMMORTAL LOAD_CONST_IMMORTAL
#define _LOAD_CONST_INLINE 425
#define _LOAD_CONST_INLINE_BORROW 426
#define _LOAD_CONST_INLINE_BORROW_WITH_NULL 427
@ -221,72 +222,77 @@ extern "C" {
#define _LOAD_GLOBAL_MODULE_FROM_KEYS 442
#define _LOAD_LOCALS LOAD_LOCALS
#define _LOAD_NAME LOAD_NAME
#define _LOAD_SMALL_INT 443
#define _LOAD_SMALL_INT_0 444
#define _LOAD_SMALL_INT_1 445
#define _LOAD_SMALL_INT_2 446
#define _LOAD_SMALL_INT_3 447
#define _LOAD_SPECIAL LOAD_SPECIAL
#define _LOAD_SUPER_ATTR_ATTR LOAD_SUPER_ATTR_ATTR
#define _LOAD_SUPER_ATTR_METHOD LOAD_SUPER_ATTR_METHOD
#define _MAKE_CALLARGS_A_TUPLE 443
#define _MAKE_CALLARGS_A_TUPLE 448
#define _MAKE_CELL MAKE_CELL
#define _MAKE_FUNCTION MAKE_FUNCTION
#define _MAKE_WARM 444
#define _MAKE_WARM 449
#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 445
#define _MAYBE_EXPAND_METHOD_KW 446
#define _MONITOR_CALL 447
#define _MONITOR_JUMP_BACKWARD 448
#define _MONITOR_RESUME 449
#define _MAYBE_EXPAND_METHOD 450
#define _MAYBE_EXPAND_METHOD_KW 451
#define _MONITOR_CALL 452
#define _MONITOR_JUMP_BACKWARD 453
#define _MONITOR_RESUME 454
#define _NOP NOP
#define _POP_EXCEPT POP_EXCEPT
#define _POP_JUMP_IF_FALSE 450
#define _POP_JUMP_IF_TRUE 451
#define _POP_JUMP_IF_FALSE 455
#define _POP_JUMP_IF_TRUE 456
#define _POP_TOP POP_TOP
#define _POP_TOP_LOAD_CONST_INLINE_BORROW 452
#define _POP_TOP_LOAD_CONST_INLINE_BORROW 457
#define _PUSH_EXC_INFO PUSH_EXC_INFO
#define _PUSH_FRAME 453
#define _PUSH_FRAME 458
#define _PUSH_NULL PUSH_NULL
#define _PY_FRAME_GENERAL 454
#define _PY_FRAME_KW 455
#define _QUICKEN_RESUME 456
#define _REPLACE_WITH_TRUE 457
#define _PY_FRAME_GENERAL 459
#define _PY_FRAME_KW 460
#define _QUICKEN_RESUME 461
#define _REPLACE_WITH_TRUE 462
#define _RESUME_CHECK RESUME_CHECK
#define _RETURN_GENERATOR RETURN_GENERATOR
#define _RETURN_VALUE RETURN_VALUE
#define _SAVE_RETURN_OFFSET 458
#define _SEND 459
#define _SEND_GEN_FRAME 460
#define _SAVE_RETURN_OFFSET 463
#define _SEND 464
#define _SEND_GEN_FRAME 465
#define _SETUP_ANNOTATIONS SETUP_ANNOTATIONS
#define _SET_ADD SET_ADD
#define _SET_FUNCTION_ATTRIBUTE SET_FUNCTION_ATTRIBUTE
#define _SET_UPDATE SET_UPDATE
#define _START_EXECUTOR 461
#define _STORE_ATTR 462
#define _STORE_ATTR_INSTANCE_VALUE 463
#define _STORE_ATTR_SLOT 464
#define _STORE_ATTR_WITH_HINT 465
#define _START_EXECUTOR 466
#define _STORE_ATTR 467
#define _STORE_ATTR_INSTANCE_VALUE 468
#define _STORE_ATTR_SLOT 469
#define _STORE_ATTR_WITH_HINT 470
#define _STORE_DEREF STORE_DEREF
#define _STORE_FAST 466
#define _STORE_FAST_0 467
#define _STORE_FAST_1 468
#define _STORE_FAST_2 469
#define _STORE_FAST_3 470
#define _STORE_FAST_4 471
#define _STORE_FAST_5 472
#define _STORE_FAST_6 473
#define _STORE_FAST_7 474
#define _STORE_FAST 471
#define _STORE_FAST_0 472
#define _STORE_FAST_1 473
#define _STORE_FAST_2 474
#define _STORE_FAST_3 475
#define _STORE_FAST_4 476
#define _STORE_FAST_5 477
#define _STORE_FAST_6 478
#define _STORE_FAST_7 479
#define _STORE_FAST_LOAD_FAST STORE_FAST_LOAD_FAST
#define _STORE_FAST_STORE_FAST STORE_FAST_STORE_FAST
#define _STORE_GLOBAL STORE_GLOBAL
#define _STORE_NAME STORE_NAME
#define _STORE_SLICE 475
#define _STORE_SUBSCR 476
#define _STORE_SLICE 480
#define _STORE_SUBSCR 481
#define _STORE_SUBSCR_DICT STORE_SUBSCR_DICT
#define _STORE_SUBSCR_LIST_INT STORE_SUBSCR_LIST_INT
#define _SWAP SWAP
#define _TIER2_RESUME_CHECK 477
#define _TO_BOOL 478
#define _TIER2_RESUME_CHECK 482
#define _TO_BOOL 483
#define _TO_BOOL_BOOL TO_BOOL_BOOL
#define _TO_BOOL_INT TO_BOOL_INT
#define _TO_BOOL_LIST TO_BOOL_LIST
@ -296,13 +302,13 @@ extern "C" {
#define _UNARY_NEGATIVE UNARY_NEGATIVE
#define _UNARY_NOT UNARY_NOT
#define _UNPACK_EX UNPACK_EX
#define _UNPACK_SEQUENCE 479
#define _UNPACK_SEQUENCE 484
#define _UNPACK_SEQUENCE_LIST UNPACK_SEQUENCE_LIST
#define _UNPACK_SEQUENCE_TUPLE UNPACK_SEQUENCE_TUPLE
#define _UNPACK_SEQUENCE_TWO_TUPLE UNPACK_SEQUENCE_TWO_TUPLE
#define _WITH_EXCEPT_START WITH_EXCEPT_START
#define _YIELD_VALUE YIELD_VALUE
#define MAX_UOP_ID 479
#define MAX_UOP_ID 484
#ifdef __cplusplus
}

View file

@ -36,6 +36,12 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
[_LOAD_FAST_AND_CLEAR] = HAS_ARG_FLAG | HAS_LOCAL_FLAG,
[_LOAD_FAST_LOAD_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG,
[_LOAD_CONST] = HAS_ARG_FLAG | HAS_CONST_FLAG | HAS_PURE_FLAG,
[_LOAD_CONST_IMMORTAL] = HAS_ARG_FLAG | HAS_CONST_FLAG,
[_LOAD_SMALL_INT_0] = 0,
[_LOAD_SMALL_INT_1] = 0,
[_LOAD_SMALL_INT_2] = 0,
[_LOAD_SMALL_INT_3] = 0,
[_LOAD_SMALL_INT] = HAS_ARG_FLAG,
[_STORE_FAST_0] = HAS_LOCAL_FLAG,
[_STORE_FAST_1] = HAS_LOCAL_FLAG,
[_STORE_FAST_2] = HAS_LOCAL_FLAG,
@ -289,6 +295,7 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
const uint8_t _PyUop_Replication[MAX_UOP_ID+1] = {
[_LOAD_FAST] = 8,
[_LOAD_SMALL_INT] = 4,
[_STORE_FAST] = 8,
[_INIT_CALL_PY_EXACT_ARGS] = 5,
};
@ -460,6 +467,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_ID+1] = {
[_LOAD_BUILD_CLASS] = "_LOAD_BUILD_CLASS",
[_LOAD_COMMON_CONSTANT] = "_LOAD_COMMON_CONSTANT",
[_LOAD_CONST] = "_LOAD_CONST",
[_LOAD_CONST_IMMORTAL] = "_LOAD_CONST_IMMORTAL",
[_LOAD_CONST_INLINE] = "_LOAD_CONST_INLINE",
[_LOAD_CONST_INLINE_BORROW] = "_LOAD_CONST_INLINE_BORROW",
[_LOAD_CONST_INLINE_BORROW_WITH_NULL] = "_LOAD_CONST_INLINE_BORROW_WITH_NULL",
@ -485,6 +493,11 @@ const char *const _PyOpcode_uop_name[MAX_UOP_ID+1] = {
[_LOAD_GLOBAL_MODULE_FROM_KEYS] = "_LOAD_GLOBAL_MODULE_FROM_KEYS",
[_LOAD_LOCALS] = "_LOAD_LOCALS",
[_LOAD_NAME] = "_LOAD_NAME",
[_LOAD_SMALL_INT] = "_LOAD_SMALL_INT",
[_LOAD_SMALL_INT_0] = "_LOAD_SMALL_INT_0",
[_LOAD_SMALL_INT_1] = "_LOAD_SMALL_INT_1",
[_LOAD_SMALL_INT_2] = "_LOAD_SMALL_INT_2",
[_LOAD_SMALL_INT_3] = "_LOAD_SMALL_INT_3",
[_LOAD_SPECIAL] = "_LOAD_SPECIAL",
[_LOAD_SUPER_ATTR_ATTR] = "_LOAD_SUPER_ATTR_ATTR",
[_LOAD_SUPER_ATTR_METHOD] = "_LOAD_SUPER_ATTR_METHOD",
@ -598,6 +611,18 @@ int _PyUop_num_popped(int opcode, int oparg)
return 0;
case _LOAD_CONST:
return 0;
case _LOAD_CONST_IMMORTAL:
return 0;
case _LOAD_SMALL_INT_0:
return 0;
case _LOAD_SMALL_INT_1:
return 0;
case _LOAD_SMALL_INT_2:
return 0;
case _LOAD_SMALL_INT_3:
return 0;
case _LOAD_SMALL_INT:
return 0;
case _STORE_FAST_0:
return 1;
case _STORE_FAST_1:

96
Include/opcode_ids.h generated
View file

@ -99,18 +99,18 @@ extern "C" {
#define LOAD_FROM_DICT_OR_GLOBALS 86
#define LOAD_GLOBAL 87
#define LOAD_NAME 88
#define LOAD_SPECIAL 89
#define LOAD_SUPER_ATTR 90
#define MAKE_CELL 91
#define MAP_ADD 92
#define MATCH_CLASS 93
#define POP_JUMP_IF_FALSE 94
#define POP_JUMP_IF_NONE 95
#define POP_JUMP_IF_NOT_NONE 96
#define POP_JUMP_IF_TRUE 97
#define RAISE_VARARGS 98
#define RERAISE 99
#define RETURN_CONST 100
#define LOAD_SMALL_INT 89
#define LOAD_SPECIAL 90
#define LOAD_SUPER_ATTR 91
#define MAKE_CELL 92
#define MAP_ADD 93
#define MATCH_CLASS 94
#define POP_JUMP_IF_FALSE 95
#define POP_JUMP_IF_NONE 96
#define POP_JUMP_IF_NOT_NONE 97
#define POP_JUMP_IF_TRUE 98
#define RAISE_VARARGS 99
#define RERAISE 100
#define SEND 101
#define SET_ADD 102
#define SET_FUNCTION_ATTRIBUTE 103
@ -184,41 +184,41 @@ extern "C" {
#define LOAD_ATTR_PROPERTY 204
#define LOAD_ATTR_SLOT 205
#define LOAD_ATTR_WITH_HINT 206
#define LOAD_GLOBAL_BUILTIN 207
#define LOAD_GLOBAL_MODULE 208
#define LOAD_SUPER_ATTR_ATTR 209
#define LOAD_SUPER_ATTR_METHOD 210
#define RESUME_CHECK 211
#define SEND_GEN 212
#define STORE_ATTR_INSTANCE_VALUE 213
#define STORE_ATTR_SLOT 214
#define STORE_ATTR_WITH_HINT 215
#define STORE_SUBSCR_DICT 216
#define STORE_SUBSCR_LIST_INT 217
#define TO_BOOL_ALWAYS_TRUE 218
#define TO_BOOL_BOOL 219
#define TO_BOOL_INT 220
#define TO_BOOL_LIST 221
#define TO_BOOL_NONE 222
#define TO_BOOL_STR 223
#define UNPACK_SEQUENCE_LIST 224
#define UNPACK_SEQUENCE_TUPLE 225
#define UNPACK_SEQUENCE_TWO_TUPLE 226
#define INSTRUMENTED_END_FOR 236
#define INSTRUMENTED_END_SEND 237
#define INSTRUMENTED_LOAD_SUPER_ATTR 238
#define INSTRUMENTED_FOR_ITER 239
#define INSTRUMENTED_CALL_KW 240
#define INSTRUMENTED_CALL_FUNCTION_EX 241
#define INSTRUMENTED_INSTRUCTION 242
#define INSTRUMENTED_JUMP_FORWARD 243
#define INSTRUMENTED_POP_JUMP_IF_TRUE 244
#define INSTRUMENTED_POP_JUMP_IF_FALSE 245
#define INSTRUMENTED_POP_JUMP_IF_NONE 246
#define INSTRUMENTED_POP_JUMP_IF_NOT_NONE 247
#define INSTRUMENTED_RESUME 248
#define INSTRUMENTED_RETURN_VALUE 249
#define INSTRUMENTED_RETURN_CONST 250
#define LOAD_CONST_IMMORTAL 207
#define LOAD_GLOBAL_BUILTIN 208
#define LOAD_GLOBAL_MODULE 209
#define LOAD_SUPER_ATTR_ATTR 210
#define LOAD_SUPER_ATTR_METHOD 211
#define RESUME_CHECK 212
#define SEND_GEN 213
#define STORE_ATTR_INSTANCE_VALUE 214
#define STORE_ATTR_SLOT 215
#define STORE_ATTR_WITH_HINT 216
#define STORE_SUBSCR_DICT 217
#define STORE_SUBSCR_LIST_INT 218
#define TO_BOOL_ALWAYS_TRUE 219
#define TO_BOOL_BOOL 220
#define TO_BOOL_INT 221
#define TO_BOOL_LIST 222
#define TO_BOOL_NONE 223
#define TO_BOOL_STR 224
#define UNPACK_SEQUENCE_LIST 225
#define UNPACK_SEQUENCE_TUPLE 226
#define UNPACK_SEQUENCE_TWO_TUPLE 227
#define INSTRUMENTED_END_FOR 237
#define INSTRUMENTED_END_SEND 238
#define INSTRUMENTED_LOAD_SUPER_ATTR 239
#define INSTRUMENTED_FOR_ITER 240
#define INSTRUMENTED_CALL_KW 241
#define INSTRUMENTED_CALL_FUNCTION_EX 242
#define INSTRUMENTED_INSTRUCTION 243
#define INSTRUMENTED_JUMP_FORWARD 244
#define INSTRUMENTED_POP_JUMP_IF_TRUE 245
#define INSTRUMENTED_POP_JUMP_IF_FALSE 246
#define INSTRUMENTED_POP_JUMP_IF_NONE 247
#define INSTRUMENTED_POP_JUMP_IF_NOT_NONE 248
#define INSTRUMENTED_RESUME 249
#define INSTRUMENTED_RETURN_VALUE 250
#define INSTRUMENTED_YIELD_VALUE 251
#define INSTRUMENTED_CALL 252
#define INSTRUMENTED_JUMP_BACKWARD 253
@ -237,7 +237,7 @@ extern "C" {
#define HAVE_ARGUMENT 41
#define MIN_SPECIALIZED_OPCODE 150
#define MIN_INSTRUMENTED_OPCODE 236
#define MIN_INSTRUMENTED_OPCODE 237
#ifdef __cplusplus
}