summaryrefslogtreecommitdiffstats
path: root/Python/generated_cases.c.h
diff options
context:
space:
mode:
Diffstat (limited to 'Python/generated_cases.c.h')
-rw-r--r--Python/generated_cases.c.h134
1 files changed, 132 insertions, 2 deletions
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index 4947c91..6e8ca82 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -2127,14 +2127,144 @@
TARGET(CONTAINS_OP) {
frame->instr_ptr = next_instr;
- next_instr += 1;
+ next_instr += 2;
INSTRUCTION_STATS(CONTAINS_OP);
+ PREDICTED(CONTAINS_OP);
+ _Py_CODEUNIT *this_instr = next_instr - 2;
+ (void)this_instr;
+ PyObject *right;
+ PyObject *left;
+ PyObject *b;
+ // _SPECIALIZE_CONTAINS_OP
+ right = stack_pointer[-1];
+ left = stack_pointer[-2];
+ {
+ uint16_t counter = read_u16(&this_instr[1].cache);
+ (void)counter;
+ #if ENABLE_SPECIALIZATION
+ if (ADAPTIVE_COUNTER_IS_ZERO(counter)) {
+ next_instr = this_instr;
+ _Py_Specialize_ContainsOp(right, next_instr);
+ DISPATCH_SAME_OPARG();
+ }
+ STAT_INC(CONTAINS_OP, deferred);
+ DECREMENT_ADAPTIVE_COUNTER(this_instr[1].cache);
+ #endif /* ENABLE_SPECIALIZATION */
+ }
+ // _CONTAINS_OP
+ {
+ int res = PySequence_Contains(right, left);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ if (res < 0) goto pop_2_error;
+ b = (res ^ oparg) ? Py_True : Py_False;
+ }
+ stack_pointer[-2] = b;
+ stack_pointer += -1;
+ DISPATCH();
+ }
+
+ TARGET(CONTAINS_OP_DICT) {
+ frame->instr_ptr = next_instr;
+ next_instr += 2;
+ INSTRUCTION_STATS(CONTAINS_OP_DICT);
+ static_assert(INLINE_CACHE_ENTRIES_CONTAINS_OP == 1, "incorrect cache size");
+ PyObject *right;
+ PyObject *left;
+ PyObject *b;
+ /* Skip 1 cache entry */
+ right = stack_pointer[-1];
+ left = stack_pointer[-2];
+ DEOPT_IF(!PyDict_CheckExact(right), CONTAINS_OP);
+ int res = PyDict_Contains(right, left);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ if (res < 0) goto pop_2_error;
+ b = (res ^ oparg) ? Py_True : Py_False;
+ stack_pointer[-2] = b;
+ stack_pointer += -1;
+ DISPATCH();
+ }
+
+ TARGET(CONTAINS_OP_LIST) {
+ frame->instr_ptr = next_instr;
+ next_instr += 2;
+ INSTRUCTION_STATS(CONTAINS_OP_LIST);
+ static_assert(INLINE_CACHE_ENTRIES_CONTAINS_OP == 1, "incorrect cache size");
+ PyObject *right;
+ PyObject *left;
+ PyObject *b;
+ /* Skip 1 cache entry */
+ right = stack_pointer[-1];
+ left = stack_pointer[-2];
+ DEOPT_IF(!PyList_CheckExact(right), CONTAINS_OP);
+ int res = _PyList_Contains(right, left);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ if (res < 0) goto pop_2_error;
+ b = (res ^ oparg) ? Py_True : Py_False;
+ stack_pointer[-2] = b;
+ stack_pointer += -1;
+ DISPATCH();
+ }
+
+ TARGET(CONTAINS_OP_SET) {
+ frame->instr_ptr = next_instr;
+ next_instr += 2;
+ INSTRUCTION_STATS(CONTAINS_OP_SET);
+ static_assert(INLINE_CACHE_ENTRIES_CONTAINS_OP == 1, "incorrect cache size");
+ PyObject *right;
+ PyObject *left;
+ PyObject *b;
+ /* Skip 1 cache entry */
+ right = stack_pointer[-1];
+ left = stack_pointer[-2];
+ DEOPT_IF(!PySet_CheckExact(right), CONTAINS_OP);
+ int res = _PySet_Contains((PySetObject *)right, left);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ if (res < 0) goto pop_2_error;
+ b = (res ^ oparg) ? Py_True : Py_False;
+ stack_pointer[-2] = b;
+ stack_pointer += -1;
+ DISPATCH();
+ }
+
+ TARGET(CONTAINS_OP_STR) {
+ frame->instr_ptr = next_instr;
+ next_instr += 2;
+ INSTRUCTION_STATS(CONTAINS_OP_STR);
+ static_assert(INLINE_CACHE_ENTRIES_CONTAINS_OP == 1, "incorrect cache size");
PyObject *right;
PyObject *left;
PyObject *b;
+ /* Skip 1 cache entry */
+ right = stack_pointer[-1];
+ left = stack_pointer[-2];
+ DEOPT_IF(!PyUnicode_CheckExact(right), CONTAINS_OP);
+ int res = PyUnicode_Contains(right, left);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ if (res < 0) goto pop_2_error;
+ b = (res ^ oparg) ? Py_True : Py_False;
+ stack_pointer[-2] = b;
+ stack_pointer += -1;
+ DISPATCH();
+ }
+
+ TARGET(CONTAINS_OP_TUPLE) {
+ frame->instr_ptr = next_instr;
+ next_instr += 2;
+ INSTRUCTION_STATS(CONTAINS_OP_TUPLE);
+ static_assert(INLINE_CACHE_ENTRIES_CONTAINS_OP == 1, "incorrect cache size");
+ PyObject *right;
+ PyObject *left;
+ PyObject *b;
+ /* Skip 1 cache entry */
right = stack_pointer[-1];
left = stack_pointer[-2];
- int res = PySequence_Contains(right, left);
+ DEOPT_IF(!PyTuple_CheckExact(right), CONTAINS_OP);
+ int res = _PyTuple_Contains((PyTupleObject *)right, left);
Py_DECREF(left);
Py_DECREF(right);
if (res < 0) goto pop_2_error;