mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
GH-98831: Implement basic cache effects (#99313)
This commit is contained in:
parent
4636df9feb
commit
e37744f289
4 changed files with 201 additions and 127 deletions
35
Python/generated_cases.c.h
generated
35
Python/generated_cases.c.h
generated
|
@ -145,9 +145,9 @@
|
|||
_Py_DECREF_SPECIALIZED(right, (destructor)PyObject_Free);
|
||||
_Py_DECREF_SPECIALIZED(left, (destructor)PyObject_Free);
|
||||
if (prod == NULL) goto pop_2_error;
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
|
||||
STACK_SHRINK(1);
|
||||
POKE(1, prod);
|
||||
next_instr += 1;
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
@ -165,9 +165,9 @@
|
|||
_Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc);
|
||||
_Py_DECREF_SPECIALIZED(left, _PyFloat_ExactDealloc);
|
||||
if (prod == NULL) goto pop_2_error;
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
|
||||
STACK_SHRINK(1);
|
||||
POKE(1, prod);
|
||||
next_instr += 1;
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
@ -183,9 +183,9 @@
|
|||
_Py_DECREF_SPECIALIZED(right, (destructor)PyObject_Free);
|
||||
_Py_DECREF_SPECIALIZED(left, (destructor)PyObject_Free);
|
||||
if (sub == NULL) goto pop_2_error;
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
|
||||
STACK_SHRINK(1);
|
||||
POKE(1, sub);
|
||||
next_instr += 1;
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
@ -202,9 +202,9 @@
|
|||
_Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc);
|
||||
_Py_DECREF_SPECIALIZED(left, _PyFloat_ExactDealloc);
|
||||
if (sub == NULL) goto pop_2_error;
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
|
||||
STACK_SHRINK(1);
|
||||
POKE(1, sub);
|
||||
next_instr += 1;
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
@ -220,9 +220,9 @@
|
|||
_Py_DECREF_SPECIALIZED(left, _PyUnicode_ExactDealloc);
|
||||
_Py_DECREF_SPECIALIZED(right, _PyUnicode_ExactDealloc);
|
||||
if (res == NULL) goto pop_2_error;
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
|
||||
STACK_SHRINK(1);
|
||||
POKE(1, res);
|
||||
next_instr += 1;
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
@ -274,9 +274,9 @@
|
|||
_Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc);
|
||||
_Py_DECREF_SPECIALIZED(left, _PyFloat_ExactDealloc);
|
||||
if (sum == NULL) goto pop_2_error;
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
|
||||
STACK_SHRINK(1);
|
||||
POKE(1, sum);
|
||||
next_instr += 1;
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
@ -292,9 +292,9 @@
|
|||
_Py_DECREF_SPECIALIZED(right, (destructor)PyObject_Free);
|
||||
_Py_DECREF_SPECIALIZED(left, (destructor)PyObject_Free);
|
||||
if (sum == NULL) goto pop_2_error;
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
|
||||
STACK_SHRINK(1);
|
||||
POKE(1, sum);
|
||||
next_instr += 1;
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
@ -3703,29 +3703,30 @@
|
|||
|
||||
TARGET(BINARY_OP_GENERIC) {
|
||||
PREDICTED(BINARY_OP_GENERIC);
|
||||
PyObject *rhs = POP();
|
||||
PyObject *lhs = TOP();
|
||||
PyObject *rhs = PEEK(1);
|
||||
PyObject *lhs = PEEK(2);
|
||||
PyObject *res;
|
||||
assert(0 <= oparg);
|
||||
assert((unsigned)oparg < Py_ARRAY_LENGTH(binary_ops));
|
||||
assert(binary_ops[oparg]);
|
||||
PyObject *res = binary_ops[oparg](lhs, rhs);
|
||||
res = binary_ops[oparg](lhs, rhs);
|
||||
Py_DECREF(lhs);
|
||||
Py_DECREF(rhs);
|
||||
SET_TOP(res);
|
||||
if (res == NULL) {
|
||||
goto error;
|
||||
}
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
|
||||
if (res == NULL) goto pop_2_error;
|
||||
STACK_SHRINK(1);
|
||||
POKE(1, res);
|
||||
next_instr += 1;
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
TARGET(BINARY_OP) {
|
||||
PREDICTED(BINARY_OP);
|
||||
assert(INLINE_CACHE_ENTRIES_BINARY_OP == 1);
|
||||
PyObject *rhs = PEEK(1);
|
||||
PyObject *lhs = PEEK(2);
|
||||
_PyBinaryOpCache *cache = (_PyBinaryOpCache *)next_instr;
|
||||
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
|
||||
assert(cframe.use_tracing == 0);
|
||||
PyObject *lhs = SECOND();
|
||||
PyObject *rhs = TOP();
|
||||
next_instr--;
|
||||
_Py_Specialize_BinaryOp(lhs, rhs, next_instr, oparg, &GETLOCAL(0));
|
||||
DISPATCH_SAME_OPARG();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue