mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
gh-106529: Support JUMP_BACKWARD in Tier 2 (uops) (#106543)
During superblock generation, a JUMP_BACKWARD instruction is translated to either a JUMP_TO_TOP micro-op (when the target of the jump is exactly the beginning of the superblock, closing the loop), or a SAVE_IP + EXIT_TRACE pair, when the jump goes elsewhere. The new JUMP_TO_TOP instruction includes a CHECK_EVAL_BREAKER() call, so a closed loop can still be interrupted.
This commit is contained in:
parent
292ac4bfe9
commit
cabd6e8a10
5 changed files with 63 additions and 30 deletions
54
Python/opcode_metadata.h
generated
54
Python/opcode_metadata.h
generated
|
@ -23,19 +23,20 @@
|
|||
#define SAVE_IP 301
|
||||
#define _POP_JUMP_IF_FALSE 302
|
||||
#define _POP_JUMP_IF_TRUE 303
|
||||
#define _GUARD_BOTH_INT 304
|
||||
#define _BINARY_OP_MULTIPLY_INT 305
|
||||
#define _BINARY_OP_ADD_INT 306
|
||||
#define _BINARY_OP_SUBTRACT_INT 307
|
||||
#define _GUARD_BOTH_FLOAT 308
|
||||
#define _BINARY_OP_MULTIPLY_FLOAT 309
|
||||
#define _BINARY_OP_ADD_FLOAT 310
|
||||
#define _BINARY_OP_SUBTRACT_FLOAT 311
|
||||
#define _GUARD_BOTH_UNICODE 312
|
||||
#define _BINARY_OP_ADD_UNICODE 313
|
||||
#define _LOAD_LOCALS 314
|
||||
#define _LOAD_FROM_DICT_OR_GLOBALS 315
|
||||
#define IS_NONE 316
|
||||
#define JUMP_TO_TOP 304
|
||||
#define _GUARD_BOTH_INT 305
|
||||
#define _BINARY_OP_MULTIPLY_INT 306
|
||||
#define _BINARY_OP_ADD_INT 307
|
||||
#define _BINARY_OP_SUBTRACT_INT 308
|
||||
#define _GUARD_BOTH_FLOAT 309
|
||||
#define _BINARY_OP_MULTIPLY_FLOAT 310
|
||||
#define _BINARY_OP_ADD_FLOAT 311
|
||||
#define _BINARY_OP_SUBTRACT_FLOAT 312
|
||||
#define _GUARD_BOTH_UNICODE 313
|
||||
#define _BINARY_OP_ADD_UNICODE 314
|
||||
#define _LOAD_LOCALS 315
|
||||
#define _LOAD_FROM_DICT_OR_GLOBALS 316
|
||||
#define IS_NONE 317
|
||||
|
||||
#ifndef NEED_OPCODE_METADATA
|
||||
extern int _PyOpcode_num_popped(int opcode, int oparg, bool jump);
|
||||
|
@ -1298,18 +1299,19 @@ const char * const _PyOpcode_uop_name[512] = {
|
|||
[301] = "SAVE_IP",
|
||||
[302] = "_POP_JUMP_IF_FALSE",
|
||||
[303] = "_POP_JUMP_IF_TRUE",
|
||||
[304] = "_GUARD_BOTH_INT",
|
||||
[305] = "_BINARY_OP_MULTIPLY_INT",
|
||||
[306] = "_BINARY_OP_ADD_INT",
|
||||
[307] = "_BINARY_OP_SUBTRACT_INT",
|
||||
[308] = "_GUARD_BOTH_FLOAT",
|
||||
[309] = "_BINARY_OP_MULTIPLY_FLOAT",
|
||||
[310] = "_BINARY_OP_ADD_FLOAT",
|
||||
[311] = "_BINARY_OP_SUBTRACT_FLOAT",
|
||||
[312] = "_GUARD_BOTH_UNICODE",
|
||||
[313] = "_BINARY_OP_ADD_UNICODE",
|
||||
[314] = "_LOAD_LOCALS",
|
||||
[315] = "_LOAD_FROM_DICT_OR_GLOBALS",
|
||||
[316] = "IS_NONE",
|
||||
[304] = "JUMP_TO_TOP",
|
||||
[305] = "_GUARD_BOTH_INT",
|
||||
[306] = "_BINARY_OP_MULTIPLY_INT",
|
||||
[307] = "_BINARY_OP_ADD_INT",
|
||||
[308] = "_BINARY_OP_SUBTRACT_INT",
|
||||
[309] = "_GUARD_BOTH_FLOAT",
|
||||
[310] = "_BINARY_OP_MULTIPLY_FLOAT",
|
||||
[311] = "_BINARY_OP_ADD_FLOAT",
|
||||
[312] = "_BINARY_OP_SUBTRACT_FLOAT",
|
||||
[313] = "_GUARD_BOTH_UNICODE",
|
||||
[314] = "_BINARY_OP_ADD_UNICODE",
|
||||
[315] = "_LOAD_LOCALS",
|
||||
[316] = "_LOAD_FROM_DICT_OR_GLOBALS",
|
||||
[317] = "IS_NONE",
|
||||
};
|
||||
#endif // NEED_OPCODE_METADATA
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue