GH-98686: Quicken everything (GH-98687)

This commit is contained in:
Brandt Bucher 2022-11-02 10:42:57 -07:00 committed by GitHub
parent 18fc232e07
commit 276d77724f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 144 additions and 239 deletions

View file

@ -143,7 +143,7 @@ lltrace_instruction(_PyInterpreterFrame *frame,
const char *opname = _PyOpcode_OpName[opcode];
assert(opname != NULL);
int offset = (int)(next_instr - _PyCode_CODE(frame->f_code));
if (HAS_ARG(opcode)) {
if (HAS_ARG(_PyOpcode_Deopt[opcode])) {
printf("%d: %s %d\n", offset * 2, opname, oparg);
}
else {
@ -1165,14 +1165,7 @@ handle_eval_breaker:
TARGET(NOP) {
DISPATCH();
}
TARGET(RESUME) {
_PyCode_Warmup(frame->f_code);
GO_TO_INSTRUCTION(RESUME_QUICK);
}
TARGET(RESUME_QUICK) {
PREDICTED(RESUME_QUICK);
assert(tstate->cframe == &cframe);
assert(frame == cframe.current_frame);
if (_Py_atomic_load_relaxed_int32(eval_breaker) && oparg < 2) {
@ -1710,7 +1703,7 @@ handle_eval_breaker:
PyObject *list = PEEK(oparg);
if (_PyList_AppendTakeRef((PyListObject *)list, v) < 0)
goto error;
PREDICT(JUMP_BACKWARD_QUICK);
PREDICT(JUMP_BACKWARD);
DISPATCH();
}
@ -1722,7 +1715,7 @@ handle_eval_breaker:
Py_DECREF(v);
if (err != 0)
goto error;
PREDICT(JUMP_BACKWARD_QUICK);
PREDICT(JUMP_BACKWARD);
DISPATCH();
}
@ -2908,7 +2901,7 @@ handle_eval_breaker:
if (_PyDict_SetItem_Take2((PyDictObject *)map, key, value) != 0) {
goto error;
}
PREDICT(JUMP_BACKWARD_QUICK);
PREDICT(JUMP_BACKWARD);
DISPATCH();
}
@ -3576,8 +3569,11 @@ handle_eval_breaker:
}
TARGET(JUMP_BACKWARD) {
_PyCode_Warmup(frame->f_code);
GO_TO_INSTRUCTION(JUMP_BACKWARD_QUICK);
PREDICTED(JUMP_BACKWARD);
assert(oparg < INSTR_OFFSET());
JUMPBY(-oparg);
CHECK_EVAL_BREAKER();
DISPATCH();
}
TARGET(POP_JUMP_IF_FALSE) {
@ -3707,14 +3703,6 @@ handle_eval_breaker:
DISPATCH();
}
TARGET(JUMP_BACKWARD_QUICK) {
PREDICTED(JUMP_BACKWARD_QUICK);
assert(oparg < INSTR_OFFSET());
JUMPBY(-oparg);
CHECK_EVAL_BREAKER();
DISPATCH();
}
TARGET(GET_LEN) {
// PUSH(len(TOS))
Py_ssize_t len_i = PyObject_Length(TOP());