mirror of
https://github.com/python/cpython.git
synced 2026-01-22 15:18:52 +00:00
gh-131798: JIT optimizer: Support custom binary op and property frames (GH-143735)
This commit is contained in:
parent
dfc66e5c8d
commit
2873c31edf
3 changed files with 94 additions and 11 deletions
|
|
@ -327,9 +327,20 @@ dummy_func(void) {
|
|||
GETLOCAL(this_instr->operand0) = sym_new_null(ctx);
|
||||
}
|
||||
|
||||
op(_BINARY_OP_SUBSCR_INIT_CALL, (container, sub, getitem -- new_frame)) {
|
||||
new_frame = PyJitRef_NULL;
|
||||
ctx->done = true;
|
||||
op(_BINARY_OP_SUBSCR_INIT_CALL, (container, sub, getitem -- new_frame)) {
|
||||
assert((this_instr + 1)->opcode == _PUSH_FRAME);
|
||||
PyCodeObject *co = get_code_with_logging(this_instr + 1);
|
||||
if (co == NULL) {
|
||||
ctx->done = true;
|
||||
break;
|
||||
}
|
||||
_Py_UOpsAbstractFrame *f = frame_new(ctx, co, 0, NULL, 0);
|
||||
if (f == NULL) {
|
||||
break;
|
||||
}
|
||||
f->locals[0] = container;
|
||||
f->locals[1] = sub;
|
||||
new_frame = PyJitRef_Wrap((JitOptSymbol *)f);
|
||||
}
|
||||
|
||||
op(_BINARY_OP_SUBSCR_STR_INT, (str_st, sub_st -- res, s, i)) {
|
||||
|
|
@ -761,9 +772,19 @@ dummy_func(void) {
|
|||
}
|
||||
|
||||
op(_LOAD_ATTR_PROPERTY_FRAME, (fget/4, owner -- new_frame)) {
|
||||
(void)fget;
|
||||
new_frame = PyJitRef_NULL;
|
||||
ctx->done = true;
|
||||
// + 1 for _SAVE_RETURN_OFFSET
|
||||
assert((this_instr + 2)->opcode == _PUSH_FRAME);
|
||||
PyCodeObject *co = get_code_with_logging(this_instr + 2);
|
||||
if (co == NULL) {
|
||||
ctx->done = true;
|
||||
break;
|
||||
}
|
||||
_Py_UOpsAbstractFrame *f = frame_new(ctx, co, 0, NULL, 0);
|
||||
if (f == NULL) {
|
||||
break;
|
||||
}
|
||||
f->locals[0] = owner;
|
||||
new_frame = PyJitRef_Wrap((JitOptSymbol *)f);
|
||||
}
|
||||
|
||||
op(_INIT_CALL_BOUND_METHOD_EXACT_ARGS, (callable, self_or_null, unused[oparg] -- callable, self_or_null, unused[oparg])) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue