Req #78270 [Asn->Csd]: Usage of __vectorcall convention with FFI
| From: | cmb@php.net | Date: | Tue, 29 Oct 2019 08:01:25 +0000 |
| Subject: | Req #78270 [Asn->Csd]: Usage of __vectorcall convention with FFI | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-223500@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=78270&edit=1
ID: 78270
Updated by: cmb@php.net
Reported by: lisachenko dot it at gmail dot com
Summary: Usage of __vectorcall convention with FFI
-Status: Assigned
+Status: Closed
Type: Feature/Change Request
-Package: Unknown/Other Function
+Package: *Extensibility Functions
Operating System: Windows x64
PHP Version: 7.4.0alpha2
Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Basic __vectorcall support is implemented as
<http://git.php.net/?p=php-src.git;a=commit;h=bedbecf56d94353a2bcebc835d14896fd95ce6d7>.
Previous Comments:
------------------------------------------------------------------------
[2019-10-22 14:51:09] cmb@php.net
Failing to resolve zend_hash_add_or_update() has been tracked as
bug #78716; since that bug has been fixed, new builds are
available at
<https://windows.php.net/downloads/snaps/ostc/ffi-vectorcall/>.
------------------------------------------------------------------------
[2019-10-22 09:54:25] lisachenko dot it at gmail dot com
Current patch helps a lot, at least most of __vectorcall functions can be resolved now.
Surprisingly,
extern zval __vectorcall *zend_hash_add_or_update(HashTable *ht, zend_string *key, zval *pData,
uint32_t flag);
could not be resolved, could you please check this?
------------------------------------------------------------------------
[2019-10-14 21:19:25] cmb@php.net
There is now a dev version available[1], which adds minimal
__vectorcall support (should be sufficient for PHP's APIs). It
would be great if you could test it.
[1] <https://windows.php.net/downloads/snaps/ostc/ffi-vectorcall/>
------------------------------------------------------------------------
[2019-07-25 10:42:08] cmb@php.net
Well, the best solution would be to support __vectorcall, since
there may be other libraries which use this calling convention.
I tried to assess the required effort for this, and found that
apparently no name mangling is yet supported by ext/ffi, so that
even __fastcall wouldn't work on x86. This has to be resolved
anyway.
------------------------------------------------------------------------
[2019-07-22 12:29:29] lisachenko dot it at gmail dot com
Unfortunately, recompiling PHP with custom ZEND_FASTCALL doesn't change anything. Nobody will
do this for general purposes, so in my opinion, we shouldn't affect overall performance by
dropping this call convention, as it is a step back.
However I have an interesting idea. What if we could solve this in another way, by defining all
internal API functions as ZEND_FASTCALL and removing ZEND_API macros for them, thus they won't
be exposed outside. And select some useful methods to work with internal structures with ZEND_API,
but without declaring them as ZEND_FASTCALL convention.
I can see some conflicts in presence of both ZEND_API and ZEND_FASTCALL. Because in some places the
macros ZENA_API is present and in another it is absent, like with ZEND_FASTCALL.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=78270
--
Edit this bug report at https://bugs.php.net/bug.php?id=78270&edit=1