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 <rep...@bugs.python.org>
<http://bugs.python.org/issue28243>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to