mirror of
https://github.com/python/cpython.git
synced 2025-08-23 18:24:46 +00:00
gh-106581: Add 10 new opcodes by allowing assert(kwnames == NULL)
(#106707)
By turning `assert(kwnames == NULL)` into a macro that is not in the "forbidden" list, many instructions that formerly were skipped because they contained such an assert (but no other mention of `kwnames`) are now supported in Tier 2. This covers 10 instructions in total (all specializations of `CALL` that invoke some C code): - `CALL_NO_KW_TYPE_1` - `CALL_NO_KW_STR_1` - `CALL_NO_KW_TUPLE_1` - `CALL_NO_KW_BUILTIN_O` - `CALL_NO_KW_BUILTIN_FAST` - `CALL_NO_KW_LEN` - `CALL_NO_KW_ISINSTANCE` - `CALL_NO_KW_METHOD_DESCRIPTOR_O` - `CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS` - `CALL_NO_KW_METHOD_DESCRIPTOR_FAST`
This commit is contained in:
parent
b2b261ab2a
commit
2b94a05a0e
7 changed files with 385 additions and 34 deletions
|
@ -2706,6 +2706,9 @@ void Py_LeaveRecursiveCall(void)
|
|||
|
||||
///////////////////// Experimental UOp Interpreter /////////////////////
|
||||
|
||||
#undef ASSERT_KWNAMES_IS_NULL
|
||||
#define ASSERT_KWNAMES_IS_NULL() (void)0
|
||||
|
||||
#undef DEOPT_IF
|
||||
#define DEOPT_IF(COND, INSTNAME) \
|
||||
if ((COND)) { \
|
||||
|
@ -2746,6 +2749,7 @@ _PyUopExecute(_PyExecutorObject *executor, _PyInterpreterFrame *frame, PyObject
|
|||
int opcode;
|
||||
uint64_t operand;
|
||||
int oparg;
|
||||
|
||||
for (;;) {
|
||||
opcode = self->trace[pc].opcode;
|
||||
operand = self->trace[pc].operand;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue