STINNER Victor added the comment:

Oh, functools.partial.__call__() doesn't use fastcall yet. So compared to 
Python 3.5, fastcall shouldn't explain a major performance difference. FYI I'm 
working on an extension of fastcall to also support fastcall calling convention 
for obj.__call__() ;-)

But maybe the regression is related to code moved in ceval.c to support 
fastcall. I noticed differences with fastcall when you don't compile Python 
with LTO+PGO.


About the bytecode, "g(2)" in Python 3.6b1 is:

              0 LOAD_GLOBAL              0 (g)
              2 LOAD_CONST               1 (2)
              4 CALL_FUNCTION            1
              6 POP_TOP

In Python 3.5 the bytecode is similar, but the bytecode size is variable and 
CALL_FUNCTION is made of two parts: number of positional arguments and number 
of keyword arguments.

              0 LOAD_GLOBAL              0 (g)
              3 LOAD_CONST               1 (2)
              6 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
              9 POP_TOP


Python tracker <>
Python-bugs-list mailing list

Reply via email to