diff --git a/bytecode_ops.inl b/bytecode_ops.inl index ef66314..4754944 100644 --- a/bytecode_ops.inl +++ b/bytecode_ops.inl @@ -1,264 +1,274 @@ /* No parameter word */ -OPCODE(STOP_CODE) -OPCODE(POP_TOP) -OPCODE(ROT_TWO) -OPCODE(ROT_THREE) -OPCODE(DUP_TOP) -OPCODE(DUP_TOP_TWO) -OPCODE(UNARY_POSITIVE) -OPCODE(UNARY_NEGATIVE) -OPCODE(UNARY_NOT) -OPCODE(UNARY_CONVERT) -OPCODE(UNARY_CALL) -OPCODE(UNARY_INVERT) -OPCODE(BINARY_POWER) -OPCODE(BINARY_MULTIPLY) -OPCODE(BINARY_DIVIDE) -OPCODE(BINARY_MODULO) -OPCODE(BINARY_ADD) -OPCODE(BINARY_SUBTRACT) -OPCODE(BINARY_SUBSCR) -OPCODE(BINARY_CALL) -OPCODE(SLICE_0) -OPCODE(SLICE_1) -OPCODE(SLICE_2) -OPCODE(SLICE_3) -OPCODE(STORE_SLICE_0) -OPCODE(STORE_SLICE_1) -OPCODE(STORE_SLICE_2) -OPCODE(STORE_SLICE_3) -OPCODE(DELETE_SLICE_0) -OPCODE(DELETE_SLICE_1) -OPCODE(DELETE_SLICE_2) -OPCODE(DELETE_SLICE_3) -OPCODE(STORE_SUBSCR) -OPCODE(DELETE_SUBSCR) -OPCODE(BINARY_LSHIFT) -OPCODE(BINARY_RSHIFT) -OPCODE(BINARY_AND) -OPCODE(BINARY_XOR) -OPCODE(BINARY_OR) -OPCODE(PRINT_EXPR) -OPCODE(PRINT_ITEM) -OPCODE(PRINT_NEWLINE) -OPCODE(BREAK_LOOP) -OPCODE(RAISE_EXCEPTION) -OPCODE(LOAD_LOCALS) -OPCODE(RETURN_VALUE) -OPCODE(LOAD_GLOBALS) -OPCODE(EXEC_STMT) -OPCODE(BUILD_FUNCTION) -OPCODE(POP_BLOCK) -OPCODE(END_FINALLY) -OPCODE(BUILD_CLASS) -OPCODE(ROT_FOUR) -OPCODE(NOP) -OPCODE(LIST_APPEND) -OPCODE(BINARY_FLOOR_DIVIDE) -OPCODE(BINARY_TRUE_DIVIDE) -OPCODE(INPLACE_FLOOR_DIVIDE) -OPCODE(INPLACE_TRUE_DIVIDE) -OPCODE(GET_LEN) -OPCODE(MATCH_MAPPING) -OPCODE(MATCH_SEQUENCE) -OPCODE(MATCH_KEYS) -OPCODE(COPY_DICT_WITHOUT_KEYS) -OPCODE(STORE_MAP) -OPCODE(INPLACE_ADD) -OPCODE(INPLACE_SUBTRACT) -OPCODE(INPLACE_MULTIPLY) -OPCODE(INPLACE_DIVIDE) -OPCODE(INPLACE_MODULO) -OPCODE(INPLACE_POWER) -OPCODE(GET_ITER) -OPCODE(PRINT_ITEM_TO) -OPCODE(PRINT_NEWLINE_TO) -OPCODE(INPLACE_LSHIFT) -OPCODE(INPLACE_RSHIFT) -OPCODE(INPLACE_AND) -OPCODE(INPLACE_XOR) -OPCODE(INPLACE_OR) -OPCODE(WITH_CLEANUP) -OPCODE(WITH_CLEANUP_START) -OPCODE(WITH_CLEANUP_FINISH) -OPCODE(IMPORT_STAR) -OPCODE(SETUP_ANNOTATIONS) -OPCODE(YIELD_VALUE) -OPCODE(LOAD_BUILD_CLASS) -OPCODE(STORE_LOCALS) -OPCODE(POP_EXCEPT) -OPCODE(SET_ADD) -OPCODE(YIELD_FROM) -OPCODE(BINARY_MATRIX_MULTIPLY) -OPCODE(INPLACE_MATRIX_MULTIPLY) -OPCODE(GET_AITER) -OPCODE(GET_ANEXT) -OPCODE(BEFORE_ASYNC_WITH) -OPCODE(GET_YIELD_FROM_ITER) -OPCODE(GET_AWAITABLE) -OPCODE(BEGIN_FINALLY) -OPCODE(END_ASYNC_FOR) -OPCODE(RERAISE) -OPCODE(WITH_EXCEPT_START) -OPCODE(LOAD_ASSERTION_ERROR) -OPCODE(LIST_TO_TUPLE) -OPCODE(CACHE) -OPCODE(PUSH_NULL) -OPCODE(PUSH_EXC_INFO) -OPCODE(CHECK_EXC_MATCH) -OPCODE(CHECK_EG_MATCH) -OPCODE(BEFORE_WITH) -OPCODE(RETURN_GENERATOR) -OPCODE(ASYNC_GEN_WRAP) -OPCODE(PREP_RERAISE_STAR) -OPCODE(INTERPRETER_EXIT) -OPCODE(END_FOR) -OPCODE(END_SEND) -OPCODE(RESERVED) -OPCODE(BINARY_SLICE) -OPCODE(STORE_SLICE) -OPCODE(CLEANUP_THROW) +OPCODE(STOP_CODE) // Python 1.0 - 3.2 +OPCODE(POP_TOP) // Python 1.0 -> +OPCODE(ROT_TWO) // Python 1.0 - 3.10 +OPCODE(ROT_THREE) // Python 1.0 - 3.10 +OPCODE(DUP_TOP) // Python 1.0 - 3.10 +OPCODE(DUP_TOP_TWO) // Python 3.2 - 3.10 +OPCODE(UNARY_POSITIVE) // Python 1.0 - 3.11 +OPCODE(UNARY_NEGATIVE) // Python 1.0 -> +OPCODE(UNARY_NOT) // Python 1.0 -> +OPCODE(UNARY_CONVERT) // Python 1.0 - 2.7 +OPCODE(UNARY_CALL) // Python 1.0 - 1.2 +OPCODE(UNARY_INVERT) // Python 1.0 -> +OPCODE(BINARY_POWER) // Python 1.4 - 3.10 +OPCODE(BINARY_MULTIPLY) // Python 1.0 - 3.10 +OPCODE(BINARY_DIVIDE) // Python 1.0 - 2.7 +OPCODE(BINARY_MODULO) // Python 1.0 - 3.10 +OPCODE(BINARY_ADD) // Python 1.0 - 3.10 +OPCODE(BINARY_SUBTRACT) // Python 1.0 - 3.10 +OPCODE(BINARY_SUBSCR) // Python 1.0 -> +OPCODE(BINARY_CALL) // Python 1.0 - 1.2 +OPCODE(SLICE_0) // Python 1.0 - 2.7 +OPCODE(SLICE_1) // Python 1.0 - 2.7 +OPCODE(SLICE_2) // Python 1.0 - 2.7 +OPCODE(SLICE_3) // Python 1.0 - 2.7 +OPCODE(STORE_SLICE_0) // Python 1.0 - 2.7 +OPCODE(STORE_SLICE_1) // Python 1.0 - 2.7 +OPCODE(STORE_SLICE_2) // Python 1.0 - 2.7 +OPCODE(STORE_SLICE_3) // Python 1.0 - 2.7 +OPCODE(DELETE_SLICE_0) // Python 1.0 - 2.7 +OPCODE(DELETE_SLICE_1) // Python 1.0 - 2.7 +OPCODE(DELETE_SLICE_2) // Python 1.0 - 2.7 +OPCODE(DELETE_SLICE_3) // Python 1.0 - 2.7 +OPCODE(STORE_SUBSCR) // Python 1.0 -> +OPCODE(DELETE_SUBSCR) // Python 1.0 -> +OPCODE(BINARY_LSHIFT) // Python 1.0 - 3.10 +OPCODE(BINARY_RSHIFT) // Python 1.0 - 3.10 +OPCODE(BINARY_AND) // Python 1.0 - 3.10 +OPCODE(BINARY_XOR) // Python 1.0 - 3.10 +OPCODE(BINARY_OR) // Python 1.0 - 3.10 +OPCODE(PRINT_EXPR) // Python 1.0 - 3.11 +OPCODE(PRINT_ITEM) // Python 1.0 - 2.7 +OPCODE(PRINT_NEWLINE) // Python 1.0 - 2.7 +OPCODE(BREAK_LOOP) // Python 1.0 - 3.7 +OPCODE(RAISE_EXCEPTION) // Python 1.0 - 1.2 +OPCODE(LOAD_LOCALS) // Python 1.0 - 2.7, 3.12 -> +OPCODE(RETURN_VALUE) // Python 1.0 -> +OPCODE(LOAD_GLOBALS) // Python 1.0 - 1.2 +OPCODE(EXEC_STMT) // Python 1.0 - 2.7 +OPCODE(BUILD_FUNCTION) // Python 1.0 - 1.2 +OPCODE(POP_BLOCK) // Python 1.0 - 3.10 +OPCODE(END_FINALLY) // Python 1.0 - 3.8 +OPCODE(BUILD_CLASS) // Python 1.0 - 2.7 +OPCODE(ROT_FOUR) // Python 2.0 - 3.1, 3.8 - 3.10 +OPCODE(NOP) // Python 2.4 -> +OPCODE(LIST_APPEND) // Python 2.4 - 2.6, 3.0 +OPCODE(BINARY_FLOOR_DIVIDE) // Python 2.2 - 3.10 +OPCODE(BINARY_TRUE_DIVIDE) // Python 2.2 - 3.10 +OPCODE(INPLACE_FLOOR_DIVIDE) // Python 2.2 - 3.10 +OPCODE(INPLACE_TRUE_DIVIDE) // Python 2.2 - 3.10 +OPCODE(GET_LEN) // Python 3.10 -> +OPCODE(MATCH_MAPPING) // Python 3.10 -> +OPCODE(MATCH_SEQUENCE) // Python 3.10 -> +OPCODE(MATCH_KEYS) // Python 3.10 -> +OPCODE(COPY_DICT_WITHOUT_KEYS) // Python 3.10 +OPCODE(STORE_MAP) // Python 2.6 - 3.4 +OPCODE(INPLACE_ADD) // Python 2.0 - 3.10 +OPCODE(INPLACE_SUBTRACT) // Python 2.0 - 3.10 +OPCODE(INPLACE_MULTIPLY) // Python 2.0 - 3.10 +OPCODE(INPLACE_DIVIDE) // Python 2.0 - 2.7 +OPCODE(INPLACE_MODULO) // Python 2.0 - 3.10 +OPCODE(INPLACE_POWER) // Python 2.0 - 3.10 +OPCODE(GET_ITER) // Python 2.2 -> +OPCODE(PRINT_ITEM_TO) // Python 2.0 - 2.7 +OPCODE(PRINT_NEWLINE_TO) // Python 2.0 - 2.7 +OPCODE(INPLACE_LSHIFT) // Python 2.0 - 3.10 +OPCODE(INPLACE_RSHIFT) // Python 2.0 - 3.10 +OPCODE(INPLACE_AND) // Python 2.0 - 3.10 +OPCODE(INPLACE_XOR) // Python 2.0 - 3.10 +OPCODE(INPLACE_OR) // Python 2.0 - 3.10 +OPCODE(WITH_CLEANUP) // Python 2.5 - 3.4 +OPCODE(WITH_CLEANUP_START) // Python 3.5 - 3.8 +OPCODE(WITH_CLEANUP_FINISH) // Python 3.5 - 3.8 +OPCODE(IMPORT_STAR) // Python 2.0 - 3.11 +OPCODE(SETUP_ANNOTATIONS) // Python 3.6 -> +OPCODE(YIELD_VALUE) // Python 2.2 - 3.11 +OPCODE(LOAD_BUILD_CLASS) // Python 3.0 -> +OPCODE(STORE_LOCALS) // Python 3.0 - 3.3 +OPCODE(POP_EXCEPT) // Python 3.0 -> +OPCODE(SET_ADD) // Python 3.0 +OPCODE(YIELD_FROM) // Python 3.3 - 3.10 +OPCODE(BINARY_MATRIX_MULTIPLY) // Python 3.5 - 3.10 +OPCODE(INPLACE_MATRIX_MULTIPLY) // Python 3.5 - 3.10 +OPCODE(GET_AITER) // Python 3.5 -> +OPCODE(GET_ANEXT) // Python 3.5 -> +OPCODE(BEFORE_ASYNC_WITH) // Python 3.5 -> +OPCODE(GET_YIELD_FROM_ITER) // Python 3.5 -> +OPCODE(GET_AWAITABLE) // Python 3.5 - 3.10 +OPCODE(BEGIN_FINALLY) // Python 3.8 +OPCODE(END_ASYNC_FOR) // Python 3.8 -> +OPCODE(RERAISE) // Python 3.9 +OPCODE(WITH_EXCEPT_START) // Python 3.9 -> +OPCODE(LOAD_ASSERTION_ERROR) // Python 3.9 -> +OPCODE(LIST_TO_TUPLE) // Python 3.9 - 3.11 +OPCODE(CACHE) // Python 3.11 -> +OPCODE(PUSH_NULL) // Python 3.11 -> +OPCODE(PUSH_EXC_INFO) // Python 3.11 -> +OPCODE(CHECK_EXC_MATCH) // Python 3.11 -> +OPCODE(CHECK_EG_MATCH) // Python 3.11 -> +OPCODE(BEFORE_WITH) // Python 3.11 -> +OPCODE(RETURN_GENERATOR) // Python 3.11 -> +OPCODE(ASYNC_GEN_WRAP) // Python 3.11 +OPCODE(PREP_RERAISE_STAR) // Python 3.11 +OPCODE(INTERPRETER_EXIT) // Python 3.12 -> +OPCODE(END_FOR) // Python 3.12 -> +OPCODE(END_SEND) // Python 3.12 -> +OPCODE(RESERVED) // Python 3.12 -> +OPCODE(BINARY_SLICE) // Python 3.12 -> +OPCODE(STORE_SLICE) // Python 3.12 -> +OPCODE(CLEANUP_THROW) // Python 3.12 -> /* Has parameter word */ -OPCODE_A_FIRST(STORE_NAME) -OPCODE_A(DELETE_NAME) -OPCODE_A(UNPACK_TUPLE) -OPCODE_A(UNPACK_LIST) -OPCODE_A(UNPACK_ARG) -OPCODE_A(STORE_ATTR) -OPCODE_A(DELETE_ATTR) -OPCODE_A(STORE_GLOBAL) -OPCODE_A(DELETE_GLOBAL) -OPCODE_A(ROT_N) -OPCODE_A(UNPACK_VARARG) -OPCODE_A(LOAD_CONST) -OPCODE_A(LOAD_NAME) -OPCODE_A(BUILD_TUPLE) -OPCODE_A(BUILD_LIST) -OPCODE_A(BUILD_MAP) -OPCODE_A(LOAD_ATTR) -OPCODE_A(COMPARE_OP) -OPCODE_A(IMPORT_NAME) -OPCODE_A(IMPORT_FROM) -OPCODE_A(ACCESS_MODE) -OPCODE_A(JUMP_FORWARD) -OPCODE_A(JUMP_IF_FALSE) -OPCODE_A(JUMP_IF_TRUE) -OPCODE_A(JUMP_ABSOLUTE) -OPCODE_A(FOR_LOOP) -OPCODE_A(LOAD_LOCAL) -OPCODE_A(LOAD_GLOBAL) -OPCODE_A(SET_FUNC_ARGS) -OPCODE_A(SETUP_LOOP) -OPCODE_A(SETUP_EXCEPT) -OPCODE_A(SETUP_FINALLY) -OPCODE_A(RESERVE_FAST) -OPCODE_A(LOAD_FAST) -OPCODE_A(STORE_FAST) -OPCODE_A(DELETE_FAST) -OPCODE_A(GEN_START) -OPCODE_A(SET_LINENO) -OPCODE_A(STORE_ANNOTATION) -OPCODE_A(RAISE_VARARGS) -OPCODE_A(CALL_FUNCTION) -OPCODE_A(MAKE_FUNCTION) -OPCODE_A(BUILD_SLICE) -OPCODE_A(CALL_FUNCTION_VAR) -OPCODE_A(CALL_FUNCTION_KW) -OPCODE_A(CALL_FUNCTION_VAR_KW) -OPCODE_A(CALL_FUNCTION_EX) -OPCODE_A(UNPACK_SEQUENCE) -OPCODE_A(FOR_ITER) -OPCODE_A(DUP_TOPX) -OPCODE_A(BUILD_SET) -OPCODE_A(JUMP_IF_FALSE_OR_POP) -OPCODE_A(JUMP_IF_TRUE_OR_POP) -OPCODE_A(POP_JUMP_IF_FALSE) -OPCODE_A(POP_JUMP_IF_TRUE) -OPCODE_A(CONTINUE_LOOP) -OPCODE_A(MAKE_CLOSURE) -OPCODE_A(LOAD_CLOSURE) -OPCODE_A(LOAD_DEREF) -OPCODE_A(STORE_DEREF) -OPCODE_A(DELETE_DEREF) -OPCODE_A(EXTENDED_ARG) -OPCODE_A(SETUP_WITH) -OPCODE_A(SET_ADD) -OPCODE_A(MAP_ADD) -OPCODE_A(UNPACK_EX) -OPCODE_A(LIST_APPEND) -OPCODE_A(LOAD_CLASSDEREF) -OPCODE_A(MATCH_CLASS) -OPCODE_A(BUILD_LIST_UNPACK) -OPCODE_A(BUILD_MAP_UNPACK) -OPCODE_A(BUILD_MAP_UNPACK_WITH_CALL) -OPCODE_A(BUILD_TUPLE_UNPACK) -OPCODE_A(BUILD_SET_UNPACK) -OPCODE_A(SETUP_ASYNC_WITH) -OPCODE_A(FORMAT_VALUE) -OPCODE_A(BUILD_CONST_KEY_MAP) -OPCODE_A(BUILD_STRING) -OPCODE_A(BUILD_TUPLE_UNPACK_WITH_CALL) -OPCODE_A(LOAD_METHOD) -OPCODE_A(CALL_METHOD) -OPCODE_A(CALL_FINALLY) -OPCODE_A(POP_FINALLY) -OPCODE_A(IS_OP) -OPCODE_A(CONTAINS_OP) -OPCODE_A(RERAISE) -OPCODE_A(JUMP_IF_NOT_EXC_MATCH) -OPCODE_A(LIST_EXTEND) -OPCODE_A(SET_UPDATE) -OPCODE_A(DICT_MERGE) -OPCODE_A(DICT_UPDATE) -OPCODE_A(SWAP) -OPCODE_A(POP_JUMP_FORWARD_IF_FALSE) -OPCODE_A(POP_JUMP_FORWARD_IF_TRUE) -OPCODE_A(COPY) -OPCODE_A(BINARY_OP) -OPCODE_A(SEND) -OPCODE_A(POP_JUMP_FORWARD_IF_NOT_NONE) -OPCODE_A(POP_JUMP_FORWARD_IF_NONE) -OPCODE_A(GET_AWAITABLE) -OPCODE_A(JUMP_BACKWARD_NO_INTERRUPT) -OPCODE_A(MAKE_CELL) -OPCODE_A(JUMP_BACKWARD) -OPCODE_A(COPY_FREE_VARS) -OPCODE_A(RESUME) -OPCODE_A(PRECALL) -OPCODE_A(CALL) -OPCODE_A(KW_NAMES) -OPCODE_A(POP_JUMP_BACKWARD_IF_NOT_NONE) -OPCODE_A(POP_JUMP_BACKWARD_IF_NONE) -OPCODE_A(POP_JUMP_BACKWARD_IF_FALSE) -OPCODE_A(POP_JUMP_BACKWARD_IF_TRUE) -OPCODE_A(RETURN_CONST) -OPCODE_A(LOAD_FAST_CHECK) -OPCODE_A(POP_JUMP_IF_NOT_NONE) -OPCODE_A(POP_JUMP_IF_NONE) -OPCODE_A(LOAD_SUPER_ATTR) -OPCODE_A(LOAD_FAST_AND_CLEAR) -OPCODE_A(YIELD_VALUE) -OPCODE_A(CALL_INTRINSIC_1) -OPCODE_A(CALL_INTRINSIC_2) -OPCODE_A(LOAD_FROM_DICT_OR_GLOBALS) -OPCODE_A(LOAD_FROM_DICT_OR_DEREF) +OPCODE_A_FIRST(STORE_NAME) // Python 1.0 -> names[A] +OPCODE_A(DELETE_NAME) // Python 1.0 -> names[A] +OPCODE_A(UNPACK_TUPLE) // Python 1.0 - 1.6 A=count +OPCODE_A(UNPACK_LIST) // Python 1.0 - 1.6 A=count +OPCODE_A(UNPACK_ARG) // Python 1.0 - 1.4 A=count +OPCODE_A(STORE_ATTR) // Python 1.0 -> names[A] +OPCODE_A(DELETE_ATTR) // Python 1.0 -> names[A] +OPCODE_A(STORE_GLOBAL) // Python 1.0 -> names[A] +OPCODE_A(DELETE_GLOBAL) // Python 1.0 -> names[A] +OPCODE_A(ROT_N) // Python 3.10 A=count +OPCODE_A(UNPACK_VARARG) // Python 1.0 - 1.4 A=count +OPCODE_A(LOAD_CONST) // Python 1.0 -> consts[A] +OPCODE_A(LOAD_NAME) // Python 1.0 -> names[A] +OPCODE_A(BUILD_TUPLE) // Python 1.0 -> A=size +OPCODE_A(BUILD_LIST) // Python 1.0 -> A=size +OPCODE_A(BUILD_MAP) // Python 1.0 -> A=size +OPCODE_A(LOAD_ATTR) // Python 1.0 -> names[A] +OPCODE_A(COMPARE_OP) // Python 1.0 -> cmp_ops[A] +OPCODE_A(IMPORT_NAME) // Python 1.0 -> names[A] +OPCODE_A(IMPORT_FROM) // Python 1.0 -> names[A] +OPCODE_A(ACCESS_MODE) // Python 1.0 - 1.4 names[A] +OPCODE_A(JUMP_FORWARD) // Python 1.0 -> rel jmp +A +OPCODE_A(JUMP_IF_FALSE) // Python 1.0 - 2.6, 3.0 rel jmp +A +OPCODE_A(JUMP_IF_TRUE) // Python 1.0 - 2.6, 3.0 rel jmp +A +OPCODE_A(JUMP_ABSOLUTE) // Python 1.0 - 3.10 abs jmp A +OPCODE_A(FOR_LOOP) // Python 1.0 - 2.2 rel jmp +A +OPCODE_A(LOAD_LOCAL) // Python 1.0 - 1.4 names[A] +OPCODE_A(LOAD_GLOBAL) // Python 1.0 -> names[A] +OPCODE_A(SET_FUNC_ARGS) // Python 1.1 - 1.4 A=count +OPCODE_A(SETUP_LOOP) // Python 1.0 - 3.7 rel jmp +A +OPCODE_A(SETUP_EXCEPT) // Python 1.0 - 3.7 rel jmp +A +OPCODE_A(SETUP_FINALLY) // Python 1.0 - 3.10 rel jmp +A +OPCODE_A(RESERVE_FAST) // Python 1.0 - 1.2 A=count +OPCODE_A(LOAD_FAST) // Python 1.0 -> locals[A] +OPCODE_A(STORE_FAST) // Python 1.0 -> locals[A] +OPCODE_A(DELETE_FAST) // Python 1.0 -> locals[A] +OPCODE_A(GEN_START) // Python 3.10 ??? +OPCODE_A(SET_LINENO) // Python 1.0 - 2.2 A=line +OPCODE_A(STORE_ANNOTATION) // Python 3.6 names[A] +OPCODE_A(RAISE_VARARGS) // Python 1.3 -> A=count +OPCODE_A(CALL_FUNCTION) // Python 1.3 - 3.5 A=(#args)+(#kwargs<<8) + // Python 3.6 - 3.10 A=#args +OPCODE_A(MAKE_FUNCTION) // Python 1.3 - 2.7 A=#defaults + // Python 3.0 - 3.5 A=(#defaults)+(#kwdefaults<<8)+(#annotations<<16) + // Python 3.6 -> A=flags +OPCODE_A(BUILD_SLICE) // Python 1.4 -> A=count +OPCODE_A(CALL_FUNCTION_VAR) // Python 1.6 - 3.5 A=(#args)+(#kwargs<<8) +OPCODE_A(CALL_FUNCTION_KW) // Python 1.6 - 3.5 A=(#args)+(#kwargs<<8) + // Python 3.6 - 3.10 A=#args +OPCODE_A(CALL_FUNCTION_VAR_KW) // Python 1.6 - 3.5 A=(#args)+(#kwargs<<8) +OPCODE_A(CALL_FUNCTION_EX) // Python 3.6 -> A=flags +OPCODE_A(UNPACK_SEQUENCE) // Python 2.0 -> A=count +OPCODE_A(FOR_ITER) // Python 2.0 -> rel jmp +A +OPCODE_A(DUP_TOPX) // Python 2.0 - 3.1 A=count +OPCODE_A(BUILD_SET) // Python 2.7 -> A=size +OPCODE_A(JUMP_IF_FALSE_OR_POP) // Python 2.7, 3.1 - 3.11 abs jmp A +OPCODE_A(JUMP_IF_TRUE_OR_POP) // Python 2.7, 3.1 - 3.11 abs jmp A +OPCODE_A(POP_JUMP_IF_FALSE) // Python 2.7, 3.1 - 3.10 abs jmp A + // Python 3.12 -> rel jmp +A +OPCODE_A(POP_JUMP_IF_TRUE) // Python 2.7, 3.1 - 3.10 abs jmp A + // Python 3.12 -> rel jmp +A +OPCODE_A(CONTINUE_LOOP) // Python 2.1 - 3.7 abs jmp A +OPCODE_A(MAKE_CLOSURE) // Python 2.1 - 2.7 A=#defaults + // Python 3.0 - 3.5 A=(#defaults)+(#kwdefaults<<8)+(#annotations<<16) +OPCODE_A(LOAD_CLOSURE) // Python 2.1 -> freevars[A] +OPCODE_A(LOAD_DEREF) // Python 2.1 -> freevars[A] +OPCODE_A(STORE_DEREF) // Python 2.1 -> freevars[A] +OPCODE_A(DELETE_DEREF) // Python 3.2 -> freevars[A] +OPCODE_A(EXTENDED_ARG) // Python 2.0 -> A=extended_arg +OPCODE_A(SETUP_WITH) // Python 2.7, 3.2 - 3.10 rel jmp +A +OPCODE_A(SET_ADD) // Python 2.7, 3.1 -> stack[A] +OPCODE_A(MAP_ADD) // Python 2.7, 3.1 -> stack[A] +OPCODE_A(UNPACK_EX) // Python 3.0 -> A=(before)+(after<<8) +OPCODE_A(LIST_APPEND) // Python 2.7, 3.1 -> stack[A] +OPCODE_A(LOAD_CLASSDEREF) // Python 3.4 - 3.10 (cellvars+freevars)[A] + // Python 3.11 localsplusnames[A] +OPCODE_A(MATCH_CLASS) // Python 3.10 -> A=#args +OPCODE_A(BUILD_LIST_UNPACK) // Python 3.5 - 3.8 A=count +OPCODE_A(BUILD_MAP_UNPACK) // Python 3.5 - 3.8 A=count +OPCODE_A(BUILD_MAP_UNPACK_WITH_CALL) // Python 3.5 A=(count)+(fnloc<<8) + // Python 3.6 - 3.8 A=count +OPCODE_A(BUILD_TUPLE_UNPACK) // Python 3.5 - 3.8 A=count +OPCODE_A(BUILD_SET_UNPACK) // Python 3.5 - 3.8 A=count +OPCODE_A(SETUP_ASYNC_WITH) // Python 3.5 - 3.10 rel jmp +A +OPCODE_A(FORMAT_VALUE) // Python 3.6 -> A=conversion_type +OPCODE_A(BUILD_CONST_KEY_MAP) // Python 3.6 -> A=count +OPCODE_A(BUILD_STRING) // Python 3.6 -> A=count +OPCODE_A(BUILD_TUPLE_UNPACK_WITH_CALL) // Python 3.6 - 3.8 A=count +OPCODE_A(LOAD_METHOD) // Python 3.7 - 3.11 names[A] +OPCODE_A(CALL_METHOD) // Python 3.7 - 3.10 A=#args +OPCODE_A(CALL_FINALLY) // Python 3.8 rel jmp +A +OPCODE_A(POP_FINALLY) // Python 3.8 A=flags +OPCODE_A(IS_OP) // Python 3.9 -> A=inverted +OPCODE_A(CONTAINS_OP) // Python 3.9 -> A=inverted +OPCODE_A(RERAISE) // Python 3.10 -> A=flag +OPCODE_A(JUMP_IF_NOT_EXC_MATCH) // Python 3.9 - 3.10 abs jmp A +OPCODE_A(LIST_EXTEND) // Python 3.9 -> stack[A] +OPCODE_A(SET_UPDATE) // Python 3.9 -> stack[A] +OPCODE_A(DICT_MERGE) // Python 3.9 -> stack[A] +OPCODE_A(DICT_UPDATE) // Python 3.9 -> stack[A] +OPCODE_A(SWAP) // Python 3.11 -> stack[A] +OPCODE_A(POP_JUMP_FORWARD_IF_FALSE) // Python 3.11 rel jmp +A +OPCODE_A(POP_JUMP_FORWARD_IF_TRUE) // Python 3.11 rel jmp +A +OPCODE_A(COPY) // Python 3.11 -> stack[A] +OPCODE_A(BINARY_OP) // Python 3.11 -> bin_ops[A] +OPCODE_A(SEND) // Python 3.11 -> rel jmp +A +OPCODE_A(POP_JUMP_FORWARD_IF_NOT_NONE) // Python 3.11 rel jmp +A +OPCODE_A(POP_JUMP_FORWARD_IF_NONE) // Python 3.11 rel jmp +A +OPCODE_A(GET_AWAITABLE) // Python 3.11 -> A=awaitable_type +OPCODE_A(JUMP_BACKWARD_NO_INTERRUPT) // Python 3.11 -> rel jmp -A +OPCODE_A(MAKE_CELL) // Python 3.11 -> locals[A] +OPCODE_A(JUMP_BACKWARD) // Python 3.11 -> rel jmp -A +OPCODE_A(COPY_FREE_VARS) // Python 3.11 -> A=count +OPCODE_A(RESUME) // Python 3.11 -> ??? +OPCODE_A(PRECALL) // Python 3.11 A=#args +OPCODE_A(CALL) // Python 3.11 -> A=#args +OPCODE_A(KW_NAMES) // Python 3.11 -> consts[A] +OPCODE_A(POP_JUMP_BACKWARD_IF_NOT_NONE) // Python 3.11 jmp rel -A +OPCODE_A(POP_JUMP_BACKWARD_IF_NONE) // Python 3.11 jmp rel -A +OPCODE_A(POP_JUMP_BACKWARD_IF_FALSE) // Python 3.11 jmp rel -A +OPCODE_A(POP_JUMP_BACKWARD_IF_TRUE) // Python 3.11 jmp rel -A +OPCODE_A(RETURN_CONST) // Python 3.12 -> consts[A] +OPCODE_A(LOAD_FAST_CHECK) // Python 3.12 -> locals[A] +OPCODE_A(POP_JUMP_IF_NOT_NONE) // Python 3.12 -> rel jmp +A +OPCODE_A(POP_JUMP_IF_NONE) // Python 3.12 -> rel jmp +A +OPCODE_A(LOAD_SUPER_ATTR) // Python 3.12 -> A=(flags&0x3)+names[A<<2] +OPCODE_A(LOAD_FAST_AND_CLEAR) // Python 3.12 -> locals[A] +OPCODE_A(YIELD_VALUE) // Python 3.12 -> ??? +OPCODE_A(CALL_INTRINSIC_1) // Python 3.12 -> intrinsics_1[A] +OPCODE_A(CALL_INTRINSIC_2) // Python 3.12 -> intrinsics_2[A] +OPCODE_A(LOAD_FROM_DICT_OR_GLOBALS) // Python 3.12 -> names[A] +OPCODE_A(LOAD_FROM_DICT_OR_DEREF) // Python 3.12 -> localsplusnames[A] -OPCODE_A(INSTRUMENTED_LOAD_SUPER_ATTR) -OPCODE_A(INSTRUMENTED_POP_JUMP_IF_NONE) -OPCODE_A(INSTRUMENTED_POP_JUMP_IF_NOT_NONE) -OPCODE_A(INSTRUMENTED_RESUME) -OPCODE_A(INSTRUMENTED_CALL) -OPCODE_A(INSTRUMENTED_RETURN_VALUE) -OPCODE_A(INSTRUMENTED_YIELD_VALUE) -OPCODE_A(INSTRUMENTED_CALL_FUNCTION_EX) -OPCODE_A(INSTRUMENTED_JUMP_FORWARD) -OPCODE_A(INSTRUMENTED_JUMP_BACKWARD) -OPCODE_A(INSTRUMENTED_RETURN_CONST) -OPCODE_A(INSTRUMENTED_FOR_ITER) -OPCODE_A(INSTRUMENTED_POP_JUMP_IF_FALSE) -OPCODE_A(INSTRUMENTED_POP_JUMP_IF_TRUE) -OPCODE_A(INSTRUMENTED_END_FOR) -OPCODE_A(INSTRUMENTED_END_SEND) -OPCODE_A(INSTRUMENTED_INSTRUCTION) -OPCODE_A(INSTRUMENTED_LINE) +/* Instrumented opcodes */ +OPCODE_A(INSTRUMENTED_LOAD_SUPER_ATTR) // Python 3.12 -> (see LOAD_SUPER_ATTR) +OPCODE_A(INSTRUMENTED_POP_JUMP_IF_NONE) // Python 3.12 -> (see POP_JUMP_IF_NONE) +OPCODE_A(INSTRUMENTED_POP_JUMP_IF_NOT_NONE) // Python 3.12 -> (see POP_JUMP_IF_NOT_NONE) +OPCODE_A(INSTRUMENTED_RESUME) // Python 3.12 -> (see RESUME) +OPCODE_A(INSTRUMENTED_CALL) // Python 3.12 -> (see CALL) +OPCODE_A(INSTRUMENTED_RETURN_VALUE) // Python 3.12 -> (see RETURN_VALUE) +OPCODE_A(INSTRUMENTED_YIELD_VALUE) // Python 3.12 -> (see YIELD_VALUE) +OPCODE_A(INSTRUMENTED_CALL_FUNCTION_EX) // Python 3.12 -> (see CALL_FUNCTION_EX) +OPCODE_A(INSTRUMENTED_JUMP_FORWARD) // Python 3.12 -> (see JUMP_FORWARD) +OPCODE_A(INSTRUMENTED_JUMP_BACKWARD) // Python 3.12 -> (see JUMP_BACKWARD) +OPCODE_A(INSTRUMENTED_RETURN_CONST) // Python 3.12 -> (see RETURN_CONST) +OPCODE_A(INSTRUMENTED_FOR_ITER) // Python 3.12 -> (see FOR_ITER) +OPCODE_A(INSTRUMENTED_POP_JUMP_IF_FALSE) // Python 3.12 -> (see POP_JUMP_IF_FALSE) +OPCODE_A(INSTRUMENTED_POP_JUMP_IF_TRUE) // Python 3.12 -> (see POP_JUMP_IF_TRUE) +OPCODE_A(INSTRUMENTED_END_FOR) // Python 3.12 -> (see END_FOR) +OPCODE_A(INSTRUMENTED_END_SEND) // Python 3.12 -> (see END_SEND) +OPCODE_A(INSTRUMENTED_INSTRUCTION) // Python 3.12 -> ??? +OPCODE_A(INSTRUMENTED_LINE) // Python 3.12 -> ???