This PR changes the current JIT model from trace projection to trace recording. Benchmarking: better pyperformance (about 1.7% overall) geomean versus current https://raw.githubusercontent.com/facebookexperimental/free-threading-benchmarking/refs/heads/main/results/bm-20251108-3.15.0a1%2B-7e2bc1d-JIT/bm-20251108-vultr-x86_64-Fidget%252dSpinner-tracing_jit-3.15.0a1%2B-7e2bc1d-vs-base.svg, 100% faster Richards on the most improved benchmark versus the current JIT. Slowdown of about 10-15% on the worst benchmark versus the current JIT. **Note: the fastest version isn't the one merged, as it relies on fixing bugs in the specializing interpreter, which is left to another PR**. The speedup in the merged version is about 1.1%. https://raw.githubusercontent.com/facebookexperimental/free-threading-benchmarking/refs/heads/main/results/bm-20251112-3.15.0a1%2B-f8a764a-JIT/bm-20251112-vultr-x86_64-Fidget%252dSpinner-tracing_jit-3.15.0a1%2B-f8a764a-vs-base.svg Stats: 50% more uops executed, 30% more traces entered the last time we ran them. It also suggests our trace lengths for a real trace recording JIT are too short, as a lot of trace too long aborts https://github.com/facebookexperimental/free-threading-benchmarking/blob/main/results/bm-20251023-3.15.0a1%2B-eb73378-CLANG%2CJIT/bm-20251023-vultr-x86_64-Fidget%252dSpinner-tracing_jit-3.15.0a1%2B-eb73378-pystats-vs-base.md . This new JIT frontend is already able to record/execute significantly more instructions than the previous JIT frontend. In this PR, we are now able to record through custom dunders, simple object creation, generators, etc. None of these were done by the old JIT frontend. Some custom dunders uops were discovered to be broken as part of this work gh-140277 The optimizer stack space check is disabled, as it's no longer valid to deal with underflow. Pros: * Ignoring the generated tracer code as it's automatically created, this is only additional 1k lines of code. The maintenance burden is handled by the DSL and code generator. * `optimizer.c` is now significantly simpler, as we don't have to do strange things to recover the bytecode from a trace. * The new JIT frontend is able to handle a lot more control-flow than the old one. * Tracing is very low overhead. We use the tail calling interpreter/computed goto interpreter to switch between tracing mode and non-tracing mode. I call this mechanism dual dispatch, as we have two dispatch tables dispatching to each other. Specialization is still enabled while tracing. * Better handling of polymorphism. We leverage the specializing interpreter for this. Cons: * (For now) requires tail calling interpreter or computed gotos. This means no Windows JIT for now :(. Not to fret, tail calling is coming soon to Windows though https://github.com/python/cpython/pull/139962 Design: * After each instruction, the `record_previous_inst` function/label is executed. This does as the name suggests. * The tracing interpreter lowers bytecode to uops directly so that it can obtain "fresh" values at the point of lowering. * The tracing version behaves nearly identical to the normal interpreter, in fact it even has specialization! This allows it to run without much of a slowdown when tracing. The actual cost of tracing is only a function call and writes to memory. * The tracing interpreter uses the specializing interpreter's deopt to naturally form the side exit chains. This allows it to side exit chain effectively, without repeating much code. We force a re-specializing when tracing a deopt. * The tracing interpreter can even handle goto errors/exceptions, but I chose to disable them for now as it's not tested. * Because we do not share interpreter dispatch, there is should be no significant slowdown to the original specializing interpreter on tailcall and computed got with JIT disabled. With JIT enabled, there might be a slowdown in the form of the JIT trying to trace. * Things that could have dynamic instruction pointer effects are guarded on. The guard deopts to a new instruction --- `_DYNAMIC_EXIT`.
2112 lines
99 KiB
C
Generated
2112 lines
99 KiB
C
Generated
// This file is generated by Tools/cases_generator/opcode_metadata_generator.py
|
|
// from:
|
|
// Python/bytecodes.c
|
|
// Do not edit!
|
|
|
|
#ifndef Py_CORE_OPCODE_METADATA_H
|
|
#define Py_CORE_OPCODE_METADATA_H
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef Py_BUILD_CORE
|
|
# error "this header requires Py_BUILD_CORE define"
|
|
#endif
|
|
|
|
#include <stdbool.h> // bool
|
|
#include "opcode_ids.h"
|
|
|
|
|
|
#define IS_PSEUDO_INSTR(OP) ( \
|
|
((OP) == LOAD_CLOSURE) || \
|
|
((OP) == STORE_FAST_MAYBE_NULL) || \
|
|
((OP) == ANNOTATIONS_PLACEHOLDER) || \
|
|
((OP) == JUMP) || \
|
|
((OP) == JUMP_NO_INTERRUPT) || \
|
|
((OP) == JUMP_IF_FALSE) || \
|
|
((OP) == JUMP_IF_TRUE) || \
|
|
((OP) == SETUP_FINALLY) || \
|
|
((OP) == SETUP_CLEANUP) || \
|
|
((OP) == SETUP_WITH) || \
|
|
((OP) == POP_BLOCK) || \
|
|
0)
|
|
|
|
#include "pycore_uop_ids.h"
|
|
extern int _PyOpcode_num_popped(int opcode, int oparg);
|
|
#ifdef NEED_OPCODE_METADATA
|
|
int _PyOpcode_num_popped(int opcode, int oparg) {
|
|
switch(opcode) {
|
|
case ANNOTATIONS_PLACEHOLDER:
|
|
return 0;
|
|
case BINARY_OP:
|
|
return 2;
|
|
case BINARY_OP_ADD_FLOAT:
|
|
return 2;
|
|
case BINARY_OP_ADD_INT:
|
|
return 2;
|
|
case BINARY_OP_ADD_UNICODE:
|
|
return 2;
|
|
case BINARY_OP_EXTEND:
|
|
return 2;
|
|
case BINARY_OP_INPLACE_ADD_UNICODE:
|
|
return 2;
|
|
case BINARY_OP_MULTIPLY_FLOAT:
|
|
return 2;
|
|
case BINARY_OP_MULTIPLY_INT:
|
|
return 2;
|
|
case BINARY_OP_SUBSCR_DICT:
|
|
return 2;
|
|
case BINARY_OP_SUBSCR_GETITEM:
|
|
return 2;
|
|
case BINARY_OP_SUBSCR_LIST_INT:
|
|
return 2;
|
|
case BINARY_OP_SUBSCR_LIST_SLICE:
|
|
return 2;
|
|
case BINARY_OP_SUBSCR_STR_INT:
|
|
return 2;
|
|
case BINARY_OP_SUBSCR_TUPLE_INT:
|
|
return 2;
|
|
case BINARY_OP_SUBTRACT_FLOAT:
|
|
return 2;
|
|
case BINARY_OP_SUBTRACT_INT:
|
|
return 2;
|
|
case BINARY_SLICE:
|
|
return 3;
|
|
case BUILD_INTERPOLATION:
|
|
return 2 + (oparg & 1);
|
|
case BUILD_LIST:
|
|
return oparg;
|
|
case BUILD_MAP:
|
|
return oparg*2;
|
|
case BUILD_SET:
|
|
return oparg;
|
|
case BUILD_SLICE:
|
|
return oparg;
|
|
case BUILD_STRING:
|
|
return oparg;
|
|
case BUILD_TEMPLATE:
|
|
return 2;
|
|
case BUILD_TUPLE:
|
|
return oparg;
|
|
case CACHE:
|
|
return 0;
|
|
case CALL:
|
|
return 2 + oparg;
|
|
case CALL_ALLOC_AND_ENTER_INIT:
|
|
return 2 + oparg;
|
|
case CALL_BOUND_METHOD_EXACT_ARGS:
|
|
return 2 + oparg;
|
|
case CALL_BOUND_METHOD_GENERAL:
|
|
return 2 + oparg;
|
|
case CALL_BUILTIN_CLASS:
|
|
return 2 + oparg;
|
|
case CALL_BUILTIN_FAST:
|
|
return 2 + oparg;
|
|
case CALL_BUILTIN_FAST_WITH_KEYWORDS:
|
|
return 2 + oparg;
|
|
case CALL_BUILTIN_O:
|
|
return 2 + oparg;
|
|
case CALL_FUNCTION_EX:
|
|
return 4;
|
|
case CALL_INTRINSIC_1:
|
|
return 1;
|
|
case CALL_INTRINSIC_2:
|
|
return 2;
|
|
case CALL_ISINSTANCE:
|
|
return 4;
|
|
case CALL_KW:
|
|
return 3 + oparg;
|
|
case CALL_KW_BOUND_METHOD:
|
|
return 3 + oparg;
|
|
case CALL_KW_NON_PY:
|
|
return 3 + oparg;
|
|
case CALL_KW_PY:
|
|
return 3 + oparg;
|
|
case CALL_LEN:
|
|
return 3;
|
|
case CALL_LIST_APPEND:
|
|
return 3;
|
|
case CALL_METHOD_DESCRIPTOR_FAST:
|
|
return 2 + oparg;
|
|
case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS:
|
|
return 2 + oparg;
|
|
case CALL_METHOD_DESCRIPTOR_NOARGS:
|
|
return 2 + oparg;
|
|
case CALL_METHOD_DESCRIPTOR_O:
|
|
return 2 + oparg;
|
|
case CALL_NON_PY_GENERAL:
|
|
return 2 + oparg;
|
|
case CALL_PY_EXACT_ARGS:
|
|
return 2 + oparg;
|
|
case CALL_PY_GENERAL:
|
|
return 2 + oparg;
|
|
case CALL_STR_1:
|
|
return 3;
|
|
case CALL_TUPLE_1:
|
|
return 3;
|
|
case CALL_TYPE_1:
|
|
return 3;
|
|
case CHECK_EG_MATCH:
|
|
return 2;
|
|
case CHECK_EXC_MATCH:
|
|
return 2;
|
|
case CLEANUP_THROW:
|
|
return 3;
|
|
case COMPARE_OP:
|
|
return 2;
|
|
case COMPARE_OP_FLOAT:
|
|
return 2;
|
|
case COMPARE_OP_INT:
|
|
return 2;
|
|
case COMPARE_OP_STR:
|
|
return 2;
|
|
case CONTAINS_OP:
|
|
return 2;
|
|
case CONTAINS_OP_DICT:
|
|
return 2;
|
|
case CONTAINS_OP_SET:
|
|
return 2;
|
|
case CONVERT_VALUE:
|
|
return 1;
|
|
case COPY:
|
|
return 1 + (oparg-1);
|
|
case COPY_FREE_VARS:
|
|
return 0;
|
|
case DELETE_ATTR:
|
|
return 1;
|
|
case DELETE_DEREF:
|
|
return 0;
|
|
case DELETE_FAST:
|
|
return 0;
|
|
case DELETE_GLOBAL:
|
|
return 0;
|
|
case DELETE_NAME:
|
|
return 0;
|
|
case DELETE_SUBSCR:
|
|
return 2;
|
|
case DICT_MERGE:
|
|
return 5 + (oparg - 1);
|
|
case DICT_UPDATE:
|
|
return 2 + (oparg - 1);
|
|
case END_ASYNC_FOR:
|
|
return 2;
|
|
case END_FOR:
|
|
return 1;
|
|
case END_SEND:
|
|
return 2;
|
|
case ENTER_EXECUTOR:
|
|
return 0;
|
|
case EXIT_INIT_CHECK:
|
|
return 1;
|
|
case EXTENDED_ARG:
|
|
return 0;
|
|
case FORMAT_SIMPLE:
|
|
return 1;
|
|
case FORMAT_WITH_SPEC:
|
|
return 2;
|
|
case FOR_ITER:
|
|
return 2;
|
|
case FOR_ITER_GEN:
|
|
return 2;
|
|
case FOR_ITER_LIST:
|
|
return 2;
|
|
case FOR_ITER_RANGE:
|
|
return 2;
|
|
case FOR_ITER_TUPLE:
|
|
return 2;
|
|
case GET_AITER:
|
|
return 1;
|
|
case GET_ANEXT:
|
|
return 1;
|
|
case GET_AWAITABLE:
|
|
return 1;
|
|
case GET_ITER:
|
|
return 1;
|
|
case GET_LEN:
|
|
return 1;
|
|
case GET_YIELD_FROM_ITER:
|
|
return 1;
|
|
case IMPORT_FROM:
|
|
return 1;
|
|
case IMPORT_NAME:
|
|
return 2;
|
|
case INSTRUMENTED_CALL:
|
|
return 2 + oparg;
|
|
case INSTRUMENTED_CALL_FUNCTION_EX:
|
|
return 4;
|
|
case INSTRUMENTED_CALL_KW:
|
|
return 3 + oparg;
|
|
case INSTRUMENTED_END_ASYNC_FOR:
|
|
return 2;
|
|
case INSTRUMENTED_END_FOR:
|
|
return 3;
|
|
case INSTRUMENTED_END_SEND:
|
|
return 2;
|
|
case INSTRUMENTED_FOR_ITER:
|
|
return 2;
|
|
case INSTRUMENTED_INSTRUCTION:
|
|
return 0;
|
|
case INSTRUMENTED_JUMP_BACKWARD:
|
|
return 0;
|
|
case INSTRUMENTED_JUMP_FORWARD:
|
|
return 0;
|
|
case INSTRUMENTED_LINE:
|
|
return 0;
|
|
case INSTRUMENTED_LOAD_SUPER_ATTR:
|
|
return 3;
|
|
case INSTRUMENTED_NOT_TAKEN:
|
|
return 0;
|
|
case INSTRUMENTED_POP_ITER:
|
|
return 2;
|
|
case INSTRUMENTED_POP_JUMP_IF_FALSE:
|
|
return 1;
|
|
case INSTRUMENTED_POP_JUMP_IF_NONE:
|
|
return 1;
|
|
case INSTRUMENTED_POP_JUMP_IF_NOT_NONE:
|
|
return 1;
|
|
case INSTRUMENTED_POP_JUMP_IF_TRUE:
|
|
return 1;
|
|
case INSTRUMENTED_RESUME:
|
|
return 0;
|
|
case INSTRUMENTED_RETURN_VALUE:
|
|
return 1;
|
|
case INSTRUMENTED_YIELD_VALUE:
|
|
return 1;
|
|
case INTERPRETER_EXIT:
|
|
return 1;
|
|
case IS_OP:
|
|
return 2;
|
|
case JUMP:
|
|
return 0;
|
|
case JUMP_BACKWARD:
|
|
return 0;
|
|
case JUMP_BACKWARD_JIT:
|
|
return 0;
|
|
case JUMP_BACKWARD_NO_INTERRUPT:
|
|
return 0;
|
|
case JUMP_BACKWARD_NO_JIT:
|
|
return 0;
|
|
case JUMP_FORWARD:
|
|
return 0;
|
|
case JUMP_IF_FALSE:
|
|
return 1;
|
|
case JUMP_IF_TRUE:
|
|
return 1;
|
|
case JUMP_NO_INTERRUPT:
|
|
return 0;
|
|
case LIST_APPEND:
|
|
return 2 + (oparg-1);
|
|
case LIST_EXTEND:
|
|
return 2 + (oparg-1);
|
|
case LOAD_ATTR:
|
|
return 1;
|
|
case LOAD_ATTR_CLASS:
|
|
return 1;
|
|
case LOAD_ATTR_CLASS_WITH_METACLASS_CHECK:
|
|
return 1;
|
|
case LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN:
|
|
return 1;
|
|
case LOAD_ATTR_INSTANCE_VALUE:
|
|
return 1;
|
|
case LOAD_ATTR_METHOD_LAZY_DICT:
|
|
return 1;
|
|
case LOAD_ATTR_METHOD_NO_DICT:
|
|
return 1;
|
|
case LOAD_ATTR_METHOD_WITH_VALUES:
|
|
return 1;
|
|
case LOAD_ATTR_MODULE:
|
|
return 1;
|
|
case LOAD_ATTR_NONDESCRIPTOR_NO_DICT:
|
|
return 1;
|
|
case LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES:
|
|
return 1;
|
|
case LOAD_ATTR_PROPERTY:
|
|
return 1;
|
|
case LOAD_ATTR_SLOT:
|
|
return 1;
|
|
case LOAD_ATTR_WITH_HINT:
|
|
return 1;
|
|
case LOAD_BUILD_CLASS:
|
|
return 0;
|
|
case LOAD_CLOSURE:
|
|
return 0;
|
|
case LOAD_COMMON_CONSTANT:
|
|
return 0;
|
|
case LOAD_CONST:
|
|
return 0;
|
|
case LOAD_DEREF:
|
|
return 0;
|
|
case LOAD_FAST:
|
|
return 0;
|
|
case LOAD_FAST_AND_CLEAR:
|
|
return 0;
|
|
case LOAD_FAST_BORROW:
|
|
return 0;
|
|
case LOAD_FAST_BORROW_LOAD_FAST_BORROW:
|
|
return 0;
|
|
case LOAD_FAST_CHECK:
|
|
return 0;
|
|
case LOAD_FAST_LOAD_FAST:
|
|
return 0;
|
|
case LOAD_FROM_DICT_OR_DEREF:
|
|
return 1;
|
|
case LOAD_FROM_DICT_OR_GLOBALS:
|
|
return 1;
|
|
case LOAD_GLOBAL:
|
|
return 0;
|
|
case LOAD_GLOBAL_BUILTIN:
|
|
return 0;
|
|
case LOAD_GLOBAL_MODULE:
|
|
return 0;
|
|
case LOAD_LOCALS:
|
|
return 0;
|
|
case LOAD_NAME:
|
|
return 0;
|
|
case LOAD_SMALL_INT:
|
|
return 0;
|
|
case LOAD_SPECIAL:
|
|
return 1;
|
|
case LOAD_SUPER_ATTR:
|
|
return 3;
|
|
case LOAD_SUPER_ATTR_ATTR:
|
|
return 3;
|
|
case LOAD_SUPER_ATTR_METHOD:
|
|
return 3;
|
|
case MAKE_CELL:
|
|
return 0;
|
|
case MAKE_FUNCTION:
|
|
return 1;
|
|
case MAP_ADD:
|
|
return 3 + (oparg - 1);
|
|
case MATCH_CLASS:
|
|
return 3;
|
|
case MATCH_KEYS:
|
|
return 2;
|
|
case MATCH_MAPPING:
|
|
return 1;
|
|
case MATCH_SEQUENCE:
|
|
return 1;
|
|
case NOP:
|
|
return 0;
|
|
case NOT_TAKEN:
|
|
return 0;
|
|
case POP_BLOCK:
|
|
return 0;
|
|
case POP_EXCEPT:
|
|
return 1;
|
|
case POP_ITER:
|
|
return 2;
|
|
case POP_JUMP_IF_FALSE:
|
|
return 1;
|
|
case POP_JUMP_IF_NONE:
|
|
return 1;
|
|
case POP_JUMP_IF_NOT_NONE:
|
|
return 1;
|
|
case POP_JUMP_IF_TRUE:
|
|
return 1;
|
|
case POP_TOP:
|
|
return 1;
|
|
case PUSH_EXC_INFO:
|
|
return 1;
|
|
case PUSH_NULL:
|
|
return 0;
|
|
case RAISE_VARARGS:
|
|
return oparg;
|
|
case RERAISE:
|
|
return 1 + oparg;
|
|
case RESERVED:
|
|
return 0;
|
|
case RESUME:
|
|
return 0;
|
|
case RESUME_CHECK:
|
|
return 0;
|
|
case RETURN_GENERATOR:
|
|
return 0;
|
|
case RETURN_VALUE:
|
|
return 1;
|
|
case SEND:
|
|
return 2;
|
|
case SEND_GEN:
|
|
return 2;
|
|
case SETUP_ANNOTATIONS:
|
|
return 0;
|
|
case SETUP_CLEANUP:
|
|
return 0;
|
|
case SETUP_FINALLY:
|
|
return 0;
|
|
case SETUP_WITH:
|
|
return 0;
|
|
case SET_ADD:
|
|
return 2 + (oparg-1);
|
|
case SET_FUNCTION_ATTRIBUTE:
|
|
return 2;
|
|
case SET_UPDATE:
|
|
return 2 + (oparg-1);
|
|
case STORE_ATTR:
|
|
return 2;
|
|
case STORE_ATTR_INSTANCE_VALUE:
|
|
return 2;
|
|
case STORE_ATTR_SLOT:
|
|
return 2;
|
|
case STORE_ATTR_WITH_HINT:
|
|
return 2;
|
|
case STORE_DEREF:
|
|
return 1;
|
|
case STORE_FAST:
|
|
return 1;
|
|
case STORE_FAST_LOAD_FAST:
|
|
return 1;
|
|
case STORE_FAST_MAYBE_NULL:
|
|
return 1;
|
|
case STORE_FAST_STORE_FAST:
|
|
return 2;
|
|
case STORE_GLOBAL:
|
|
return 1;
|
|
case STORE_NAME:
|
|
return 1;
|
|
case STORE_SLICE:
|
|
return 4;
|
|
case STORE_SUBSCR:
|
|
return 3;
|
|
case STORE_SUBSCR_DICT:
|
|
return 3;
|
|
case STORE_SUBSCR_LIST_INT:
|
|
return 3;
|
|
case SWAP:
|
|
return 2 + (oparg-2);
|
|
case TO_BOOL:
|
|
return 1;
|
|
case TO_BOOL_ALWAYS_TRUE:
|
|
return 1;
|
|
case TO_BOOL_BOOL:
|
|
return 1;
|
|
case TO_BOOL_INT:
|
|
return 1;
|
|
case TO_BOOL_LIST:
|
|
return 1;
|
|
case TO_BOOL_NONE:
|
|
return 1;
|
|
case TO_BOOL_STR:
|
|
return 1;
|
|
case UNARY_INVERT:
|
|
return 1;
|
|
case UNARY_NEGATIVE:
|
|
return 1;
|
|
case UNARY_NOT:
|
|
return 1;
|
|
case UNPACK_EX:
|
|
return 1;
|
|
case UNPACK_SEQUENCE:
|
|
return 1;
|
|
case UNPACK_SEQUENCE_LIST:
|
|
return 1;
|
|
case UNPACK_SEQUENCE_TUPLE:
|
|
return 1;
|
|
case UNPACK_SEQUENCE_TWO_TUPLE:
|
|
return 1;
|
|
case WITH_EXCEPT_START:
|
|
return 5;
|
|
case YIELD_VALUE:
|
|
return 1;
|
|
default:
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
extern int _PyOpcode_num_pushed(int opcode, int oparg);
|
|
#ifdef NEED_OPCODE_METADATA
|
|
int _PyOpcode_num_pushed(int opcode, int oparg) {
|
|
switch(opcode) {
|
|
case ANNOTATIONS_PLACEHOLDER:
|
|
return 0;
|
|
case BINARY_OP:
|
|
return 1;
|
|
case BINARY_OP_ADD_FLOAT:
|
|
return 1;
|
|
case BINARY_OP_ADD_INT:
|
|
return 1;
|
|
case BINARY_OP_ADD_UNICODE:
|
|
return 1;
|
|
case BINARY_OP_EXTEND:
|
|
return 1;
|
|
case BINARY_OP_INPLACE_ADD_UNICODE:
|
|
return 0;
|
|
case BINARY_OP_MULTIPLY_FLOAT:
|
|
return 1;
|
|
case BINARY_OP_MULTIPLY_INT:
|
|
return 1;
|
|
case BINARY_OP_SUBSCR_DICT:
|
|
return 1;
|
|
case BINARY_OP_SUBSCR_GETITEM:
|
|
return 0;
|
|
case BINARY_OP_SUBSCR_LIST_INT:
|
|
return 1;
|
|
case BINARY_OP_SUBSCR_LIST_SLICE:
|
|
return 1;
|
|
case BINARY_OP_SUBSCR_STR_INT:
|
|
return 1;
|
|
case BINARY_OP_SUBSCR_TUPLE_INT:
|
|
return 1;
|
|
case BINARY_OP_SUBTRACT_FLOAT:
|
|
return 1;
|
|
case BINARY_OP_SUBTRACT_INT:
|
|
return 1;
|
|
case BINARY_SLICE:
|
|
return 1;
|
|
case BUILD_INTERPOLATION:
|
|
return 1;
|
|
case BUILD_LIST:
|
|
return 1;
|
|
case BUILD_MAP:
|
|
return 1;
|
|
case BUILD_SET:
|
|
return 1;
|
|
case BUILD_SLICE:
|
|
return 1;
|
|
case BUILD_STRING:
|
|
return 1;
|
|
case BUILD_TEMPLATE:
|
|
return 1;
|
|
case BUILD_TUPLE:
|
|
return 1;
|
|
case CACHE:
|
|
return 0;
|
|
case CALL:
|
|
return 1;
|
|
case CALL_ALLOC_AND_ENTER_INIT:
|
|
return 0;
|
|
case CALL_BOUND_METHOD_EXACT_ARGS:
|
|
return 0;
|
|
case CALL_BOUND_METHOD_GENERAL:
|
|
return 0;
|
|
case CALL_BUILTIN_CLASS:
|
|
return 1;
|
|
case CALL_BUILTIN_FAST:
|
|
return 1;
|
|
case CALL_BUILTIN_FAST_WITH_KEYWORDS:
|
|
return 1;
|
|
case CALL_BUILTIN_O:
|
|
return 1;
|
|
case CALL_FUNCTION_EX:
|
|
return 1;
|
|
case CALL_INTRINSIC_1:
|
|
return 1;
|
|
case CALL_INTRINSIC_2:
|
|
return 1;
|
|
case CALL_ISINSTANCE:
|
|
return 1;
|
|
case CALL_KW:
|
|
return 1;
|
|
case CALL_KW_BOUND_METHOD:
|
|
return 0;
|
|
case CALL_KW_NON_PY:
|
|
return 1;
|
|
case CALL_KW_PY:
|
|
return 0;
|
|
case CALL_LEN:
|
|
return 1;
|
|
case CALL_LIST_APPEND:
|
|
return 0;
|
|
case CALL_METHOD_DESCRIPTOR_FAST:
|
|
return 1;
|
|
case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS:
|
|
return 1;
|
|
case CALL_METHOD_DESCRIPTOR_NOARGS:
|
|
return 1;
|
|
case CALL_METHOD_DESCRIPTOR_O:
|
|
return 1;
|
|
case CALL_NON_PY_GENERAL:
|
|
return 1;
|
|
case CALL_PY_EXACT_ARGS:
|
|
return 0;
|
|
case CALL_PY_GENERAL:
|
|
return 0;
|
|
case CALL_STR_1:
|
|
return 1;
|
|
case CALL_TUPLE_1:
|
|
return 1;
|
|
case CALL_TYPE_1:
|
|
return 1;
|
|
case CHECK_EG_MATCH:
|
|
return 2;
|
|
case CHECK_EXC_MATCH:
|
|
return 2;
|
|
case CLEANUP_THROW:
|
|
return 2;
|
|
case COMPARE_OP:
|
|
return 1;
|
|
case COMPARE_OP_FLOAT:
|
|
return 1;
|
|
case COMPARE_OP_INT:
|
|
return 1;
|
|
case COMPARE_OP_STR:
|
|
return 1;
|
|
case CONTAINS_OP:
|
|
return 1;
|
|
case CONTAINS_OP_DICT:
|
|
return 1;
|
|
case CONTAINS_OP_SET:
|
|
return 1;
|
|
case CONVERT_VALUE:
|
|
return 1;
|
|
case COPY:
|
|
return 2 + (oparg-1);
|
|
case COPY_FREE_VARS:
|
|
return 0;
|
|
case DELETE_ATTR:
|
|
return 0;
|
|
case DELETE_DEREF:
|
|
return 0;
|
|
case DELETE_FAST:
|
|
return 0;
|
|
case DELETE_GLOBAL:
|
|
return 0;
|
|
case DELETE_NAME:
|
|
return 0;
|
|
case DELETE_SUBSCR:
|
|
return 0;
|
|
case DICT_MERGE:
|
|
return 4 + (oparg - 1);
|
|
case DICT_UPDATE:
|
|
return 1 + (oparg - 1);
|
|
case END_ASYNC_FOR:
|
|
return 0;
|
|
case END_FOR:
|
|
return 0;
|
|
case END_SEND:
|
|
return 1;
|
|
case ENTER_EXECUTOR:
|
|
return 0;
|
|
case EXIT_INIT_CHECK:
|
|
return 0;
|
|
case EXTENDED_ARG:
|
|
return 0;
|
|
case FORMAT_SIMPLE:
|
|
return 1;
|
|
case FORMAT_WITH_SPEC:
|
|
return 1;
|
|
case FOR_ITER:
|
|
return 3;
|
|
case FOR_ITER_GEN:
|
|
return 2;
|
|
case FOR_ITER_LIST:
|
|
return 3;
|
|
case FOR_ITER_RANGE:
|
|
return 3;
|
|
case FOR_ITER_TUPLE:
|
|
return 3;
|
|
case GET_AITER:
|
|
return 1;
|
|
case GET_ANEXT:
|
|
return 2;
|
|
case GET_AWAITABLE:
|
|
return 1;
|
|
case GET_ITER:
|
|
return 2;
|
|
case GET_LEN:
|
|
return 2;
|
|
case GET_YIELD_FROM_ITER:
|
|
return 1;
|
|
case IMPORT_FROM:
|
|
return 2;
|
|
case IMPORT_NAME:
|
|
return 1;
|
|
case INSTRUMENTED_CALL:
|
|
return 1;
|
|
case INSTRUMENTED_CALL_FUNCTION_EX:
|
|
return 1;
|
|
case INSTRUMENTED_CALL_KW:
|
|
return 1;
|
|
case INSTRUMENTED_END_ASYNC_FOR:
|
|
return 0;
|
|
case INSTRUMENTED_END_FOR:
|
|
return 2;
|
|
case INSTRUMENTED_END_SEND:
|
|
return 1;
|
|
case INSTRUMENTED_FOR_ITER:
|
|
return 3;
|
|
case INSTRUMENTED_INSTRUCTION:
|
|
return 0;
|
|
case INSTRUMENTED_JUMP_BACKWARD:
|
|
return 0;
|
|
case INSTRUMENTED_JUMP_FORWARD:
|
|
return 0;
|
|
case INSTRUMENTED_LINE:
|
|
return 0;
|
|
case INSTRUMENTED_LOAD_SUPER_ATTR:
|
|
return 1 + (oparg & 1);
|
|
case INSTRUMENTED_NOT_TAKEN:
|
|
return 0;
|
|
case INSTRUMENTED_POP_ITER:
|
|
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 INSTRUMENTED_POP_JUMP_IF_TRUE:
|
|
return 0;
|
|
case INSTRUMENTED_RESUME:
|
|
return 0;
|
|
case INSTRUMENTED_RETURN_VALUE:
|
|
return 1;
|
|
case INSTRUMENTED_YIELD_VALUE:
|
|
return 1;
|
|
case INTERPRETER_EXIT:
|
|
return 0;
|
|
case IS_OP:
|
|
return 1;
|
|
case JUMP:
|
|
return 0;
|
|
case JUMP_BACKWARD:
|
|
return 0;
|
|
case JUMP_BACKWARD_JIT:
|
|
return 0;
|
|
case JUMP_BACKWARD_NO_INTERRUPT:
|
|
return 0;
|
|
case JUMP_BACKWARD_NO_JIT:
|
|
return 0;
|
|
case JUMP_FORWARD:
|
|
return 0;
|
|
case JUMP_IF_FALSE:
|
|
return 1;
|
|
case JUMP_IF_TRUE:
|
|
return 1;
|
|
case JUMP_NO_INTERRUPT:
|
|
return 0;
|
|
case LIST_APPEND:
|
|
return 1 + (oparg-1);
|
|
case LIST_EXTEND:
|
|
return 1 + (oparg-1);
|
|
case LOAD_ATTR:
|
|
return 1 + (oparg&1);
|
|
case LOAD_ATTR_CLASS:
|
|
return 1 + (oparg & 1);
|
|
case LOAD_ATTR_CLASS_WITH_METACLASS_CHECK:
|
|
return 1 + (oparg & 1);
|
|
case LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN:
|
|
return 1;
|
|
case LOAD_ATTR_INSTANCE_VALUE:
|
|
return 1 + (oparg & 1);
|
|
case LOAD_ATTR_METHOD_LAZY_DICT:
|
|
return 2;
|
|
case LOAD_ATTR_METHOD_NO_DICT:
|
|
return 2;
|
|
case LOAD_ATTR_METHOD_WITH_VALUES:
|
|
return 2;
|
|
case LOAD_ATTR_MODULE:
|
|
return 1 + (oparg & 1);
|
|
case LOAD_ATTR_NONDESCRIPTOR_NO_DICT:
|
|
return 1;
|
|
case LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES:
|
|
return 1;
|
|
case LOAD_ATTR_PROPERTY:
|
|
return 0;
|
|
case LOAD_ATTR_SLOT:
|
|
return 1 + (oparg & 1);
|
|
case LOAD_ATTR_WITH_HINT:
|
|
return 1 + (oparg & 1);
|
|
case LOAD_BUILD_CLASS:
|
|
return 1;
|
|
case LOAD_CLOSURE:
|
|
return 1;
|
|
case LOAD_COMMON_CONSTANT:
|
|
return 1;
|
|
case LOAD_CONST:
|
|
return 1;
|
|
case LOAD_DEREF:
|
|
return 1;
|
|
case LOAD_FAST:
|
|
return 1;
|
|
case LOAD_FAST_AND_CLEAR:
|
|
return 1;
|
|
case LOAD_FAST_BORROW:
|
|
return 1;
|
|
case LOAD_FAST_BORROW_LOAD_FAST_BORROW:
|
|
return 2;
|
|
case LOAD_FAST_CHECK:
|
|
return 1;
|
|
case LOAD_FAST_LOAD_FAST:
|
|
return 2;
|
|
case LOAD_FROM_DICT_OR_DEREF:
|
|
return 1;
|
|
case LOAD_FROM_DICT_OR_GLOBALS:
|
|
return 1;
|
|
case LOAD_GLOBAL:
|
|
return 1 + (oparg & 1);
|
|
case LOAD_GLOBAL_BUILTIN:
|
|
return 1 + (oparg & 1);
|
|
case LOAD_GLOBAL_MODULE:
|
|
return 1 + (oparg & 1);
|
|
case LOAD_LOCALS:
|
|
return 1;
|
|
case LOAD_NAME:
|
|
return 1;
|
|
case LOAD_SMALL_INT:
|
|
return 1;
|
|
case LOAD_SPECIAL:
|
|
return 2;
|
|
case LOAD_SUPER_ATTR:
|
|
return 1 + (oparg & 1);
|
|
case LOAD_SUPER_ATTR_ATTR:
|
|
return 1;
|
|
case LOAD_SUPER_ATTR_METHOD:
|
|
return 2;
|
|
case MAKE_CELL:
|
|
return 0;
|
|
case MAKE_FUNCTION:
|
|
return 1;
|
|
case MAP_ADD:
|
|
return 1 + (oparg - 1);
|
|
case MATCH_CLASS:
|
|
return 1;
|
|
case MATCH_KEYS:
|
|
return 3;
|
|
case MATCH_MAPPING:
|
|
return 2;
|
|
case MATCH_SEQUENCE:
|
|
return 2;
|
|
case NOP:
|
|
return 0;
|
|
case NOT_TAKEN:
|
|
return 0;
|
|
case POP_BLOCK:
|
|
return 0;
|
|
case POP_EXCEPT:
|
|
return 0;
|
|
case POP_ITER:
|
|
return 0;
|
|
case POP_JUMP_IF_FALSE:
|
|
return 0;
|
|
case POP_JUMP_IF_NONE:
|
|
return 0;
|
|
case POP_JUMP_IF_NOT_NONE:
|
|
return 0;
|
|
case POP_JUMP_IF_TRUE:
|
|
return 0;
|
|
case POP_TOP:
|
|
return 0;
|
|
case PUSH_EXC_INFO:
|
|
return 2;
|
|
case PUSH_NULL:
|
|
return 1;
|
|
case RAISE_VARARGS:
|
|
return 0;
|
|
case RERAISE:
|
|
return oparg;
|
|
case RESERVED:
|
|
return 0;
|
|
case RESUME:
|
|
return 0;
|
|
case RESUME_CHECK:
|
|
return 0;
|
|
case RETURN_GENERATOR:
|
|
return 1;
|
|
case RETURN_VALUE:
|
|
return 1;
|
|
case SEND:
|
|
return 2;
|
|
case SEND_GEN:
|
|
return 1;
|
|
case SETUP_ANNOTATIONS:
|
|
return 0;
|
|
case SETUP_CLEANUP:
|
|
return 2;
|
|
case SETUP_FINALLY:
|
|
return 1;
|
|
case SETUP_WITH:
|
|
return 1;
|
|
case SET_ADD:
|
|
return 1 + (oparg-1);
|
|
case SET_FUNCTION_ATTRIBUTE:
|
|
return 1;
|
|
case SET_UPDATE:
|
|
return 1 + (oparg-1);
|
|
case STORE_ATTR:
|
|
return 0;
|
|
case STORE_ATTR_INSTANCE_VALUE:
|
|
return 0;
|
|
case STORE_ATTR_SLOT:
|
|
return 0;
|
|
case STORE_ATTR_WITH_HINT:
|
|
return 0;
|
|
case STORE_DEREF:
|
|
return 0;
|
|
case STORE_FAST:
|
|
return 0;
|
|
case STORE_FAST_LOAD_FAST:
|
|
return 1;
|
|
case STORE_FAST_MAYBE_NULL:
|
|
return 0;
|
|
case STORE_FAST_STORE_FAST:
|
|
return 0;
|
|
case STORE_GLOBAL:
|
|
return 0;
|
|
case STORE_NAME:
|
|
return 0;
|
|
case STORE_SLICE:
|
|
return 0;
|
|
case STORE_SUBSCR:
|
|
return 0;
|
|
case STORE_SUBSCR_DICT:
|
|
return 0;
|
|
case STORE_SUBSCR_LIST_INT:
|
|
return 0;
|
|
case SWAP:
|
|
return 2 + (oparg-2);
|
|
case TO_BOOL:
|
|
return 1;
|
|
case TO_BOOL_ALWAYS_TRUE:
|
|
return 1;
|
|
case TO_BOOL_BOOL:
|
|
return 1;
|
|
case TO_BOOL_INT:
|
|
return 1;
|
|
case TO_BOOL_LIST:
|
|
return 1;
|
|
case TO_BOOL_NONE:
|
|
return 1;
|
|
case TO_BOOL_STR:
|
|
return 1;
|
|
case UNARY_INVERT:
|
|
return 1;
|
|
case UNARY_NEGATIVE:
|
|
return 1;
|
|
case UNARY_NOT:
|
|
return 1;
|
|
case UNPACK_EX:
|
|
return 1 + (oparg & 0xFF) + (oparg >> 8);
|
|
case UNPACK_SEQUENCE:
|
|
return oparg;
|
|
case UNPACK_SEQUENCE_LIST:
|
|
return oparg;
|
|
case UNPACK_SEQUENCE_TUPLE:
|
|
return oparg;
|
|
case UNPACK_SEQUENCE_TWO_TUPLE:
|
|
return 2;
|
|
case WITH_EXCEPT_START:
|
|
return 6;
|
|
case YIELD_VALUE:
|
|
return 1;
|
|
default:
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
enum InstructionFormat {
|
|
INSTR_FMT_IB = 1,
|
|
INSTR_FMT_IBC = 2,
|
|
INSTR_FMT_IBC00 = 3,
|
|
INSTR_FMT_IBC000 = 4,
|
|
INSTR_FMT_IBC0000 = 5,
|
|
INSTR_FMT_IBC00000000 = 6,
|
|
INSTR_FMT_IX = 7,
|
|
INSTR_FMT_IXC = 8,
|
|
INSTR_FMT_IXC00 = 9,
|
|
INSTR_FMT_IXC000 = 10,
|
|
INSTR_FMT_IXC0000 = 11,
|
|
};
|
|
|
|
#define IS_VALID_OPCODE(OP) \
|
|
(((OP) >= 0) && ((OP) < 267) && \
|
|
(_PyOpcode_opcode_metadata[(OP)].valid_entry))
|
|
|
|
#define HAS_ARG_FLAG (1)
|
|
#define HAS_CONST_FLAG (2)
|
|
#define HAS_NAME_FLAG (4)
|
|
#define HAS_JUMP_FLAG (8)
|
|
#define HAS_FREE_FLAG (16)
|
|
#define HAS_LOCAL_FLAG (32)
|
|
#define HAS_EVAL_BREAK_FLAG (64)
|
|
#define HAS_DEOPT_FLAG (128)
|
|
#define HAS_ERROR_FLAG (256)
|
|
#define HAS_ESCAPES_FLAG (512)
|
|
#define HAS_EXIT_FLAG (1024)
|
|
#define HAS_PURE_FLAG (2048)
|
|
#define HAS_ERROR_NO_POP_FLAG (4096)
|
|
#define HAS_NO_SAVE_IP_FLAG (8192)
|
|
#define HAS_PERIODIC_FLAG (16384)
|
|
#define HAS_UNPREDICTABLE_JUMP_FLAG (32768)
|
|
#define HAS_NEEDS_GUARD_IP_FLAG (65536)
|
|
#define OPCODE_HAS_ARG(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ARG_FLAG))
|
|
#define OPCODE_HAS_CONST(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_CONST_FLAG))
|
|
#define OPCODE_HAS_NAME(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_NAME_FLAG))
|
|
#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
|
|
#define OPCODE_HAS_FREE(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_FREE_FLAG))
|
|
#define OPCODE_HAS_LOCAL(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_LOCAL_FLAG))
|
|
#define OPCODE_HAS_EVAL_BREAK(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_EVAL_BREAK_FLAG))
|
|
#define OPCODE_HAS_DEOPT(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_DEOPT_FLAG))
|
|
#define OPCODE_HAS_ERROR(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ERROR_FLAG))
|
|
#define OPCODE_HAS_ESCAPES(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ESCAPES_FLAG))
|
|
#define OPCODE_HAS_EXIT(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_EXIT_FLAG))
|
|
#define OPCODE_HAS_PURE(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_PURE_FLAG))
|
|
#define OPCODE_HAS_ERROR_NO_POP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ERROR_NO_POP_FLAG))
|
|
#define OPCODE_HAS_NO_SAVE_IP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_NO_SAVE_IP_FLAG))
|
|
#define OPCODE_HAS_PERIODIC(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_PERIODIC_FLAG))
|
|
#define OPCODE_HAS_UNPREDICTABLE_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_UNPREDICTABLE_JUMP_FLAG))
|
|
#define OPCODE_HAS_NEEDS_GUARD_IP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_NEEDS_GUARD_IP_FLAG))
|
|
|
|
#define OPARG_SIMPLE 0
|
|
#define OPARG_CACHE_1 1
|
|
#define OPARG_CACHE_2 2
|
|
#define OPARG_CACHE_4 4
|
|
#define OPARG_TOP 5
|
|
#define OPARG_BOTTOM 6
|
|
#define OPARG_SAVE_RETURN_OFFSET 7
|
|
#define OPARG_REPLACED 9
|
|
#define OPERAND1_1 10
|
|
#define OPERAND1_2 11
|
|
#define OPERAND1_4 12
|
|
|
|
struct opcode_metadata {
|
|
uint8_t valid_entry;
|
|
uint8_t instr_format;
|
|
uint32_t flags;
|
|
};
|
|
|
|
extern const struct opcode_metadata _PyOpcode_opcode_metadata[267];
|
|
#ifdef NEED_OPCODE_METADATA
|
|
const struct opcode_metadata _PyOpcode_opcode_metadata[267] = {
|
|
[BINARY_OP] = { true, INSTR_FMT_IBC0000, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[BINARY_OP_ADD_FLOAT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
|
|
[BINARY_OP_ADD_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG },
|
|
[BINARY_OP_ADD_UNICODE] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
|
|
[BINARY_OP_EXTEND] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG },
|
|
[BINARY_OP_INPLACE_ADD_UNICODE] = { true, INSTR_FMT_IXC0000, HAS_LOCAL_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[BINARY_OP_MULTIPLY_FLOAT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
|
|
[BINARY_OP_MULTIPLY_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG },
|
|
[BINARY_OP_SUBSCR_DICT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[BINARY_OP_SUBSCR_GETITEM] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[BINARY_OP_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[BINARY_OP_SUBSCR_LIST_SLICE] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[BINARY_OP_SUBSCR_STR_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[BINARY_OP_SUBSCR_TUPLE_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[BINARY_OP_SUBTRACT_FLOAT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
|
|
[BINARY_OP_SUBTRACT_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG },
|
|
[BINARY_SLICE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[BUILD_INTERPOLATION] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[BUILD_LIST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[BUILD_MAP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[BUILD_SET] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[BUILD_SLICE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[BUILD_STRING] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[BUILD_TEMPLATE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[BUILD_TUPLE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG },
|
|
[CACHE] = { true, INSTR_FMT_IX, 0 },
|
|
[CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[CALL_ALLOC_AND_ENTER_INIT] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[CALL_BOUND_METHOD_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[CALL_BOUND_METHOD_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[CALL_BUILTIN_CLASS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_BUILTIN_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_BUILTIN_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_BUILTIN_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[CALL_INTRINSIC_1] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_INTRINSIC_2] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_ISINSTANCE] = { true, INSTR_FMT_IXC00, HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_KW] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[CALL_KW_BOUND_METHOD] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[CALL_KW_NON_PY] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_KW_PY] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[CALL_LEN] = { true, INSTR_FMT_IXC00, HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_LIST_APPEND] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_METHOD_DESCRIPTOR_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_METHOD_DESCRIPTOR_NOARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_METHOD_DESCRIPTOR_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_NON_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_PY_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[CALL_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[CALL_STR_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_TUPLE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CALL_TYPE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG },
|
|
[CHECK_EG_MATCH] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CHECK_EXC_MATCH] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[CLEANUP_THROW] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[COMPARE_OP] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[COMPARE_OP_FLOAT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EXIT_FLAG },
|
|
[COMPARE_OP_INT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EXIT_FLAG },
|
|
[COMPARE_OP_STR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EXIT_FLAG },
|
|
[CONTAINS_OP] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CONTAINS_OP_DICT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CONTAINS_OP_SET] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[CONVERT_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[COPY] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_PURE_FLAG },
|
|
[COPY_FREE_VARS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
|
|
[DELETE_ATTR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[DELETE_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[DELETE_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[DELETE_GLOBAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[DELETE_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[DELETE_SUBSCR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[DICT_MERGE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[DICT_UPDATE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[END_ASYNC_FOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[END_FOR] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG | HAS_NO_SAVE_IP_FLAG },
|
|
[END_SEND] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG | HAS_PURE_FLAG },
|
|
[ENTER_EXECUTOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
|
|
[EXIT_INIT_CHECK] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[EXTENDED_ARG] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
|
|
[FORMAT_SIMPLE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[FORMAT_WITH_SPEC] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[FOR_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG },
|
|
[FOR_ITER_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[FOR_ITER_LIST] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG },
|
|
[FOR_ITER_RANGE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG },
|
|
[FOR_ITER_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG },
|
|
[GET_AITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[GET_ANEXT] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[GET_AWAITABLE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[GET_ITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[GET_LEN] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[GET_YIELD_FROM_ITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[IMPORT_FROM] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[IMPORT_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[INSTRUMENTED_CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[INSTRUMENTED_CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[INSTRUMENTED_CALL_KW] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[INSTRUMENTED_END_ASYNC_FOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[INSTRUMENTED_END_FOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NO_SAVE_IP_FLAG },
|
|
[INSTRUMENTED_END_SEND] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[INSTRUMENTED_FOR_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[INSTRUMENTED_INSTRUCTION] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[INSTRUMENTED_JUMP_BACKWARD] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[INSTRUMENTED_JUMP_FORWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
|
|
[INSTRUMENTED_LINE] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG },
|
|
[INSTRUMENTED_LOAD_SUPER_ATTR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[INSTRUMENTED_NOT_TAKEN] = { true, INSTR_FMT_IX, 0 },
|
|
[INSTRUMENTED_POP_ITER] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG },
|
|
[INSTRUMENTED_POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
|
|
[INSTRUMENTED_POP_JUMP_IF_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ESCAPES_FLAG },
|
|
[INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ESCAPES_FLAG },
|
|
[INSTRUMENTED_POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
|
|
[INSTRUMENTED_RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[INSTRUMENTED_RETURN_VALUE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[INSTRUMENTED_YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[INTERPRETER_EXIT] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG },
|
|
[IS_OP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ESCAPES_FLAG },
|
|
[JUMP_BACKWARD] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[JUMP_BACKWARD_JIT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[JUMP_BACKWARD_NO_INTERRUPT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
|
|
[JUMP_BACKWARD_NO_JIT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[JUMP_FORWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
|
|
[LIST_APPEND] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
|
|
[LIST_EXTEND] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_ATTR] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_ATTR_CLASS] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[LOAD_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_ATTR_METHOD_LAZY_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
|
|
[LOAD_ATTR_METHOD_NO_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG },
|
|
[LOAD_ATTR_METHOD_WITH_VALUES] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
|
|
[LOAD_ATTR_MODULE] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_ATTR_PROPERTY] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[LOAD_ATTR_SLOT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_ATTR_WITH_HINT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_BUILD_CLASS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_COMMON_CONSTANT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
|
|
[LOAD_CONST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_CONST_FLAG },
|
|
[LOAD_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG },
|
|
[LOAD_FAST_AND_CLEAR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG },
|
|
[LOAD_FAST_BORROW] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG },
|
|
[LOAD_FAST_BORROW_LOAD_FAST_BORROW] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG },
|
|
[LOAD_FAST_CHECK] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG },
|
|
[LOAD_FAST_LOAD_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG },
|
|
[LOAD_FROM_DICT_OR_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_FROM_DICT_OR_GLOBALS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_GLOBAL] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_GLOBAL_BUILTIN] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
|
|
[LOAD_GLOBAL_MODULE] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
|
|
[LOAD_LOCALS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG },
|
|
[LOAD_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_SMALL_INT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
|
|
[LOAD_SPECIAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_SUPER_ATTR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_SUPER_ATTR_ATTR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[LOAD_SUPER_ATTR_METHOD] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[MAKE_CELL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[MAKE_FUNCTION] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[MAP_ADD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[MATCH_CLASS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[MATCH_KEYS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[MATCH_MAPPING] = { true, INSTR_FMT_IX, 0 },
|
|
[MATCH_SEQUENCE] = { true, INSTR_FMT_IX, 0 },
|
|
[NOP] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
|
|
[NOT_TAKEN] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
|
|
[POP_EXCEPT] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG },
|
|
[POP_ITER] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG },
|
|
[POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
|
|
[POP_JUMP_IF_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ESCAPES_FLAG },
|
|
[POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ESCAPES_FLAG },
|
|
[POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
|
|
[POP_TOP] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG | HAS_PURE_FLAG },
|
|
[PUSH_EXC_INFO] = { true, INSTR_FMT_IX, 0 },
|
|
[PUSH_NULL] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
|
|
[RAISE_VARARGS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG },
|
|
[RERAISE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[RESERVED] = { true, INSTR_FMT_IX, 0 },
|
|
[RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
|
[RESUME_CHECK] = { true, INSTR_FMT_IX, HAS_DEOPT_FLAG },
|
|
[RETURN_GENERATOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[RETURN_VALUE] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[SEND] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[SEND_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[SETUP_ANNOTATIONS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[SET_ADD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[SET_FUNCTION_ATTRIBUTE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
|
|
[SET_UPDATE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_ATTR] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IXC000, HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_ATTR_SLOT] = { true, INSTR_FMT_IXC000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_ATTR_WITH_HINT] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_FAST_LOAD_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_FAST_STORE_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_GLOBAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_SLICE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_SUBSCR] = { true, INSTR_FMT_IXC, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_SUBSCR_DICT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[STORE_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[SWAP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_PURE_FLAG },
|
|
[TO_BOOL] = { true, INSTR_FMT_IXC00, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[TO_BOOL_ALWAYS_TRUE] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[TO_BOOL_BOOL] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG },
|
|
[TO_BOOL_INT] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[TO_BOOL_LIST] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[TO_BOOL_NONE] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG },
|
|
[TO_BOOL_STR] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[UNARY_INVERT] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[UNARY_NEGATIVE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[UNARY_NOT] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
|
|
[UNPACK_EX] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[UNPACK_SEQUENCE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[UNPACK_SEQUENCE_LIST] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[UNPACK_SEQUENCE_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[UNPACK_SEQUENCE_TWO_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
|
[WITH_EXCEPT_START] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NEEDS_GUARD_IP_FLAG },
|
|
[ANNOTATIONS_PLACEHOLDER] = { true, -1, HAS_PURE_FLAG },
|
|
[JUMP] = { true, -1, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[JUMP_IF_FALSE] = { true, -1, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[JUMP_IF_TRUE] = { true, -1, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
|
[JUMP_NO_INTERRUPT] = { true, -1, HAS_ARG_FLAG | HAS_JUMP_FLAG },
|
|
[LOAD_CLOSURE] = { true, -1, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG },
|
|
[POP_BLOCK] = { true, -1, HAS_PURE_FLAG },
|
|
[SETUP_CLEANUP] = { true, -1, HAS_PURE_FLAG | HAS_ARG_FLAG },
|
|
[SETUP_FINALLY] = { true, -1, HAS_PURE_FLAG | HAS_ARG_FLAG },
|
|
[SETUP_WITH] = { true, -1, HAS_PURE_FLAG | HAS_ARG_FLAG },
|
|
[STORE_FAST_MAYBE_NULL] = { true, -1, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG },
|
|
};
|
|
#endif
|
|
|
|
#define MAX_UOP_PER_EXPANSION 10
|
|
struct opcode_macro_expansion {
|
|
int nuops;
|
|
struct { int16_t uop; int8_t size; int8_t offset; } uops[MAX_UOP_PER_EXPANSION];
|
|
};
|
|
extern const struct opcode_macro_expansion _PyOpcode_macro_expansion[256];
|
|
|
|
#ifdef NEED_OPCODE_METADATA
|
|
const struct opcode_macro_expansion
|
|
_PyOpcode_macro_expansion[256] = {
|
|
[BINARY_OP] = { .nuops = 1, .uops = { { _BINARY_OP, OPARG_SIMPLE, 4 } } },
|
|
[BINARY_OP_ADD_FLOAT] = { .nuops = 3, .uops = { { _GUARD_TOS_FLOAT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_FLOAT, OPARG_SIMPLE, 0 }, { _BINARY_OP_ADD_FLOAT, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_ADD_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_INT, OPARG_SIMPLE, 0 }, { _BINARY_OP_ADD_INT, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_ADD_UNICODE] = { .nuops = 3, .uops = { { _GUARD_TOS_UNICODE, OPARG_SIMPLE, 0 }, { _GUARD_NOS_UNICODE, OPARG_SIMPLE, 0 }, { _BINARY_OP_ADD_UNICODE, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_EXTEND] = { .nuops = 2, .uops = { { _GUARD_BINARY_OP_EXTEND, 4, 1 }, { _BINARY_OP_EXTEND, 4, 1 } } },
|
|
[BINARY_OP_INPLACE_ADD_UNICODE] = { .nuops = 3, .uops = { { _GUARD_TOS_UNICODE, OPARG_SIMPLE, 0 }, { _GUARD_NOS_UNICODE, OPARG_SIMPLE, 0 }, { _BINARY_OP_INPLACE_ADD_UNICODE, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_MULTIPLY_FLOAT] = { .nuops = 3, .uops = { { _GUARD_TOS_FLOAT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_FLOAT, OPARG_SIMPLE, 0 }, { _BINARY_OP_MULTIPLY_FLOAT, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_MULTIPLY_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_INT, OPARG_SIMPLE, 0 }, { _BINARY_OP_MULTIPLY_INT, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_SUBSCR_DICT] = { .nuops = 2, .uops = { { _GUARD_NOS_DICT, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBSCR_DICT, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_SUBSCR_GETITEM] = { .nuops = 4, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 5 }, { _BINARY_OP_SUBSCR_CHECK_FUNC, OPARG_SIMPLE, 5 }, { _BINARY_OP_SUBSCR_INIT_CALL, OPARG_SIMPLE, 5 }, { _PUSH_FRAME, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_SUBSCR_LIST_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_LIST, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBSCR_LIST_INT, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_SUBSCR_LIST_SLICE] = { .nuops = 3, .uops = { { _GUARD_TOS_SLICE, OPARG_SIMPLE, 0 }, { _GUARD_NOS_LIST, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBSCR_LIST_SLICE, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_SUBSCR_STR_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_UNICODE, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBSCR_STR_INT, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_SUBSCR_TUPLE_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_TUPLE, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBSCR_TUPLE_INT, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_SUBTRACT_FLOAT] = { .nuops = 3, .uops = { { _GUARD_TOS_FLOAT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_FLOAT, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBTRACT_FLOAT, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_OP_SUBTRACT_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_INT, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBTRACT_INT, OPARG_SIMPLE, 5 } } },
|
|
[BINARY_SLICE] = { .nuops = 1, .uops = { { _BINARY_SLICE, OPARG_SIMPLE, 0 } } },
|
|
[BUILD_INTERPOLATION] = { .nuops = 1, .uops = { { _BUILD_INTERPOLATION, OPARG_SIMPLE, 0 } } },
|
|
[BUILD_LIST] = { .nuops = 1, .uops = { { _BUILD_LIST, OPARG_SIMPLE, 0 } } },
|
|
[BUILD_MAP] = { .nuops = 1, .uops = { { _BUILD_MAP, OPARG_SIMPLE, 0 } } },
|
|
[BUILD_SET] = { .nuops = 1, .uops = { { _BUILD_SET, OPARG_SIMPLE, 0 } } },
|
|
[BUILD_SLICE] = { .nuops = 1, .uops = { { _BUILD_SLICE, OPARG_SIMPLE, 0 } } },
|
|
[BUILD_STRING] = { .nuops = 1, .uops = { { _BUILD_STRING, OPARG_SIMPLE, 0 } } },
|
|
[BUILD_TEMPLATE] = { .nuops = 1, .uops = { { _BUILD_TEMPLATE, OPARG_SIMPLE, 0 } } },
|
|
[BUILD_TUPLE] = { .nuops = 1, .uops = { { _BUILD_TUPLE, OPARG_SIMPLE, 0 } } },
|
|
[CALL_ALLOC_AND_ENTER_INIT] = { .nuops = 4, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_AND_ALLOCATE_OBJECT, 2, 1 }, { _CREATE_INIT_FRAME, OPARG_SIMPLE, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
|
|
[CALL_BOUND_METHOD_EXACT_ARGS] = { .nuops = 10, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS, OPARG_SIMPLE, 1 }, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _CHECK_FUNCTION_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _CHECK_STACK_SPACE, OPARG_SIMPLE, 3 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _INIT_CALL_PY_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
|
|
[CALL_BOUND_METHOD_GENERAL] = { .nuops = 7, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_METHOD_VERSION, 2, 1 }, { _EXPAND_METHOD, OPARG_SIMPLE, 3 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _PY_FRAME_GENERAL, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
|
|
[CALL_BUILTIN_CLASS] = { .nuops = 2, .uops = { { _CALL_BUILTIN_CLASS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
|
|
[CALL_BUILTIN_FAST] = { .nuops = 2, .uops = { { _CALL_BUILTIN_FAST, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
|
|
[CALL_BUILTIN_FAST_WITH_KEYWORDS] = { .nuops = 2, .uops = { { _CALL_BUILTIN_FAST_WITH_KEYWORDS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
|
|
[CALL_BUILTIN_O] = { .nuops = 2, .uops = { { _CALL_BUILTIN_O, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
|
|
[CALL_INTRINSIC_1] = { .nuops = 1, .uops = { { _CALL_INTRINSIC_1, OPARG_SIMPLE, 0 } } },
|
|
[CALL_INTRINSIC_2] = { .nuops = 1, .uops = { { _CALL_INTRINSIC_2, OPARG_SIMPLE, 0 } } },
|
|
[CALL_ISINSTANCE] = { .nuops = 3, .uops = { { _GUARD_THIRD_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_ISINSTANCE, OPARG_SIMPLE, 3 }, { _CALL_ISINSTANCE, OPARG_SIMPLE, 3 } } },
|
|
[CALL_KW_BOUND_METHOD] = { .nuops = 6, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_METHOD_VERSION_KW, 2, 1 }, { _EXPAND_METHOD_KW, OPARG_SIMPLE, 3 }, { _PY_FRAME_KW, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
|
|
[CALL_KW_NON_PY] = { .nuops = 3, .uops = { { _CHECK_IS_NOT_PY_CALLABLE_KW, OPARG_SIMPLE, 3 }, { _CALL_KW_NON_PY, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
|
|
[CALL_KW_PY] = { .nuops = 6, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION_KW, 2, 1 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _PY_FRAME_KW, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
|
|
[CALL_LEN] = { .nuops = 3, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_LEN, OPARG_SIMPLE, 3 }, { _CALL_LEN, OPARG_SIMPLE, 3 } } },
|
|
[CALL_LIST_APPEND] = { .nuops = 4, .uops = { { _GUARD_CALLABLE_LIST_APPEND, OPARG_SIMPLE, 3 }, { _GUARD_NOS_NOT_NULL, OPARG_SIMPLE, 3 }, { _GUARD_NOS_LIST, OPARG_SIMPLE, 3 }, { _CALL_LIST_APPEND, OPARG_SIMPLE, 3 } } },
|
|
[CALL_METHOD_DESCRIPTOR_FAST] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_FAST, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
|
|
[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
|
|
[CALL_METHOD_DESCRIPTOR_NOARGS] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_NOARGS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
|
|
[CALL_METHOD_DESCRIPTOR_O] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_O, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
|
|
[CALL_NON_PY_GENERAL] = { .nuops = 3, .uops = { { _CHECK_IS_NOT_PY_CALLABLE, OPARG_SIMPLE, 3 }, { _CALL_NON_PY_GENERAL, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
|
|
[CALL_PY_EXACT_ARGS] = { .nuops = 8, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _CHECK_FUNCTION_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _CHECK_STACK_SPACE, OPARG_SIMPLE, 3 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _INIT_CALL_PY_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
|
|
[CALL_PY_GENERAL] = { .nuops = 6, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _PY_FRAME_GENERAL, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
|
|
[CALL_STR_1] = { .nuops = 4, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_STR_1, OPARG_SIMPLE, 3 }, { _CALL_STR_1, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
|
|
[CALL_TUPLE_1] = { .nuops = 4, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_TUPLE_1, OPARG_SIMPLE, 3 }, { _CALL_TUPLE_1, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC_AT_END, OPARG_REPLACED, 3 } } },
|
|
[CALL_TYPE_1] = { .nuops = 3, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_TYPE_1, OPARG_SIMPLE, 3 }, { _CALL_TYPE_1, OPARG_SIMPLE, 3 } } },
|
|
[CHECK_EG_MATCH] = { .nuops = 1, .uops = { { _CHECK_EG_MATCH, OPARG_SIMPLE, 0 } } },
|
|
[CHECK_EXC_MATCH] = { .nuops = 1, .uops = { { _CHECK_EXC_MATCH, OPARG_SIMPLE, 0 } } },
|
|
[COMPARE_OP] = { .nuops = 1, .uops = { { _COMPARE_OP, OPARG_SIMPLE, 0 } } },
|
|
[COMPARE_OP_FLOAT] = { .nuops = 3, .uops = { { _GUARD_TOS_FLOAT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_FLOAT, OPARG_SIMPLE, 0 }, { _COMPARE_OP_FLOAT, OPARG_SIMPLE, 1 } } },
|
|
[COMPARE_OP_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_INT, OPARG_SIMPLE, 0 }, { _COMPARE_OP_INT, OPARG_SIMPLE, 1 } } },
|
|
[COMPARE_OP_STR] = { .nuops = 3, .uops = { { _GUARD_TOS_UNICODE, OPARG_SIMPLE, 0 }, { _GUARD_NOS_UNICODE, OPARG_SIMPLE, 0 }, { _COMPARE_OP_STR, OPARG_SIMPLE, 1 } } },
|
|
[CONTAINS_OP] = { .nuops = 1, .uops = { { _CONTAINS_OP, OPARG_SIMPLE, 0 } } },
|
|
[CONTAINS_OP_DICT] = { .nuops = 2, .uops = { { _GUARD_TOS_DICT, OPARG_SIMPLE, 0 }, { _CONTAINS_OP_DICT, OPARG_SIMPLE, 1 } } },
|
|
[CONTAINS_OP_SET] = { .nuops = 2, .uops = { { _GUARD_TOS_ANY_SET, OPARG_SIMPLE, 0 }, { _CONTAINS_OP_SET, OPARG_SIMPLE, 1 } } },
|
|
[CONVERT_VALUE] = { .nuops = 1, .uops = { { _CONVERT_VALUE, OPARG_SIMPLE, 0 } } },
|
|
[COPY] = { .nuops = 1, .uops = { { _COPY, OPARG_SIMPLE, 0 } } },
|
|
[COPY_FREE_VARS] = { .nuops = 1, .uops = { { _COPY_FREE_VARS, OPARG_SIMPLE, 0 } } },
|
|
[DELETE_ATTR] = { .nuops = 1, .uops = { { _DELETE_ATTR, OPARG_SIMPLE, 0 } } },
|
|
[DELETE_DEREF] = { .nuops = 1, .uops = { { _DELETE_DEREF, OPARG_SIMPLE, 0 } } },
|
|
[DELETE_FAST] = { .nuops = 1, .uops = { { _DELETE_FAST, OPARG_SIMPLE, 0 } } },
|
|
[DELETE_GLOBAL] = { .nuops = 1, .uops = { { _DELETE_GLOBAL, OPARG_SIMPLE, 0 } } },
|
|
[DELETE_NAME] = { .nuops = 1, .uops = { { _DELETE_NAME, OPARG_SIMPLE, 0 } } },
|
|
[DELETE_SUBSCR] = { .nuops = 1, .uops = { { _DELETE_SUBSCR, OPARG_SIMPLE, 0 } } },
|
|
[DICT_MERGE] = { .nuops = 1, .uops = { { _DICT_MERGE, OPARG_SIMPLE, 0 } } },
|
|
[DICT_UPDATE] = { .nuops = 1, .uops = { { _DICT_UPDATE, OPARG_SIMPLE, 0 } } },
|
|
[END_FOR] = { .nuops = 1, .uops = { { _END_FOR, OPARG_SIMPLE, 0 } } },
|
|
[END_SEND] = { .nuops = 1, .uops = { { _END_SEND, OPARG_SIMPLE, 0 } } },
|
|
[EXIT_INIT_CHECK] = { .nuops = 1, .uops = { { _EXIT_INIT_CHECK, OPARG_SIMPLE, 0 } } },
|
|
[FORMAT_SIMPLE] = { .nuops = 1, .uops = { { _FORMAT_SIMPLE, OPARG_SIMPLE, 0 } } },
|
|
[FORMAT_WITH_SPEC] = { .nuops = 1, .uops = { { _FORMAT_WITH_SPEC, OPARG_SIMPLE, 0 } } },
|
|
[FOR_ITER] = { .nuops = 1, .uops = { { _FOR_ITER, OPARG_REPLACED, 0 } } },
|
|
[FOR_ITER_GEN] = { .nuops = 3, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _FOR_ITER_GEN_FRAME, OPARG_SIMPLE, 1 }, { _PUSH_FRAME, OPARG_SIMPLE, 1 } } },
|
|
[FOR_ITER_LIST] = { .nuops = 3, .uops = { { _ITER_CHECK_LIST, OPARG_SIMPLE, 1 }, { _ITER_JUMP_LIST, OPARG_REPLACED, 1 }, { _ITER_NEXT_LIST, OPARG_REPLACED, 1 } } },
|
|
[FOR_ITER_RANGE] = { .nuops = 3, .uops = { { _ITER_CHECK_RANGE, OPARG_SIMPLE, 1 }, { _ITER_JUMP_RANGE, OPARG_REPLACED, 1 }, { _ITER_NEXT_RANGE, OPARG_SIMPLE, 1 } } },
|
|
[FOR_ITER_TUPLE] = { .nuops = 3, .uops = { { _ITER_CHECK_TUPLE, OPARG_SIMPLE, 1 }, { _ITER_JUMP_TUPLE, OPARG_REPLACED, 1 }, { _ITER_NEXT_TUPLE, OPARG_SIMPLE, 1 } } },
|
|
[GET_AITER] = { .nuops = 1, .uops = { { _GET_AITER, OPARG_SIMPLE, 0 } } },
|
|
[GET_ANEXT] = { .nuops = 1, .uops = { { _GET_ANEXT, OPARG_SIMPLE, 0 } } },
|
|
[GET_AWAITABLE] = { .nuops = 1, .uops = { { _GET_AWAITABLE, OPARG_SIMPLE, 0 } } },
|
|
[GET_ITER] = { .nuops = 1, .uops = { { _GET_ITER, OPARG_SIMPLE, 0 } } },
|
|
[GET_LEN] = { .nuops = 1, .uops = { { _GET_LEN, OPARG_SIMPLE, 0 } } },
|
|
[GET_YIELD_FROM_ITER] = { .nuops = 1, .uops = { { _GET_YIELD_FROM_ITER, OPARG_SIMPLE, 0 } } },
|
|
[IMPORT_FROM] = { .nuops = 1, .uops = { { _IMPORT_FROM, OPARG_SIMPLE, 0 } } },
|
|
[IMPORT_NAME] = { .nuops = 1, .uops = { { _IMPORT_NAME, OPARG_SIMPLE, 0 } } },
|
|
[IS_OP] = { .nuops = 1, .uops = { { _IS_OP, OPARG_SIMPLE, 0 } } },
|
|
[JUMP_BACKWARD] = { .nuops = 2, .uops = { { _CHECK_PERIODIC, OPARG_SIMPLE, 1 }, { _JUMP_BACKWARD_NO_INTERRUPT, OPARG_REPLACED, 1 } } },
|
|
[JUMP_BACKWARD_NO_INTERRUPT] = { .nuops = 1, .uops = { { _JUMP_BACKWARD_NO_INTERRUPT, OPARG_REPLACED, 0 } } },
|
|
[JUMP_BACKWARD_NO_JIT] = { .nuops = 2, .uops = { { _CHECK_PERIODIC, OPARG_SIMPLE, 1 }, { _JUMP_BACKWARD_NO_INTERRUPT, OPARG_REPLACED, 1 } } },
|
|
[LIST_APPEND] = { .nuops = 1, .uops = { { _LIST_APPEND, OPARG_SIMPLE, 0 } } },
|
|
[LIST_EXTEND] = { .nuops = 1, .uops = { { _LIST_EXTEND, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_ATTR] = { .nuops = 1, .uops = { { _LOAD_ATTR, OPARG_SIMPLE, 8 } } },
|
|
[LOAD_ATTR_CLASS] = { .nuops = 3, .uops = { { _CHECK_ATTR_CLASS, 2, 1 }, { _LOAD_ATTR_CLASS, 4, 5 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
|
[LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = { .nuops = 4, .uops = { { _CHECK_ATTR_CLASS, 2, 1 }, { _GUARD_TYPE_VERSION, 2, 3 }, { _LOAD_ATTR_CLASS, 4, 5 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
|
[LOAD_ATTR_INSTANCE_VALUE] = { .nuops = 4, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _CHECK_MANAGED_OBJECT_HAS_VALUES, OPARG_SIMPLE, 3 }, { _LOAD_ATTR_INSTANCE_VALUE, 1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
|
[LOAD_ATTR_METHOD_LAZY_DICT] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _CHECK_ATTR_METHOD_LAZY_DICT, 1, 3 }, { _LOAD_ATTR_METHOD_LAZY_DICT, 4, 5 } } },
|
|
[LOAD_ATTR_METHOD_NO_DICT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_METHOD_NO_DICT, 4, 5 } } },
|
|
[LOAD_ATTR_METHOD_WITH_VALUES] = { .nuops = 4, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT, OPARG_SIMPLE, 3 }, { _GUARD_KEYS_VERSION, 2, 3 }, { _LOAD_ATTR_METHOD_WITH_VALUES, 4, 5 } } },
|
|
[LOAD_ATTR_MODULE] = { .nuops = 3, .uops = { { _LOAD_ATTR_MODULE, 2, 1 }, { _LOAD_ATTR_MODULE, OPERAND1_1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
|
[LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_NONDESCRIPTOR_NO_DICT, 4, 5 } } },
|
|
[LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = { .nuops = 4, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT, OPARG_SIMPLE, 3 }, { _GUARD_KEYS_VERSION, 2, 3 }, { _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES, 4, 5 } } },
|
|
[LOAD_ATTR_PROPERTY] = { .nuops = 5, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_PROPERTY_FRAME, 4, 5 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 9 }, { _PUSH_FRAME, OPARG_SIMPLE, 9 } } },
|
|
[LOAD_ATTR_SLOT] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_SLOT, 1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
|
[LOAD_ATTR_WITH_HINT] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_WITH_HINT, 1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
|
[LOAD_BUILD_CLASS] = { .nuops = 1, .uops = { { _LOAD_BUILD_CLASS, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_COMMON_CONSTANT] = { .nuops = 1, .uops = { { _LOAD_COMMON_CONSTANT, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_CONST] = { .nuops = 1, .uops = { { _LOAD_CONST, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_DEREF] = { .nuops = 1, .uops = { { _LOAD_DEREF, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_FAST] = { .nuops = 1, .uops = { { _LOAD_FAST, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_FAST_AND_CLEAR] = { .nuops = 1, .uops = { { _LOAD_FAST_AND_CLEAR, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_FAST_BORROW] = { .nuops = 1, .uops = { { _LOAD_FAST_BORROW, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_FAST_BORROW_LOAD_FAST_BORROW] = { .nuops = 2, .uops = { { _LOAD_FAST_BORROW, OPARG_TOP, 0 }, { _LOAD_FAST_BORROW, OPARG_BOTTOM, 0 } } },
|
|
[LOAD_FAST_CHECK] = { .nuops = 1, .uops = { { _LOAD_FAST_CHECK, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_FAST_LOAD_FAST] = { .nuops = 2, .uops = { { _LOAD_FAST, OPARG_TOP, 0 }, { _LOAD_FAST, OPARG_BOTTOM, 0 } } },
|
|
[LOAD_FROM_DICT_OR_DEREF] = { .nuops = 1, .uops = { { _LOAD_FROM_DICT_OR_DEREF, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_GLOBAL] = { .nuops = 2, .uops = { { _LOAD_GLOBAL, OPARG_SIMPLE, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 3 } } },
|
|
[LOAD_GLOBAL_BUILTIN] = { .nuops = 4, .uops = { { _GUARD_GLOBALS_VERSION, 1, 1 }, { _LOAD_GLOBAL_BUILTINS, 1, 2 }, { _LOAD_GLOBAL_BUILTINS, OPERAND1_1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 4 } } },
|
|
[LOAD_GLOBAL_MODULE] = { .nuops = 4, .uops = { { _NOP, OPARG_SIMPLE, 1 }, { _LOAD_GLOBAL_MODULE, 1, 1 }, { _LOAD_GLOBAL_MODULE, OPERAND1_1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 4 } } },
|
|
[LOAD_LOCALS] = { .nuops = 1, .uops = { { _LOAD_LOCALS, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_NAME] = { .nuops = 1, .uops = { { _LOAD_NAME, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_SMALL_INT] = { .nuops = 1, .uops = { { _LOAD_SMALL_INT, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_SPECIAL] = { .nuops = 2, .uops = { { _INSERT_NULL, OPARG_SIMPLE, 0 }, { _LOAD_SPECIAL, OPARG_SIMPLE, 0 } } },
|
|
[LOAD_SUPER_ATTR_ATTR] = { .nuops = 1, .uops = { { _LOAD_SUPER_ATTR_ATTR, OPARG_SIMPLE, 1 } } },
|
|
[LOAD_SUPER_ATTR_METHOD] = { .nuops = 1, .uops = { { _LOAD_SUPER_ATTR_METHOD, OPARG_SIMPLE, 1 } } },
|
|
[MAKE_CELL] = { .nuops = 1, .uops = { { _MAKE_CELL, OPARG_SIMPLE, 0 } } },
|
|
[MAKE_FUNCTION] = { .nuops = 1, .uops = { { _MAKE_FUNCTION, OPARG_SIMPLE, 0 } } },
|
|
[MAP_ADD] = { .nuops = 1, .uops = { { _MAP_ADD, OPARG_SIMPLE, 0 } } },
|
|
[MATCH_CLASS] = { .nuops = 1, .uops = { { _MATCH_CLASS, OPARG_SIMPLE, 0 } } },
|
|
[MATCH_KEYS] = { .nuops = 1, .uops = { { _MATCH_KEYS, OPARG_SIMPLE, 0 } } },
|
|
[MATCH_MAPPING] = { .nuops = 1, .uops = { { _MATCH_MAPPING, OPARG_SIMPLE, 0 } } },
|
|
[MATCH_SEQUENCE] = { .nuops = 1, .uops = { { _MATCH_SEQUENCE, OPARG_SIMPLE, 0 } } },
|
|
[NOP] = { .nuops = 1, .uops = { { _NOP, OPARG_SIMPLE, 0 } } },
|
|
[NOT_TAKEN] = { .nuops = 1, .uops = { { _NOP, OPARG_SIMPLE, 0 } } },
|
|
[POP_EXCEPT] = { .nuops = 1, .uops = { { _POP_EXCEPT, OPARG_SIMPLE, 0 } } },
|
|
[POP_ITER] = { .nuops = 1, .uops = { { _POP_ITER, OPARG_SIMPLE, 0 } } },
|
|
[POP_JUMP_IF_FALSE] = { .nuops = 1, .uops = { { _POP_JUMP_IF_FALSE, OPARG_REPLACED, 1 } } },
|
|
[POP_JUMP_IF_NONE] = { .nuops = 2, .uops = { { _IS_NONE, OPARG_SIMPLE, 1 }, { _POP_JUMP_IF_TRUE, OPARG_REPLACED, 1 } } },
|
|
[POP_JUMP_IF_NOT_NONE] = { .nuops = 2, .uops = { { _IS_NONE, OPARG_SIMPLE, 1 }, { _POP_JUMP_IF_FALSE, OPARG_REPLACED, 1 } } },
|
|
[POP_JUMP_IF_TRUE] = { .nuops = 1, .uops = { { _POP_JUMP_IF_TRUE, OPARG_REPLACED, 1 } } },
|
|
[POP_TOP] = { .nuops = 1, .uops = { { _POP_TOP, OPARG_SIMPLE, 0 } } },
|
|
[PUSH_EXC_INFO] = { .nuops = 1, .uops = { { _PUSH_EXC_INFO, OPARG_SIMPLE, 0 } } },
|
|
[PUSH_NULL] = { .nuops = 1, .uops = { { _PUSH_NULL, OPARG_SIMPLE, 0 } } },
|
|
[RESUME_CHECK] = { .nuops = 1, .uops = { { _RESUME_CHECK, OPARG_SIMPLE, 0 } } },
|
|
[RETURN_GENERATOR] = { .nuops = 1, .uops = { { _RETURN_GENERATOR, OPARG_SIMPLE, 0 } } },
|
|
[RETURN_VALUE] = { .nuops = 1, .uops = { { _RETURN_VALUE, OPARG_SIMPLE, 0 } } },
|
|
[SEND_GEN] = { .nuops = 3, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _SEND_GEN_FRAME, OPARG_SIMPLE, 1 }, { _PUSH_FRAME, OPARG_SIMPLE, 1 } } },
|
|
[SETUP_ANNOTATIONS] = { .nuops = 1, .uops = { { _SETUP_ANNOTATIONS, OPARG_SIMPLE, 0 } } },
|
|
[SET_ADD] = { .nuops = 1, .uops = { { _SET_ADD, OPARG_SIMPLE, 0 } } },
|
|
[SET_FUNCTION_ATTRIBUTE] = { .nuops = 1, .uops = { { _SET_FUNCTION_ATTRIBUTE, OPARG_SIMPLE, 0 } } },
|
|
[SET_UPDATE] = { .nuops = 1, .uops = { { _SET_UPDATE, OPARG_SIMPLE, 0 } } },
|
|
[STORE_ATTR] = { .nuops = 1, .uops = { { _STORE_ATTR, OPARG_SIMPLE, 3 } } },
|
|
[STORE_ATTR_INSTANCE_VALUE] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION_AND_LOCK, 2, 1 }, { _GUARD_DORV_NO_DICT, OPARG_SIMPLE, 3 }, { _STORE_ATTR_INSTANCE_VALUE, 1, 3 } } },
|
|
[STORE_ATTR_SLOT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _STORE_ATTR_SLOT, 1, 3 } } },
|
|
[STORE_ATTR_WITH_HINT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _STORE_ATTR_WITH_HINT, 1, 3 } } },
|
|
[STORE_DEREF] = { .nuops = 1, .uops = { { _STORE_DEREF, OPARG_SIMPLE, 0 } } },
|
|
[STORE_FAST] = { .nuops = 1, .uops = { { _STORE_FAST, OPARG_SIMPLE, 0 } } },
|
|
[STORE_FAST_LOAD_FAST] = { .nuops = 2, .uops = { { _STORE_FAST, OPARG_TOP, 0 }, { _LOAD_FAST, OPARG_BOTTOM, 0 } } },
|
|
[STORE_FAST_STORE_FAST] = { .nuops = 2, .uops = { { _STORE_FAST, OPARG_TOP, 0 }, { _STORE_FAST, OPARG_BOTTOM, 0 } } },
|
|
[STORE_GLOBAL] = { .nuops = 1, .uops = { { _STORE_GLOBAL, OPARG_SIMPLE, 0 } } },
|
|
[STORE_NAME] = { .nuops = 1, .uops = { { _STORE_NAME, OPARG_SIMPLE, 0 } } },
|
|
[STORE_SLICE] = { .nuops = 1, .uops = { { _STORE_SLICE, OPARG_SIMPLE, 0 } } },
|
|
[STORE_SUBSCR] = { .nuops = 1, .uops = { { _STORE_SUBSCR, OPARG_SIMPLE, 0 } } },
|
|
[STORE_SUBSCR_DICT] = { .nuops = 2, .uops = { { _GUARD_NOS_DICT, OPARG_SIMPLE, 0 }, { _STORE_SUBSCR_DICT, OPARG_SIMPLE, 1 } } },
|
|
[STORE_SUBSCR_LIST_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_LIST, OPARG_SIMPLE, 0 }, { _STORE_SUBSCR_LIST_INT, OPARG_SIMPLE, 1 } } },
|
|
[SWAP] = { .nuops = 1, .uops = { { _SWAP, OPARG_SIMPLE, 0 } } },
|
|
[TO_BOOL] = { .nuops = 1, .uops = { { _TO_BOOL, OPARG_SIMPLE, 2 } } },
|
|
[TO_BOOL_ALWAYS_TRUE] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _REPLACE_WITH_TRUE, OPARG_SIMPLE, 3 } } },
|
|
[TO_BOOL_BOOL] = { .nuops = 1, .uops = { { _TO_BOOL_BOOL, OPARG_SIMPLE, 3 } } },
|
|
[TO_BOOL_INT] = { .nuops = 1, .uops = { { _TO_BOOL_INT, OPARG_SIMPLE, 3 } } },
|
|
[TO_BOOL_LIST] = { .nuops = 2, .uops = { { _GUARD_TOS_LIST, OPARG_SIMPLE, 0 }, { _TO_BOOL_LIST, OPARG_SIMPLE, 3 } } },
|
|
[TO_BOOL_NONE] = { .nuops = 1, .uops = { { _TO_BOOL_NONE, OPARG_SIMPLE, 3 } } },
|
|
[TO_BOOL_STR] = { .nuops = 2, .uops = { { _GUARD_TOS_UNICODE, OPARG_SIMPLE, 0 }, { _TO_BOOL_STR, OPARG_SIMPLE, 3 } } },
|
|
[UNARY_INVERT] = { .nuops = 1, .uops = { { _UNARY_INVERT, OPARG_SIMPLE, 0 } } },
|
|
[UNARY_NEGATIVE] = { .nuops = 1, .uops = { { _UNARY_NEGATIVE, OPARG_SIMPLE, 0 } } },
|
|
[UNARY_NOT] = { .nuops = 1, .uops = { { _UNARY_NOT, OPARG_SIMPLE, 0 } } },
|
|
[UNPACK_EX] = { .nuops = 1, .uops = { { _UNPACK_EX, OPARG_SIMPLE, 0 } } },
|
|
[UNPACK_SEQUENCE] = { .nuops = 1, .uops = { { _UNPACK_SEQUENCE, OPARG_SIMPLE, 0 } } },
|
|
[UNPACK_SEQUENCE_LIST] = { .nuops = 2, .uops = { { _GUARD_TOS_LIST, OPARG_SIMPLE, 0 }, { _UNPACK_SEQUENCE_LIST, OPARG_SIMPLE, 1 } } },
|
|
[UNPACK_SEQUENCE_TUPLE] = { .nuops = 2, .uops = { { _GUARD_TOS_TUPLE, OPARG_SIMPLE, 0 }, { _UNPACK_SEQUENCE_TUPLE, OPARG_SIMPLE, 1 } } },
|
|
[UNPACK_SEQUENCE_TWO_TUPLE] = { .nuops = 2, .uops = { { _GUARD_TOS_TUPLE, OPARG_SIMPLE, 0 }, { _UNPACK_SEQUENCE_TWO_TUPLE, OPARG_SIMPLE, 1 } } },
|
|
[WITH_EXCEPT_START] = { .nuops = 1, .uops = { { _WITH_EXCEPT_START, OPARG_SIMPLE, 0 } } },
|
|
[YIELD_VALUE] = { .nuops = 1, .uops = { { _YIELD_VALUE, OPARG_SIMPLE, 0 } } },
|
|
};
|
|
#endif // NEED_OPCODE_METADATA
|
|
|
|
extern const char *_PyOpcode_OpName[267];
|
|
#ifdef NEED_OPCODE_METADATA
|
|
const char *_PyOpcode_OpName[267] = {
|
|
[ANNOTATIONS_PLACEHOLDER] = "ANNOTATIONS_PLACEHOLDER",
|
|
[BINARY_OP] = "BINARY_OP",
|
|
[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_EXTEND] = "BINARY_OP_EXTEND",
|
|
[BINARY_OP_INPLACE_ADD_UNICODE] = "BINARY_OP_INPLACE_ADD_UNICODE",
|
|
[BINARY_OP_MULTIPLY_FLOAT] = "BINARY_OP_MULTIPLY_FLOAT",
|
|
[BINARY_OP_MULTIPLY_INT] = "BINARY_OP_MULTIPLY_INT",
|
|
[BINARY_OP_SUBSCR_DICT] = "BINARY_OP_SUBSCR_DICT",
|
|
[BINARY_OP_SUBSCR_GETITEM] = "BINARY_OP_SUBSCR_GETITEM",
|
|
[BINARY_OP_SUBSCR_LIST_INT] = "BINARY_OP_SUBSCR_LIST_INT",
|
|
[BINARY_OP_SUBSCR_LIST_SLICE] = "BINARY_OP_SUBSCR_LIST_SLICE",
|
|
[BINARY_OP_SUBSCR_STR_INT] = "BINARY_OP_SUBSCR_STR_INT",
|
|
[BINARY_OP_SUBSCR_TUPLE_INT] = "BINARY_OP_SUBSCR_TUPLE_INT",
|
|
[BINARY_OP_SUBTRACT_FLOAT] = "BINARY_OP_SUBTRACT_FLOAT",
|
|
[BINARY_OP_SUBTRACT_INT] = "BINARY_OP_SUBTRACT_INT",
|
|
[BINARY_SLICE] = "BINARY_SLICE",
|
|
[BUILD_INTERPOLATION] = "BUILD_INTERPOLATION",
|
|
[BUILD_LIST] = "BUILD_LIST",
|
|
[BUILD_MAP] = "BUILD_MAP",
|
|
[BUILD_SET] = "BUILD_SET",
|
|
[BUILD_SLICE] = "BUILD_SLICE",
|
|
[BUILD_STRING] = "BUILD_STRING",
|
|
[BUILD_TEMPLATE] = "BUILD_TEMPLATE",
|
|
[BUILD_TUPLE] = "BUILD_TUPLE",
|
|
[CACHE] = "CACHE",
|
|
[CALL] = "CALL",
|
|
[CALL_ALLOC_AND_ENTER_INIT] = "CALL_ALLOC_AND_ENTER_INIT",
|
|
[CALL_BOUND_METHOD_EXACT_ARGS] = "CALL_BOUND_METHOD_EXACT_ARGS",
|
|
[CALL_BOUND_METHOD_GENERAL] = "CALL_BOUND_METHOD_GENERAL",
|
|
[CALL_BUILTIN_CLASS] = "CALL_BUILTIN_CLASS",
|
|
[CALL_BUILTIN_FAST] = "CALL_BUILTIN_FAST",
|
|
[CALL_BUILTIN_FAST_WITH_KEYWORDS] = "CALL_BUILTIN_FAST_WITH_KEYWORDS",
|
|
[CALL_BUILTIN_O] = "CALL_BUILTIN_O",
|
|
[CALL_FUNCTION_EX] = "CALL_FUNCTION_EX",
|
|
[CALL_INTRINSIC_1] = "CALL_INTRINSIC_1",
|
|
[CALL_INTRINSIC_2] = "CALL_INTRINSIC_2",
|
|
[CALL_ISINSTANCE] = "CALL_ISINSTANCE",
|
|
[CALL_KW] = "CALL_KW",
|
|
[CALL_KW_BOUND_METHOD] = "CALL_KW_BOUND_METHOD",
|
|
[CALL_KW_NON_PY] = "CALL_KW_NON_PY",
|
|
[CALL_KW_PY] = "CALL_KW_PY",
|
|
[CALL_LEN] = "CALL_LEN",
|
|
[CALL_LIST_APPEND] = "CALL_LIST_APPEND",
|
|
[CALL_METHOD_DESCRIPTOR_FAST] = "CALL_METHOD_DESCRIPTOR_FAST",
|
|
[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS",
|
|
[CALL_METHOD_DESCRIPTOR_NOARGS] = "CALL_METHOD_DESCRIPTOR_NOARGS",
|
|
[CALL_METHOD_DESCRIPTOR_O] = "CALL_METHOD_DESCRIPTOR_O",
|
|
[CALL_NON_PY_GENERAL] = "CALL_NON_PY_GENERAL",
|
|
[CALL_PY_EXACT_ARGS] = "CALL_PY_EXACT_ARGS",
|
|
[CALL_PY_GENERAL] = "CALL_PY_GENERAL",
|
|
[CALL_STR_1] = "CALL_STR_1",
|
|
[CALL_TUPLE_1] = "CALL_TUPLE_1",
|
|
[CALL_TYPE_1] = "CALL_TYPE_1",
|
|
[CHECK_EG_MATCH] = "CHECK_EG_MATCH",
|
|
[CHECK_EXC_MATCH] = "CHECK_EXC_MATCH",
|
|
[CLEANUP_THROW] = "CLEANUP_THROW",
|
|
[COMPARE_OP] = "COMPARE_OP",
|
|
[COMPARE_OP_FLOAT] = "COMPARE_OP_FLOAT",
|
|
[COMPARE_OP_INT] = "COMPARE_OP_INT",
|
|
[COMPARE_OP_STR] = "COMPARE_OP_STR",
|
|
[CONTAINS_OP] = "CONTAINS_OP",
|
|
[CONTAINS_OP_DICT] = "CONTAINS_OP_DICT",
|
|
[CONTAINS_OP_SET] = "CONTAINS_OP_SET",
|
|
[CONVERT_VALUE] = "CONVERT_VALUE",
|
|
[COPY] = "COPY",
|
|
[COPY_FREE_VARS] = "COPY_FREE_VARS",
|
|
[DELETE_ATTR] = "DELETE_ATTR",
|
|
[DELETE_DEREF] = "DELETE_DEREF",
|
|
[DELETE_FAST] = "DELETE_FAST",
|
|
[DELETE_GLOBAL] = "DELETE_GLOBAL",
|
|
[DELETE_NAME] = "DELETE_NAME",
|
|
[DELETE_SUBSCR] = "DELETE_SUBSCR",
|
|
[DICT_MERGE] = "DICT_MERGE",
|
|
[DICT_UPDATE] = "DICT_UPDATE",
|
|
[END_ASYNC_FOR] = "END_ASYNC_FOR",
|
|
[END_FOR] = "END_FOR",
|
|
[END_SEND] = "END_SEND",
|
|
[ENTER_EXECUTOR] = "ENTER_EXECUTOR",
|
|
[EXIT_INIT_CHECK] = "EXIT_INIT_CHECK",
|
|
[EXTENDED_ARG] = "EXTENDED_ARG",
|
|
[FORMAT_SIMPLE] = "FORMAT_SIMPLE",
|
|
[FORMAT_WITH_SPEC] = "FORMAT_WITH_SPEC",
|
|
[FOR_ITER] = "FOR_ITER",
|
|
[FOR_ITER_GEN] = "FOR_ITER_GEN",
|
|
[FOR_ITER_LIST] = "FOR_ITER_LIST",
|
|
[FOR_ITER_RANGE] = "FOR_ITER_RANGE",
|
|
[FOR_ITER_TUPLE] = "FOR_ITER_TUPLE",
|
|
[GET_AITER] = "GET_AITER",
|
|
[GET_ANEXT] = "GET_ANEXT",
|
|
[GET_AWAITABLE] = "GET_AWAITABLE",
|
|
[GET_ITER] = "GET_ITER",
|
|
[GET_LEN] = "GET_LEN",
|
|
[GET_YIELD_FROM_ITER] = "GET_YIELD_FROM_ITER",
|
|
[IMPORT_FROM] = "IMPORT_FROM",
|
|
[IMPORT_NAME] = "IMPORT_NAME",
|
|
[INSTRUMENTED_CALL] = "INSTRUMENTED_CALL",
|
|
[INSTRUMENTED_CALL_FUNCTION_EX] = "INSTRUMENTED_CALL_FUNCTION_EX",
|
|
[INSTRUMENTED_CALL_KW] = "INSTRUMENTED_CALL_KW",
|
|
[INSTRUMENTED_END_ASYNC_FOR] = "INSTRUMENTED_END_ASYNC_FOR",
|
|
[INSTRUMENTED_END_FOR] = "INSTRUMENTED_END_FOR",
|
|
[INSTRUMENTED_END_SEND] = "INSTRUMENTED_END_SEND",
|
|
[INSTRUMENTED_FOR_ITER] = "INSTRUMENTED_FOR_ITER",
|
|
[INSTRUMENTED_INSTRUCTION] = "INSTRUMENTED_INSTRUCTION",
|
|
[INSTRUMENTED_JUMP_BACKWARD] = "INSTRUMENTED_JUMP_BACKWARD",
|
|
[INSTRUMENTED_JUMP_FORWARD] = "INSTRUMENTED_JUMP_FORWARD",
|
|
[INSTRUMENTED_LINE] = "INSTRUMENTED_LINE",
|
|
[INSTRUMENTED_LOAD_SUPER_ATTR] = "INSTRUMENTED_LOAD_SUPER_ATTR",
|
|
[INSTRUMENTED_NOT_TAKEN] = "INSTRUMENTED_NOT_TAKEN",
|
|
[INSTRUMENTED_POP_ITER] = "INSTRUMENTED_POP_ITER",
|
|
[INSTRUMENTED_POP_JUMP_IF_FALSE] = "INSTRUMENTED_POP_JUMP_IF_FALSE",
|
|
[INSTRUMENTED_POP_JUMP_IF_NONE] = "INSTRUMENTED_POP_JUMP_IF_NONE",
|
|
[INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = "INSTRUMENTED_POP_JUMP_IF_NOT_NONE",
|
|
[INSTRUMENTED_POP_JUMP_IF_TRUE] = "INSTRUMENTED_POP_JUMP_IF_TRUE",
|
|
[INSTRUMENTED_RESUME] = "INSTRUMENTED_RESUME",
|
|
[INSTRUMENTED_RETURN_VALUE] = "INSTRUMENTED_RETURN_VALUE",
|
|
[INSTRUMENTED_YIELD_VALUE] = "INSTRUMENTED_YIELD_VALUE",
|
|
[INTERPRETER_EXIT] = "INTERPRETER_EXIT",
|
|
[IS_OP] = "IS_OP",
|
|
[JUMP] = "JUMP",
|
|
[JUMP_BACKWARD] = "JUMP_BACKWARD",
|
|
[JUMP_BACKWARD_JIT] = "JUMP_BACKWARD_JIT",
|
|
[JUMP_BACKWARD_NO_INTERRUPT] = "JUMP_BACKWARD_NO_INTERRUPT",
|
|
[JUMP_BACKWARD_NO_JIT] = "JUMP_BACKWARD_NO_JIT",
|
|
[JUMP_FORWARD] = "JUMP_FORWARD",
|
|
[JUMP_IF_FALSE] = "JUMP_IF_FALSE",
|
|
[JUMP_IF_TRUE] = "JUMP_IF_TRUE",
|
|
[JUMP_NO_INTERRUPT] = "JUMP_NO_INTERRUPT",
|
|
[LIST_APPEND] = "LIST_APPEND",
|
|
[LIST_EXTEND] = "LIST_EXTEND",
|
|
[LOAD_ATTR] = "LOAD_ATTR",
|
|
[LOAD_ATTR_CLASS] = "LOAD_ATTR_CLASS",
|
|
[LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = "LOAD_ATTR_CLASS_WITH_METACLASS_CHECK",
|
|
[LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = "LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN",
|
|
[LOAD_ATTR_INSTANCE_VALUE] = "LOAD_ATTR_INSTANCE_VALUE",
|
|
[LOAD_ATTR_METHOD_LAZY_DICT] = "LOAD_ATTR_METHOD_LAZY_DICT",
|
|
[LOAD_ATTR_METHOD_NO_DICT] = "LOAD_ATTR_METHOD_NO_DICT",
|
|
[LOAD_ATTR_METHOD_WITH_VALUES] = "LOAD_ATTR_METHOD_WITH_VALUES",
|
|
[LOAD_ATTR_MODULE] = "LOAD_ATTR_MODULE",
|
|
[LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = "LOAD_ATTR_NONDESCRIPTOR_NO_DICT",
|
|
[LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = "LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES",
|
|
[LOAD_ATTR_PROPERTY] = "LOAD_ATTR_PROPERTY",
|
|
[LOAD_ATTR_SLOT] = "LOAD_ATTR_SLOT",
|
|
[LOAD_ATTR_WITH_HINT] = "LOAD_ATTR_WITH_HINT",
|
|
[LOAD_BUILD_CLASS] = "LOAD_BUILD_CLASS",
|
|
[LOAD_CLOSURE] = "LOAD_CLOSURE",
|
|
[LOAD_COMMON_CONSTANT] = "LOAD_COMMON_CONSTANT",
|
|
[LOAD_CONST] = "LOAD_CONST",
|
|
[LOAD_DEREF] = "LOAD_DEREF",
|
|
[LOAD_FAST] = "LOAD_FAST",
|
|
[LOAD_FAST_AND_CLEAR] = "LOAD_FAST_AND_CLEAR",
|
|
[LOAD_FAST_BORROW] = "LOAD_FAST_BORROW",
|
|
[LOAD_FAST_BORROW_LOAD_FAST_BORROW] = "LOAD_FAST_BORROW_LOAD_FAST_BORROW",
|
|
[LOAD_FAST_CHECK] = "LOAD_FAST_CHECK",
|
|
[LOAD_FAST_LOAD_FAST] = "LOAD_FAST_LOAD_FAST",
|
|
[LOAD_FROM_DICT_OR_DEREF] = "LOAD_FROM_DICT_OR_DEREF",
|
|
[LOAD_FROM_DICT_OR_GLOBALS] = "LOAD_FROM_DICT_OR_GLOBALS",
|
|
[LOAD_GLOBAL] = "LOAD_GLOBAL",
|
|
[LOAD_GLOBAL_BUILTIN] = "LOAD_GLOBAL_BUILTIN",
|
|
[LOAD_GLOBAL_MODULE] = "LOAD_GLOBAL_MODULE",
|
|
[LOAD_LOCALS] = "LOAD_LOCALS",
|
|
[LOAD_NAME] = "LOAD_NAME",
|
|
[LOAD_SMALL_INT] = "LOAD_SMALL_INT",
|
|
[LOAD_SPECIAL] = "LOAD_SPECIAL",
|
|
[LOAD_SUPER_ATTR] = "LOAD_SUPER_ATTR",
|
|
[LOAD_SUPER_ATTR_ATTR] = "LOAD_SUPER_ATTR_ATTR",
|
|
[LOAD_SUPER_ATTR_METHOD] = "LOAD_SUPER_ATTR_METHOD",
|
|
[MAKE_CELL] = "MAKE_CELL",
|
|
[MAKE_FUNCTION] = "MAKE_FUNCTION",
|
|
[MAP_ADD] = "MAP_ADD",
|
|
[MATCH_CLASS] = "MATCH_CLASS",
|
|
[MATCH_KEYS] = "MATCH_KEYS",
|
|
[MATCH_MAPPING] = "MATCH_MAPPING",
|
|
[MATCH_SEQUENCE] = "MATCH_SEQUENCE",
|
|
[NOP] = "NOP",
|
|
[NOT_TAKEN] = "NOT_TAKEN",
|
|
[POP_BLOCK] = "POP_BLOCK",
|
|
[POP_EXCEPT] = "POP_EXCEPT",
|
|
[POP_ITER] = "POP_ITER",
|
|
[POP_JUMP_IF_FALSE] = "POP_JUMP_IF_FALSE",
|
|
[POP_JUMP_IF_NONE] = "POP_JUMP_IF_NONE",
|
|
[POP_JUMP_IF_NOT_NONE] = "POP_JUMP_IF_NOT_NONE",
|
|
[POP_JUMP_IF_TRUE] = "POP_JUMP_IF_TRUE",
|
|
[POP_TOP] = "POP_TOP",
|
|
[PUSH_EXC_INFO] = "PUSH_EXC_INFO",
|
|
[PUSH_NULL] = "PUSH_NULL",
|
|
[RAISE_VARARGS] = "RAISE_VARARGS",
|
|
[RERAISE] = "RERAISE",
|
|
[RESERVED] = "RESERVED",
|
|
[RESUME] = "RESUME",
|
|
[RESUME_CHECK] = "RESUME_CHECK",
|
|
[RETURN_GENERATOR] = "RETURN_GENERATOR",
|
|
[RETURN_VALUE] = "RETURN_VALUE",
|
|
[SEND] = "SEND",
|
|
[SEND_GEN] = "SEND_GEN",
|
|
[SETUP_ANNOTATIONS] = "SETUP_ANNOTATIONS",
|
|
[SETUP_CLEANUP] = "SETUP_CLEANUP",
|
|
[SETUP_FINALLY] = "SETUP_FINALLY",
|
|
[SETUP_WITH] = "SETUP_WITH",
|
|
[SET_ADD] = "SET_ADD",
|
|
[SET_FUNCTION_ATTRIBUTE] = "SET_FUNCTION_ATTRIBUTE",
|
|
[SET_UPDATE] = "SET_UPDATE",
|
|
[STORE_ATTR] = "STORE_ATTR",
|
|
[STORE_ATTR_INSTANCE_VALUE] = "STORE_ATTR_INSTANCE_VALUE",
|
|
[STORE_ATTR_SLOT] = "STORE_ATTR_SLOT",
|
|
[STORE_ATTR_WITH_HINT] = "STORE_ATTR_WITH_HINT",
|
|
[STORE_DEREF] = "STORE_DEREF",
|
|
[STORE_FAST] = "STORE_FAST",
|
|
[STORE_FAST_LOAD_FAST] = "STORE_FAST_LOAD_FAST",
|
|
[STORE_FAST_MAYBE_NULL] = "STORE_FAST_MAYBE_NULL",
|
|
[STORE_FAST_STORE_FAST] = "STORE_FAST_STORE_FAST",
|
|
[STORE_GLOBAL] = "STORE_GLOBAL",
|
|
[STORE_NAME] = "STORE_NAME",
|
|
[STORE_SLICE] = "STORE_SLICE",
|
|
[STORE_SUBSCR] = "STORE_SUBSCR",
|
|
[STORE_SUBSCR_DICT] = "STORE_SUBSCR_DICT",
|
|
[STORE_SUBSCR_LIST_INT] = "STORE_SUBSCR_LIST_INT",
|
|
[SWAP] = "SWAP",
|
|
[TO_BOOL] = "TO_BOOL",
|
|
[TO_BOOL_ALWAYS_TRUE] = "TO_BOOL_ALWAYS_TRUE",
|
|
[TO_BOOL_BOOL] = "TO_BOOL_BOOL",
|
|
[TO_BOOL_INT] = "TO_BOOL_INT",
|
|
[TO_BOOL_LIST] = "TO_BOOL_LIST",
|
|
[TO_BOOL_NONE] = "TO_BOOL_NONE",
|
|
[TO_BOOL_STR] = "TO_BOOL_STR",
|
|
[UNARY_INVERT] = "UNARY_INVERT",
|
|
[UNARY_NEGATIVE] = "UNARY_NEGATIVE",
|
|
[UNARY_NOT] = "UNARY_NOT",
|
|
[UNPACK_EX] = "UNPACK_EX",
|
|
[UNPACK_SEQUENCE] = "UNPACK_SEQUENCE",
|
|
[UNPACK_SEQUENCE_LIST] = "UNPACK_SEQUENCE_LIST",
|
|
[UNPACK_SEQUENCE_TUPLE] = "UNPACK_SEQUENCE_TUPLE",
|
|
[UNPACK_SEQUENCE_TWO_TUPLE] = "UNPACK_SEQUENCE_TWO_TUPLE",
|
|
[WITH_EXCEPT_START] = "WITH_EXCEPT_START",
|
|
[YIELD_VALUE] = "YIELD_VALUE",
|
|
};
|
|
#endif
|
|
|
|
extern const uint8_t _PyOpcode_Caches[256];
|
|
#ifdef NEED_OPCODE_METADATA
|
|
const uint8_t _PyOpcode_Caches[256] = {
|
|
[TO_BOOL] = 3,
|
|
[STORE_SUBSCR] = 1,
|
|
[SEND] = 1,
|
|
[UNPACK_SEQUENCE] = 1,
|
|
[STORE_ATTR] = 4,
|
|
[LOAD_GLOBAL] = 4,
|
|
[LOAD_SUPER_ATTR] = 1,
|
|
[LOAD_ATTR] = 9,
|
|
[COMPARE_OP] = 1,
|
|
[CONTAINS_OP] = 1,
|
|
[JUMP_BACKWARD] = 1,
|
|
[POP_JUMP_IF_TRUE] = 1,
|
|
[POP_JUMP_IF_FALSE] = 1,
|
|
[POP_JUMP_IF_NONE] = 1,
|
|
[POP_JUMP_IF_NOT_NONE] = 1,
|
|
[FOR_ITER] = 1,
|
|
[CALL] = 3,
|
|
[CALL_KW] = 3,
|
|
[BINARY_OP] = 5,
|
|
};
|
|
#endif
|
|
|
|
extern const uint8_t _PyOpcode_Deopt[256];
|
|
#ifdef NEED_OPCODE_METADATA
|
|
const uint8_t _PyOpcode_Deopt[256] = {
|
|
[121] = 121,
|
|
[122] = 122,
|
|
[123] = 123,
|
|
[124] = 124,
|
|
[125] = 125,
|
|
[126] = 126,
|
|
[127] = 127,
|
|
[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,
|
|
[BINARY_OP] = BINARY_OP,
|
|
[BINARY_OP_ADD_FLOAT] = BINARY_OP,
|
|
[BINARY_OP_ADD_INT] = BINARY_OP,
|
|
[BINARY_OP_ADD_UNICODE] = BINARY_OP,
|
|
[BINARY_OP_EXTEND] = BINARY_OP,
|
|
[BINARY_OP_INPLACE_ADD_UNICODE] = BINARY_OP,
|
|
[BINARY_OP_MULTIPLY_FLOAT] = BINARY_OP,
|
|
[BINARY_OP_MULTIPLY_INT] = BINARY_OP,
|
|
[BINARY_OP_SUBSCR_DICT] = BINARY_OP,
|
|
[BINARY_OP_SUBSCR_GETITEM] = BINARY_OP,
|
|
[BINARY_OP_SUBSCR_LIST_INT] = BINARY_OP,
|
|
[BINARY_OP_SUBSCR_LIST_SLICE] = BINARY_OP,
|
|
[BINARY_OP_SUBSCR_STR_INT] = BINARY_OP,
|
|
[BINARY_OP_SUBSCR_TUPLE_INT] = BINARY_OP,
|
|
[BINARY_OP_SUBTRACT_FLOAT] = BINARY_OP,
|
|
[BINARY_OP_SUBTRACT_INT] = BINARY_OP,
|
|
[BINARY_SLICE] = BINARY_SLICE,
|
|
[BUILD_INTERPOLATION] = BUILD_INTERPOLATION,
|
|
[BUILD_LIST] = BUILD_LIST,
|
|
[BUILD_MAP] = BUILD_MAP,
|
|
[BUILD_SET] = BUILD_SET,
|
|
[BUILD_SLICE] = BUILD_SLICE,
|
|
[BUILD_STRING] = BUILD_STRING,
|
|
[BUILD_TEMPLATE] = BUILD_TEMPLATE,
|
|
[BUILD_TUPLE] = BUILD_TUPLE,
|
|
[CACHE] = CACHE,
|
|
[CALL] = CALL,
|
|
[CALL_ALLOC_AND_ENTER_INIT] = CALL,
|
|
[CALL_BOUND_METHOD_EXACT_ARGS] = CALL,
|
|
[CALL_BOUND_METHOD_GENERAL] = CALL,
|
|
[CALL_BUILTIN_CLASS] = CALL,
|
|
[CALL_BUILTIN_FAST] = CALL,
|
|
[CALL_BUILTIN_FAST_WITH_KEYWORDS] = CALL,
|
|
[CALL_BUILTIN_O] = CALL,
|
|
[CALL_FUNCTION_EX] = CALL_FUNCTION_EX,
|
|
[CALL_INTRINSIC_1] = CALL_INTRINSIC_1,
|
|
[CALL_INTRINSIC_2] = CALL_INTRINSIC_2,
|
|
[CALL_ISINSTANCE] = CALL,
|
|
[CALL_KW] = CALL_KW,
|
|
[CALL_KW_BOUND_METHOD] = CALL_KW,
|
|
[CALL_KW_NON_PY] = CALL_KW,
|
|
[CALL_KW_PY] = CALL_KW,
|
|
[CALL_LEN] = CALL,
|
|
[CALL_LIST_APPEND] = CALL,
|
|
[CALL_METHOD_DESCRIPTOR_FAST] = CALL,
|
|
[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = CALL,
|
|
[CALL_METHOD_DESCRIPTOR_NOARGS] = CALL,
|
|
[CALL_METHOD_DESCRIPTOR_O] = CALL,
|
|
[CALL_NON_PY_GENERAL] = CALL,
|
|
[CALL_PY_EXACT_ARGS] = CALL,
|
|
[CALL_PY_GENERAL] = CALL,
|
|
[CALL_STR_1] = CALL,
|
|
[CALL_TUPLE_1] = CALL,
|
|
[CALL_TYPE_1] = CALL,
|
|
[CHECK_EG_MATCH] = CHECK_EG_MATCH,
|
|
[CHECK_EXC_MATCH] = CHECK_EXC_MATCH,
|
|
[CLEANUP_THROW] = CLEANUP_THROW,
|
|
[COMPARE_OP] = COMPARE_OP,
|
|
[COMPARE_OP_FLOAT] = COMPARE_OP,
|
|
[COMPARE_OP_INT] = COMPARE_OP,
|
|
[COMPARE_OP_STR] = COMPARE_OP,
|
|
[CONTAINS_OP] = CONTAINS_OP,
|
|
[CONTAINS_OP_DICT] = CONTAINS_OP,
|
|
[CONTAINS_OP_SET] = CONTAINS_OP,
|
|
[CONVERT_VALUE] = CONVERT_VALUE,
|
|
[COPY] = COPY,
|
|
[COPY_FREE_VARS] = COPY_FREE_VARS,
|
|
[DELETE_ATTR] = DELETE_ATTR,
|
|
[DELETE_DEREF] = DELETE_DEREF,
|
|
[DELETE_FAST] = DELETE_FAST,
|
|
[DELETE_GLOBAL] = DELETE_GLOBAL,
|
|
[DELETE_NAME] = DELETE_NAME,
|
|
[DELETE_SUBSCR] = DELETE_SUBSCR,
|
|
[DICT_MERGE] = DICT_MERGE,
|
|
[DICT_UPDATE] = DICT_UPDATE,
|
|
[END_ASYNC_FOR] = END_ASYNC_FOR,
|
|
[END_FOR] = END_FOR,
|
|
[END_SEND] = END_SEND,
|
|
[ENTER_EXECUTOR] = ENTER_EXECUTOR,
|
|
[EXIT_INIT_CHECK] = EXIT_INIT_CHECK,
|
|
[EXTENDED_ARG] = EXTENDED_ARG,
|
|
[FORMAT_SIMPLE] = FORMAT_SIMPLE,
|
|
[FORMAT_WITH_SPEC] = FORMAT_WITH_SPEC,
|
|
[FOR_ITER] = FOR_ITER,
|
|
[FOR_ITER_GEN] = FOR_ITER,
|
|
[FOR_ITER_LIST] = FOR_ITER,
|
|
[FOR_ITER_RANGE] = FOR_ITER,
|
|
[FOR_ITER_TUPLE] = FOR_ITER,
|
|
[GET_AITER] = GET_AITER,
|
|
[GET_ANEXT] = GET_ANEXT,
|
|
[GET_AWAITABLE] = GET_AWAITABLE,
|
|
[GET_ITER] = GET_ITER,
|
|
[GET_LEN] = GET_LEN,
|
|
[GET_YIELD_FROM_ITER] = GET_YIELD_FROM_ITER,
|
|
[IMPORT_FROM] = IMPORT_FROM,
|
|
[IMPORT_NAME] = IMPORT_NAME,
|
|
[INSTRUMENTED_CALL] = INSTRUMENTED_CALL,
|
|
[INSTRUMENTED_CALL_FUNCTION_EX] = INSTRUMENTED_CALL_FUNCTION_EX,
|
|
[INSTRUMENTED_CALL_KW] = INSTRUMENTED_CALL_KW,
|
|
[INSTRUMENTED_END_ASYNC_FOR] = INSTRUMENTED_END_ASYNC_FOR,
|
|
[INSTRUMENTED_END_FOR] = INSTRUMENTED_END_FOR,
|
|
[INSTRUMENTED_END_SEND] = INSTRUMENTED_END_SEND,
|
|
[INSTRUMENTED_FOR_ITER] = INSTRUMENTED_FOR_ITER,
|
|
[INSTRUMENTED_INSTRUCTION] = INSTRUMENTED_INSTRUCTION,
|
|
[INSTRUMENTED_JUMP_BACKWARD] = INSTRUMENTED_JUMP_BACKWARD,
|
|
[INSTRUMENTED_JUMP_FORWARD] = INSTRUMENTED_JUMP_FORWARD,
|
|
[INSTRUMENTED_LINE] = INSTRUMENTED_LINE,
|
|
[INSTRUMENTED_LOAD_SUPER_ATTR] = INSTRUMENTED_LOAD_SUPER_ATTR,
|
|
[INSTRUMENTED_NOT_TAKEN] = INSTRUMENTED_NOT_TAKEN,
|
|
[INSTRUMENTED_POP_ITER] = INSTRUMENTED_POP_ITER,
|
|
[INSTRUMENTED_POP_JUMP_IF_FALSE] = INSTRUMENTED_POP_JUMP_IF_FALSE,
|
|
[INSTRUMENTED_POP_JUMP_IF_NONE] = INSTRUMENTED_POP_JUMP_IF_NONE,
|
|
[INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = INSTRUMENTED_POP_JUMP_IF_NOT_NONE,
|
|
[INSTRUMENTED_POP_JUMP_IF_TRUE] = INSTRUMENTED_POP_JUMP_IF_TRUE,
|
|
[INSTRUMENTED_RESUME] = INSTRUMENTED_RESUME,
|
|
[INSTRUMENTED_RETURN_VALUE] = INSTRUMENTED_RETURN_VALUE,
|
|
[INSTRUMENTED_YIELD_VALUE] = INSTRUMENTED_YIELD_VALUE,
|
|
[INTERPRETER_EXIT] = INTERPRETER_EXIT,
|
|
[IS_OP] = IS_OP,
|
|
[JUMP_BACKWARD] = JUMP_BACKWARD,
|
|
[JUMP_BACKWARD_JIT] = JUMP_BACKWARD,
|
|
[JUMP_BACKWARD_NO_INTERRUPT] = JUMP_BACKWARD_NO_INTERRUPT,
|
|
[JUMP_BACKWARD_NO_JIT] = JUMP_BACKWARD,
|
|
[JUMP_FORWARD] = JUMP_FORWARD,
|
|
[LIST_APPEND] = LIST_APPEND,
|
|
[LIST_EXTEND] = LIST_EXTEND,
|
|
[LOAD_ATTR] = LOAD_ATTR,
|
|
[LOAD_ATTR_CLASS] = LOAD_ATTR,
|
|
[LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = LOAD_ATTR,
|
|
[LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = LOAD_ATTR,
|
|
[LOAD_ATTR_INSTANCE_VALUE] = LOAD_ATTR,
|
|
[LOAD_ATTR_METHOD_LAZY_DICT] = LOAD_ATTR,
|
|
[LOAD_ATTR_METHOD_NO_DICT] = LOAD_ATTR,
|
|
[LOAD_ATTR_METHOD_WITH_VALUES] = LOAD_ATTR,
|
|
[LOAD_ATTR_MODULE] = LOAD_ATTR,
|
|
[LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = LOAD_ATTR,
|
|
[LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = LOAD_ATTR,
|
|
[LOAD_ATTR_PROPERTY] = LOAD_ATTR,
|
|
[LOAD_ATTR_SLOT] = LOAD_ATTR,
|
|
[LOAD_ATTR_WITH_HINT] = LOAD_ATTR,
|
|
[LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS,
|
|
[LOAD_COMMON_CONSTANT] = LOAD_COMMON_CONSTANT,
|
|
[LOAD_CONST] = LOAD_CONST,
|
|
[LOAD_DEREF] = LOAD_DEREF,
|
|
[LOAD_FAST] = LOAD_FAST,
|
|
[LOAD_FAST_AND_CLEAR] = LOAD_FAST_AND_CLEAR,
|
|
[LOAD_FAST_BORROW] = LOAD_FAST_BORROW,
|
|
[LOAD_FAST_BORROW_LOAD_FAST_BORROW] = LOAD_FAST_BORROW_LOAD_FAST_BORROW,
|
|
[LOAD_FAST_CHECK] = LOAD_FAST_CHECK,
|
|
[LOAD_FAST_LOAD_FAST] = LOAD_FAST_LOAD_FAST,
|
|
[LOAD_FROM_DICT_OR_DEREF] = LOAD_FROM_DICT_OR_DEREF,
|
|
[LOAD_FROM_DICT_OR_GLOBALS] = LOAD_FROM_DICT_OR_GLOBALS,
|
|
[LOAD_GLOBAL] = LOAD_GLOBAL,
|
|
[LOAD_GLOBAL_BUILTIN] = LOAD_GLOBAL,
|
|
[LOAD_GLOBAL_MODULE] = LOAD_GLOBAL,
|
|
[LOAD_LOCALS] = LOAD_LOCALS,
|
|
[LOAD_NAME] = LOAD_NAME,
|
|
[LOAD_SMALL_INT] = LOAD_SMALL_INT,
|
|
[LOAD_SPECIAL] = LOAD_SPECIAL,
|
|
[LOAD_SUPER_ATTR] = LOAD_SUPER_ATTR,
|
|
[LOAD_SUPER_ATTR_ATTR] = LOAD_SUPER_ATTR,
|
|
[LOAD_SUPER_ATTR_METHOD] = LOAD_SUPER_ATTR,
|
|
[MAKE_CELL] = MAKE_CELL,
|
|
[MAKE_FUNCTION] = MAKE_FUNCTION,
|
|
[MAP_ADD] = MAP_ADD,
|
|
[MATCH_CLASS] = MATCH_CLASS,
|
|
[MATCH_KEYS] = MATCH_KEYS,
|
|
[MATCH_MAPPING] = MATCH_MAPPING,
|
|
[MATCH_SEQUENCE] = MATCH_SEQUENCE,
|
|
[NOP] = NOP,
|
|
[NOT_TAKEN] = NOT_TAKEN,
|
|
[POP_EXCEPT] = POP_EXCEPT,
|
|
[POP_ITER] = POP_ITER,
|
|
[POP_JUMP_IF_FALSE] = POP_JUMP_IF_FALSE,
|
|
[POP_JUMP_IF_NONE] = POP_JUMP_IF_NONE,
|
|
[POP_JUMP_IF_NOT_NONE] = POP_JUMP_IF_NOT_NONE,
|
|
[POP_JUMP_IF_TRUE] = POP_JUMP_IF_TRUE,
|
|
[POP_TOP] = POP_TOP,
|
|
[PUSH_EXC_INFO] = PUSH_EXC_INFO,
|
|
[PUSH_NULL] = PUSH_NULL,
|
|
[RAISE_VARARGS] = RAISE_VARARGS,
|
|
[RERAISE] = RERAISE,
|
|
[RESERVED] = RESERVED,
|
|
[RESUME] = RESUME,
|
|
[RESUME_CHECK] = RESUME,
|
|
[RETURN_GENERATOR] = RETURN_GENERATOR,
|
|
[RETURN_VALUE] = RETURN_VALUE,
|
|
[SEND] = SEND,
|
|
[SEND_GEN] = SEND,
|
|
[SETUP_ANNOTATIONS] = SETUP_ANNOTATIONS,
|
|
[SET_ADD] = SET_ADD,
|
|
[SET_FUNCTION_ATTRIBUTE] = SET_FUNCTION_ATTRIBUTE,
|
|
[SET_UPDATE] = SET_UPDATE,
|
|
[STORE_ATTR] = STORE_ATTR,
|
|
[STORE_ATTR_INSTANCE_VALUE] = STORE_ATTR,
|
|
[STORE_ATTR_SLOT] = STORE_ATTR,
|
|
[STORE_ATTR_WITH_HINT] = STORE_ATTR,
|
|
[STORE_DEREF] = STORE_DEREF,
|
|
[STORE_FAST] = STORE_FAST,
|
|
[STORE_FAST_LOAD_FAST] = STORE_FAST_LOAD_FAST,
|
|
[STORE_FAST_STORE_FAST] = STORE_FAST_STORE_FAST,
|
|
[STORE_GLOBAL] = STORE_GLOBAL,
|
|
[STORE_NAME] = STORE_NAME,
|
|
[STORE_SLICE] = STORE_SLICE,
|
|
[STORE_SUBSCR] = STORE_SUBSCR,
|
|
[STORE_SUBSCR_DICT] = STORE_SUBSCR,
|
|
[STORE_SUBSCR_LIST_INT] = STORE_SUBSCR,
|
|
[SWAP] = SWAP,
|
|
[TO_BOOL] = TO_BOOL,
|
|
[TO_BOOL_ALWAYS_TRUE] = TO_BOOL,
|
|
[TO_BOOL_BOOL] = TO_BOOL,
|
|
[TO_BOOL_INT] = TO_BOOL,
|
|
[TO_BOOL_LIST] = TO_BOOL,
|
|
[TO_BOOL_NONE] = TO_BOOL,
|
|
[TO_BOOL_STR] = TO_BOOL,
|
|
[UNARY_INVERT] = UNARY_INVERT,
|
|
[UNARY_NEGATIVE] = UNARY_NEGATIVE,
|
|
[UNARY_NOT] = UNARY_NOT,
|
|
[UNPACK_EX] = UNPACK_EX,
|
|
[UNPACK_SEQUENCE] = UNPACK_SEQUENCE,
|
|
[UNPACK_SEQUENCE_LIST] = UNPACK_SEQUENCE,
|
|
[UNPACK_SEQUENCE_TUPLE] = UNPACK_SEQUENCE,
|
|
[UNPACK_SEQUENCE_TWO_TUPLE] = UNPACK_SEQUENCE,
|
|
[WITH_EXCEPT_START] = WITH_EXCEPT_START,
|
|
[YIELD_VALUE] = YIELD_VALUE,
|
|
};
|
|
|
|
#endif // NEED_OPCODE_METADATA
|
|
|
|
#define EXTRA_CASES \
|
|
case 121: \
|
|
case 122: \
|
|
case 123: \
|
|
case 124: \
|
|
case 125: \
|
|
case 126: \
|
|
case 127: \
|
|
case 210: \
|
|
case 211: \
|
|
case 212: \
|
|
case 213: \
|
|
case 214: \
|
|
case 215: \
|
|
case 216: \
|
|
case 217: \
|
|
case 218: \
|
|
case 219: \
|
|
case 220: \
|
|
case 221: \
|
|
case 222: \
|
|
case 223: \
|
|
case 224: \
|
|
case 225: \
|
|
case 226: \
|
|
case 227: \
|
|
case 228: \
|
|
case 229: \
|
|
case 230: \
|
|
case 231: \
|
|
case 232: \
|
|
case 233: \
|
|
;
|
|
struct pseudo_targets {
|
|
uint8_t as_sequence;
|
|
uint8_t targets[4];
|
|
};
|
|
extern const struct pseudo_targets _PyOpcode_PseudoTargets[11];
|
|
#ifdef NEED_OPCODE_METADATA
|
|
const struct pseudo_targets _PyOpcode_PseudoTargets[11] = {
|
|
[LOAD_CLOSURE-256] = { 0, { LOAD_FAST, 0, 0, 0 } },
|
|
[STORE_FAST_MAYBE_NULL-256] = { 0, { STORE_FAST, 0, 0, 0 } },
|
|
[ANNOTATIONS_PLACEHOLDER-256] = { 0, { NOP, 0, 0, 0 } },
|
|
[JUMP-256] = { 0, { JUMP_FORWARD, JUMP_BACKWARD, 0, 0 } },
|
|
[JUMP_NO_INTERRUPT-256] = { 0, { JUMP_FORWARD, JUMP_BACKWARD_NO_INTERRUPT, 0, 0 } },
|
|
[JUMP_IF_FALSE-256] = { 1, { COPY, TO_BOOL, POP_JUMP_IF_FALSE, 0 } },
|
|
[JUMP_IF_TRUE-256] = { 1, { COPY, TO_BOOL, POP_JUMP_IF_TRUE, 0 } },
|
|
[SETUP_FINALLY-256] = { 0, { NOP, 0, 0, 0 } },
|
|
[SETUP_CLEANUP-256] = { 0, { NOP, 0, 0, 0 } },
|
|
[SETUP_WITH-256] = { 0, { NOP, 0, 0, 0 } },
|
|
[POP_BLOCK-256] = { 0, { NOP, 0, 0, 0 } },
|
|
};
|
|
|
|
#endif // NEED_OPCODE_METADATA
|
|
static inline bool
|
|
is_pseudo_target(int pseudo, int target) {
|
|
if (pseudo < 256 || pseudo >= 267) {
|
|
return false;
|
|
}
|
|
for (int i = 0; _PyOpcode_PseudoTargets[pseudo-256].targets[i]; i++) {
|
|
if (_PyOpcode_PseudoTargets[pseudo-256].targets[i] == target) return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* !Py_CORE_OPCODE_METADATA_H */
|