bpo-47120: Replace the JUMP_ABSOLUTE opcode by the relative JUMP_BACKWARD (GH-32115)

This commit is contained in:
Irit Katriel 2022-03-31 14:14:15 +01:00 committed by GitHub
parent b36d222110
commit a00518d9ad
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 147 additions and 113 deletions

View file

@ -2218,7 +2218,7 @@ handle_eval_breaker:
Py_DECREF(v);
if (err != 0)
goto error;
PREDICT(JUMP_ABSOLUTE);
PREDICT(JUMP_BACKWARD_QUICK);
DISPATCH();
}
@ -2230,7 +2230,7 @@ handle_eval_breaker:
Py_DECREF(v);
if (err != 0)
goto error;
PREDICT(JUMP_ABSOLUTE);
PREDICT(JUMP_BACKWARD_QUICK);
DISPATCH();
}
@ -3396,7 +3396,7 @@ handle_eval_breaker:
if (_PyDict_SetItem_Take2((PyDictObject *)map, key, value) != 0) {
goto error;
}
PREDICT(JUMP_ABSOLUTE);
PREDICT(JUMP_BACKWARD_QUICK);
DISPATCH();
}
@ -3926,6 +3926,11 @@ handle_eval_breaker:
DISPATCH();
}
TARGET(JUMP_BACKWARD) {
_PyCode_Warmup(frame->f_code);
JUMP_TO_INSTRUCTION(JUMP_BACKWARD_QUICK);
}
TARGET(POP_JUMP_IF_FALSE) {
PREDICTED(POP_JUMP_IF_FALSE);
PyObject *cond = POP();
@ -4053,12 +4058,6 @@ handle_eval_breaker:
DISPATCH();
}
TARGET(JUMP_ABSOLUTE) {
PREDICTED(JUMP_ABSOLUTE);
_PyCode_Warmup(frame->f_code);
JUMP_TO_INSTRUCTION(JUMP_ABSOLUTE_QUICK);
}
TARGET(JUMP_NO_INTERRUPT) {
/* This bytecode is used in the `yield from` or `await` loop.
* If there is an interrupt, we want it handled in the innermost
@ -4069,10 +4068,10 @@ handle_eval_breaker:
DISPATCH();
}
TARGET(JUMP_ABSOLUTE_QUICK) {
PREDICTED(JUMP_ABSOLUTE_QUICK);
TARGET(JUMP_BACKWARD_QUICK) {
PREDICTED(JUMP_BACKWARD_QUICK);
assert(oparg < INSTR_OFFSET());
JUMPTO(oparg);
JUMPBY(-oparg);
CHECK_EVAL_BREAKER();
DISPATCH();
}