PyObject *sub;
PyObject *dict;
PyObject *res;
+ /* Skip 1 cache entry */
sub = stack_pointer[-1];
dict = stack_pointer[-2];
DEOPT_IF(!PyDict_CheckExact(dict), BINARY_SUBSCR);
static_assert(INLINE_CACHE_ENTRIES_BINARY_SUBSCR == 1, "incorrect cache size");
PyObject *sub;
PyObject *container;
+ /* Skip 1 cache entry */
sub = stack_pointer[-1];
container = stack_pointer[-2];
DEOPT_IF(tstate->interp->eval_frame, BINARY_SUBSCR);
PyObject *sub;
PyObject *list;
PyObject *res;
+ /* Skip 1 cache entry */
sub = stack_pointer[-1];
list = stack_pointer[-2];
DEOPT_IF(!PyLong_CheckExact(sub), BINARY_SUBSCR);
PyObject *sub;
PyObject *str;
PyObject *res;
+ /* Skip 1 cache entry */
sub = stack_pointer[-1];
str = stack_pointer[-2];
DEOPT_IF(!PyLong_CheckExact(sub), BINARY_SUBSCR);
PyObject *sub;
PyObject *tuple;
PyObject *res;
+ /* Skip 1 cache entry */
sub = stack_pointer[-1];
tuple = stack_pointer[-2];
DEOPT_IF(!PyLong_CheckExact(sub), BINARY_SUBSCR);
PyObject **args;
PyObject *null;
PyObject *callable;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *self_or_null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *self_or_null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *self_or_null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *self_or_null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *self_or_null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *self_or_null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject **args;
PyObject *self;
PyObject *callable;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
self = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *self_or_null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *self_or_null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *self_or_null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *self_or_null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject **args;
PyObject *self_or_null;
PyObject *callable;
+ /* Skip 1 cache entry */
args = &stack_pointer[-oparg];
self_or_null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *null;
PyObject *callable;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
args = &stack_pointer[-oparg];
null = stack_pointer[-1 - oparg];
callable = stack_pointer[-2 - oparg];
PyObject *right;
PyObject *left;
PyObject *res;
+ /* Skip 1 cache entry */
right = stack_pointer[-1];
left = stack_pointer[-2];
DEOPT_IF(!PyFloat_CheckExact(left), COMPARE_OP);
PyObject *right;
PyObject *left;
PyObject *res;
+ /* Skip 1 cache entry */
right = stack_pointer[-1];
left = stack_pointer[-2];
DEOPT_IF(!PyLong_CheckExact(left), COMPARE_OP);
PyObject *right;
PyObject *left;
PyObject *res;
+ /* Skip 1 cache entry */
right = stack_pointer[-1];
left = stack_pointer[-2];
DEOPT_IF(!PyUnicode_CheckExact(left), COMPARE_OP);
INSTRUCTION_STATS(FOR_ITER_GEN);
static_assert(INLINE_CACHE_ENTRIES_FOR_ITER == 1, "incorrect cache size");
PyObject *iter;
+ /* Skip 1 cache entry */
iter = stack_pointer[-1];
DEOPT_IF(tstate->interp->eval_frame, FOR_ITER);
PyGenObject *gen = (PyGenObject *)iter;
_Py_CODEUNIT *this_instr = frame->instr_ptr = next_instr;
next_instr += 4;
INSTRUCTION_STATS(INSTRUMENTED_CALL);
+ /* Skip 3 cache entries */
int is_meth = PEEK(oparg + 1) != NULL;
int total_args = oparg + is_meth;
PyObject *function = PEEK(oparg + 2);
_Py_CODEUNIT *this_instr = frame->instr_ptr = next_instr;
next_instr += 2;
INSTRUCTION_STATS(INSTRUMENTED_FOR_ITER);
+ /* Skip 1 cache entry */
_Py_CODEUNIT *target;
PyObject *iter = TOP();
PyObject *next = (*Py_TYPE(iter)->tp_iternext)(iter);
_Py_CODEUNIT *this_instr = frame->instr_ptr = next_instr;
next_instr += 2;
INSTRUCTION_STATS(INSTRUMENTED_JUMP_BACKWARD);
+ /* Skip 1 cache entry */
CHECK_EVAL_BREAKER();
INSTRUMENTED_JUMP(this_instr, next_instr - oparg, PY_MONITORING_EVENT_JUMP);
DISPATCH();
_Py_CODEUNIT *this_instr = frame->instr_ptr = next_instr;
next_instr += 2;
INSTRUCTION_STATS(INSTRUMENTED_LOAD_SUPER_ATTR);
+ /* Skip 1 cache entry */
// cancel out the decrement that will happen in LOAD_SUPER_ATTR; we
// don't want to specialize instrumented instructions
INCREMENT_ADAPTIVE_COUNTER(this_instr[1].cache);
_Py_CODEUNIT *this_instr = frame->instr_ptr = next_instr;
next_instr += 2;
INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_FALSE);
+ /* Skip 1 cache entry */
PyObject *cond = POP();
assert(PyBool_Check(cond));
int flag = Py_IsFalse(cond);
_Py_CODEUNIT *this_instr = frame->instr_ptr = next_instr;
next_instr += 2;
INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_NONE);
+ /* Skip 1 cache entry */
PyObject *value = POP();
int flag = Py_IsNone(value);
int offset;
_Py_CODEUNIT *this_instr = frame->instr_ptr = next_instr;
next_instr += 2;
INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_NOT_NONE);
+ /* Skip 1 cache entry */
PyObject *value = POP();
int offset;
int nflag = Py_IsNone(value);
_Py_CODEUNIT *this_instr = frame->instr_ptr = next_instr;
next_instr += 2;
INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_TRUE);
+ /* Skip 1 cache entry */
PyObject *cond = POP();
assert(PyBool_Check(cond));
int flag = Py_IsTrue(cond);
_Py_CODEUNIT *this_instr = frame->instr_ptr = next_instr;
next_instr += 2;
INSTRUCTION_STATS(JUMP_BACKWARD);
+ /* Skip 1 cache entry */
CHECK_EVAL_BREAKER();
assert(oparg <= INSTR_OFFSET());
JUMPBY(-oparg);
INSTRUCTION_STATS(LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN);
static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
PyObject *owner;
+ /* Skip 1 cache entry */
owner = stack_pointer[-1];
uint32_t type_version = read_u32(&this_instr[2].cache);
uint32_t func_version = read_u32(&this_instr[4].cache);
INSTRUCTION_STATS(LOAD_ATTR_PROPERTY);
static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
PyObject *owner;
+ /* Skip 1 cache entry */
owner = stack_pointer[-1];
uint32_t type_version = read_u32(&this_instr[2].cache);
uint32_t func_version = read_u32(&this_instr[4].cache);
PyObject *class;
PyObject *global_super;
PyObject *attr;
+ /* Skip 1 cache entry */
self = stack_pointer[-1];
class = stack_pointer[-2];
global_super = stack_pointer[-3];
PyObject *global_super;
PyObject *attr;
PyObject *self_or_null;
+ /* Skip 1 cache entry */
self = stack_pointer[-1];
class = stack_pointer[-2];
global_super = stack_pointer[-3];
static_assert(INLINE_CACHE_ENTRIES_SEND == 1, "incorrect cache size");
PyObject *v;
PyObject *receiver;
+ /* Skip 1 cache entry */
v = stack_pointer[-1];
receiver = stack_pointer[-2];
DEOPT_IF(tstate->interp->eval_frame, SEND);
static_assert(INLINE_CACHE_ENTRIES_STORE_ATTR == 4, "incorrect cache size");
PyObject *owner;
PyObject *value;
+ /* Skip 1 cache entry */
owner = stack_pointer[-1];
value = stack_pointer[-2];
uint32_t type_version = read_u32(&this_instr[2].cache);
PyObject *sub;
PyObject *dict;
PyObject *value;
+ /* Skip 1 cache entry */
sub = stack_pointer[-1];
dict = stack_pointer[-2];
value = stack_pointer[-3];
PyObject *sub;
PyObject *list;
PyObject *value;
+ /* Skip 1 cache entry */
sub = stack_pointer[-1];
list = stack_pointer[-2];
value = stack_pointer[-3];
static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
PyObject *value;
PyObject *res;
+ /* Skip 1 cache entry */
value = stack_pointer[-1];
uint32_t version = read_u32(&this_instr[2].cache);
// This one is a bit weird, because we expect *some* failures:
INSTRUCTION_STATS(TO_BOOL_BOOL);
static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
PyObject *value;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
value = stack_pointer[-1];
DEOPT_IF(!PyBool_Check(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
PyObject *value;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
value = stack_pointer[-1];
DEOPT_IF(!PyLong_CheckExact(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
PyObject *value;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
value = stack_pointer[-1];
DEOPT_IF(!PyList_CheckExact(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
PyObject *value;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
value = stack_pointer[-1];
// This one is a bit weird, because we expect *some* failures:
DEOPT_IF(!Py_IsNone(value), TO_BOOL);
static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
PyObject *value;
PyObject *res;
+ /* Skip 1 cache entry */
+ /* Skip 2 cache entries */
value = stack_pointer[-1];
DEOPT_IF(!PyUnicode_CheckExact(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
static_assert(INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE == 1, "incorrect cache size");
PyObject *seq;
PyObject **values;
+ /* Skip 1 cache entry */
seq = stack_pointer[-1];
values = &stack_pointer[-1];
DEOPT_IF(!PyList_CheckExact(seq), UNPACK_SEQUENCE);
static_assert(INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE == 1, "incorrect cache size");
PyObject *seq;
PyObject **values;
+ /* Skip 1 cache entry */
seq = stack_pointer[-1];
values = &stack_pointer[-1];
DEOPT_IF(!PyTuple_CheckExact(seq), UNPACK_SEQUENCE);
static_assert(INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE == 1, "incorrect cache size");
PyObject *seq;
PyObject **values;
+ /* Skip 1 cache entry */
seq = stack_pointer[-1];
values = &stack_pointer[-1];
DEOPT_IF(!PyTuple_CheckExact(seq), UNPACK_SEQUENCE);