@@ -2358,26 +2358,35 @@ dummy_func(
2358
2358
assert (oparg & 1 );
2359
2359
}
2360
2360
2361
- // stack effect: (__0, __array[oparg] -- )
2362
- inst (CALL_BOUND_METHOD_EXACT_ARGS ) {
2363
- DEOPT_IF (is_method (stack_pointer , oparg ), CALL );
2364
- PyObject * function = PEEK (oparg + 1 );
2365
- DEOPT_IF (Py_TYPE (function ) != & PyMethod_Type , CALL );
2366
- STAT_INC (CALL , hit );
2367
- PyObject * self = ((PyMethodObject * )function )-> im_self ;
2368
- PEEK (oparg + 1 ) = Py_NewRef (self );
2369
- PyObject * meth = ((PyMethodObject * )function )-> im_func ;
2370
- PEEK (oparg + 2 ) = Py_NewRef (meth );
2371
- Py_DECREF (function );
2372
- GO_TO_INSTRUCTION (CALL_PY_EXACT_ARGS );
2373
- }
2374
-
2375
2361
inst (KW_NAMES , (-- )) {
2376
2362
assert (kwnames == NULL );
2377
2363
assert (oparg < PyTuple_GET_SIZE (consts ));
2378
2364
kwnames = GETITEM (consts , oparg );
2379
2365
}
2380
2366
2367
+ // Cache layout: counter/1, func_version/2, min_args/1
2368
+ // Neither CALL_INTRINSIC_1 nor CALL_FUNCTION_EX are members!
2369
+ // family(call, INLINE_CACHE_ENTRIES_CALL) = {
2370
+ // CALL,
2371
+ // CALL_BOUND_METHOD_EXACT_ARGS,
2372
+ // CALL_PY_EXACT_ARGS,
2373
+ // CALL_PY_WITH_DEFAULTS,
2374
+ // CALL_NO_KW_TYPE_1,
2375
+ // CALL_NO_KW_STR_1,
2376
+ // CALL_NO_KW_TUPLE_1,
2377
+ // CALL_BUILTIN_CLASS,
2378
+ // CALL_NO_KW_BUILTIN_O,
2379
+ // CALL_NO_KW_BUILTIN_FAST,
2380
+ // CALL_BUILTIN_FAST_WITH_KEYWORDS,
2381
+ // CALL_NO_KW_LEN,
2382
+ // CALL_NO_KW_ISINSTANCE,
2383
+ // CALL_NO_KW_LIST_APPEND,
2384
+ // CALL_NO_KW_METHOD_DESCRIPTOR_O,
2385
+ // CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS,
2386
+ // CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS,
2387
+ // CALL_NO_KW_METHOD_DESCRIPTOR_FAST,
2388
+ // };
2389
+
2381
2390
// stack effect: (__0, __array[oparg] -- )
2382
2391
inst (CALL ) {
2383
2392
#if ENABLE_SPECIALIZATION
@@ -2460,6 +2469,20 @@ dummy_func(
2460
2469
CHECK_EVAL_BREAKER ();
2461
2470
}
2462
2471
2472
+ // stack effect: (__0, __array[oparg] -- )
2473
+ inst (CALL_BOUND_METHOD_EXACT_ARGS ) {
2474
+ DEOPT_IF (is_method (stack_pointer , oparg ), CALL );
2475
+ PyObject * function = PEEK (oparg + 1 );
2476
+ DEOPT_IF (Py_TYPE (function ) != & PyMethod_Type , CALL );
2477
+ STAT_INC (CALL , hit );
2478
+ PyObject * self = ((PyMethodObject * )function )-> im_self ;
2479
+ PEEK (oparg + 1 ) = Py_NewRef (self );
2480
+ PyObject * meth = ((PyMethodObject * )function )-> im_func ;
2481
+ PEEK (oparg + 2 ) = Py_NewRef (meth );
2482
+ Py_DECREF (function );
2483
+ GO_TO_INSTRUCTION (CALL_PY_EXACT_ARGS );
2484
+ }
2485
+
2463
2486
// stack effect: (__0, __array[oparg] -- )
2464
2487
inst (CALL_PY_EXACT_ARGS ) {
2465
2488
assert (kwnames == NULL );
@@ -3185,14 +3208,6 @@ dummy_func(
3185
3208
3186
3209
// Future families go below this point //
3187
3210
3188
- family (call , INLINE_CACHE_ENTRIES_CALL ) = {
3189
- CALL , CALL_PY_EXACT_ARGS ,
3190
- CALL_PY_WITH_DEFAULTS , CALL_BOUND_METHOD_EXACT_ARGS , CALL_BUILTIN_CLASS ,
3191
- CALL_BUILTIN_FAST_WITH_KEYWORDS , CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS , CALL_NO_KW_BUILTIN_FAST ,
3192
- CALL_NO_KW_BUILTIN_O , CALL_NO_KW_ISINSTANCE , CALL_NO_KW_LEN ,
3193
- CALL_NO_KW_LIST_APPEND , CALL_NO_KW_METHOD_DESCRIPTOR_FAST , CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS ,
3194
- CALL_NO_KW_METHOD_DESCRIPTOR_O , CALL_NO_KW_STR_1 , CALL_NO_KW_TUPLE_1 ,
3195
- CALL_NO_KW_TYPE_1 };
3196
3211
family (for_iter , INLINE_CACHE_ENTRIES_FOR_ITER ) = {
3197
3212
FOR_ITER , FOR_ITER_LIST ,
3198
3213
FOR_ITER_RANGE };
0 commit comments