On Mon, Nov 23, 2015 at 8:08 AM, Matt Wilmas <php_li...@realplain.com>
wrote:

> Hi Dmitry,
>
> ----- Original Message -----
> From: "Dmitry Stogov"
> Sent: Monday, November 16, 2015
>
> Hi Matt,
>>
>> On Mon, Nov 16, 2015 at 1:30 AM, Matt Wilmas <php_li...@realplain.com>
>> wrote:
>>
>> 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?
>>>
>>>
>> Please, provide a patch for zend_portability.h
>>
>
> Really? :-)  And that's easier than just adding
>
> __declspec(noinline)
>
> to line 287?
>
> I can add it myself soon, if it's acceptable.  And yes, I verified that it
> does have an effect, and prevents current inlining, as you intended.  (12
> KB smaller binary.)
>

I don't test Windows builds.
If this OK for Anatol - just commit this.

Thanks. Dmitry.


>
> 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...?
>>>
>>>
>> zend_always inline should be always used with static keyword.
>>
>
> Right, that would be the standard thinking, but it makes MSVC not remove
> the unreferenced standalone function like GCC/Clang...  Adds almost 100 KB
> to php7.dll.
>
> But nevermind...  Thanks to Anatol, it seems another compiler flag WILL
> actually strip those functions, and then some! :-)
>
> Thanks. Dmitry.
>>
>
> - Matt
>

Reply via email to