mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	gh-91428: include specialized opcodes in _PyOpcode_OpName (GH-91467)
This commit is contained in:
		
							parent
							
								
									1b6cd872f4
								
							
						
					
					
						commit
						c9d41bcd68
					
				
					 2 changed files with 167 additions and 8 deletions
				
			
		
							
								
								
									
										146
									
								
								Include/opcode.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										146
									
								
								Include/opcode.h
									
										
									
										generated
									
									
									
								
							|  | @ -451,33 +451,85 @@ static const char *const _PyOpcode_OpName[256] = { | |||
|     [CACHE] = "CACHE", | ||||
|     [POP_TOP] = "POP_TOP", | ||||
|     [PUSH_NULL] = "PUSH_NULL", | ||||
|     [BINARY_OP_ADAPTIVE] = "BINARY_OP_ADAPTIVE", | ||||
|     [BINARY_OP_ADD_FLOAT] = "BINARY_OP_ADD_FLOAT", | ||||
|     [BINARY_OP_ADD_INT] = "BINARY_OP_ADD_INT", | ||||
|     [BINARY_OP_ADD_UNICODE] = "BINARY_OP_ADD_UNICODE", | ||||
|     [BINARY_OP_INPLACE_ADD_UNICODE] = "BINARY_OP_INPLACE_ADD_UNICODE", | ||||
|     [BINARY_OP_MULTIPLY_FLOAT] = "BINARY_OP_MULTIPLY_FLOAT", | ||||
|     [NOP] = "NOP", | ||||
|     [UNARY_POSITIVE] = "UNARY_POSITIVE", | ||||
|     [UNARY_NEGATIVE] = "UNARY_NEGATIVE", | ||||
|     [UNARY_NOT] = "UNARY_NOT", | ||||
|     [BINARY_OP_MULTIPLY_INT] = "BINARY_OP_MULTIPLY_INT", | ||||
|     [BINARY_OP_SUBTRACT_FLOAT] = "BINARY_OP_SUBTRACT_FLOAT", | ||||
|     [UNARY_INVERT] = "UNARY_INVERT", | ||||
|     [BINARY_OP_SUBTRACT_INT] = "BINARY_OP_SUBTRACT_INT", | ||||
|     [BINARY_SUBSCR_ADAPTIVE] = "BINARY_SUBSCR_ADAPTIVE", | ||||
|     [BINARY_SUBSCR_DICT] = "BINARY_SUBSCR_DICT", | ||||
|     [BINARY_SUBSCR_GETITEM] = "BINARY_SUBSCR_GETITEM", | ||||
|     [BINARY_SUBSCR_LIST_INT] = "BINARY_SUBSCR_LIST_INT", | ||||
|     [BINARY_SUBSCR_TUPLE_INT] = "BINARY_SUBSCR_TUPLE_INT", | ||||
|     [CALL_ADAPTIVE] = "CALL_ADAPTIVE", | ||||
|     [CALL_PY_EXACT_ARGS] = "CALL_PY_EXACT_ARGS", | ||||
|     [CALL_PY_WITH_DEFAULTS] = "CALL_PY_WITH_DEFAULTS", | ||||
|     [BINARY_SUBSCR] = "BINARY_SUBSCR", | ||||
|     [COMPARE_OP_ADAPTIVE] = "COMPARE_OP_ADAPTIVE", | ||||
|     [COMPARE_OP_FLOAT_JUMP] = "COMPARE_OP_FLOAT_JUMP", | ||||
|     [COMPARE_OP_INT_JUMP] = "COMPARE_OP_INT_JUMP", | ||||
|     [COMPARE_OP_STR_JUMP] = "COMPARE_OP_STR_JUMP", | ||||
|     [GET_LEN] = "GET_LEN", | ||||
|     [MATCH_MAPPING] = "MATCH_MAPPING", | ||||
|     [MATCH_SEQUENCE] = "MATCH_SEQUENCE", | ||||
|     [MATCH_KEYS] = "MATCH_KEYS", | ||||
|     [JUMP_BACKWARD_QUICK] = "JUMP_BACKWARD_QUICK", | ||||
|     [PUSH_EXC_INFO] = "PUSH_EXC_INFO", | ||||
|     [CHECK_EXC_MATCH] = "CHECK_EXC_MATCH", | ||||
|     [CHECK_EG_MATCH] = "CHECK_EG_MATCH", | ||||
|     [LOAD_ATTR_ADAPTIVE] = "LOAD_ATTR_ADAPTIVE", | ||||
|     [LOAD_ATTR_INSTANCE_VALUE] = "LOAD_ATTR_INSTANCE_VALUE", | ||||
|     [LOAD_ATTR_MODULE] = "LOAD_ATTR_MODULE", | ||||
|     [LOAD_ATTR_SLOT] = "LOAD_ATTR_SLOT", | ||||
|     [LOAD_ATTR_WITH_HINT] = "LOAD_ATTR_WITH_HINT", | ||||
|     [LOAD_CONST__LOAD_FAST] = "LOAD_CONST__LOAD_FAST", | ||||
|     [LOAD_FAST__LOAD_CONST] = "LOAD_FAST__LOAD_CONST", | ||||
|     [LOAD_FAST__LOAD_FAST] = "LOAD_FAST__LOAD_FAST", | ||||
|     [LOAD_GLOBAL_ADAPTIVE] = "LOAD_GLOBAL_ADAPTIVE", | ||||
|     [LOAD_GLOBAL_BUILTIN] = "LOAD_GLOBAL_BUILTIN", | ||||
|     [LOAD_GLOBAL_MODULE] = "LOAD_GLOBAL_MODULE", | ||||
|     [WITH_EXCEPT_START] = "WITH_EXCEPT_START", | ||||
|     [GET_AITER] = "GET_AITER", | ||||
|     [GET_ANEXT] = "GET_ANEXT", | ||||
|     [BEFORE_ASYNC_WITH] = "BEFORE_ASYNC_WITH", | ||||
|     [BEFORE_WITH] = "BEFORE_WITH", | ||||
|     [END_ASYNC_FOR] = "END_ASYNC_FOR", | ||||
|     [LOAD_METHOD_ADAPTIVE] = "LOAD_METHOD_ADAPTIVE", | ||||
|     [LOAD_METHOD_CLASS] = "LOAD_METHOD_CLASS", | ||||
|     [LOAD_METHOD_MODULE] = "LOAD_METHOD_MODULE", | ||||
|     [LOAD_METHOD_NO_DICT] = "LOAD_METHOD_NO_DICT", | ||||
|     [LOAD_METHOD_WITH_DICT] = "LOAD_METHOD_WITH_DICT", | ||||
|     [STORE_SUBSCR] = "STORE_SUBSCR", | ||||
|     [DELETE_SUBSCR] = "DELETE_SUBSCR", | ||||
|     [LOAD_METHOD_WITH_VALUES] = "LOAD_METHOD_WITH_VALUES", | ||||
|     [PRECALL_ADAPTIVE] = "PRECALL_ADAPTIVE", | ||||
|     [PRECALL_BOUND_METHOD] = "PRECALL_BOUND_METHOD", | ||||
|     [PRECALL_BUILTIN_CLASS] = "PRECALL_BUILTIN_CLASS", | ||||
|     [PRECALL_BUILTIN_FAST_WITH_KEYWORDS] = "PRECALL_BUILTIN_FAST_WITH_KEYWORDS", | ||||
|     [PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", | ||||
|     [GET_ITER] = "GET_ITER", | ||||
|     [GET_YIELD_FROM_ITER] = "GET_YIELD_FROM_ITER", | ||||
|     [PRINT_EXPR] = "PRINT_EXPR", | ||||
|     [LOAD_BUILD_CLASS] = "LOAD_BUILD_CLASS", | ||||
|     [PRECALL_NO_KW_BUILTIN_FAST] = "PRECALL_NO_KW_BUILTIN_FAST", | ||||
|     [PRECALL_NO_KW_BUILTIN_O] = "PRECALL_NO_KW_BUILTIN_O", | ||||
|     [LOAD_ASSERTION_ERROR] = "LOAD_ASSERTION_ERROR", | ||||
|     [RETURN_GENERATOR] = "RETURN_GENERATOR", | ||||
|     [PRECALL_NO_KW_ISINSTANCE] = "PRECALL_NO_KW_ISINSTANCE", | ||||
|     [PRECALL_NO_KW_LEN] = "PRECALL_NO_KW_LEN", | ||||
|     [PRECALL_NO_KW_LIST_APPEND] = "PRECALL_NO_KW_LIST_APPEND", | ||||
|     [PRECALL_NO_KW_METHOD_DESCRIPTOR_FAST] = "PRECALL_NO_KW_METHOD_DESCRIPTOR_FAST", | ||||
|     [PRECALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = "PRECALL_NO_KW_METHOD_DESCRIPTOR_NOARGS", | ||||
|     [PRECALL_NO_KW_METHOD_DESCRIPTOR_O] = "PRECALL_NO_KW_METHOD_DESCRIPTOR_O", | ||||
|     [LIST_TO_TUPLE] = "LIST_TO_TUPLE", | ||||
|     [RETURN_VALUE] = "RETURN_VALUE", | ||||
|     [IMPORT_STAR] = "IMPORT_STAR", | ||||
|  | @ -509,6 +561,7 @@ static const char *const _PyOpcode_OpName[256] = { | |||
|     [JUMP_FORWARD] = "JUMP_FORWARD", | ||||
|     [JUMP_IF_FALSE_OR_POP] = "JUMP_IF_FALSE_OR_POP", | ||||
|     [JUMP_IF_TRUE_OR_POP] = "JUMP_IF_TRUE_OR_POP", | ||||
|     [PRECALL_NO_KW_STR_1] = "PRECALL_NO_KW_STR_1", | ||||
|     [POP_JUMP_FORWARD_IF_FALSE] = "POP_JUMP_FORWARD_IF_FALSE", | ||||
|     [POP_JUMP_FORWARD_IF_TRUE] = "POP_JUMP_FORWARD_IF_TRUE", | ||||
|     [LOAD_GLOBAL] = "LOAD_GLOBAL", | ||||
|  | @ -516,11 +569,13 @@ static const char *const _PyOpcode_OpName[256] = { | |||
|     [CONTAINS_OP] = "CONTAINS_OP", | ||||
|     [RERAISE] = "RERAISE", | ||||
|     [COPY] = "COPY", | ||||
|     [PRECALL_NO_KW_TUPLE_1] = "PRECALL_NO_KW_TUPLE_1", | ||||
|     [BINARY_OP] = "BINARY_OP", | ||||
|     [SEND] = "SEND", | ||||
|     [LOAD_FAST] = "LOAD_FAST", | ||||
|     [STORE_FAST] = "STORE_FAST", | ||||
|     [DELETE_FAST] = "DELETE_FAST", | ||||
|     [PRECALL_NO_KW_TYPE_1] = "PRECALL_NO_KW_TYPE_1", | ||||
|     [POP_JUMP_FORWARD_IF_NOT_NONE] = "POP_JUMP_FORWARD_IF_NOT_NONE", | ||||
|     [POP_JUMP_FORWARD_IF_NONE] = "POP_JUMP_FORWARD_IF_NONE", | ||||
|     [RAISE_VARARGS] = "RAISE_VARARGS", | ||||
|  | @ -534,30 +589,121 @@ static const char *const _PyOpcode_OpName[256] = { | |||
|     [STORE_DEREF] = "STORE_DEREF", | ||||
|     [DELETE_DEREF] = "DELETE_DEREF", | ||||
|     [JUMP_BACKWARD] = "JUMP_BACKWARD", | ||||
|     [PRECALL_PYFUNC] = "PRECALL_PYFUNC", | ||||
|     [CALL_FUNCTION_EX] = "CALL_FUNCTION_EX", | ||||
|     [RESUME_QUICK] = "RESUME_QUICK", | ||||
|     [EXTENDED_ARG] = "EXTENDED_ARG", | ||||
|     [LIST_APPEND] = "LIST_APPEND", | ||||
|     [SET_ADD] = "SET_ADD", | ||||
|     [MAP_ADD] = "MAP_ADD", | ||||
|     [LOAD_CLASSDEREF] = "LOAD_CLASSDEREF", | ||||
|     [COPY_FREE_VARS] = "COPY_FREE_VARS", | ||||
|     [STORE_ATTR_ADAPTIVE] = "STORE_ATTR_ADAPTIVE", | ||||
|     [RESUME] = "RESUME", | ||||
|     [MATCH_CLASS] = "MATCH_CLASS", | ||||
|     [STORE_ATTR_INSTANCE_VALUE] = "STORE_ATTR_INSTANCE_VALUE", | ||||
|     [STORE_ATTR_SLOT] = "STORE_ATTR_SLOT", | ||||
|     [FORMAT_VALUE] = "FORMAT_VALUE", | ||||
|     [BUILD_CONST_KEY_MAP] = "BUILD_CONST_KEY_MAP", | ||||
|     [BUILD_STRING] = "BUILD_STRING", | ||||
|     [STORE_ATTR_WITH_HINT] = "STORE_ATTR_WITH_HINT", | ||||
|     [STORE_FAST__LOAD_FAST] = "STORE_FAST__LOAD_FAST", | ||||
|     [LOAD_METHOD] = "LOAD_METHOD", | ||||
|     [STORE_FAST__STORE_FAST] = "STORE_FAST__STORE_FAST", | ||||
|     [LIST_EXTEND] = "LIST_EXTEND", | ||||
|     [SET_UPDATE] = "SET_UPDATE", | ||||
|     [DICT_MERGE] = "DICT_MERGE", | ||||
|     [DICT_UPDATE] = "DICT_UPDATE", | ||||
|     [PRECALL] = "PRECALL", | ||||
|     [STORE_SUBSCR_ADAPTIVE] = "STORE_SUBSCR_ADAPTIVE", | ||||
|     [STORE_SUBSCR_DICT] = "STORE_SUBSCR_DICT", | ||||
|     [STORE_SUBSCR_LIST_INT] = "STORE_SUBSCR_LIST_INT", | ||||
|     [UNPACK_SEQUENCE_ADAPTIVE] = "UNPACK_SEQUENCE_ADAPTIVE", | ||||
|     [CALL] = "CALL", | ||||
|     [KW_NAMES] = "KW_NAMES", | ||||
|     [POP_JUMP_BACKWARD_IF_NOT_NONE] = "POP_JUMP_BACKWARD_IF_NOT_NONE", | ||||
|     [POP_JUMP_BACKWARD_IF_NONE] = "POP_JUMP_BACKWARD_IF_NONE", | ||||
|     [POP_JUMP_BACKWARD_IF_FALSE] = "POP_JUMP_BACKWARD_IF_FALSE", | ||||
|     [POP_JUMP_BACKWARD_IF_TRUE] = "POP_JUMP_BACKWARD_IF_TRUE", | ||||
|     [UNPACK_SEQUENCE_LIST] = "UNPACK_SEQUENCE_LIST", | ||||
|     [UNPACK_SEQUENCE_TUPLE] = "UNPACK_SEQUENCE_TUPLE", | ||||
|     [UNPACK_SEQUENCE_TWO_TUPLE] = "UNPACK_SEQUENCE_TWO_TUPLE", | ||||
|     [180] = "<180>", | ||||
|     [181] = "<181>", | ||||
|     [182] = "<182>", | ||||
|     [183] = "<183>", | ||||
|     [184] = "<184>", | ||||
|     [185] = "<185>", | ||||
|     [186] = "<186>", | ||||
|     [187] = "<187>", | ||||
|     [188] = "<188>", | ||||
|     [189] = "<189>", | ||||
|     [190] = "<190>", | ||||
|     [191] = "<191>", | ||||
|     [192] = "<192>", | ||||
|     [193] = "<193>", | ||||
|     [194] = "<194>", | ||||
|     [195] = "<195>", | ||||
|     [196] = "<196>", | ||||
|     [197] = "<197>", | ||||
|     [198] = "<198>", | ||||
|     [199] = "<199>", | ||||
|     [200] = "<200>", | ||||
|     [201] = "<201>", | ||||
|     [202] = "<202>", | ||||
|     [203] = "<203>", | ||||
|     [204] = "<204>", | ||||
|     [205] = "<205>", | ||||
|     [206] = "<206>", | ||||
|     [207] = "<207>", | ||||
|     [208] = "<208>", | ||||
|     [209] = "<209>", | ||||
|     [210] = "<210>", | ||||
|     [211] = "<211>", | ||||
|     [212] = "<212>", | ||||
|     [213] = "<213>", | ||||
|     [214] = "<214>", | ||||
|     [215] = "<215>", | ||||
|     [216] = "<216>", | ||||
|     [217] = "<217>", | ||||
|     [218] = "<218>", | ||||
|     [219] = "<219>", | ||||
|     [220] = "<220>", | ||||
|     [221] = "<221>", | ||||
|     [222] = "<222>", | ||||
|     [223] = "<223>", | ||||
|     [224] = "<224>", | ||||
|     [225] = "<225>", | ||||
|     [226] = "<226>", | ||||
|     [227] = "<227>", | ||||
|     [228] = "<228>", | ||||
|     [229] = "<229>", | ||||
|     [230] = "<230>", | ||||
|     [231] = "<231>", | ||||
|     [232] = "<232>", | ||||
|     [233] = "<233>", | ||||
|     [234] = "<234>", | ||||
|     [235] = "<235>", | ||||
|     [236] = "<236>", | ||||
|     [237] = "<237>", | ||||
|     [238] = "<238>", | ||||
|     [239] = "<239>", | ||||
|     [240] = "<240>", | ||||
|     [241] = "<241>", | ||||
|     [242] = "<242>", | ||||
|     [243] = "<243>", | ||||
|     [244] = "<244>", | ||||
|     [245] = "<245>", | ||||
|     [246] = "<246>", | ||||
|     [247] = "<247>", | ||||
|     [248] = "<248>", | ||||
|     [249] = "<249>", | ||||
|     [250] = "<250>", | ||||
|     [251] = "<251>", | ||||
|     [252] = "<252>", | ||||
|     [253] = "<253>", | ||||
|     [254] = "<254>", | ||||
|     [DO_TRACING] = "DO_TRACING", | ||||
| }; | ||||
| #endif | ||||
| 
 | ||||
|  |  | |||
|  | @ -59,8 +59,22 @@ def main(opcode_py, outfile='Include/opcode.h'): | |||
|     hasjabs = opcode['hasjabs'] | ||||
|     used = [ False ] * 256 | ||||
|     next_op = 1 | ||||
| 
 | ||||
|     for name, op in opmap.items(): | ||||
|         used[op] = True | ||||
| 
 | ||||
|     specialized_opmap = {} | ||||
|     opname_including_specialized = opname.copy() | ||||
|     for name in opcode['_specialized_instructions']: | ||||
|         while used[next_op]: | ||||
|             next_op += 1 | ||||
|         specialized_opmap[name] = next_op | ||||
|         opname_including_specialized[next_op] = name | ||||
|         used[next_op] = True | ||||
|     specialized_opmap['DO_TRACING'] = 255 | ||||
|     opname_including_specialized[255] = 'DO_TRACING' | ||||
|     used[255] = True | ||||
| 
 | ||||
|     with open(outfile, 'w') as fobj: | ||||
|         fobj.write(header) | ||||
|         for name in opname: | ||||
|  | @ -69,12 +83,9 @@ def main(opcode_py, outfile='Include/opcode.h'): | |||
|             if name == 'POP_EXCEPT': # Special entry for HAVE_ARGUMENT | ||||
|                 fobj.write(DEFINE.format("HAVE_ARGUMENT", opcode["HAVE_ARGUMENT"])) | ||||
| 
 | ||||
|         for name in opcode['_specialized_instructions']: | ||||
|             while used[next_op]: | ||||
|                 next_op += 1 | ||||
|             fobj.write(DEFINE.format(name, next_op)) | ||||
|             used[next_op] = True | ||||
|         fobj.write(DEFINE.format('DO_TRACING', 255)) | ||||
|         for name, op in specialized_opmap.items(): | ||||
|             fobj.write(DEFINE.format(name, op)) | ||||
| 
 | ||||
|         fobj.write("\nextern const uint8_t _PyOpcode_Caches[256];\n") | ||||
|         fobj.write("\nextern const uint8_t _PyOpcode_Deopt[256];\n") | ||||
|         fobj.write("\n#ifdef NEED_OPCODE_TABLES\n") | ||||
|  | @ -111,8 +122,10 @@ def main(opcode_py, outfile='Include/opcode.h'): | |||
|         fobj.write("\n") | ||||
|         fobj.write("#ifdef Py_DEBUG\n") | ||||
|         fobj.write("static const char *const _PyOpcode_OpName[256] = {\n") | ||||
|         for name in opmap: | ||||
|             fobj.write(f'''    [{name}] = "{name}",\n''') | ||||
|         for op, name in enumerate(opname_including_specialized): | ||||
|             if name[0] != "<": | ||||
|                 op = name | ||||
|             fobj.write(f'''    [{op}] = "{name}",\n''') | ||||
|         fobj.write("};\n") | ||||
|         fobj.write("#endif\n") | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dennis Sweeney
						Dennis Sweeney