// This file is generated by Tools/cases_generator/generate_cases.py
// from:
//   Python/bytecodes.c
// Do not edit!

#ifndef NEED_OPCODE_METADATA
extern int _PyOpcode_num_popped(int opcode, int oparg, bool jump);
#else
int
_PyOpcode_num_popped(int opcode, int oparg, bool jump) {
    switch(opcode) {
        case NOP:
            return 0;
        case RESUME:
            return 0;
        case LOAD_CLOSURE:
            return 0;
        case LOAD_FAST_CHECK:
            return 0;
        case LOAD_FAST:
            return 0;
        case LOAD_CONST:
            return 0;
        case STORE_FAST:
            return 1;
        case LOAD_FAST__LOAD_FAST:
            return 0+0;
        case LOAD_FAST__LOAD_CONST:
            return 0+0;
        case STORE_FAST__LOAD_FAST:
            return 1+0;
        case STORE_FAST__STORE_FAST:
            return 1+1;
        case LOAD_CONST__LOAD_FAST:
            return 0+0;
        case POP_TOP:
            return 1;
        case PUSH_NULL:
            return 0;
        case END_FOR:
            return 1+1;
        case UNARY_NEGATIVE:
            return 1;
        case UNARY_NOT:
            return 1;
        case UNARY_INVERT:
            return 1;
        case BINARY_OP_MULTIPLY_INT:
            return 2;
        case BINARY_OP_MULTIPLY_FLOAT:
            return 2;
        case BINARY_OP_SUBTRACT_INT:
            return 2;
        case BINARY_OP_SUBTRACT_FLOAT:
            return 2;
        case BINARY_OP_ADD_UNICODE:
            return 2;
        case BINARY_OP_INPLACE_ADD_UNICODE:
            return 2;
        case BINARY_OP_ADD_FLOAT:
            return 2;
        case BINARY_OP_ADD_INT:
            return 2;
        case BINARY_SUBSCR:
            return 2;
        case BINARY_SLICE:
            return 3;
        case STORE_SLICE:
            return 4;
        case BINARY_SUBSCR_LIST_INT:
            return 2;
        case BINARY_SUBSCR_TUPLE_INT:
            return 2;
        case BINARY_SUBSCR_DICT:
            return 2;
        case BINARY_SUBSCR_GETITEM:
            return 2;
        case LIST_APPEND:
            return (oparg-1) + 2;
        case SET_ADD:
            return (oparg-1) + 2;
        case STORE_SUBSCR:
            return 3;
        case STORE_SUBSCR_LIST_INT:
            return 3;
        case STORE_SUBSCR_DICT:
            return 3;
        case DELETE_SUBSCR:
            return 2;
        case CALL_INTRINSIC_1:
            return 1;
        case CALL_INTRINSIC_2:
            return 2;
        case RAISE_VARARGS:
            return oparg;
        case INTERPRETER_EXIT:
            return 1;
        case RETURN_VALUE:
            return 1;
        case RETURN_CONST:
            return 0;
        case GET_AITER:
            return 1;
        case GET_ANEXT:
            return 1;
        case GET_AWAITABLE:
            return 1;
        case SEND:
            return 2;
        case SEND_GEN:
            return 2;
        case YIELD_VALUE:
            return 1;
        case POP_EXCEPT:
            return 1;
        case RERAISE:
            return oparg + 1;
        case END_ASYNC_FOR:
            return 2;
        case CLEANUP_THROW:
            return 3;
        case LOAD_ASSERTION_ERROR:
            return 0;
        case LOAD_BUILD_CLASS:
            return 0;
        case STORE_NAME:
            return 1;
        case DELETE_NAME:
            return 0;
        case UNPACK_SEQUENCE:
            return 1;
        case UNPACK_SEQUENCE_TWO_TUPLE:
            return 1;
        case UNPACK_SEQUENCE_TUPLE:
            return 1;
        case UNPACK_SEQUENCE_LIST:
            return 1;
        case UNPACK_EX:
            return 1;
        case STORE_ATTR:
            return 2;
        case DELETE_ATTR:
            return 1;
        case STORE_GLOBAL:
            return 1;
        case DELETE_GLOBAL:
            return 0;
        case LOAD_NAME:
            return 0;
        case LOAD_GLOBAL:
            return 0;
        case LOAD_GLOBAL_MODULE:
            return 0;
        case LOAD_GLOBAL_BUILTIN:
            return 0;
        case DELETE_FAST:
            return 0;
        case MAKE_CELL:
            return 0;
        case DELETE_DEREF:
            return 0;
        case LOAD_CLASSDEREF:
            return 0;
        case LOAD_DEREF:
            return 0;
        case STORE_DEREF:
            return 1;
        case COPY_FREE_VARS:
            return 0;
        case BUILD_STRING:
            return oparg;
        case BUILD_TUPLE:
            return oparg;
        case BUILD_LIST:
            return oparg;
        case LIST_EXTEND:
            return (oparg-1) + 2;
        case SET_UPDATE:
            return (oparg-1) + 2;
        case BUILD_SET:
            return oparg;
        case BUILD_MAP:
            return oparg*2;
        case SETUP_ANNOTATIONS:
            return 0;
        case BUILD_CONST_KEY_MAP:
            return oparg + 1;
        case DICT_UPDATE:
            return 1;
        case DICT_MERGE:
            return 1;
        case MAP_ADD:
            return 2;
        case LOAD_ATTR:
            return 1;
        case LOAD_ATTR_INSTANCE_VALUE:
            return 1;
        case LOAD_ATTR_MODULE:
            return 1;
        case LOAD_ATTR_WITH_HINT:
            return 1;
        case LOAD_ATTR_SLOT:
            return 1;
        case LOAD_ATTR_CLASS:
            return 1;
        case LOAD_ATTR_PROPERTY:
            return 1;
        case LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN:
            return 1;
        case STORE_ATTR_INSTANCE_VALUE:
            return 2;
        case STORE_ATTR_WITH_HINT:
            return 2;
        case STORE_ATTR_SLOT:
            return 2;
        case COMPARE_OP:
            return 2;
        case COMPARE_OP_FLOAT:
            return 2;
        case COMPARE_OP_INT:
            return 2;
        case COMPARE_OP_STR:
            return 2;
        case IS_OP:
            return 2;
        case CONTAINS_OP:
            return 2;
        case CHECK_EG_MATCH:
            return 2;
        case CHECK_EXC_MATCH:
            return 2;
        case IMPORT_NAME:
            return 2;
        case IMPORT_FROM:
            return 1;
        case JUMP_FORWARD:
            return 0;
        case JUMP_BACKWARD:
            return 0;
        case POP_JUMP_IF_FALSE:
            return 1;
        case POP_JUMP_IF_TRUE:
            return 1;
        case POP_JUMP_IF_NOT_NONE:
            return 1;
        case POP_JUMP_IF_NONE:
            return 1;
        case JUMP_BACKWARD_NO_INTERRUPT:
            return 0;
        case GET_LEN:
            return 1;
        case MATCH_CLASS:
            return 3;
        case MATCH_MAPPING:
            return 1;
        case MATCH_SEQUENCE:
            return 1;
        case MATCH_KEYS:
            return 2;
        case GET_ITER:
            return 1;
        case GET_YIELD_FROM_ITER:
            return 1;
        case FOR_ITER:
            return 1;
        case FOR_ITER_LIST:
            return 1;
        case FOR_ITER_TUPLE:
            return 1;
        case FOR_ITER_RANGE:
            return 1;
        case FOR_ITER_GEN:
            return 1;
        case BEFORE_ASYNC_WITH:
            return 1;
        case BEFORE_WITH:
            return 1;
        case WITH_EXCEPT_START:
            return 4;
        case PUSH_EXC_INFO:
            return 1;
        case LOAD_ATTR_METHOD_WITH_VALUES:
            return 1;
        case LOAD_ATTR_METHOD_NO_DICT:
            return 1;
        case LOAD_ATTR_METHOD_LAZY_DICT:
            return 1;
        case KW_NAMES:
            return 0;
        case CALL:
            return oparg + 2;
        case CALL_BOUND_METHOD_EXACT_ARGS:
            return oparg + 2;
        case CALL_PY_EXACT_ARGS:
            return oparg + 2;
        case CALL_PY_WITH_DEFAULTS:
            return oparg + 2;
        case CALL_NO_KW_TYPE_1:
            return oparg + 2;
        case CALL_NO_KW_STR_1:
            return oparg + 2;
        case CALL_NO_KW_TUPLE_1:
            return oparg + 2;
        case CALL_BUILTIN_CLASS:
            return oparg + 2;
        case CALL_NO_KW_BUILTIN_O:
            return oparg + 2;
        case CALL_NO_KW_BUILTIN_FAST:
            return oparg + 2;
        case CALL_BUILTIN_FAST_WITH_KEYWORDS:
            return oparg + 2;
        case CALL_NO_KW_LEN:
            return oparg + 2;
        case CALL_NO_KW_ISINSTANCE:
            return oparg + 2;
        case CALL_NO_KW_LIST_APPEND:
            return oparg + 2;
        case CALL_NO_KW_METHOD_DESCRIPTOR_O:
            return oparg + 2;
        case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS:
            return oparg + 2;
        case CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS:
            return oparg + 2;
        case CALL_NO_KW_METHOD_DESCRIPTOR_FAST:
            return oparg + 2;
        case CALL_FUNCTION_EX:
            return ((oparg & 1) ? 1 : 0) + 3;
        case MAKE_FUNCTION:
            return ((oparg & 0x01) ? 1 : 0) + ((oparg & 0x02) ? 1 : 0) + ((oparg & 0x04) ? 1 : 0) + ((oparg & 0x08) ? 1 : 0) + 1;
        case RETURN_GENERATOR:
            return 0;
        case BUILD_SLICE:
            return ((oparg == 3) ? 1 : 0) + 2;
        case FORMAT_VALUE:
            return (((oparg & FVS_MASK) == FVS_HAVE_SPEC) ? 1 : 0) + 1;
        case COPY:
            return (oparg-1) + 1;
        case BINARY_OP:
            return 2;
        case SWAP:
            return (oparg-2) + 2;
        case EXTENDED_ARG:
            return 0;
        case CACHE:
            return 0;
        default:
            return -1;
    }
}
#endif

#ifndef NEED_OPCODE_METADATA
extern int _PyOpcode_num_pushed(int opcode, int oparg, bool jump);
#else
int
_PyOpcode_num_pushed(int opcode, int oparg, bool jump) {
    switch(opcode) {
        case NOP:
            return 0;
        case RESUME:
            return 0;
        case LOAD_CLOSURE:
            return 1;
        case LOAD_FAST_CHECK:
            return 1;
        case LOAD_FAST:
            return 1;
        case LOAD_CONST:
            return 1;
        case STORE_FAST:
            return 0;
        case LOAD_FAST__LOAD_FAST:
            return 1+1;
        case LOAD_FAST__LOAD_CONST:
            return 1+1;
        case STORE_FAST__LOAD_FAST:
            return 0+1;
        case STORE_FAST__STORE_FAST:
            return 0+0;
        case LOAD_CONST__LOAD_FAST:
            return 1+1;
        case POP_TOP:
            return 0;
        case PUSH_NULL:
            return 1;
        case END_FOR:
            return 0+0;
        case UNARY_NEGATIVE:
            return 1;
        case UNARY_NOT:
            return 1;
        case UNARY_INVERT:
            return 1;
        case BINARY_OP_MULTIPLY_INT:
            return 1;
        case BINARY_OP_MULTIPLY_FLOAT:
            return 1;
        case BINARY_OP_SUBTRACT_INT:
            return 1;
        case BINARY_OP_SUBTRACT_FLOAT:
            return 1;
        case BINARY_OP_ADD_UNICODE:
            return 1;
        case BINARY_OP_INPLACE_ADD_UNICODE:
            return 0;
        case BINARY_OP_ADD_FLOAT:
            return 1;
        case BINARY_OP_ADD_INT:
            return 1;
        case BINARY_SUBSCR:
            return 1;
        case BINARY_SLICE:
            return 1;
        case STORE_SLICE:
            return 0;
        case BINARY_SUBSCR_LIST_INT:
            return 1;
        case BINARY_SUBSCR_TUPLE_INT:
            return 1;
        case BINARY_SUBSCR_DICT:
            return 1;
        case BINARY_SUBSCR_GETITEM:
            return 1;
        case LIST_APPEND:
            return (oparg-1) + 1;
        case SET_ADD:
            return (oparg-1) + 1;
        case STORE_SUBSCR:
            return 0;
        case STORE_SUBSCR_LIST_INT:
            return 0;
        case STORE_SUBSCR_DICT:
            return 0;
        case DELETE_SUBSCR:
            return 0;
        case CALL_INTRINSIC_1:
            return 1;
        case CALL_INTRINSIC_2:
            return 1;
        case RAISE_VARARGS:
            return 0;
        case INTERPRETER_EXIT:
            return 0;
        case RETURN_VALUE:
            return 0;
        case RETURN_CONST:
            return 0;
        case GET_AITER:
            return 1;
        case GET_ANEXT:
            return 2;
        case GET_AWAITABLE:
            return 1;
        case SEND:
            return 2;
        case SEND_GEN:
            return 1;
        case YIELD_VALUE:
            return 1;
        case POP_EXCEPT:
            return 0;
        case RERAISE:
            return oparg;
        case END_ASYNC_FOR:
            return 0;
        case CLEANUP_THROW:
            return 2;
        case LOAD_ASSERTION_ERROR:
            return 1;
        case LOAD_BUILD_CLASS:
            return 1;
        case STORE_NAME:
            return 0;
        case DELETE_NAME:
            return 0;
        case UNPACK_SEQUENCE:
            return oparg;
        case UNPACK_SEQUENCE_TWO_TUPLE:
            return oparg;
        case UNPACK_SEQUENCE_TUPLE:
            return oparg;
        case UNPACK_SEQUENCE_LIST:
            return oparg;
        case UNPACK_EX:
            return (oparg & 0xFF) + (oparg >> 8) + 1;
        case STORE_ATTR:
            return 0;
        case DELETE_ATTR:
            return 0;
        case STORE_GLOBAL:
            return 0;
        case DELETE_GLOBAL:
            return 0;
        case LOAD_NAME:
            return 1;
        case LOAD_GLOBAL:
            return ((oparg & 1) ? 1 : 0) + 1;
        case LOAD_GLOBAL_MODULE:
            return ((oparg & 1) ? 1 : 0) + 1;
        case LOAD_GLOBAL_BUILTIN:
            return ((oparg & 1) ? 1 : 0) + 1;
        case DELETE_FAST:
            return 0;
        case MAKE_CELL:
            return 0;
        case DELETE_DEREF:
            return 0;
        case LOAD_CLASSDEREF:
            return 1;
        case LOAD_DEREF:
            return 1;
        case STORE_DEREF:
            return 0;
        case COPY_FREE_VARS:
            return 0;
        case BUILD_STRING:
            return 1;
        case BUILD_TUPLE:
            return 1;
        case BUILD_LIST:
            return 1;
        case LIST_EXTEND:
            return (oparg-1) + 1;
        case SET_UPDATE:
            return (oparg-1) + 1;
        case BUILD_SET:
            return 1;
        case BUILD_MAP:
            return 1;
        case SETUP_ANNOTATIONS:
            return 0;
        case BUILD_CONST_KEY_MAP:
            return 1;
        case DICT_UPDATE:
            return 0;
        case DICT_MERGE:
            return 0;
        case MAP_ADD:
            return 0;
        case LOAD_ATTR:
            return ((oparg & 1) ? 1 : 0) + 1;
        case LOAD_ATTR_INSTANCE_VALUE:
            return ((oparg & 1) ? 1 : 0) + 1;
        case LOAD_ATTR_MODULE:
            return ((oparg & 1) ? 1 : 0) + 1;
        case LOAD_ATTR_WITH_HINT:
            return ((oparg & 1) ? 1 : 0) + 1;
        case LOAD_ATTR_SLOT:
            return ((oparg & 1) ? 1 : 0) + 1;
        case LOAD_ATTR_CLASS:
            return ((oparg & 1) ? 1 : 0) + 1;
        case LOAD_ATTR_PROPERTY:
            return ((oparg & 1) ? 1 : 0) + 1;
        case LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN:
            return ((oparg & 1) ? 1 : 0) + 1;
        case STORE_ATTR_INSTANCE_VALUE:
            return 0;
        case STORE_ATTR_WITH_HINT:
            return 0;
        case STORE_ATTR_SLOT:
            return 0;
        case COMPARE_OP:
            return 1;
        case COMPARE_OP_FLOAT:
            return 1;
        case COMPARE_OP_INT:
            return 1;
        case COMPARE_OP_STR:
            return 1;
        case IS_OP:
            return 1;
        case CONTAINS_OP:
            return 1;
        case CHECK_EG_MATCH:
            return 2;
        case CHECK_EXC_MATCH:
            return 2;
        case IMPORT_NAME:
            return 1;
        case IMPORT_FROM:
            return 2;
        case JUMP_FORWARD:
            return 0;
        case JUMP_BACKWARD:
            return 0;
        case POP_JUMP_IF_FALSE:
            return 0;
        case POP_JUMP_IF_TRUE:
            return 0;
        case POP_JUMP_IF_NOT_NONE:
            return 0;
        case POP_JUMP_IF_NONE:
            return 0;
        case JUMP_BACKWARD_NO_INTERRUPT:
            return 0;
        case GET_LEN:
            return 2;
        case MATCH_CLASS:
            return 1;
        case MATCH_MAPPING:
            return 2;
        case MATCH_SEQUENCE:
            return 2;
        case MATCH_KEYS:
            return 3;
        case GET_ITER:
            return 1;
        case GET_YIELD_FROM_ITER:
            return 1;
        case FOR_ITER:
            return 2;
        case FOR_ITER_LIST:
            return 2;
        case FOR_ITER_TUPLE:
            return 2;
        case FOR_ITER_RANGE:
            return 2;
        case FOR_ITER_GEN:
            return 2;
        case BEFORE_ASYNC_WITH:
            return 2;
        case BEFORE_WITH:
            return 2;
        case WITH_EXCEPT_START:
            return 5;
        case PUSH_EXC_INFO:
            return 2;
        case LOAD_ATTR_METHOD_WITH_VALUES:
            return ((oparg & 1) ? 1 : 0) + 1;
        case LOAD_ATTR_METHOD_NO_DICT:
            return ((oparg & 1) ? 1 : 0) + 1;
        case LOAD_ATTR_METHOD_LAZY_DICT:
            return ((oparg & 1) ? 1 : 0) + 1;
        case KW_NAMES:
            return 0;
        case CALL:
            return 1;
        case CALL_BOUND_METHOD_EXACT_ARGS:
            return 1;
        case CALL_PY_EXACT_ARGS:
            return 1;
        case CALL_PY_WITH_DEFAULTS:
            return 1;
        case CALL_NO_KW_TYPE_1:
            return 1;
        case CALL_NO_KW_STR_1:
            return 1;
        case CALL_NO_KW_TUPLE_1:
            return 1;
        case CALL_BUILTIN_CLASS:
            return 1;
        case CALL_NO_KW_BUILTIN_O:
            return 1;
        case CALL_NO_KW_BUILTIN_FAST:
            return 1;
        case CALL_BUILTIN_FAST_WITH_KEYWORDS:
            return 1;
        case CALL_NO_KW_LEN:
            return 1;
        case CALL_NO_KW_ISINSTANCE:
            return 1;
        case CALL_NO_KW_LIST_APPEND:
            return 1;
        case CALL_NO_KW_METHOD_DESCRIPTOR_O:
            return 1;
        case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS:
            return 1;
        case CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS:
            return 1;
        case CALL_NO_KW_METHOD_DESCRIPTOR_FAST:
            return 1;
        case CALL_FUNCTION_EX:
            return 1;
        case MAKE_FUNCTION:
            return 1;
        case RETURN_GENERATOR:
            return 0;
        case BUILD_SLICE:
            return 1;
        case FORMAT_VALUE:
            return 1;
        case COPY:
            return (oparg-1) + 2;
        case BINARY_OP:
            return 1;
        case SWAP:
            return (oparg-2) + 2;
        case EXTENDED_ARG:
            return 0;
        case CACHE:
            return 0;
        default:
            return -1;
    }
}
#endif

enum InstructionFormat { INSTR_FMT_IB, INSTR_FMT_IBC, INSTR_FMT_IBC000, INSTR_FMT_IBC00000000, INSTR_FMT_IBIB, INSTR_FMT_IX, INSTR_FMT_IXC, INSTR_FMT_IXC000 };
struct opcode_metadata {
    bool valid_entry;
    enum InstructionFormat instr_format;
};

#ifndef NEED_OPCODE_METADATA
extern const struct opcode_metadata _PyOpcode_opcode_metadata[256];
#else
const struct opcode_metadata _PyOpcode_opcode_metadata[256] = {
    [NOP] = { true, INSTR_FMT_IX },
    [RESUME] = { true, INSTR_FMT_IB },
    [LOAD_CLOSURE] = { true, INSTR_FMT_IB },
    [LOAD_FAST_CHECK] = { true, INSTR_FMT_IB },
    [LOAD_FAST] = { true, INSTR_FMT_IB },
    [LOAD_CONST] = { true, INSTR_FMT_IB },
    [STORE_FAST] = { true, INSTR_FMT_IB },
    [LOAD_FAST__LOAD_FAST] = { true, INSTR_FMT_IBIB },
    [LOAD_FAST__LOAD_CONST] = { true, INSTR_FMT_IBIB },
    [STORE_FAST__LOAD_FAST] = { true, INSTR_FMT_IBIB },
    [STORE_FAST__STORE_FAST] = { true, INSTR_FMT_IBIB },
    [LOAD_CONST__LOAD_FAST] = { true, INSTR_FMT_IBIB },
    [POP_TOP] = { true, INSTR_FMT_IX },
    [PUSH_NULL] = { true, INSTR_FMT_IX },
    [END_FOR] = { true, INSTR_FMT_IB },
    [UNARY_NEGATIVE] = { true, INSTR_FMT_IX },
    [UNARY_NOT] = { true, INSTR_FMT_IX },
    [UNARY_INVERT] = { true, INSTR_FMT_IX },
    [BINARY_OP_MULTIPLY_INT] = { true, INSTR_FMT_IXC },
    [BINARY_OP_MULTIPLY_FLOAT] = { true, INSTR_FMT_IXC },
    [BINARY_OP_SUBTRACT_INT] = { true, INSTR_FMT_IXC },
    [BINARY_OP_SUBTRACT_FLOAT] = { true, INSTR_FMT_IXC },
    [BINARY_OP_ADD_UNICODE] = { true, INSTR_FMT_IXC },
    [BINARY_OP_INPLACE_ADD_UNICODE] = { true, INSTR_FMT_IX },
    [BINARY_OP_ADD_FLOAT] = { true, INSTR_FMT_IXC },
    [BINARY_OP_ADD_INT] = { true, INSTR_FMT_IXC },
    [BINARY_SUBSCR] = { true, INSTR_FMT_IXC },
    [BINARY_SLICE] = { true, INSTR_FMT_IX },
    [STORE_SLICE] = { true, INSTR_FMT_IX },
    [BINARY_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC },
    [BINARY_SUBSCR_TUPLE_INT] = { true, INSTR_FMT_IXC },
    [BINARY_SUBSCR_DICT] = { true, INSTR_FMT_IXC },
    [BINARY_SUBSCR_GETITEM] = { true, INSTR_FMT_IXC },
    [LIST_APPEND] = { true, INSTR_FMT_IB },
    [SET_ADD] = { true, INSTR_FMT_IB },
    [STORE_SUBSCR] = { true, INSTR_FMT_IXC },
    [STORE_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC },
    [STORE_SUBSCR_DICT] = { true, INSTR_FMT_IXC },
    [DELETE_SUBSCR] = { true, INSTR_FMT_IX },
    [CALL_INTRINSIC_1] = { true, INSTR_FMT_IB },
    [CALL_INTRINSIC_2] = { true, INSTR_FMT_IB },
    [RAISE_VARARGS] = { true, INSTR_FMT_IB },
    [INTERPRETER_EXIT] = { true, INSTR_FMT_IX },
    [RETURN_VALUE] = { true, INSTR_FMT_IX },
    [RETURN_CONST] = { true, INSTR_FMT_IB },
    [GET_AITER] = { true, INSTR_FMT_IX },
    [GET_ANEXT] = { true, INSTR_FMT_IX },
    [GET_AWAITABLE] = { true, INSTR_FMT_IB },
    [SEND] = { true, INSTR_FMT_IBC },
    [SEND_GEN] = { true, INSTR_FMT_IBC },
    [YIELD_VALUE] = { true, INSTR_FMT_IX },
    [POP_EXCEPT] = { true, INSTR_FMT_IX },
    [RERAISE] = { true, INSTR_FMT_IB },
    [END_ASYNC_FOR] = { true, INSTR_FMT_IX },
    [CLEANUP_THROW] = { true, INSTR_FMT_IX },
    [LOAD_ASSERTION_ERROR] = { true, INSTR_FMT_IX },
    [LOAD_BUILD_CLASS] = { true, INSTR_FMT_IX },
    [STORE_NAME] = { true, INSTR_FMT_IB },
    [DELETE_NAME] = { true, INSTR_FMT_IB },
    [UNPACK_SEQUENCE] = { true, INSTR_FMT_IBC },
    [UNPACK_SEQUENCE_TWO_TUPLE] = { true, INSTR_FMT_IBC },
    [UNPACK_SEQUENCE_TUPLE] = { true, INSTR_FMT_IBC },
    [UNPACK_SEQUENCE_LIST] = { true, INSTR_FMT_IBC },
    [UNPACK_EX] = { true, INSTR_FMT_IB },
    [STORE_ATTR] = { true, INSTR_FMT_IBC000 },
    [DELETE_ATTR] = { true, INSTR_FMT_IB },
    [STORE_GLOBAL] = { true, INSTR_FMT_IB },
    [DELETE_GLOBAL] = { true, INSTR_FMT_IB },
    [LOAD_NAME] = { true, INSTR_FMT_IB },
    [LOAD_GLOBAL] = { true, INSTR_FMT_IBC000 },
    [LOAD_GLOBAL_MODULE] = { true, INSTR_FMT_IBC000 },
    [LOAD_GLOBAL_BUILTIN] = { true, INSTR_FMT_IBC000 },
    [DELETE_FAST] = { true, INSTR_FMT_IB },
    [MAKE_CELL] = { true, INSTR_FMT_IB },
    [DELETE_DEREF] = { true, INSTR_FMT_IB },
    [LOAD_CLASSDEREF] = { true, INSTR_FMT_IB },
    [LOAD_DEREF] = { true, INSTR_FMT_IB },
    [STORE_DEREF] = { true, INSTR_FMT_IB },
    [COPY_FREE_VARS] = { true, INSTR_FMT_IB },
    [BUILD_STRING] = { true, INSTR_FMT_IB },
    [BUILD_TUPLE] = { true, INSTR_FMT_IB },
    [BUILD_LIST] = { true, INSTR_FMT_IB },
    [LIST_EXTEND] = { true, INSTR_FMT_IB },
    [SET_UPDATE] = { true, INSTR_FMT_IB },
    [BUILD_SET] = { true, INSTR_FMT_IB },
    [BUILD_MAP] = { true, INSTR_FMT_IB },
    [SETUP_ANNOTATIONS] = { true, INSTR_FMT_IX },
    [BUILD_CONST_KEY_MAP] = { true, INSTR_FMT_IB },
    [DICT_UPDATE] = { true, INSTR_FMT_IB },
    [DICT_MERGE] = { true, INSTR_FMT_IB },
    [MAP_ADD] = { true, INSTR_FMT_IB },
    [LOAD_ATTR] = { true, INSTR_FMT_IBC00000000 },
    [LOAD_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IBC00000000 },
    [LOAD_ATTR_MODULE] = { true, INSTR_FMT_IBC00000000 },
    [LOAD_ATTR_WITH_HINT] = { true, INSTR_FMT_IBC00000000 },
    [LOAD_ATTR_SLOT] = { true, INSTR_FMT_IBC00000000 },
    [LOAD_ATTR_CLASS] = { true, INSTR_FMT_IBC00000000 },
    [LOAD_ATTR_PROPERTY] = { true, INSTR_FMT_IBC00000000 },
    [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = { true, INSTR_FMT_IBC00000000 },
    [STORE_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IXC000 },
    [STORE_ATTR_WITH_HINT] = { true, INSTR_FMT_IBC000 },
    [STORE_ATTR_SLOT] = { true, INSTR_FMT_IXC000 },
    [COMPARE_OP] = { true, INSTR_FMT_IBC },
    [COMPARE_OP_FLOAT] = { true, INSTR_FMT_IBC },
    [COMPARE_OP_INT] = { true, INSTR_FMT_IBC },
    [COMPARE_OP_STR] = { true, INSTR_FMT_IBC },
    [IS_OP] = { true, INSTR_FMT_IB },
    [CONTAINS_OP] = { true, INSTR_FMT_IB },
    [CHECK_EG_MATCH] = { true, INSTR_FMT_IX },
    [CHECK_EXC_MATCH] = { true, INSTR_FMT_IX },
    [IMPORT_NAME] = { true, INSTR_FMT_IB },
    [IMPORT_FROM] = { true, INSTR_FMT_IB },
    [JUMP_FORWARD] = { true, INSTR_FMT_IB },
    [JUMP_BACKWARD] = { true, INSTR_FMT_IB },
    [POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IB },
    [POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IB },
    [POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IB },
    [POP_JUMP_IF_NONE] = { true, INSTR_FMT_IB },
    [JUMP_BACKWARD_NO_INTERRUPT] = { true, INSTR_FMT_IB },
    [GET_LEN] = { true, INSTR_FMT_IX },
    [MATCH_CLASS] = { true, INSTR_FMT_IB },
    [MATCH_MAPPING] = { true, INSTR_FMT_IX },
    [MATCH_SEQUENCE] = { true, INSTR_FMT_IX },
    [MATCH_KEYS] = { true, INSTR_FMT_IX },
    [GET_ITER] = { true, INSTR_FMT_IX },
    [GET_YIELD_FROM_ITER] = { true, INSTR_FMT_IX },
    [FOR_ITER] = { true, INSTR_FMT_IBC },
    [FOR_ITER_LIST] = { true, INSTR_FMT_IBC },
    [FOR_ITER_TUPLE] = { true, INSTR_FMT_IBC },
    [FOR_ITER_RANGE] = { true, INSTR_FMT_IBC },
    [FOR_ITER_GEN] = { true, INSTR_FMT_IBC },
    [BEFORE_ASYNC_WITH] = { true, INSTR_FMT_IX },
    [BEFORE_WITH] = { true, INSTR_FMT_IX },
    [WITH_EXCEPT_START] = { true, INSTR_FMT_IX },
    [PUSH_EXC_INFO] = { true, INSTR_FMT_IX },
    [LOAD_ATTR_METHOD_WITH_VALUES] = { true, INSTR_FMT_IBC00000000 },
    [LOAD_ATTR_METHOD_NO_DICT] = { true, INSTR_FMT_IBC00000000 },
    [LOAD_ATTR_METHOD_LAZY_DICT] = { true, INSTR_FMT_IBC00000000 },
    [KW_NAMES] = { true, INSTR_FMT_IB },
    [CALL] = { true, INSTR_FMT_IBC000 },
    [CALL_BOUND_METHOD_EXACT_ARGS] = { true, INSTR_FMT_IBC000 },
    [CALL_PY_EXACT_ARGS] = { true, INSTR_FMT_IBC000 },
    [CALL_PY_WITH_DEFAULTS] = { true, INSTR_FMT_IBC000 },
    [CALL_NO_KW_TYPE_1] = { true, INSTR_FMT_IBC000 },
    [CALL_NO_KW_STR_1] = { true, INSTR_FMT_IBC000 },
    [CALL_NO_KW_TUPLE_1] = { true, INSTR_FMT_IBC000 },
    [CALL_BUILTIN_CLASS] = { true, INSTR_FMT_IBC000 },
    [CALL_NO_KW_BUILTIN_O] = { true, INSTR_FMT_IBC000 },
    [CALL_NO_KW_BUILTIN_FAST] = { true, INSTR_FMT_IBC000 },
    [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC000 },
    [CALL_NO_KW_LEN] = { true, INSTR_FMT_IBC000 },
    [CALL_NO_KW_ISINSTANCE] = { true, INSTR_FMT_IBC000 },
    [CALL_NO_KW_LIST_APPEND] = { true, INSTR_FMT_IBC000 },
    [CALL_NO_KW_METHOD_DESCRIPTOR_O] = { true, INSTR_FMT_IBC000 },
    [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC000 },
    [CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = { true, INSTR_FMT_IBC000 },
    [CALL_NO_KW_METHOD_DESCRIPTOR_FAST] = { true, INSTR_FMT_IBC000 },
    [CALL_FUNCTION_EX] = { true, INSTR_FMT_IB },
    [MAKE_FUNCTION] = { true, INSTR_FMT_IB },
    [RETURN_GENERATOR] = { true, INSTR_FMT_IX },
    [BUILD_SLICE] = { true, INSTR_FMT_IB },
    [FORMAT_VALUE] = { true, INSTR_FMT_IB },
    [COPY] = { true, INSTR_FMT_IB },
    [BINARY_OP] = { true, INSTR_FMT_IBC },
    [SWAP] = { true, INSTR_FMT_IB },
    [EXTENDED_ARG] = { true, INSTR_FMT_IB },
    [CACHE] = { true, INSTR_FMT_IX },
};
#endif
