#define PRE_DISPATCH_GOTO() ((void)0)
#endif
-#define NOTRACE_DISPATCH() \
- { \
- NEXTOPARG(); \
- PRE_DISPATCH_GOTO(); \
- DISPATCH_GOTO(); \
- }
/* Do interpreter dispatch accounting for tracing and instrumentation */
#define DISPATCH() \
DISPATCH_GOTO(); \
}
-#define NOTRACE_DISPATCH_SAME_OPARG() \
+#define DISPATCH_SAME_OPARG() \
{ \
opcode = _Py_OPCODE(*next_instr); \
PRE_DISPATCH_GOTO(); \
+ opcode |= cframe.use_tracing OR_DTRACE_LINE; \
DISPATCH_GOTO(); \
}
assert(value != NULL);
Py_INCREF(value);
PUSH(value);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(LOAD_FAST__LOAD_CONST) {
value = GETITEM(consts, oparg);
Py_INCREF(value);
PUSH(value);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(STORE_FAST__LOAD_FAST) {
assert(value != NULL);
Py_INCREF(value);
PUSH(value);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(STORE_FAST__STORE_FAST) {
next_instr++;
value = POP();
SETLOCAL(oparg, value);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(LOAD_CONST__LOAD_FAST) {
assert(value != NULL);
Py_INCREF(value);
PUSH(value);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(POP_TOP) {
goto error;
}
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(BINARY_OP_MULTIPLY_FLOAT) {
goto error;
}
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(BINARY_OP_SUBTRACT_INT) {
goto error;
}
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(BINARY_OP_SUBTRACT_FLOAT) {
goto error;
}
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(BINARY_OP_ADD_UNICODE) {
goto error;
}
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(BINARY_OP_INPLACE_ADD_UNICODE) {
}
// The STORE_FAST is already done.
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP + 1);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(BINARY_OP_ADD_FLOAT) {
goto error;
}
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(BINARY_OP_ADD_INT) {
goto error;
}
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_OP);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(BINARY_SUBSCR) {
if (_Py_Specialize_BinarySubscr(container, sub, next_instr) < 0) {
goto error;
}
- NOTRACE_DISPATCH_SAME_OPARG();
+ DISPATCH_SAME_OPARG();
}
else {
STAT_INC(BINARY_SUBSCR, deferred);
SET_TOP(res);
Py_DECREF(list);
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_SUBSCR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(BINARY_SUBSCR_TUPLE_INT) {
SET_TOP(res);
Py_DECREF(tuple);
JUMPBY(INLINE_CACHE_ENTRIES_BINARY_SUBSCR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(BINARY_SUBSCR_DICT) {
if (_Py_Specialize_StoreSubscr(container, sub, next_instr) < 0) {
goto error;
}
- NOTRACE_DISPATCH_SAME_OPARG();
+ DISPATCH_SAME_OPARG();
}
else {
STAT_INC(STORE_SUBSCR, deferred);
_Py_DECREF_SPECIALIZED(sub, (destructor)PyObject_Free);
Py_DECREF(list);
JUMPBY(INLINE_CACHE_ENTRIES_STORE_SUBSCR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(STORE_SUBSCR_DICT) {
PyObject *seq = TOP();
next_instr--;
_Py_Specialize_UnpackSequence(seq, next_instr, oparg);
- NOTRACE_DISPATCH_SAME_OPARG();
+ DISPATCH_SAME_OPARG();
}
else {
STAT_INC(UNPACK_SEQUENCE, deferred);
PUSH(Py_NewRef(PyTuple_GET_ITEM(seq, 0)));
Py_DECREF(seq);
JUMPBY(INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(UNPACK_SEQUENCE_TUPLE) {
}
Py_DECREF(seq);
JUMPBY(INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(UNPACK_SEQUENCE_LIST) {
}
Py_DECREF(seq);
JUMPBY(INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(UNPACK_EX) {
if (_Py_Specialize_LoadGlobal(GLOBALS(), BUILTINS(), next_instr, name) < 0) {
goto error;
}
- NOTRACE_DISPATCH_SAME_OPARG();
+ DISPATCH_SAME_OPARG();
}
else {
STAT_INC(LOAD_GLOBAL, deferred);
STACK_GROW(push_null+1);
Py_INCREF(res);
SET_TOP(res);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(LOAD_GLOBAL_BUILTIN) {
STACK_GROW(push_null+1);
Py_INCREF(res);
SET_TOP(res);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(DELETE_FAST) {
if (_Py_Specialize_LoadAttr(owner, next_instr, name) < 0) {
goto error;
}
- NOTRACE_DISPATCH_SAME_OPARG();
+ DISPATCH_SAME_OPARG();
}
else {
STAT_INC(LOAD_ATTR, deferred);
SET_TOP(res);
Py_DECREF(owner);
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(LOAD_ATTR_MODULE) {
SET_TOP(res);
Py_DECREF(owner);
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(LOAD_ATTR_WITH_HINT) {
SET_TOP(res);
Py_DECREF(owner);
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(LOAD_ATTR_SLOT) {
SET_TOP(res);
Py_DECREF(owner);
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(LOAD_ATTR_CLASS) {
SET_TOP(res);
Py_DECREF(cls);
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(LOAD_ATTR_PROPERTY) {
if (_Py_Specialize_StoreAttr(owner, next_instr, name) < 0) {
goto error;
}
- NOTRACE_DISPATCH_SAME_OPARG();
+ DISPATCH_SAME_OPARG();
}
else {
STAT_INC(STORE_ATTR, deferred);
}
Py_DECREF(owner);
JUMPBY(INLINE_CACHE_ENTRIES_STORE_ATTR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(STORE_ATTR_WITH_HINT) {
dict->ma_version_tag = DICT_NEXT_VERSION();
Py_DECREF(owner);
JUMPBY(INLINE_CACHE_ENTRIES_STORE_ATTR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(STORE_ATTR_SLOT) {
Py_XDECREF(old_value);
Py_DECREF(owner);
JUMPBY(INLINE_CACHE_ENTRIES_STORE_ATTR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(COMPARE_OP) {
PyObject *left = SECOND();
next_instr--;
_Py_Specialize_CompareOp(left, right, next_instr, oparg);
- NOTRACE_DISPATCH_SAME_OPARG();
+ DISPATCH_SAME_OPARG();
}
else {
STAT_INC(COMPARE_OP, deferred);
else {
JUMPBY(1 + oparg);
}
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(COMPARE_OP_INT_JUMP) {
else {
JUMPBY(1 + oparg);
}
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(COMPARE_OP_STR_JUMP) {
else {
JUMPBY(1 + oparg);
}
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(IS_OP) {
if (ADAPTIVE_COUNTER_IS_ZERO(cache)) {
next_instr--;
_Py_Specialize_ForIter(TOP(), next_instr);
- NOTRACE_DISPATCH_SAME_OPARG();
+ DISPATCH_SAME_OPARG();
}
else {
STAT_INC(FOR_ITER, deferred);
Py_INCREF(next);
PUSH(next);
JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
it->it_seq = NULL;
Py_DECREF(seq);
STACK_SHRINK(1);
Py_DECREF(it);
JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER + oparg);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(FOR_ITER_RANGE) {
STACK_SHRINK(1);
Py_DECREF(r);
JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER + oparg);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
long value = (long)(r->start +
(unsigned long)(r->index++) * r->step);
}
// The STORE_FAST is already done.
JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER + 1);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(BEFORE_ASYNC_WITH) {
SET_TOP(res);
PUSH(self);
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(LOAD_ATTR_METHOD_WITH_DICT) {
SET_TOP(res);
PUSH(self);
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(LOAD_ATTR_METHOD_NO_DICT) {
SET_TOP(res);
PUSH(self);
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(LOAD_ATTR_METHOD_LAZY_DICT) {
SET_TOP(res);
PUSH(self);
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(CALL_BOUND_METHOD_EXACT_ARGS) {
if (err < 0) {
goto error;
}
- NOTRACE_DISPATCH_SAME_OPARG();
+ DISPATCH_SAME_OPARG();
}
else {
STAT_INC(CALL, deferred);
Py_DECREF(obj);
STACK_SHRINK(2);
SET_TOP(res);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(CALL_NO_KW_STR_1) {
STACK_SHRINK(2);
Py_DECREF(list);
Py_DECREF(callable);
- NOTRACE_DISPATCH();
+ DISPATCH();
}
TARGET(CALL_NO_KW_METHOD_DESCRIPTOR_O) {
PyObject *rhs = TOP();
next_instr--;
_Py_Specialize_BinaryOp(lhs, rhs, next_instr, oparg, &GETLOCAL(0));
- NOTRACE_DISPATCH_SAME_OPARG();
+ DISPATCH_SAME_OPARG();
}
else {
STAT_INC(BINARY_OP, deferred);
}
TARGET(EXTENDED_ARG_QUICK) {
+ assert(cframe.use_tracing == 0);
assert(oparg);
- oparg <<= 8;
- oparg |= _Py_OPARG(*next_instr);
- NOTRACE_DISPATCH_SAME_OPARG();
+ int oldoparg = oparg;
+ NEXTOPARG();
+ oparg |= oldoparg << 8;
+ DISPATCH_GOTO();
}
TARGET(CACHE) {