Windows (Visual Studio) compiler stuff
| From: | Matt Wilmas | Date: | Sun, 15 Nov 2015 22:30:40 +0000 |
| Subject: | Windows (Visual Studio) compiler stuff | ||
| Groups: | php.internals php.internals.win | ||
| Request: | Send a blank email to internals+get-89219@lists.php.net to get a copy of this message | ||
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