mirror of
https://github.com/python/cpython.git
synced 2025-07-08 03:45:36 +00:00
gh-100239: specialize BINARY_OP/SUBSCR for list-slice (#132626)
This commit is contained in:
parent
3831752689
commit
5529213d4e
15 changed files with 552 additions and 354 deletions
|
@ -519,6 +519,11 @@ dummy_func(
|
|||
EXIT_IF(!PyList_CheckExact(o));
|
||||
}
|
||||
|
||||
op(_GUARD_TOS_SLICE, (tos -- tos)) {
|
||||
PyObject *o = PyStackRef_AsPyObjectBorrow(tos);
|
||||
EXIT_IF(!PySlice_Check(o));
|
||||
}
|
||||
|
||||
macro(TO_BOOL_LIST) = _GUARD_TOS_LIST + unused/1 + unused/2 + _TO_BOOL_LIST;
|
||||
|
||||
op(_TO_BOOL_LIST, (value -- res)) {
|
||||
|
@ -591,6 +596,7 @@ dummy_func(
|
|||
BINARY_OP_SUBTRACT_FLOAT,
|
||||
BINARY_OP_ADD_UNICODE,
|
||||
BINARY_OP_SUBSCR_LIST_INT,
|
||||
BINARY_OP_SUBSCR_LIST_SLICE,
|
||||
BINARY_OP_SUBSCR_TUPLE_INT,
|
||||
BINARY_OP_SUBSCR_STR_INT,
|
||||
BINARY_OP_SUBSCR_DICT,
|
||||
|
@ -900,6 +906,24 @@ dummy_func(
|
|||
DECREF_INPUTS();
|
||||
}
|
||||
|
||||
macro(BINARY_OP_SUBSCR_LIST_SLICE) =
|
||||
_GUARD_TOS_SLICE + _GUARD_NOS_LIST + unused/5 + _BINARY_OP_SUBSCR_LIST_SLICE;
|
||||
|
||||
op(_BINARY_OP_SUBSCR_LIST_SLICE, (list_st, sub_st -- res)) {
|
||||
PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
|
||||
PyObject *list = PyStackRef_AsPyObjectBorrow(list_st);
|
||||
|
||||
assert(PySlice_Check(sub));
|
||||
assert(PyList_CheckExact(list));
|
||||
|
||||
PyObject *res_o = _PyList_SliceSubscript(list, sub);
|
||||
DEOPT_IF(res_o == NULL);
|
||||
STAT_INC(BINARY_OP, hit);
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
STAT_INC(BINARY_OP, hit);
|
||||
DECREF_INPUTS();
|
||||
}
|
||||
|
||||
macro(BINARY_OP_SUBSCR_STR_INT) =
|
||||
_GUARD_TOS_INT + _GUARD_NOS_UNICODE + unused/5 + _BINARY_OP_SUBSCR_STR_INT;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue