1/** 2 * Copyright 2023 Huawei Technologies Co., Ltd 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License") 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16DEF_OPCODE( POP_TOP , Opcode::Class::kStack, 0) 17DEF_OPCODE( DUP_TOP , Opcode::Class::kStack, 0) 18DEF_OPCODE( DUP_TOP_TWO , Opcode::Class::kStack, 0) 19DEF_OPCODE( COPY , Opcode::Class::kStack, 0) 20DEF_OPCODE( ROT_FOUR , Opcode::Class::kStack, 0) 21DEF_OPCODE( ROT_N , Opcode::Class::kStack, 0) 22DEF_OPCODE( ROT_THREE , Opcode::Class::kStack, 0) 23DEF_OPCODE( ROT_TWO , Opcode::Class::kStack, 0) 24DEF_OPCODE( SWAP , Opcode::Class::kStack, 0) 25 26DEF_OPCODE( EXTENDED_ARG , Opcode::Class::kNop, 0) 27DEF_OPCODE( NOP , Opcode::Class::kNop, 0) 28DEF_OPCODE( CACHE , Opcode::Class::kNop, 0) 29DEF_OPCODE( RESUME , Opcode::Class::kNop, 0) 30 31DEF_OPCODE( LOAD_FAST , Opcode::Class::kLocal, 0) 32DEF_OPCODE( STORE_FAST , Opcode::Class::kLocal, 0) 33DEF_OPCODE( DELETE_FAST , Opcode::Class::kLocal, 0) 34 35DEF_OPCODE( LOAD_CLOSURE , Opcode::Class::kCell, kHasFree | kCanDel) 36DEF_OPCODE( LOAD_DEREF , Opcode::Class::kCell, kHasFree | kCanDel) 37DEF_OPCODE( STORE_DEREF , Opcode::Class::kCell, kHasFree) 38DEF_OPCODE( DELETE_DEREF , Opcode::Class::kCell, kHasFree) 39DEF_OPCODE( MAKE_CELL , Opcode::Class::kOther, kHasFree | kCanDel) 40DEF_OPCODE( LOAD_CLASSDEREF , Opcode::Class::kOther, kHasFree | kCanDel) 41 42DEF_OPCODE( LOAD_GLOBAL , Opcode::Class::kGlobal, kHasName | kCanDel) 43DEF_OPCODE( STORE_GLOBAL , Opcode::Class::kGlobal, kHasName) 44DEF_OPCODE( DELETE_GLOBAL , Opcode::Class::kGlobal, kHasName) 45 46DEF_OPCODE( BINARY_SUBSCR , Opcode::Class::kItem, kMayDel) 47DEF_OPCODE( STORE_SUBSCR , Opcode::Class::kItem, 0) 48DEF_OPCODE( DELETE_SUBSCR , Opcode::Class::kItem, 0) 49 50DEF_OPCODE( LOAD_ATTR , Opcode::Class::kAttr, kHasName | kMayDel) 51DEF_OPCODE( LOAD_METHOD , Opcode::Class::kAttr, kHasName | kMayDel) 52DEF_OPCODE( STORE_ATTR , Opcode::Class::kAttr, kHasName) 53DEF_OPCODE( DELETE_ATTR , Opcode::Class::kAttr, kHasName) 54 55DEF_OPCODE( UNARY_INVERT , Opcode::Class::kUnaryMath, kMayDel) 56DEF_OPCODE( UNARY_NEGATIVE , Opcode::Class::kUnaryMath, kMayDel) 57DEF_OPCODE( UNARY_NOT , Opcode::Class::kUnaryMath, kMayDel) 58DEF_OPCODE( UNARY_POSITIVE , Opcode::Class::kUnaryMath, kMayDel) 59DEF_OPCODE( BINARY_OP , Opcode::Class::kBinaryMath, kMayDel) 60DEF_OPCODE( BINARY_ADD , Opcode::Class::kBinaryMath, kMayDel) 61DEF_OPCODE( BINARY_AND , Opcode::Class::kBinaryMath, kMayDel) 62DEF_OPCODE( BINARY_FLOOR_DIVIDE , Opcode::Class::kBinaryMath, kMayDel) 63DEF_OPCODE( BINARY_LSHIFT , Opcode::Class::kBinaryMath, kMayDel) 64DEF_OPCODE( BINARY_MATRIX_MULTIPLY , Opcode::Class::kBinaryMath, kMayDel) 65DEF_OPCODE( BINARY_MODULO , Opcode::Class::kBinaryMath, kMayDel) 66DEF_OPCODE( BINARY_MULTIPLY , Opcode::Class::kBinaryMath, kMayDel) 67DEF_OPCODE( BINARY_OR , Opcode::Class::kBinaryMath, kMayDel) 68DEF_OPCODE( BINARY_POWER , Opcode::Class::kBinaryMath, kMayDel) 69DEF_OPCODE( BINARY_RSHIFT , Opcode::Class::kBinaryMath, kMayDel) 70DEF_OPCODE( BINARY_SUBTRACT , Opcode::Class::kBinaryMath, kMayDel) 71DEF_OPCODE( BINARY_TRUE_DIVIDE , Opcode::Class::kBinaryMath, kMayDel) 72DEF_OPCODE( BINARY_XOR , Opcode::Class::kBinaryMath, kMayDel) 73DEF_OPCODE( INPLACE_ADD , Opcode::Class::kBinaryMath, 0) 74DEF_OPCODE( INPLACE_AND , Opcode::Class::kBinaryMath, 0) 75DEF_OPCODE( INPLACE_FLOOR_DIVIDE , Opcode::Class::kBinaryMath, 0) 76DEF_OPCODE( INPLACE_LSHIFT , Opcode::Class::kBinaryMath, 0) 77DEF_OPCODE( INPLACE_MATRIX_MULTIPLY , Opcode::Class::kBinaryMath, 0) 78DEF_OPCODE( INPLACE_MODULO , Opcode::Class::kBinaryMath, 0) 79DEF_OPCODE( INPLACE_MULTIPLY , Opcode::Class::kBinaryMath, 0) 80DEF_OPCODE( INPLACE_OR , Opcode::Class::kBinaryMath, 0) 81DEF_OPCODE( INPLACE_POWER , Opcode::Class::kBinaryMath, 0) 82DEF_OPCODE( INPLACE_RSHIFT , Opcode::Class::kBinaryMath, 0) 83DEF_OPCODE( INPLACE_SUBTRACT , Opcode::Class::kBinaryMath, 0) 84DEF_OPCODE( INPLACE_TRUE_DIVIDE , Opcode::Class::kBinaryMath, 0) 85DEF_OPCODE( INPLACE_XOR , Opcode::Class::kBinaryMath, 0) 86DEF_OPCODE( COMPARE_OP , Opcode::Class::kBinaryMath, kMayDel) 87 88DEF_OPCODE( BUILD_TUPLE , Opcode::Class::kContainerBuild, kCanDel) 89DEF_OPCODE( BUILD_LIST , Opcode::Class::kContainerBuild, kCanDel) 90DEF_OPCODE( BUILD_MAP , Opcode::Class::kContainerBuild, kCanDel) 91DEF_OPCODE( BUILD_CONST_KEY_MAP , Opcode::Class::kContainerBuild, kCanDel) 92DEF_OPCODE( BUILD_SET , Opcode::Class::kContainerBuild, kCanDel) 93DEF_OPCODE( BUILD_SLICE , Opcode::Class::kContainerBuild, kCanDel) 94DEF_OPCODE( BUILD_STRING , Opcode::Class::kContainerBuild, kCanDel) 95DEF_OPCODE( BUILD_LIST_UNPACK , Opcode::Class::kContainerBuild, kMayDel) 96DEF_OPCODE( BUILD_MAP_UNPACK , Opcode::Class::kContainerBuild, kMayDel) 97DEF_OPCODE( BUILD_SET_UNPACK , Opcode::Class::kContainerBuild, kMayDel) 98DEF_OPCODE( BUILD_TUPLE_UNPACK , Opcode::Class::kContainerBuild, kMayDel) 99DEF_OPCODE( BUILD_TUPLE_UNPACK_WITH_CALL , Opcode::Class::kCall, 0) 100DEF_OPCODE( BUILD_MAP_UNPACK_WITH_CALL , Opcode::Class::kCall, 0) 101DEF_OPCODE( CALL , Opcode::Class::kCall, 0) 102DEF_OPCODE( CALL_FUNCTION , Opcode::Class::kCall, 0) 103DEF_OPCODE( CALL_FUNCTION_EX , Opcode::Class::kCall, 0) 104DEF_OPCODE( CALL_FUNCTION_KW , Opcode::Class::kCall, 0) 105DEF_OPCODE( CALL_METHOD , Opcode::Class::kCall, 0) 106 107DEF_OPCODE( DICT_MERGE , Opcode::Class::kContainerMerge, 0) 108DEF_OPCODE( DICT_UPDATE , Opcode::Class::kContainerMerge, 0) 109DEF_OPCODE( LIST_APPEND , Opcode::Class::kContainerMerge, 0) 110DEF_OPCODE( LIST_EXTEND , Opcode::Class::kContainerMerge, 0) 111DEF_OPCODE( MAP_ADD , Opcode::Class::kContainerMerge, 0) 112DEF_OPCODE( SET_ADD , Opcode::Class::kContainerMerge, 0) 113DEF_OPCODE( SET_UPDATE , Opcode::Class::kContainerMerge, 0) 114 115DEF_OPCODE( POP_JUMP_BACKWARD_IF_FALSE , Opcode::Class::kControl, kJRel) 116DEF_OPCODE( POP_JUMP_BACKWARD_IF_NONE , Opcode::Class::kControl, kJRel) 117DEF_OPCODE( POP_JUMP_BACKWARD_IF_NOT_NONE, Opcode::Class::kControl, kJRel) 118DEF_OPCODE( POP_JUMP_BACKWARD_IF_TRUE , Opcode::Class::kControl, kJRel) 119DEF_OPCODE( POP_JUMP_FORWARD_IF_FALSE , Opcode::Class::kControl, kJRel) 120DEF_OPCODE( POP_JUMP_FORWARD_IF_NONE , Opcode::Class::kControl, kJRel) 121DEF_OPCODE( POP_JUMP_FORWARD_IF_NOT_NONE , Opcode::Class::kControl, kJRel) 122DEF_OPCODE( POP_JUMP_FORWARD_IF_TRUE , Opcode::Class::kControl, kJRel) 123DEF_OPCODE( POP_JUMP_IF_FALSE , Opcode::Class::kControl, kJAbs) 124DEF_OPCODE( POP_JUMP_IF_TRUE , Opcode::Class::kControl, kJAbs) 125DEF_OPCODE( JUMP_ABSOLUTE , Opcode::Class::kControl, kJAbs | kNotFall) 126DEF_OPCODE( JUMP_BACKWARD , Opcode::Class::kControl, kJRel | kNotFall) 127DEF_OPCODE( JUMP_BACKWARD_NO_INTERRUPT , Opcode::Class::kControl, kJRel | kNotFall) 128DEF_OPCODE( JUMP_FORWARD , Opcode::Class::kControl, kJRel | kNotFall) 129DEF_OPCODE( JUMP_IF_NOT_EXC_MATCH , Opcode::Class::kControl, kJAbs) 130#if (PY_MAJOR_VERSION == 3) && (PY_MINOR_VERSION < 11) 131DEF_OPCODE( JUMP_IF_FALSE_OR_POP , Opcode::Class::kControl, kJAbs) 132DEF_OPCODE( JUMP_IF_TRUE_OR_POP , Opcode::Class::kControl, kJAbs) 133#else 134DEF_OPCODE( JUMP_IF_FALSE_OR_POP , Opcode::Class::kControl, kJRel) 135DEF_OPCODE( JUMP_IF_TRUE_OR_POP , Opcode::Class::kControl, kJRel) 136#endif 137DEF_OPCODE( FOR_ITER , Opcode::Class::kControl, kJRel) 138DEF_OPCODE( SETUP_LOOP , Opcode::Class::kControl, kJRel) 139DEF_OPCODE( CONTINUE_LOOP , Opcode::Class::kControl, kJRel | kNotFall) 140DEF_OPCODE( BREAK_LOOP , Opcode::Class::kControl, kNotFall) 141 142DEF_OPCODE( UNPACK_EX , Opcode::Class::kUnpack, 0) 143DEF_OPCODE( UNPACK_SEQUENCE , Opcode::Class::kUnpack, 0) 144 145DEF_OPCODE( LOAD_NAME , Opcode::Class::kOther, kHasName | kCanDel) 146DEF_OPCODE( STORE_NAME , Opcode::Class::kOther, kHasName) 147DEF_OPCODE( DELETE_NAME , Opcode::Class::kOther, kHasName) 148 149DEF_OPCODE( KW_NAMES , Opcode::Class::kOther, kHasConst | kCanDel) 150DEF_OPCODE( LOAD_CONST , Opcode::Class::kOther, kHasConst | kCanDel) 151 152DEF_OPCODE( CONTAINS_OP , Opcode::Class::kOther, kMayDel) 153DEF_OPCODE( IS_OP , Opcode::Class::kOther, kCanDel) 154DEF_OPCODE( LIST_TO_TUPLE , Opcode::Class::kOther, kCanDel) 155DEF_OPCODE( GET_ITER , Opcode::Class::kOther, kMayDel) 156DEF_OPCODE( MAKE_FUNCTION , Opcode::Class::kOther, kCanDel) 157DEF_OPCODE( RETURN_GENERATOR , Opcode::Class::kOther, kNotFall) 158DEF_OPCODE( RETURN_VALUE , Opcode::Class::kOther, kNotFall) 159 160DEF_OPCODE( BEFORE_WITH , Opcode::Class::kException, kJRel) 161DEF_OPCODE( BEGIN_FINALLY , Opcode::Class::kException, 0) 162DEF_OPCODE( END_FINALLY , Opcode::Class::kException, 0) 163DEF_OPCODE( POP_BLOCK , Opcode::Class::kException, 0) 164DEF_OPCODE( POP_EXCEPT , Opcode::Class::kException, 0) 165DEF_OPCODE( POP_FINALLY , Opcode::Class::kException, 0) 166DEF_OPCODE( PREP_RERAISE_STAR , Opcode::Class::kException, 0) 167DEF_OPCODE( PUSH_EXC_INFO , Opcode::Class::kException, 0) 168DEF_OPCODE( RAISE_VARARGS , Opcode::Class::kException, 0) 169DEF_OPCODE( RERAISE , Opcode::Class::kException, kNotFall) 170DEF_OPCODE( SETUP_EXCEPT , Opcode::Class::kException, kJRel) 171DEF_OPCODE( SETUP_FINALLY , Opcode::Class::kException, kJRel) 172DEF_OPCODE( SETUP_WITH , Opcode::Class::kException, kJRel) 173DEF_OPCODE( WITH_CLEANUP_FINISH , Opcode::Class::kException, 0) 174DEF_OPCODE( WITH_CLEANUP_START , Opcode::Class::kException, 0) 175DEF_OPCODE( WITH_EXCEPT_START , Opcode::Class::kException, 0) 176 177DEF_OPCODE( ASYNC_GEN_WRAP , Opcode::Class::kOther, 0) 178DEF_OPCODE( BEFORE_ASYNC_WITH , Opcode::Class::kOther, 0) 179DEF_OPCODE( CALL_FINALLY , Opcode::Class::kOther, 0) 180DEF_OPCODE( CHECK_EG_MATCH , Opcode::Class::kOther, 0) 181DEF_OPCODE( CHECK_EXC_MATCH , Opcode::Class::kOther, 0) 182DEF_OPCODE( COPY_DICT_WITHOUT_KEYS , Opcode::Class::kOther, 0) 183DEF_OPCODE( COPY_FREE_VARS , Opcode::Class::kOther, kHasFree) 184DEF_OPCODE( END_ASYNC_FOR , Opcode::Class::kOther, 0) 185DEF_OPCODE( FORMAT_VALUE , Opcode::Class::kOther, 0) 186DEF_OPCODE( GEN_START , Opcode::Class::kOther, 0) 187DEF_OPCODE( GET_AITER , Opcode::Class::kOther, 0) 188DEF_OPCODE( GET_ANEXT , Opcode::Class::kOther, 0) 189DEF_OPCODE( GET_AWAITABLE , Opcode::Class::kOther, 0) 190DEF_OPCODE( GET_LEN , Opcode::Class::kOther, 0) 191DEF_OPCODE( GET_YIELD_FROM_ITER , Opcode::Class::kOther, 0) 192DEF_OPCODE( IMPORT_FROM , Opcode::Class::kOther, kHasName) 193DEF_OPCODE( IMPORT_NAME , Opcode::Class::kOther, kHasName) 194DEF_OPCODE( IMPORT_STAR , Opcode::Class::kOther, 0) 195DEF_OPCODE( LOAD_ASSERTION_ERROR , Opcode::Class::kOther, kCanDel) 196DEF_OPCODE( LOAD_BUILD_CLASS , Opcode::Class::kOther, kCanDel) 197DEF_OPCODE( MATCH_CLASS , Opcode::Class::kOther, kMayDel) 198DEF_OPCODE( MATCH_KEYS , Opcode::Class::kOther, kMayDel) 199DEF_OPCODE( MATCH_MAPPING , Opcode::Class::kOther, kMayDel) 200DEF_OPCODE( MATCH_SEQUENCE , Opcode::Class::kOther, kMayDel) 201DEF_OPCODE( PRECALL , Opcode::Class::kOther, kNop) 202DEF_OPCODE( PRINT_EXPR , Opcode::Class::kOther, 0) 203DEF_OPCODE( PUSH_NULL , Opcode::Class::kOther, 0) 204DEF_OPCODE( SEND , Opcode::Class::kOther, 0) 205DEF_OPCODE( SETUP_ANNOTATIONS , Opcode::Class::kOther, 0) 206DEF_OPCODE( SETUP_ASYNC_WITH , Opcode::Class::kOther, 0) 207DEF_OPCODE( YIELD_FROM , Opcode::Class::kOther, 0) 208DEF_OPCODE( YIELD_VALUE , Opcode::Class::kOther, 0) 209