summaryrefslogtreecommitdiffstats
path: root/Python/opcode_metadata.h
diff options
context:
space:
mode:
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>2023-06-14 23:14:22 (GMT)
committerGitHub <noreply@github.com>2023-06-14 23:14:22 (GMT)
commitd1b0297d3e1cb4f9f53070e6c0a5fd6722bdf6ee (patch)
tree5849dfa6be4e9d5432fe5c5a2771755216fc4834 /Python/opcode_metadata.h
parent5ab13c5f97aa5226c49052f1ad19a8c97a3d7cdf (diff)
downloadcpython-d1b0297d3e1cb4f9f53070e6c0a5fd6722bdf6ee.zip
cpython-d1b0297d3e1cb4f9f53070e6c0a5fd6722bdf6ee.tar.gz
cpython-d1b0297d3e1cb4f9f53070e6c0a5fd6722bdf6ee.tar.bz2
gh-105481: add HAS_JUMP flag to opcode metadata (#105791)
Diffstat (limited to 'Python/opcode_metadata.h')
-rw-r--r--Python/opcode_metadata.h30
1 files changed, 16 insertions, 14 deletions
diff --git a/Python/opcode_metadata.h b/Python/opcode_metadata.h
index d1057e3..aa1db72 100644
--- a/Python/opcode_metadata.h
+++ b/Python/opcode_metadata.h
@@ -866,9 +866,11 @@ enum InstructionFormat { INSTR_FMT_IB, INSTR_FMT_IBC, INSTR_FMT_IBC00, INSTR_FMT
#define HAS_ARG_FLAG (1)
#define HAS_CONST_FLAG (2)
#define HAS_NAME_FLAG (4)
+#define HAS_JUMP_FLAG (8)
#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))
struct opcode_metadata {
bool valid_entry;
enum InstructionFormat instr_format;
@@ -937,7 +939,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[512] = {
[GET_AITER] = { true, INSTR_FMT_IX, 0 },
[GET_ANEXT] = { true, INSTR_FMT_IX, 0 },
[GET_AWAITABLE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
- [SEND] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
+ [SEND] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
[SEND_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
[INSTRUMENTED_YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
[YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
@@ -1012,16 +1014,16 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[512] = {
[CHECK_EXC_MATCH] = { true, INSTR_FMT_IX, 0 },
[IMPORT_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG },
[IMPORT_FROM] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG },
- [JUMP_FORWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
- [JUMP_BACKWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
- [JUMP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
- [JUMP_NO_INTERRUPT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
+ [JUMP_FORWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
+ [JUMP_BACKWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
+ [JUMP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
+ [JUMP_NO_INTERRUPT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
[ENTER_EXECUTOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
- [POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
- [POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
- [POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
- [POP_JUMP_IF_NONE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
- [JUMP_BACKWARD_NO_INTERRUPT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
+ [POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
+ [POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
+ [POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
+ [POP_JUMP_IF_NONE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
+ [JUMP_BACKWARD_NO_INTERRUPT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
[GET_LEN] = { true, INSTR_FMT_IX, 0 },
[MATCH_CLASS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
[MATCH_MAPPING] = { true, INSTR_FMT_IX, 0 },
@@ -1029,11 +1031,11 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[512] = {
[MATCH_KEYS] = { true, INSTR_FMT_IX, 0 },
[GET_ITER] = { true, INSTR_FMT_IX, 0 },
[GET_YIELD_FROM_ITER] = { true, INSTR_FMT_IX, 0 },
- [FOR_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
+ [FOR_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
[INSTRUMENTED_FOR_ITER] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
- [FOR_ITER_LIST] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
- [FOR_ITER_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
- [FOR_ITER_RANGE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
+ [FOR_ITER_LIST] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
+ [FOR_ITER_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
+ [FOR_ITER_RANGE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
[FOR_ITER_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
[BEFORE_ASYNC_WITH] = { true, INSTR_FMT_IX, 0 },
[BEFORE_WITH] = { true, INSTR_FMT_IX, 0 },