// 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 INSTRUMENTED_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 INSTRUMENTED_END_FOR:
            return 2;
        case END_SEND:
            return 2;
        case INSTRUMENTED_END_SEND:
            return 2;
        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 INSTRUMENTED_RETURN_VALUE:
            return 1;
        case RETURN_CONST:
            return 0;
        case INSTRUMENTED_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 INSTRUMENTED_YIELD_VALUE:
            return 1;
        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_SUPER_ATTR:
            return 3;
        case LOAD_SUPER_ATTR_METHOD:
            return 3;
        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 INSTRUMENTED_FOR_ITER:
            return 0;
        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 INSTRUMENTED_CALL:
            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 INSTRUMENTED_CALL_FUNCTION_EX:
            return 0;
        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 INSTRUMENTED_LINE:
            return 0;
        case INSTRUMENTED_INSTRUCTION:
            return 0;
        case INSTRUMENTED_JUMP_FORWARD:
            return 0;
        case INSTRUMENTED_JUMP_BACKWARD:
            return 0;
        case INSTRUMENTED_POP_JUMP_IF_TRUE:
            return 0;
        case INSTRUMENTED_POP_JUMP_IF_FALSE:
            return 0;
        case INSTRUMENTED_POP_JUMP_IF_NONE:
            return 0;
        case INSTRUMENTED_POP_JUMP_IF_NOT_NONE:
            return 0;
        case EXTENDED_ARG:
            return 0;
        case CACHE:
            return 0;
        case RESERVED:
            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 INSTRUMENTED_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 INSTRUMENTED_END_FOR:
            return 0;
        case END_SEND:
            return 1;
        case INSTRUMENTED_END_SEND:
            return 1;
        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 INSTRUMENTED_RETURN_VALUE:
            return 0;
        case RETURN_CONST:
            return 0;
        case INSTRUMENTED_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 INSTRUMENTED_YIELD_VALUE:
            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_SUPER_ATTR:
            return ((oparg & 1) ? 1 : 0) + 1;
        case LOAD_SUPER_ATTR_METHOD:
            return 2;
        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 INSTRUMENTED_FOR_ITER:
            return 0;
        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 INSTRUMENTED_CALL:
            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 INSTRUMENTED_CALL_FUNCTION_EX:
            return 0;
        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 INSTRUMENTED_LINE:
            return 0;
        case INSTRUMENTED_INSTRUCTION:
            return 0;
        case INSTRUMENTED_JUMP_FORWARD:
            return 0;
        case INSTRUMENTED_JUMP_BACKWARD:
            return 0;
        case INSTRUMENTED_POP_JUMP_IF_TRUE:
            return 0;
        case INSTRUMENTED_POP_JUMP_IF_FALSE:
            return 0;
        case INSTRUMENTED_POP_JUMP_IF_NONE:
            return 0;
        case INSTRUMENTED_POP_JUMP_IF_NOT_NONE:
            return 0;
        case EXTENDED_ARG:
            return 0;
        case CACHE:
            return 0;
        case RESERVED:
            return 0;
        default:
            return -1;
    }
}
#endif

enum InstructionFormat { INSTR_FMT_IB, INSTR_FMT_IBC, INSTR_FMT_IBC00, INSTR_FMT_IBC000, INSTR_FMT_IBC00000000, INSTR_FMT_IBIB, INSTR_FMT_IX, INSTR_FMT_IXC, INSTR_FMT_IXC000, INSTR_FMT_IXC00000000 };
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 },
    [INSTRUMENTED_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 },
    [INSTRUMENTED_END_FOR] = { true, INSTR_FMT_IX },
    [END_SEND] = { true, INSTR_FMT_IX },
    [INSTRUMENTED_END_SEND] = { true, INSTR_FMT_IX },
    [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 },
    [INSTRUMENTED_RETURN_VALUE] = { true, INSTR_FMT_IX },
    [RETURN_CONST] = { true, INSTR_FMT_IB },
    [INSTRUMENTED_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 },
    [INSTRUMENTED_YIELD_VALUE] = { true, INSTR_FMT_IX },
    [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_SUPER_ATTR] = { true, INSTR_FMT_IBC00000000 },
    [LOAD_SUPER_ATTR_METHOD] = { true, INSTR_FMT_IXC00000000 },
    [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 },
    [INSTRUMENTED_FOR_ITER] = { true, INSTR_FMT_IB },
    [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 },
    [INSTRUMENTED_CALL] = { true, INSTR_FMT_IB },
    [CALL] = { true, INSTR_FMT_IBC00 },
    [CALL_BOUND_METHOD_EXACT_ARGS] = { true, INSTR_FMT_IBC00 },
    [CALL_PY_EXACT_ARGS] = { true, INSTR_FMT_IBC00 },
    [CALL_PY_WITH_DEFAULTS] = { true, INSTR_FMT_IBC00 },
    [CALL_NO_KW_TYPE_1] = { true, INSTR_FMT_IBC00 },
    [CALL_NO_KW_STR_1] = { true, INSTR_FMT_IBC00 },
    [CALL_NO_KW_TUPLE_1] = { true, INSTR_FMT_IBC00 },
    [CALL_BUILTIN_CLASS] = { true, INSTR_FMT_IBC00 },
    [CALL_NO_KW_BUILTIN_O] = { true, INSTR_FMT_IBC00 },
    [CALL_NO_KW_BUILTIN_FAST] = { true, INSTR_FMT_IBC00 },
    [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00 },
    [CALL_NO_KW_LEN] = { true, INSTR_FMT_IBC00 },
    [CALL_NO_KW_ISINSTANCE] = { true, INSTR_FMT_IBC00 },
    [CALL_NO_KW_LIST_APPEND] = { true, INSTR_FMT_IBC00 },
    [CALL_NO_KW_METHOD_DESCRIPTOR_O] = { true, INSTR_FMT_IBC00 },
    [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00 },
    [CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = { true, INSTR_FMT_IBC00 },
    [CALL_NO_KW_METHOD_DESCRIPTOR_FAST] = { true, INSTR_FMT_IBC00 },
    [INSTRUMENTED_CALL_FUNCTION_EX] = { true, INSTR_FMT_IX },
    [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 },
    [INSTRUMENTED_LINE] = { true, INSTR_FMT_IX },
    [INSTRUMENTED_INSTRUCTION] = { true, INSTR_FMT_IX },
    [INSTRUMENTED_JUMP_FORWARD] = { true, INSTR_FMT_IB },
    [INSTRUMENTED_JUMP_BACKWARD] = { true, INSTR_FMT_IB },
    [INSTRUMENTED_POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IB },
    [INSTRUMENTED_POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IB },
    [INSTRUMENTED_POP_JUMP_IF_NONE] = { true, INSTR_FMT_IB },
    [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IB },
    [EXTENDED_ARG] = { true, INSTR_FMT_IB },
    [CACHE] = { true, INSTR_FMT_IX },
    [RESERVED] = { true, INSTR_FMT_IX },
};
#endif
