Skip to content

Commit a71df5e

Browse files
committed
gh-150587: Use EXIT_IF for store subscript compact guard
1 parent f1a230b commit a71df5e

4 files changed

Lines changed: 117 additions & 20 deletions

File tree

Modules/_testinternalcapi/test_cases.c.h

Lines changed: 10 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/bytecodes.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,12 @@ dummy_func(
643643
EXIT_IF(!_PyLong_CheckExactAndCompact(value_o));
644644
}
645645

646+
op(_GUARD_TOS_NON_NEGATIVE_COMPACT_INT, (value -- value)) {
647+
PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
648+
assert(PyLong_CheckExact(value_o));
649+
EXIT_IF(!_PyLong_IsNonNegativeCompact((PyLongObject *)value_o));
650+
}
651+
646652
op(_GUARD_NOS_OVERFLOWED, (left, unused -- left, unused)) {
647653
PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
648654
assert(Py_TYPE(left_o) == &PyLong_Type);
@@ -1413,15 +1419,15 @@ dummy_func(
14131419
macro(STORE_SUBSCR) = _SPECIALIZE_STORE_SUBSCR + _STORE_SUBSCR;
14141420

14151421
macro(STORE_SUBSCR_LIST_INT) =
1416-
_GUARD_TOS_INT + _GUARD_NOS_LIST + unused/1 + _STORE_SUBSCR_LIST_INT + _POP_TOP_INT + POP_TOP;
1422+
_GUARD_TOS_INT + _GUARD_TOS_NON_NEGATIVE_COMPACT_INT + _GUARD_NOS_LIST +
1423+
unused/1 + _STORE_SUBSCR_LIST_INT + _POP_TOP_INT + POP_TOP;
14171424

14181425
op(_STORE_SUBSCR_LIST_INT, (value, list_st, sub_st -- ls, ss)) {
14191426
PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
14201427
PyObject *list = PyStackRef_AsPyObjectBorrow(list_st);
14211428

14221429
assert(PyLong_CheckExact(sub));
14231430
assert(PyList_CheckExact(list));
1424-
DEOPT_IF(!_PyLong_IsNonNegativeCompact((PyLongObject *)sub));
14251431

14261432
Py_ssize_t index = _PyLong_CompactValue((PyLongObject *)sub);
14271433
DEOPT_IF(!LOCK_OBJECT(list));

Python/executor_cases.c.h

Lines changed: 89 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/generated_cases.c.h

Lines changed: 10 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)