diff options
author | Mark Shannon <mark@hotpy.org> | 2023-09-07 13:39:03 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-07 13:39:03 (GMT) |
commit | 0858328ca2457ae95715eb93e347d5c0547bec6f (patch) | |
tree | 35c18050d74c747699f30e9862fd4a63fb14eaa7 /Include | |
parent | d485551c9d1792ff3539eef1d6374bd4c01dcd5d (diff) | |
download | cpython-0858328ca2457ae95715eb93e347d5c0547bec6f.zip cpython-0858328ca2457ae95715eb93e347d5c0547bec6f.tar.gz cpython-0858328ca2457ae95715eb93e347d5c0547bec6f.tar.bz2 |
GH-108614: Add `RESUME_CHECK` instruction (GH-108630)
Diffstat (limited to 'Include')
-rw-r--r-- | Include/internal/pycore_opcode_metadata.h | 10 | ||||
-rw-r--r-- | Include/opcode_ids.h | 283 |
2 files changed, 150 insertions, 143 deletions
diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index fa4cbd9..fb5c046 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -82,6 +82,8 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 0; case RESUME: return 0; + case RESUME_CHECK: + return 0; case INSTRUMENTED_RESUME: return 0; case LOAD_CLOSURE: @@ -614,6 +616,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 0; case RESUME: return 0; + case RESUME_CHECK: + return 0; case INSTRUMENTED_RESUME: return 0; case LOAD_CLOSURE: @@ -1207,6 +1211,7 @@ extern const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SI const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [NOP] = { true, INSTR_FMT_IX, 0 }, [RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG }, + [RESUME_CHECK] = { true, INSTR_FMT_IX, HAS_DEOPT_FLAG }, [INSTRUMENTED_RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG }, [LOAD_CLOSURE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG }, [LOAD_FAST_CHECK] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG }, @@ -1477,7 +1482,7 @@ extern const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACR #ifdef NEED_OPCODE_METADATA const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACRO_EXPANSION_SIZE] = { [NOP] = { .nuops = 1, .uops = { { NOP, 0, 0 } } }, - [RESUME] = { .nuops = 1, .uops = { { RESUME, 0, 0 } } }, + [RESUME_CHECK] = { .nuops = 1, .uops = { { RESUME_CHECK, 0, 0 } } }, [LOAD_FAST_CHECK] = { .nuops = 1, .uops = { { LOAD_FAST_CHECK, 0, 0 } } }, [LOAD_FAST] = { .nuops = 1, .uops = { { LOAD_FAST, 0, 0 } } }, [LOAD_FAST_AND_CLEAR] = { .nuops = 1, .uops = { { LOAD_FAST_AND_CLEAR, 0, 0 } } }, @@ -1716,6 +1721,7 @@ const char *const _PyOpcode_OpName[268] = { [POP_TOP] = "POP_TOP", [PUSH_EXC_INFO] = "PUSH_EXC_INFO", [PUSH_NULL] = "PUSH_NULL", + [RESUME_CHECK] = "RESUME_CHECK", [RETURN_GENERATOR] = "RETURN_GENERATOR", [RETURN_VALUE] = "RETURN_VALUE", [SETUP_ANNOTATIONS] = "SETUP_ANNOTATIONS", @@ -2077,6 +2083,7 @@ const uint8_t _PyOpcode_Deopt[256] = { [RERAISE] = RERAISE, [RESERVED] = RESERVED, [RESUME] = RESUME, + [RESUME_CHECK] = RESUME, [RETURN_CONST] = RETURN_CONST, [RETURN_GENERATOR] = RETURN_GENERATOR, [RETURN_VALUE] = RETURN_VALUE, @@ -2122,7 +2129,6 @@ const uint8_t _PyOpcode_Deopt[256] = { #endif // NEED_OPCODE_METADATA #define EXTRA_CASES \ - case 188: \ case 189: \ case 190: \ case 191: \ diff --git a/Include/opcode_ids.h b/Include/opcode_ids.h index cd43716..eabdf4b 100644 --- a/Include/opcode_ids.h +++ b/Include/opcode_ids.h @@ -57,148 +57,149 @@ extern "C" { #define POP_TOP 44 #define PUSH_EXC_INFO 45 #define PUSH_NULL 46 -#define RETURN_GENERATOR 47 -#define RETURN_VALUE 48 -#define SETUP_ANNOTATIONS 49 -#define STORE_ATTR_INSTANCE_VALUE 50 -#define STORE_ATTR_SLOT 51 -#define STORE_SLICE 52 -#define STORE_SUBSCR 53 -#define STORE_SUBSCR_DICT 54 -#define STORE_SUBSCR_LIST_INT 55 -#define TO_BOOL 56 -#define TO_BOOL_ALWAYS_TRUE 57 -#define TO_BOOL_BOOL 58 -#define TO_BOOL_INT 59 -#define TO_BOOL_LIST 60 -#define TO_BOOL_NONE 61 -#define TO_BOOL_STR 62 -#define UNARY_INVERT 63 -#define UNARY_NEGATIVE 64 -#define UNARY_NOT 65 -#define WITH_EXCEPT_START 66 -#define HAVE_ARGUMENT 67 -#define BINARY_OP 67 -#define BUILD_CONST_KEY_MAP 68 -#define BUILD_LIST 69 -#define BUILD_MAP 70 -#define BUILD_SET 71 -#define BUILD_SLICE 72 -#define BUILD_STRING 73 -#define BUILD_TUPLE 74 -#define CALL 75 -#define CALL_BOUND_METHOD_EXACT_ARGS 76 -#define CALL_BUILTIN_CLASS 77 -#define CALL_BUILTIN_FAST_WITH_KEYWORDS 78 -#define CALL_FUNCTION_EX 79 -#define CALL_INTRINSIC_1 80 -#define CALL_INTRINSIC_2 81 -#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 82 -#define CALL_NO_KW_ALLOC_AND_ENTER_INIT 83 -#define CALL_NO_KW_BUILTIN_FAST 84 -#define CALL_NO_KW_BUILTIN_O 85 -#define CALL_NO_KW_ISINSTANCE 86 -#define CALL_NO_KW_LEN 87 -#define CALL_NO_KW_LIST_APPEND 88 -#define CALL_NO_KW_METHOD_DESCRIPTOR_FAST 89 -#define CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS 90 -#define CALL_NO_KW_METHOD_DESCRIPTOR_O 91 -#define CALL_NO_KW_STR_1 92 -#define CALL_NO_KW_TUPLE_1 93 -#define CALL_NO_KW_TYPE_1 94 -#define CALL_PY_EXACT_ARGS 95 -#define CALL_PY_WITH_DEFAULTS 96 -#define COMPARE_OP 97 -#define COMPARE_OP_FLOAT 98 -#define COMPARE_OP_INT 99 -#define COMPARE_OP_STR 100 -#define CONTAINS_OP 101 -#define CONVERT_VALUE 102 -#define COPY 103 -#define COPY_FREE_VARS 104 -#define DELETE_ATTR 105 -#define DELETE_DEREF 106 -#define DELETE_FAST 107 -#define DELETE_GLOBAL 108 -#define DELETE_NAME 109 -#define DICT_MERGE 110 -#define DICT_UPDATE 111 -#define ENTER_EXECUTOR 112 -#define EXTENDED_ARG 113 -#define FOR_ITER 114 -#define FOR_ITER_GEN 115 -#define FOR_ITER_LIST 116 -#define FOR_ITER_RANGE 117 -#define FOR_ITER_TUPLE 118 -#define GET_AWAITABLE 119 -#define IMPORT_FROM 120 -#define IMPORT_NAME 121 -#define IS_OP 122 -#define JUMP_BACKWARD 123 -#define JUMP_BACKWARD_NO_INTERRUPT 124 -#define JUMP_FORWARD 125 -#define KW_NAMES 126 -#define LIST_APPEND 127 -#define LIST_EXTEND 128 -#define LOAD_ATTR 129 -#define LOAD_ATTR_CLASS 130 -#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN 131 -#define LOAD_ATTR_INSTANCE_VALUE 132 -#define LOAD_ATTR_METHOD_LAZY_DICT 133 -#define LOAD_ATTR_METHOD_NO_DICT 134 -#define LOAD_ATTR_METHOD_WITH_VALUES 135 -#define LOAD_ATTR_MODULE 136 -#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT 137 -#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 138 -#define LOAD_ATTR_PROPERTY 139 -#define LOAD_ATTR_SLOT 140 -#define LOAD_ATTR_WITH_HINT 141 -#define LOAD_CONST 142 -#define LOAD_DEREF 143 -#define LOAD_FAST 144 -#define LOAD_FAST_AND_CLEAR 145 -#define LOAD_FAST_CHECK 146 -#define LOAD_FAST_LOAD_FAST 147 -#define LOAD_FROM_DICT_OR_DEREF 148 -#define LOAD_FROM_DICT_OR_GLOBALS 149 -#define LOAD_GLOBAL 150 -#define LOAD_GLOBAL_BUILTIN 151 -#define LOAD_GLOBAL_MODULE 152 -#define LOAD_NAME 153 -#define LOAD_SUPER_ATTR 154 -#define LOAD_SUPER_ATTR_ATTR 155 -#define LOAD_SUPER_ATTR_METHOD 156 -#define MAKE_CELL 157 -#define MAP_ADD 158 -#define MATCH_CLASS 159 -#define POP_JUMP_IF_FALSE 160 -#define POP_JUMP_IF_NONE 161 -#define POP_JUMP_IF_NOT_NONE 162 -#define POP_JUMP_IF_TRUE 163 -#define RAISE_VARARGS 164 -#define RERAISE 165 +#define RESUME_CHECK 47 +#define RETURN_GENERATOR 48 +#define RETURN_VALUE 49 +#define SETUP_ANNOTATIONS 50 +#define STORE_ATTR_INSTANCE_VALUE 51 +#define STORE_ATTR_SLOT 52 +#define STORE_SLICE 53 +#define STORE_SUBSCR 54 +#define STORE_SUBSCR_DICT 55 +#define STORE_SUBSCR_LIST_INT 56 +#define TO_BOOL 57 +#define TO_BOOL_ALWAYS_TRUE 58 +#define TO_BOOL_BOOL 59 +#define TO_BOOL_INT 60 +#define TO_BOOL_LIST 61 +#define TO_BOOL_NONE 62 +#define TO_BOOL_STR 63 +#define UNARY_INVERT 64 +#define UNARY_NEGATIVE 65 +#define UNARY_NOT 66 +#define WITH_EXCEPT_START 67 +#define HAVE_ARGUMENT 68 +#define BINARY_OP 68 +#define BUILD_CONST_KEY_MAP 69 +#define BUILD_LIST 70 +#define BUILD_MAP 71 +#define BUILD_SET 72 +#define BUILD_SLICE 73 +#define BUILD_STRING 74 +#define BUILD_TUPLE 75 +#define CALL 76 +#define CALL_BOUND_METHOD_EXACT_ARGS 77 +#define CALL_BUILTIN_CLASS 78 +#define CALL_BUILTIN_FAST_WITH_KEYWORDS 79 +#define CALL_FUNCTION_EX 80 +#define CALL_INTRINSIC_1 81 +#define CALL_INTRINSIC_2 82 +#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 83 +#define CALL_NO_KW_ALLOC_AND_ENTER_INIT 84 +#define CALL_NO_KW_BUILTIN_FAST 85 +#define CALL_NO_KW_BUILTIN_O 86 +#define CALL_NO_KW_ISINSTANCE 87 +#define CALL_NO_KW_LEN 88 +#define CALL_NO_KW_LIST_APPEND 89 +#define CALL_NO_KW_METHOD_DESCRIPTOR_FAST 90 +#define CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS 91 +#define CALL_NO_KW_METHOD_DESCRIPTOR_O 92 +#define CALL_NO_KW_STR_1 93 +#define CALL_NO_KW_TUPLE_1 94 +#define CALL_NO_KW_TYPE_1 95 +#define CALL_PY_EXACT_ARGS 96 +#define CALL_PY_WITH_DEFAULTS 97 +#define COMPARE_OP 98 +#define COMPARE_OP_FLOAT 99 +#define COMPARE_OP_INT 100 +#define COMPARE_OP_STR 101 +#define CONTAINS_OP 102 +#define CONVERT_VALUE 103 +#define COPY 104 +#define COPY_FREE_VARS 105 +#define DELETE_ATTR 106 +#define DELETE_DEREF 107 +#define DELETE_FAST 108 +#define DELETE_GLOBAL 109 +#define DELETE_NAME 110 +#define DICT_MERGE 111 +#define DICT_UPDATE 112 +#define ENTER_EXECUTOR 113 +#define EXTENDED_ARG 114 +#define FOR_ITER 115 +#define FOR_ITER_GEN 116 +#define FOR_ITER_LIST 117 +#define FOR_ITER_RANGE 118 +#define FOR_ITER_TUPLE 119 +#define GET_AWAITABLE 120 +#define IMPORT_FROM 121 +#define IMPORT_NAME 122 +#define IS_OP 123 +#define JUMP_BACKWARD 124 +#define JUMP_BACKWARD_NO_INTERRUPT 125 +#define JUMP_FORWARD 126 +#define KW_NAMES 127 +#define LIST_APPEND 128 +#define LIST_EXTEND 129 +#define LOAD_ATTR 130 +#define LOAD_ATTR_CLASS 131 +#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN 132 +#define LOAD_ATTR_INSTANCE_VALUE 133 +#define LOAD_ATTR_METHOD_LAZY_DICT 134 +#define LOAD_ATTR_METHOD_NO_DICT 135 +#define LOAD_ATTR_METHOD_WITH_VALUES 136 +#define LOAD_ATTR_MODULE 137 +#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT 138 +#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 139 +#define LOAD_ATTR_PROPERTY 140 +#define LOAD_ATTR_SLOT 141 +#define LOAD_ATTR_WITH_HINT 142 +#define LOAD_CONST 143 +#define LOAD_DEREF 144 +#define LOAD_FAST 145 +#define LOAD_FAST_AND_CLEAR 146 +#define LOAD_FAST_CHECK 147 +#define LOAD_FAST_LOAD_FAST 148 +#define LOAD_FROM_DICT_OR_DEREF 149 +#define LOAD_FROM_DICT_OR_GLOBALS 150 +#define LOAD_GLOBAL 151 +#define LOAD_GLOBAL_BUILTIN 152 +#define LOAD_GLOBAL_MODULE 153 +#define LOAD_NAME 154 +#define LOAD_SUPER_ATTR 155 +#define LOAD_SUPER_ATTR_ATTR 156 +#define LOAD_SUPER_ATTR_METHOD 157 +#define MAKE_CELL 158 +#define MAP_ADD 159 +#define MATCH_CLASS 160 +#define POP_JUMP_IF_FALSE 161 +#define POP_JUMP_IF_NONE 162 +#define POP_JUMP_IF_NOT_NONE 163 +#define POP_JUMP_IF_TRUE 164 +#define RAISE_VARARGS 165 #define RESUME 166 -#define RETURN_CONST 167 -#define SEND 168 -#define SEND_GEN 169 -#define SET_ADD 170 -#define SET_FUNCTION_ATTRIBUTE 171 -#define SET_UPDATE 172 -#define STORE_ATTR 173 -#define STORE_ATTR_WITH_HINT 174 -#define STORE_DEREF 175 -#define STORE_FAST 176 -#define STORE_FAST_LOAD_FAST 177 -#define STORE_FAST_STORE_FAST 178 -#define STORE_GLOBAL 179 -#define STORE_NAME 180 -#define SWAP 181 -#define UNPACK_EX 182 -#define UNPACK_SEQUENCE 183 -#define UNPACK_SEQUENCE_LIST 184 -#define UNPACK_SEQUENCE_TUPLE 185 -#define UNPACK_SEQUENCE_TWO_TUPLE 186 -#define YIELD_VALUE 187 +#define RERAISE 167 +#define RETURN_CONST 168 +#define SEND 169 +#define SEND_GEN 170 +#define SET_ADD 171 +#define SET_FUNCTION_ATTRIBUTE 172 +#define SET_UPDATE 173 +#define STORE_ATTR 174 +#define STORE_ATTR_WITH_HINT 175 +#define STORE_DEREF 176 +#define STORE_FAST 177 +#define STORE_FAST_LOAD_FAST 178 +#define STORE_FAST_STORE_FAST 179 +#define STORE_GLOBAL 180 +#define STORE_NAME 181 +#define SWAP 182 +#define UNPACK_EX 183 +#define UNPACK_SEQUENCE 184 +#define UNPACK_SEQUENCE_LIST 185 +#define UNPACK_SEQUENCE_TUPLE 186 +#define UNPACK_SEQUENCE_TWO_TUPLE 187 +#define YIELD_VALUE 188 #define MIN_INSTRUMENTED_OPCODE 237 #define INSTRUMENTED_RESUME 237 #define INSTRUMENTED_END_FOR 238 |