Hi Dmitry, Anatol, Pierre (etc.), and all,
I'm back now, I think, after a much longer (unintentional) break than I
expected. Be coming very soon with what I was doing in the summer (param
parsing stuff) -- *now* it works with MSVC too, barring any fragility, as I
accidentally discovered last month...
I've been "discovering" a lot with the wacky Visual Studio compiler! :-)
This message is about the 2 I found today.
The first simple thing was probably just overlooked, but noticed it while
looking up __declspec. zend_never_inline has always been empty (I guess)
for MSVC, but there's actually a __declspec(noinline) that can be used (and
works as expected). A simple and obvious change to bring it in line with
the other compilers?
The second "issue" is with the zend_always_inline functions, I noticed this
summer. Did anyone else know that MSVC leaves a *copy* of those functions
in the output files (DLLs)? What's the point of that? When they've been
inlined, and not referenced otherwise, there should be no reason to emit
code for a standalone function!
I remembered after seeing that behavior that a bit of my own __forceinline'd
code did NOT have extra function code, but forgot to investigate until
today. What's different about my function definition? No "static"
specifier! So that's the key. :-)
But... non-static would create duplicate symbols, I thought. But no, it
works! With just __forceinline, there's no errors. :^)
Can something be done about this? It would cut the binary size down a bit.
A zend_static macro to be used with zend_always_inline...?
Note: I didn't compile PHP, just quick standalone tests to check that
"noinline" works, no useless functions, and no link error. Both VS 2008 &
2015 (same results).
Thoughts?
Thanks,
Matt
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php