Newsgroups: php.internals,php.internals.win Path: news.php.net Xref: news.php.net php.internals:89235 php.internals.win:1126 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 81454 invoked from network); 16 Nov 2015 13:58:52 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 16 Nov 2015 13:58:52 -0000 Authentication-Results: pb1.pair.com header.from=php_lists@realplain.com; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=php_lists@realplain.com; spf=permerror; sender-id=unknown Received-SPF: error (pb1.pair.com: domain realplain.com from 68.114.190.31 cause and error) X-PHP-List-Original-Sender: php_lists@realplain.com X-Host-Fingerprint: 68.114.190.31 mtaout006-public.msg.strl.va.charter.net Received: from [68.114.190.31] ([68.114.190.31:61386] helo=mtaout006-public.msg.strl.va.charter.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 15/C1-03003-B11E9465 for ; Mon, 16 Nov 2015 08:58:51 -0500 Received: from impout001 ([68.114.189.16]) by mtaout006.msg.strl.va.charter.net (InterMail vM.9.00.021.00 201-2473-182) with ESMTP id <20151116135848.ETBN28537.mtaout006.msg.strl.va.charter.net@impout001>; Mon, 16 Nov 2015 07:58:48 -0600 Received: from pc1 ([97.87.188.16]) by impout001 with charter.net id iDyo1r00D0Mfu3D01Dyo67; Mon, 16 Nov 2015 07:58:48 -0600 X-Authority-Analysis: v=2.1 cv=KPDUDT1o c=1 sm=1 tr=0 a=Ay788ph35uAhBIV2K373vw==:117 a=Ay788ph35uAhBIV2K373vw==:17 a=hOpmn2quAAAA:8 a=BCPeO_TGAAAA:8 a=8nJEP1OIZ-IA:10 a=67BIL_jfAAAA:8 a=lRBSXoDDAAAA:8 a=9a7puj6YAAAA:8 a=pGLkceISAAAA:8 a=Z7Nnt1yEGp50jQXZNjkA:9 a=wPNLvfGTeEIA:10 Message-ID: <57955F4AAAFF48339CF9194924258215@pc1> To: "Anatol Belski" , , Cc: "'Dmitry Stogov'" , "'Pierre Joye'" References: <9B23C6783EE5480CB15EAC35B9E420EA@pc1> <031201d12071$c8f66800$5ae33800$@belski.net> Date: Mon, 16 Nov 2015 07:58:48 -0600 MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5931 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157 Subject: Re: [PHP-DEV] Windows (Visual Studio) compiler stuff From: php_lists@realplain.com ("Matt Wilmas") Hi Anatol, ----- Original Message ----- From: "Anatol Belski" Sent: Monday, November 16, 2015 > Hello Matt, > >> -----Original Message----- >> From: Matt Wilmas [mailto:php_lists@realplain.com] >> Sent: Sunday, November 15, 2015 11:31 PM >> To: internals@lists.php.net; internals-win@lists.php.net >> Cc: Dmitry Stogov ; Anatol Belski > ; >> Pierre Joye >> Subject: [PHP-DEV] Windows (Visual Studio) compiler stuff >> >> 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? >> > According to the docs __declspec(noinline) is specific to C++. Also with > VS > it's always much more tedious to inline something than the opposite. These > are the main two reasons it's disregarded ATM. We can add it for > compliance > with C++, but it'll in best case have no effect in the PHP core. Should be > tested before, though. Yeah, I know what the docs imply ("member function"), which is why I tested it. I guess you missed my "works as expected" part. :-P A test function that just returns a number was automatically inlined (plain C). Using __declspec(noinline) it was call'ed instead. Not sure if any of the "zend_never_inline" PHP stuff is getting inlined when it's desired not to be -- I'll compile PHP in a bit and see what it looks like with "noinline." >> 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...? >> > I'd ask you for some concrete case for this, as I'm not sure to understand > exactly what you mean. The only case where an extra code would be > generated > is with "__declspec(export) inline", but that's not the case anywhere > within > PHP. My concrete case is checking tons of generated code! ;-) It's simple: useless standalone functions are created for every "static __forceinline" definition... Not having static makes it act like GCC/Clang. Again, I'll try to compile PHP with those static's removed and report the effect later. > Regards > > Anatol - Matt