17db96d56Sopenharmony_ci 27db96d56Sopenharmony_ci""" 37db96d56Sopenharmony_ciopcode module - potentially shared between dis and other modules which 47db96d56Sopenharmony_cioperate on bytecodes (e.g. peephole optimizers). 57db96d56Sopenharmony_ci""" 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci__all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs", 87db96d56Sopenharmony_ci "haslocal", "hascompare", "hasfree", "opname", "opmap", 97db96d56Sopenharmony_ci "HAVE_ARGUMENT", "EXTENDED_ARG", "hasnargs"] 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci# It's a chicken-and-egg I'm afraid: 127db96d56Sopenharmony_ci# We're imported before _opcode's made. 137db96d56Sopenharmony_ci# With exception unheeded 147db96d56Sopenharmony_ci# (stack_effect is not needed) 157db96d56Sopenharmony_ci# Both our chickens and eggs are allayed. 167db96d56Sopenharmony_ci# --Larry Hastings, 2013/11/23 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_citry: 197db96d56Sopenharmony_ci from _opcode import stack_effect 207db96d56Sopenharmony_ci __all__.append('stack_effect') 217db96d56Sopenharmony_ciexcept ImportError: 227db96d56Sopenharmony_ci pass 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_cicmp_op = ('<', '<=', '==', '!=', '>', '>=') 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_cihasconst = [] 277db96d56Sopenharmony_cihasname = [] 287db96d56Sopenharmony_cihasjrel = [] 297db96d56Sopenharmony_cihasjabs = [] 307db96d56Sopenharmony_cihaslocal = [] 317db96d56Sopenharmony_cihascompare = [] 327db96d56Sopenharmony_cihasfree = [] 337db96d56Sopenharmony_cihasnargs = [] # unused 347db96d56Sopenharmony_ci 357db96d56Sopenharmony_ciopmap = {} 367db96d56Sopenharmony_ciopname = ['<%r>' % (op,) for op in range(256)] 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_cidef def_op(name, op): 397db96d56Sopenharmony_ci opname[op] = name 407db96d56Sopenharmony_ci opmap[name] = op 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_cidef name_op(name, op): 437db96d56Sopenharmony_ci def_op(name, op) 447db96d56Sopenharmony_ci hasname.append(op) 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_cidef jrel_op(name, op): 477db96d56Sopenharmony_ci def_op(name, op) 487db96d56Sopenharmony_ci hasjrel.append(op) 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_cidef jabs_op(name, op): 517db96d56Sopenharmony_ci def_op(name, op) 527db96d56Sopenharmony_ci hasjabs.append(op) 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci# Instruction opcodes for compiled code 557db96d56Sopenharmony_ci# Blank lines correspond to available opcodes 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_cidef_op('CACHE', 0) 587db96d56Sopenharmony_cidef_op('POP_TOP', 1) 597db96d56Sopenharmony_cidef_op('PUSH_NULL', 2) 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_cidef_op('NOP', 9) 627db96d56Sopenharmony_cidef_op('UNARY_POSITIVE', 10) 637db96d56Sopenharmony_cidef_op('UNARY_NEGATIVE', 11) 647db96d56Sopenharmony_cidef_op('UNARY_NOT', 12) 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_cidef_op('UNARY_INVERT', 15) 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_cidef_op('BINARY_SUBSCR', 25) 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_cidef_op('GET_LEN', 30) 717db96d56Sopenharmony_cidef_op('MATCH_MAPPING', 31) 727db96d56Sopenharmony_cidef_op('MATCH_SEQUENCE', 32) 737db96d56Sopenharmony_cidef_op('MATCH_KEYS', 33) 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_cidef_op('PUSH_EXC_INFO', 35) 767db96d56Sopenharmony_cidef_op('CHECK_EXC_MATCH', 36) 777db96d56Sopenharmony_cidef_op('CHECK_EG_MATCH', 37) 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_cidef_op('WITH_EXCEPT_START', 49) 807db96d56Sopenharmony_cidef_op('GET_AITER', 50) 817db96d56Sopenharmony_cidef_op('GET_ANEXT', 51) 827db96d56Sopenharmony_cidef_op('BEFORE_ASYNC_WITH', 52) 837db96d56Sopenharmony_cidef_op('BEFORE_WITH', 53) 847db96d56Sopenharmony_cidef_op('END_ASYNC_FOR', 54) 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_cidef_op('STORE_SUBSCR', 60) 877db96d56Sopenharmony_cidef_op('DELETE_SUBSCR', 61) 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_cidef_op('GET_ITER', 68) 907db96d56Sopenharmony_cidef_op('GET_YIELD_FROM_ITER', 69) 917db96d56Sopenharmony_cidef_op('PRINT_EXPR', 70) 927db96d56Sopenharmony_cidef_op('LOAD_BUILD_CLASS', 71) 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_cidef_op('LOAD_ASSERTION_ERROR', 74) 957db96d56Sopenharmony_cidef_op('RETURN_GENERATOR', 75) 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_cidef_op('LIST_TO_TUPLE', 82) 987db96d56Sopenharmony_cidef_op('RETURN_VALUE', 83) 997db96d56Sopenharmony_cidef_op('IMPORT_STAR', 84) 1007db96d56Sopenharmony_cidef_op('SETUP_ANNOTATIONS', 85) 1017db96d56Sopenharmony_cidef_op('YIELD_VALUE', 86) 1027db96d56Sopenharmony_cidef_op('ASYNC_GEN_WRAP', 87) 1037db96d56Sopenharmony_cidef_op('PREP_RERAISE_STAR', 88) 1047db96d56Sopenharmony_cidef_op('POP_EXCEPT', 89) 1057db96d56Sopenharmony_ci 1067db96d56Sopenharmony_ciHAVE_ARGUMENT = 90 # Opcodes from here have an argument: 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ciname_op('STORE_NAME', 90) # Index in name list 1097db96d56Sopenharmony_ciname_op('DELETE_NAME', 91) # "" 1107db96d56Sopenharmony_cidef_op('UNPACK_SEQUENCE', 92) # Number of tuple items 1117db96d56Sopenharmony_cijrel_op('FOR_ITER', 93) 1127db96d56Sopenharmony_cidef_op('UNPACK_EX', 94) 1137db96d56Sopenharmony_ciname_op('STORE_ATTR', 95) # Index in name list 1147db96d56Sopenharmony_ciname_op('DELETE_ATTR', 96) # "" 1157db96d56Sopenharmony_ciname_op('STORE_GLOBAL', 97) # "" 1167db96d56Sopenharmony_ciname_op('DELETE_GLOBAL', 98) # "" 1177db96d56Sopenharmony_cidef_op('SWAP', 99) 1187db96d56Sopenharmony_cidef_op('LOAD_CONST', 100) # Index in const list 1197db96d56Sopenharmony_cihasconst.append(100) 1207db96d56Sopenharmony_ciname_op('LOAD_NAME', 101) # Index in name list 1217db96d56Sopenharmony_cidef_op('BUILD_TUPLE', 102) # Number of tuple items 1227db96d56Sopenharmony_cidef_op('BUILD_LIST', 103) # Number of list items 1237db96d56Sopenharmony_cidef_op('BUILD_SET', 104) # Number of set items 1247db96d56Sopenharmony_cidef_op('BUILD_MAP', 105) # Number of dict entries 1257db96d56Sopenharmony_ciname_op('LOAD_ATTR', 106) # Index in name list 1267db96d56Sopenharmony_cidef_op('COMPARE_OP', 107) # Comparison operator 1277db96d56Sopenharmony_cihascompare.append(107) 1287db96d56Sopenharmony_ciname_op('IMPORT_NAME', 108) # Index in name list 1297db96d56Sopenharmony_ciname_op('IMPORT_FROM', 109) # Index in name list 1307db96d56Sopenharmony_cijrel_op('JUMP_FORWARD', 110) # Number of words to skip 1317db96d56Sopenharmony_cijrel_op('JUMP_IF_FALSE_OR_POP', 111) # Number of words to skip 1327db96d56Sopenharmony_cijrel_op('JUMP_IF_TRUE_OR_POP', 112) # "" 1337db96d56Sopenharmony_cijrel_op('POP_JUMP_FORWARD_IF_FALSE', 114) 1347db96d56Sopenharmony_cijrel_op('POP_JUMP_FORWARD_IF_TRUE', 115) 1357db96d56Sopenharmony_ciname_op('LOAD_GLOBAL', 116) # Index in name list 1367db96d56Sopenharmony_cidef_op('IS_OP', 117) 1377db96d56Sopenharmony_cidef_op('CONTAINS_OP', 118) 1387db96d56Sopenharmony_cidef_op('RERAISE', 119) 1397db96d56Sopenharmony_cidef_op('COPY', 120) 1407db96d56Sopenharmony_cidef_op('BINARY_OP', 122) 1417db96d56Sopenharmony_cijrel_op('SEND', 123) # Number of bytes to skip 1427db96d56Sopenharmony_cidef_op('LOAD_FAST', 124) # Local variable number 1437db96d56Sopenharmony_cihaslocal.append(124) 1447db96d56Sopenharmony_cidef_op('STORE_FAST', 125) # Local variable number 1457db96d56Sopenharmony_cihaslocal.append(125) 1467db96d56Sopenharmony_cidef_op('DELETE_FAST', 126) # Local variable number 1477db96d56Sopenharmony_cihaslocal.append(126) 1487db96d56Sopenharmony_cijrel_op('POP_JUMP_FORWARD_IF_NOT_NONE', 128) 1497db96d56Sopenharmony_cijrel_op('POP_JUMP_FORWARD_IF_NONE', 129) 1507db96d56Sopenharmony_cidef_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3) 1517db96d56Sopenharmony_cidef_op('GET_AWAITABLE', 131) 1527db96d56Sopenharmony_cidef_op('MAKE_FUNCTION', 132) # Flags 1537db96d56Sopenharmony_cidef_op('BUILD_SLICE', 133) # Number of items 1547db96d56Sopenharmony_cijrel_op('JUMP_BACKWARD_NO_INTERRUPT', 134) # Number of words to skip (backwards) 1557db96d56Sopenharmony_cidef_op('MAKE_CELL', 135) 1567db96d56Sopenharmony_cihasfree.append(135) 1577db96d56Sopenharmony_cidef_op('LOAD_CLOSURE', 136) 1587db96d56Sopenharmony_cihasfree.append(136) 1597db96d56Sopenharmony_cidef_op('LOAD_DEREF', 137) 1607db96d56Sopenharmony_cihasfree.append(137) 1617db96d56Sopenharmony_cidef_op('STORE_DEREF', 138) 1627db96d56Sopenharmony_cihasfree.append(138) 1637db96d56Sopenharmony_cidef_op('DELETE_DEREF', 139) 1647db96d56Sopenharmony_cihasfree.append(139) 1657db96d56Sopenharmony_cijrel_op('JUMP_BACKWARD', 140) # Number of words to skip (backwards) 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_cidef_op('CALL_FUNCTION_EX', 142) # Flags 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_cidef_op('EXTENDED_ARG', 144) 1707db96d56Sopenharmony_ciEXTENDED_ARG = 144 1717db96d56Sopenharmony_cidef_op('LIST_APPEND', 145) 1727db96d56Sopenharmony_cidef_op('SET_ADD', 146) 1737db96d56Sopenharmony_cidef_op('MAP_ADD', 147) 1747db96d56Sopenharmony_cidef_op('LOAD_CLASSDEREF', 148) 1757db96d56Sopenharmony_cihasfree.append(148) 1767db96d56Sopenharmony_cidef_op('COPY_FREE_VARS', 149) 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_cidef_op('RESUME', 151) # This must be kept in sync with deepfreeze.py 1797db96d56Sopenharmony_cidef_op('MATCH_CLASS', 152) 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_cidef_op('FORMAT_VALUE', 155) 1827db96d56Sopenharmony_cidef_op('BUILD_CONST_KEY_MAP', 156) 1837db96d56Sopenharmony_cidef_op('BUILD_STRING', 157) 1847db96d56Sopenharmony_ci 1857db96d56Sopenharmony_ciname_op('LOAD_METHOD', 160) 1867db96d56Sopenharmony_ci 1877db96d56Sopenharmony_cidef_op('LIST_EXTEND', 162) 1887db96d56Sopenharmony_cidef_op('SET_UPDATE', 163) 1897db96d56Sopenharmony_cidef_op('DICT_MERGE', 164) 1907db96d56Sopenharmony_cidef_op('DICT_UPDATE', 165) 1917db96d56Sopenharmony_cidef_op('PRECALL', 166) 1927db96d56Sopenharmony_ci 1937db96d56Sopenharmony_cidef_op('CALL', 171) 1947db96d56Sopenharmony_cidef_op('KW_NAMES', 172) 1957db96d56Sopenharmony_cihasconst.append(172) 1967db96d56Sopenharmony_ci 1977db96d56Sopenharmony_cijrel_op('POP_JUMP_BACKWARD_IF_NOT_NONE', 173) 1987db96d56Sopenharmony_cijrel_op('POP_JUMP_BACKWARD_IF_NONE', 174) 1997db96d56Sopenharmony_cijrel_op('POP_JUMP_BACKWARD_IF_FALSE', 175) 2007db96d56Sopenharmony_cijrel_op('POP_JUMP_BACKWARD_IF_TRUE', 176) 2017db96d56Sopenharmony_ci 2027db96d56Sopenharmony_ci 2037db96d56Sopenharmony_cidel def_op, name_op, jrel_op, jabs_op 2047db96d56Sopenharmony_ci 2057db96d56Sopenharmony_ci_nb_ops = [ 2067db96d56Sopenharmony_ci ("NB_ADD", "+"), 2077db96d56Sopenharmony_ci ("NB_AND", "&"), 2087db96d56Sopenharmony_ci ("NB_FLOOR_DIVIDE", "//"), 2097db96d56Sopenharmony_ci ("NB_LSHIFT", "<<"), 2107db96d56Sopenharmony_ci ("NB_MATRIX_MULTIPLY", "@"), 2117db96d56Sopenharmony_ci ("NB_MULTIPLY", "*"), 2127db96d56Sopenharmony_ci ("NB_REMAINDER", "%"), 2137db96d56Sopenharmony_ci ("NB_OR", "|"), 2147db96d56Sopenharmony_ci ("NB_POWER", "**"), 2157db96d56Sopenharmony_ci ("NB_RSHIFT", ">>"), 2167db96d56Sopenharmony_ci ("NB_SUBTRACT", "-"), 2177db96d56Sopenharmony_ci ("NB_TRUE_DIVIDE", "/"), 2187db96d56Sopenharmony_ci ("NB_XOR", "^"), 2197db96d56Sopenharmony_ci ("NB_INPLACE_ADD", "+="), 2207db96d56Sopenharmony_ci ("NB_INPLACE_AND", "&="), 2217db96d56Sopenharmony_ci ("NB_INPLACE_FLOOR_DIVIDE", "//="), 2227db96d56Sopenharmony_ci ("NB_INPLACE_LSHIFT", "<<="), 2237db96d56Sopenharmony_ci ("NB_INPLACE_MATRIX_MULTIPLY", "@="), 2247db96d56Sopenharmony_ci ("NB_INPLACE_MULTIPLY", "*="), 2257db96d56Sopenharmony_ci ("NB_INPLACE_REMAINDER", "%="), 2267db96d56Sopenharmony_ci ("NB_INPLACE_OR", "|="), 2277db96d56Sopenharmony_ci ("NB_INPLACE_POWER", "**="), 2287db96d56Sopenharmony_ci ("NB_INPLACE_RSHIFT", ">>="), 2297db96d56Sopenharmony_ci ("NB_INPLACE_SUBTRACT", "-="), 2307db96d56Sopenharmony_ci ("NB_INPLACE_TRUE_DIVIDE", "/="), 2317db96d56Sopenharmony_ci ("NB_INPLACE_XOR", "^="), 2327db96d56Sopenharmony_ci] 2337db96d56Sopenharmony_ci 2347db96d56Sopenharmony_ci_specializations = { 2357db96d56Sopenharmony_ci "BINARY_OP": [ 2367db96d56Sopenharmony_ci "BINARY_OP_ADAPTIVE", 2377db96d56Sopenharmony_ci "BINARY_OP_ADD_FLOAT", 2387db96d56Sopenharmony_ci "BINARY_OP_ADD_INT", 2397db96d56Sopenharmony_ci "BINARY_OP_ADD_UNICODE", 2407db96d56Sopenharmony_ci "BINARY_OP_INPLACE_ADD_UNICODE", 2417db96d56Sopenharmony_ci "BINARY_OP_MULTIPLY_FLOAT", 2427db96d56Sopenharmony_ci "BINARY_OP_MULTIPLY_INT", 2437db96d56Sopenharmony_ci "BINARY_OP_SUBTRACT_FLOAT", 2447db96d56Sopenharmony_ci "BINARY_OP_SUBTRACT_INT", 2457db96d56Sopenharmony_ci ], 2467db96d56Sopenharmony_ci "BINARY_SUBSCR": [ 2477db96d56Sopenharmony_ci "BINARY_SUBSCR_ADAPTIVE", 2487db96d56Sopenharmony_ci "BINARY_SUBSCR_DICT", 2497db96d56Sopenharmony_ci "BINARY_SUBSCR_GETITEM", 2507db96d56Sopenharmony_ci "BINARY_SUBSCR_LIST_INT", 2517db96d56Sopenharmony_ci "BINARY_SUBSCR_TUPLE_INT", 2527db96d56Sopenharmony_ci ], 2537db96d56Sopenharmony_ci "CALL": [ 2547db96d56Sopenharmony_ci "CALL_ADAPTIVE", 2557db96d56Sopenharmony_ci "CALL_PY_EXACT_ARGS", 2567db96d56Sopenharmony_ci "CALL_PY_WITH_DEFAULTS", 2577db96d56Sopenharmony_ci ], 2587db96d56Sopenharmony_ci "COMPARE_OP": [ 2597db96d56Sopenharmony_ci "COMPARE_OP_ADAPTIVE", 2607db96d56Sopenharmony_ci "COMPARE_OP_FLOAT_JUMP", 2617db96d56Sopenharmony_ci "COMPARE_OP_INT_JUMP", 2627db96d56Sopenharmony_ci "COMPARE_OP_STR_JUMP", 2637db96d56Sopenharmony_ci ], 2647db96d56Sopenharmony_ci "EXTENDED_ARG": [ 2657db96d56Sopenharmony_ci "EXTENDED_ARG_QUICK", 2667db96d56Sopenharmony_ci ], 2677db96d56Sopenharmony_ci "JUMP_BACKWARD": [ 2687db96d56Sopenharmony_ci "JUMP_BACKWARD_QUICK", 2697db96d56Sopenharmony_ci ], 2707db96d56Sopenharmony_ci "LOAD_ATTR": [ 2717db96d56Sopenharmony_ci "LOAD_ATTR_ADAPTIVE", 2727db96d56Sopenharmony_ci "LOAD_ATTR_INSTANCE_VALUE", 2737db96d56Sopenharmony_ci "LOAD_ATTR_MODULE", 2747db96d56Sopenharmony_ci "LOAD_ATTR_SLOT", 2757db96d56Sopenharmony_ci "LOAD_ATTR_WITH_HINT", 2767db96d56Sopenharmony_ci ], 2777db96d56Sopenharmony_ci "LOAD_CONST": [ 2787db96d56Sopenharmony_ci "LOAD_CONST__LOAD_FAST", 2797db96d56Sopenharmony_ci ], 2807db96d56Sopenharmony_ci "LOAD_FAST": [ 2817db96d56Sopenharmony_ci "LOAD_FAST__LOAD_CONST", 2827db96d56Sopenharmony_ci "LOAD_FAST__LOAD_FAST", 2837db96d56Sopenharmony_ci ], 2847db96d56Sopenharmony_ci "LOAD_GLOBAL": [ 2857db96d56Sopenharmony_ci "LOAD_GLOBAL_ADAPTIVE", 2867db96d56Sopenharmony_ci "LOAD_GLOBAL_BUILTIN", 2877db96d56Sopenharmony_ci "LOAD_GLOBAL_MODULE", 2887db96d56Sopenharmony_ci ], 2897db96d56Sopenharmony_ci "LOAD_METHOD": [ 2907db96d56Sopenharmony_ci "LOAD_METHOD_ADAPTIVE", 2917db96d56Sopenharmony_ci "LOAD_METHOD_CLASS", 2927db96d56Sopenharmony_ci "LOAD_METHOD_MODULE", 2937db96d56Sopenharmony_ci "LOAD_METHOD_NO_DICT", 2947db96d56Sopenharmony_ci "LOAD_METHOD_WITH_DICT", 2957db96d56Sopenharmony_ci "LOAD_METHOD_WITH_VALUES", 2967db96d56Sopenharmony_ci ], 2977db96d56Sopenharmony_ci "PRECALL": [ 2987db96d56Sopenharmony_ci "PRECALL_ADAPTIVE", 2997db96d56Sopenharmony_ci "PRECALL_BOUND_METHOD", 3007db96d56Sopenharmony_ci "PRECALL_BUILTIN_CLASS", 3017db96d56Sopenharmony_ci "PRECALL_BUILTIN_FAST_WITH_KEYWORDS", 3027db96d56Sopenharmony_ci "PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", 3037db96d56Sopenharmony_ci "PRECALL_NO_KW_BUILTIN_FAST", 3047db96d56Sopenharmony_ci "PRECALL_NO_KW_BUILTIN_O", 3057db96d56Sopenharmony_ci "PRECALL_NO_KW_ISINSTANCE", 3067db96d56Sopenharmony_ci "PRECALL_NO_KW_LEN", 3077db96d56Sopenharmony_ci "PRECALL_NO_KW_LIST_APPEND", 3087db96d56Sopenharmony_ci "PRECALL_NO_KW_METHOD_DESCRIPTOR_FAST", 3097db96d56Sopenharmony_ci "PRECALL_NO_KW_METHOD_DESCRIPTOR_NOARGS", 3107db96d56Sopenharmony_ci "PRECALL_NO_KW_METHOD_DESCRIPTOR_O", 3117db96d56Sopenharmony_ci "PRECALL_NO_KW_STR_1", 3127db96d56Sopenharmony_ci "PRECALL_NO_KW_TUPLE_1", 3137db96d56Sopenharmony_ci "PRECALL_NO_KW_TYPE_1", 3147db96d56Sopenharmony_ci "PRECALL_PYFUNC", 3157db96d56Sopenharmony_ci ], 3167db96d56Sopenharmony_ci "RESUME": [ 3177db96d56Sopenharmony_ci "RESUME_QUICK", 3187db96d56Sopenharmony_ci ], 3197db96d56Sopenharmony_ci "STORE_ATTR": [ 3207db96d56Sopenharmony_ci "STORE_ATTR_ADAPTIVE", 3217db96d56Sopenharmony_ci "STORE_ATTR_INSTANCE_VALUE", 3227db96d56Sopenharmony_ci "STORE_ATTR_SLOT", 3237db96d56Sopenharmony_ci "STORE_ATTR_WITH_HINT", 3247db96d56Sopenharmony_ci ], 3257db96d56Sopenharmony_ci "STORE_FAST": [ 3267db96d56Sopenharmony_ci "STORE_FAST__LOAD_FAST", 3277db96d56Sopenharmony_ci "STORE_FAST__STORE_FAST", 3287db96d56Sopenharmony_ci ], 3297db96d56Sopenharmony_ci "STORE_SUBSCR": [ 3307db96d56Sopenharmony_ci "STORE_SUBSCR_ADAPTIVE", 3317db96d56Sopenharmony_ci "STORE_SUBSCR_DICT", 3327db96d56Sopenharmony_ci "STORE_SUBSCR_LIST_INT", 3337db96d56Sopenharmony_ci ], 3347db96d56Sopenharmony_ci "UNPACK_SEQUENCE": [ 3357db96d56Sopenharmony_ci "UNPACK_SEQUENCE_ADAPTIVE", 3367db96d56Sopenharmony_ci "UNPACK_SEQUENCE_LIST", 3377db96d56Sopenharmony_ci "UNPACK_SEQUENCE_TUPLE", 3387db96d56Sopenharmony_ci "UNPACK_SEQUENCE_TWO_TUPLE", 3397db96d56Sopenharmony_ci ], 3407db96d56Sopenharmony_ci} 3417db96d56Sopenharmony_ci_specialized_instructions = [ 3427db96d56Sopenharmony_ci opcode for family in _specializations.values() for opcode in family 3437db96d56Sopenharmony_ci] 3447db96d56Sopenharmony_ci_specialization_stats = [ 3457db96d56Sopenharmony_ci "success", 3467db96d56Sopenharmony_ci "failure", 3477db96d56Sopenharmony_ci "hit", 3487db96d56Sopenharmony_ci "deferred", 3497db96d56Sopenharmony_ci "miss", 3507db96d56Sopenharmony_ci "deopt", 3517db96d56Sopenharmony_ci] 3527db96d56Sopenharmony_ci 3537db96d56Sopenharmony_ci_cache_format = { 3547db96d56Sopenharmony_ci "LOAD_GLOBAL": { 3557db96d56Sopenharmony_ci "counter": 1, 3567db96d56Sopenharmony_ci "index": 1, 3577db96d56Sopenharmony_ci "module_keys_version": 2, 3587db96d56Sopenharmony_ci "builtin_keys_version": 1, 3597db96d56Sopenharmony_ci }, 3607db96d56Sopenharmony_ci "BINARY_OP": { 3617db96d56Sopenharmony_ci "counter": 1, 3627db96d56Sopenharmony_ci }, 3637db96d56Sopenharmony_ci "UNPACK_SEQUENCE": { 3647db96d56Sopenharmony_ci "counter": 1, 3657db96d56Sopenharmony_ci }, 3667db96d56Sopenharmony_ci "COMPARE_OP": { 3677db96d56Sopenharmony_ci "counter": 1, 3687db96d56Sopenharmony_ci "mask": 1, 3697db96d56Sopenharmony_ci }, 3707db96d56Sopenharmony_ci "BINARY_SUBSCR": { 3717db96d56Sopenharmony_ci "counter": 1, 3727db96d56Sopenharmony_ci "type_version": 2, 3737db96d56Sopenharmony_ci "func_version": 1, 3747db96d56Sopenharmony_ci }, 3757db96d56Sopenharmony_ci "LOAD_ATTR": { 3767db96d56Sopenharmony_ci "counter": 1, 3777db96d56Sopenharmony_ci "version": 2, 3787db96d56Sopenharmony_ci "index": 1, 3797db96d56Sopenharmony_ci }, 3807db96d56Sopenharmony_ci "STORE_ATTR": { 3817db96d56Sopenharmony_ci "counter": 1, 3827db96d56Sopenharmony_ci "version": 2, 3837db96d56Sopenharmony_ci "index": 1, 3847db96d56Sopenharmony_ci }, 3857db96d56Sopenharmony_ci "LOAD_METHOD": { 3867db96d56Sopenharmony_ci "counter": 1, 3877db96d56Sopenharmony_ci "type_version": 2, 3887db96d56Sopenharmony_ci "dict_offset": 1, 3897db96d56Sopenharmony_ci "keys_version": 2, 3907db96d56Sopenharmony_ci "descr": 4, 3917db96d56Sopenharmony_ci }, 3927db96d56Sopenharmony_ci "CALL": { 3937db96d56Sopenharmony_ci "counter": 1, 3947db96d56Sopenharmony_ci "func_version": 2, 3957db96d56Sopenharmony_ci "min_args": 1, 3967db96d56Sopenharmony_ci }, 3977db96d56Sopenharmony_ci "PRECALL": { 3987db96d56Sopenharmony_ci "counter": 1, 3997db96d56Sopenharmony_ci }, 4007db96d56Sopenharmony_ci "STORE_SUBSCR": { 4017db96d56Sopenharmony_ci "counter": 1, 4027db96d56Sopenharmony_ci }, 4037db96d56Sopenharmony_ci} 4047db96d56Sopenharmony_ci 4057db96d56Sopenharmony_ci_inline_cache_entries = [ 4067db96d56Sopenharmony_ci sum(_cache_format.get(opname[opcode], {}).values()) for opcode in range(256) 4077db96d56Sopenharmony_ci] 408