diff options
Diffstat (limited to 'Python')
-rw-r--r-- | Python/ceval.c | 16 | ||||
-rw-r--r-- | Python/opcode_targets.h | 12 | ||||
-rw-r--r-- | Python/specialize.c | 3 |
3 files changed, 18 insertions, 13 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index ffce6b7..5eb9150 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1734,9 +1734,6 @@ handle_eval_breaker: } TARGET(RESUME) { - assert(tstate->cframe == &cframe); - assert(frame == cframe.current_frame); - int err = _Py_IncrementCountAndMaybeQuicken(frame->f_code); if (err) { if (err < 0) { @@ -1747,6 +1744,13 @@ handle_eval_breaker: first_instr = frame->f_code->co_firstinstr; next_instr = first_instr + nexti; } + JUMP_TO_INSTRUCTION(RESUME_QUICK); + } + + TARGET(RESUME_QUICK) { + PREDICTED(RESUME_QUICK); + assert(tstate->cframe == &cframe); + assert(frame == cframe.current_frame); frame->f_state = FRAME_EXECUTING; if (_Py_atomic_load_relaxed(eval_breaker) && oparg < 2) { goto handle_eval_breaker; @@ -4004,7 +4008,6 @@ handle_eval_breaker: TARGET(JUMP_ABSOLUTE) { PREDICTED(JUMP_ABSOLUTE); - assert(oparg < INSTR_OFFSET()); int err = _Py_IncrementCountAndMaybeQuicken(frame->f_code); if (err) { if (err < 0) { @@ -4015,9 +4018,7 @@ handle_eval_breaker: first_instr = frame->f_code->co_firstinstr; next_instr = first_instr + nexti; } - JUMPTO(oparg); - CHECK_EVAL_BREAKER(); - DISPATCH(); + JUMP_TO_INSTRUCTION(JUMP_ABSOLUTE_QUICK); } TARGET(JUMP_NO_INTERRUPT) { @@ -4032,6 +4033,7 @@ handle_eval_breaker: } TARGET(JUMP_ABSOLUTE_QUICK) { + PREDICTED(JUMP_ABSOLUTE_QUICK); assert(oparg < INSTR_OFFSET()); JUMPTO(oparg); CHECK_EVAL_BREAKER(); diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 1a809ed..f47da2b 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -78,9 +78,9 @@ static void *opcode_targets[256] = { &&TARGET_LOAD_METHOD_CLASS, &&TARGET_LOAD_METHOD_MODULE, &&TARGET_LOAD_METHOD_NO_DICT, + &&TARGET_RESUME_QUICK, &&TARGET_STORE_ATTR_ADAPTIVE, &&TARGET_STORE_ATTR_INSTANCE_VALUE, - &&TARGET_STORE_ATTR_SLOT, &&TARGET_LIST_TO_TUPLE, &&TARGET_RETURN_VALUE, &&TARGET_IMPORT_STAR, @@ -130,7 +130,7 @@ static void *opcode_targets[256] = { &&TARGET_POP_JUMP_IF_NOT_NONE, &&TARGET_POP_JUMP_IF_NONE, &&TARGET_RAISE_VARARGS, - &&TARGET_STORE_ATTR_WITH_HINT, + &&TARGET_STORE_ATTR_SLOT, &&TARGET_MAKE_FUNCTION, &&TARGET_BUILD_SLICE, &&TARGET_JUMP_NO_INTERRUPT, @@ -139,21 +139,21 @@ static void *opcode_targets[256] = { &&TARGET_LOAD_DEREF, &&TARGET_STORE_DEREF, &&TARGET_DELETE_DEREF, + &&TARGET_STORE_ATTR_WITH_HINT, &&TARGET_LOAD_FAST__LOAD_FAST, - &&TARGET_STORE_FAST__LOAD_FAST, &&TARGET_CALL_FUNCTION_EX, - &&TARGET_LOAD_FAST__LOAD_CONST, + &&TARGET_STORE_FAST__LOAD_FAST, &&TARGET_EXTENDED_ARG, &&TARGET_LIST_APPEND, &&TARGET_SET_ADD, &&TARGET_MAP_ADD, &&TARGET_LOAD_CLASSDEREF, &&TARGET_COPY_FREE_VARS, - &&TARGET_LOAD_CONST__LOAD_FAST, + &&TARGET_LOAD_FAST__LOAD_CONST, &&TARGET_RESUME, &&TARGET_MATCH_CLASS, + &&TARGET_LOAD_CONST__LOAD_FAST, &&TARGET_STORE_FAST__STORE_FAST, - &&_unknown_opcode, &&TARGET_FORMAT_VALUE, &&TARGET_BUILD_CONST_KEY_MAP, &&TARGET_BUILD_STRING, diff --git a/Python/specialize.c b/Python/specialize.c index b051f45..e610a2d 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -407,6 +407,9 @@ optimize(SpecializedCacheOrInstruction *quickened, int len) case JUMP_ABSOLUTE: instructions[i] = _Py_MAKECODEUNIT(JUMP_ABSOLUTE_QUICK, oparg); break; + case RESUME: + instructions[i] = _Py_MAKECODEUNIT(RESUME_QUICK, oparg); + break; case LOAD_FAST: switch(previous_opcode) { case LOAD_FAST: |