@@ -867,10 +867,12 @@ enum InstructionFormat { INSTR_FMT_IB, INSTR_FMT_IBC, INSTR_FMT_IBC00, INSTR_FMT
867
867
#define HAS_CONST_FLAG (2)
868
868
#define HAS_NAME_FLAG (4)
869
869
#define HAS_JUMP_FLAG (8)
870
+ #define IS_UOP_FLAG (16)
870
871
#define OPCODE_HAS_ARG (OP ) (_PyOpcode_opcode_metadata[(OP)].flags & (HAS_ARG_FLAG))
871
872
#define OPCODE_HAS_CONST (OP ) (_PyOpcode_opcode_metadata[(OP)].flags & (HAS_CONST_FLAG))
872
873
#define OPCODE_HAS_NAME (OP ) (_PyOpcode_opcode_metadata[(OP)].flags & (HAS_NAME_FLAG))
873
874
#define OPCODE_HAS_JUMP (OP ) (_PyOpcode_opcode_metadata[(OP)].flags & (HAS_JUMP_FLAG))
875
+ #define OPCODE_IS_UOP (OP ) (_PyOpcode_opcode_metadata[(OP)].flags & (IS_UOP_FLAG))
874
876
struct opcode_metadata {
875
877
bool valid_entry ;
876
878
enum InstructionFormat instr_format ;
@@ -885,34 +887,34 @@ struct opcode_metadata {
885
887
extern const struct opcode_metadata _PyOpcode_opcode_metadata [512 ];
886
888
#else
887
889
const struct opcode_metadata _PyOpcode_opcode_metadata [512 ] = {
888
- [NOP ] = { true, INSTR_FMT_IX , 0 },
890
+ [NOP ] = { true, INSTR_FMT_IX , IS_UOP_FLAG },
889
891
[RESUME ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
890
892
[INSTRUMENTED_RESUME ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
891
893
[LOAD_CLOSURE ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
892
894
[LOAD_FAST_CHECK ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
893
- [LOAD_FAST ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
894
- [LOAD_FAST_AND_CLEAR ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
895
+ [LOAD_FAST ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | IS_UOP_FLAG },
896
+ [LOAD_FAST_AND_CLEAR ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | IS_UOP_FLAG },
895
897
[LOAD_FAST_LOAD_FAST ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
896
- [LOAD_CONST ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | HAS_CONST_FLAG },
897
- [STORE_FAST ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
898
- [STORE_FAST_MAYBE_NULL ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
898
+ [LOAD_CONST ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | HAS_CONST_FLAG | IS_UOP_FLAG },
899
+ [STORE_FAST ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | IS_UOP_FLAG },
900
+ [STORE_FAST_MAYBE_NULL ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | IS_UOP_FLAG },
899
901
[STORE_FAST_LOAD_FAST ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
900
902
[STORE_FAST_STORE_FAST ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
901
- [POP_TOP ] = { true, INSTR_FMT_IX , 0 },
902
- [PUSH_NULL ] = { true, INSTR_FMT_IX , 0 },
903
- [END_FOR ] = { true, INSTR_FMT_IB , 0 },
903
+ [POP_TOP ] = { true, INSTR_FMT_IX , IS_UOP_FLAG },
904
+ [PUSH_NULL ] = { true, INSTR_FMT_IX , IS_UOP_FLAG },
905
+ [END_FOR ] = { true, INSTR_FMT_IB , IS_UOP_FLAG },
904
906
[INSTRUMENTED_END_FOR ] = { true, INSTR_FMT_IX , 0 },
905
- [END_SEND ] = { true, INSTR_FMT_IX , 0 },
907
+ [END_SEND ] = { true, INSTR_FMT_IX , IS_UOP_FLAG },
906
908
[INSTRUMENTED_END_SEND ] = { true, INSTR_FMT_IX , 0 },
907
909
[UNARY_NEGATIVE ] = { true, INSTR_FMT_IX , 0 },
908
910
[UNARY_NOT ] = { true, INSTR_FMT_IX , 0 },
909
911
[UNARY_INVERT ] = { true, INSTR_FMT_IX , 0 },
910
912
[BINARY_OP_MULTIPLY_INT ] = { true, INSTR_FMT_IBC , 0 },
911
913
[BINARY_OP_ADD_INT ] = { true, INSTR_FMT_IBC , 0 },
912
914
[BINARY_OP_SUBTRACT_INT ] = { true, INSTR_FMT_IBC , 0 },
913
- [BINARY_OP_MULTIPLY_FLOAT ] = { true, INSTR_FMT_IBC , 0 },
914
- [BINARY_OP_ADD_FLOAT ] = { true, INSTR_FMT_IBC , 0 },
915
- [BINARY_OP_SUBTRACT_FLOAT ] = { true, INSTR_FMT_IBC , 0 },
915
+ [BINARY_OP_MULTIPLY_FLOAT ] = { true, INSTR_FMT_IBC , IS_UOP_FLAG },
916
+ [BINARY_OP_ADD_FLOAT ] = { true, INSTR_FMT_IBC , IS_UOP_FLAG },
917
+ [BINARY_OP_SUBTRACT_FLOAT ] = { true, INSTR_FMT_IBC , IS_UOP_FLAG },
916
918
[BINARY_OP_ADD_UNICODE ] = { true, INSTR_FMT_IBC , 0 },
917
919
[BINARY_OP_INPLACE_ADD_UNICODE ] = { true, INSTR_FMT_IB , 0 },
918
920
[BINARY_SUBSCR ] = { true, INSTR_FMT_IXC , 0 },
@@ -947,7 +949,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[512] = {
947
949
[RERAISE ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
948
950
[END_ASYNC_FOR ] = { true, INSTR_FMT_IX , 0 },
949
951
[CLEANUP_THROW ] = { true, INSTR_FMT_IX , 0 },
950
- [LOAD_ASSERTION_ERROR ] = { true, INSTR_FMT_IX , 0 },
952
+ [LOAD_ASSERTION_ERROR ] = { true, INSTR_FMT_IX , IS_UOP_FLAG },
951
953
[LOAD_BUILD_CLASS ] = { true, INSTR_FMT_IX , 0 },
952
954
[STORE_NAME ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | HAS_NAME_FLAG },
953
955
[DELETE_NAME ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | HAS_NAME_FLAG },
@@ -971,8 +973,8 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[512] = {
971
973
[DELETE_DEREF ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
972
974
[LOAD_FROM_DICT_OR_DEREF ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
973
975
[LOAD_DEREF ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
974
- [STORE_DEREF ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
975
- [COPY_FREE_VARS ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
976
+ [STORE_DEREF ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | IS_UOP_FLAG },
977
+ [COPY_FREE_VARS ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | IS_UOP_FLAG },
976
978
[BUILD_STRING ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
977
979
[BUILD_TUPLE ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
978
980
[BUILD_LIST ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
@@ -1008,7 +1010,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[512] = {
1008
1010
[COMPARE_OP_FLOAT ] = { true, INSTR_FMT_IBC , HAS_ARG_FLAG },
1009
1011
[COMPARE_OP_INT ] = { true, INSTR_FMT_IBC , HAS_ARG_FLAG },
1010
1012
[COMPARE_OP_STR ] = { true, INSTR_FMT_IBC , HAS_ARG_FLAG },
1011
- [IS_OP ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
1013
+ [IS_OP ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | IS_UOP_FLAG },
1012
1014
[CONTAINS_OP ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
1013
1015
[CHECK_EG_MATCH ] = { true, INSTR_FMT_IX , 0 },
1014
1016
[CHECK_EXC_MATCH ] = { true, INSTR_FMT_IX , 0 },
@@ -1026,8 +1028,8 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[512] = {
1026
1028
[JUMP_BACKWARD_NO_INTERRUPT ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | HAS_JUMP_FLAG },
1027
1029
[GET_LEN ] = { true, INSTR_FMT_IX , 0 },
1028
1030
[MATCH_CLASS ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
1029
- [MATCH_MAPPING ] = { true, INSTR_FMT_IX , 0 },
1030
- [MATCH_SEQUENCE ] = { true, INSTR_FMT_IX , 0 },
1031
+ [MATCH_MAPPING ] = { true, INSTR_FMT_IX , IS_UOP_FLAG },
1032
+ [MATCH_SEQUENCE ] = { true, INSTR_FMT_IX , IS_UOP_FLAG },
1031
1033
[MATCH_KEYS ] = { true, INSTR_FMT_IX , 0 },
1032
1034
[GET_ITER ] = { true, INSTR_FMT_IX , 0 },
1033
1035
[GET_YIELD_FROM_ITER ] = { true, INSTR_FMT_IX , 0 },
@@ -1040,10 +1042,10 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[512] = {
1040
1042
[BEFORE_ASYNC_WITH ] = { true, INSTR_FMT_IX , 0 },
1041
1043
[BEFORE_WITH ] = { true, INSTR_FMT_IX , 0 },
1042
1044
[WITH_EXCEPT_START ] = { true, INSTR_FMT_IX , 0 },
1043
- [SETUP_FINALLY ] = { true, INSTR_FMT_IX , 0 },
1044
- [SETUP_CLEANUP ] = { true, INSTR_FMT_IX , 0 },
1045
- [SETUP_WITH ] = { true, INSTR_FMT_IX , 0 },
1046
- [POP_BLOCK ] = { true, INSTR_FMT_IX , 0 },
1045
+ [SETUP_FINALLY ] = { true, INSTR_FMT_IX , IS_UOP_FLAG },
1046
+ [SETUP_CLEANUP ] = { true, INSTR_FMT_IX , IS_UOP_FLAG },
1047
+ [SETUP_WITH ] = { true, INSTR_FMT_IX , IS_UOP_FLAG },
1048
+ [POP_BLOCK ] = { true, INSTR_FMT_IX , IS_UOP_FLAG },
1047
1049
[PUSH_EXC_INFO ] = { true, INSTR_FMT_IX , 0 },
1048
1050
[LOAD_ATTR_METHOD_WITH_VALUES ] = { true, INSTR_FMT_IBC00000000 , HAS_ARG_FLAG },
1049
1051
[LOAD_ATTR_METHOD_NO_DICT ] = { true, INSTR_FMT_IBC00000000 , HAS_ARG_FLAG },
@@ -1077,9 +1079,9 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[512] = {
1077
1079
[CONVERT_VALUE ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
1078
1080
[FORMAT_SIMPLE ] = { true, INSTR_FMT_IX , 0 },
1079
1081
[FORMAT_WITH_SPEC ] = { true, INSTR_FMT_IX , 0 },
1080
- [COPY ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
1082
+ [COPY ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | IS_UOP_FLAG },
1081
1083
[BINARY_OP ] = { true, INSTR_FMT_IBC , HAS_ARG_FLAG },
1082
- [SWAP ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
1084
+ [SWAP ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG | IS_UOP_FLAG },
1083
1085
[INSTRUMENTED_INSTRUCTION ] = { true, INSTR_FMT_IX , 0 },
1084
1086
[INSTRUMENTED_JUMP_FORWARD ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
1085
1087
[INSTRUMENTED_JUMP_BACKWARD ] = { true, INSTR_FMT_IB , HAS_ARG_FLAG },
0 commit comments