Re: com php-src: Fix for failing tests. gcc 4.8.3 would optimize away the assigment.: ext/mysqlnd/mysqlnd_ps_codec.c
| From: | Dmitry Stogov | Date: | Tue, 06 Jan 2015 20:49:39 +0000 |
| Subject: | Re: com php-src: Fix for failing tests. gcc 4.8.3 would optimize away the assigment.: ext/mysqlnd/mysqlnd_ps_codec.c | ||
| References: | 1 2 3 4 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-84010@lists.php.net to get a copy of this message | ||
Hi,
I'm also on holidays...
I may take a look after January 12, but I think this must not make any
problems.
Thanks. Dmitry.
On Jan 6, 2015 11:00 AM, "Keyur Govande" <kgovande@gmail.com> wrote:
>
>
> On Sat, Dec 27, 2014 at 2:17 AM, Keyur Govande <kgovande@gmail.com> wrote:
>
>>
>>
>> On Fri, Dec 26, 2014 at 9:52 PM, Dmitry Stogov <dmitry@zend.com> wrote:
>>
>>> This patch increases the binary size on 2MB (20%) :(
>>>
>>> # without patch
>>>
>>> $ size sapi/cli/php
>>> text data bss dec hex filename
>>> 11243874 55868 134140 11433882 ae779a sapi/cli/php
>>>
>>> # with patch
>>>
>>> $ size sapi/cli/php
>>> text data bss dec hex filename
>>> 13398084 55888 134148 13588120 cf5698 sapi/cli/php
>>>
>>> It's probably better not to use dec32.
>>>
>>
>> Ahh :(
>>
>> dec32 is 3 orders of magnitude faster than the alternative (convert float
>> to a string via fcvt or gcvt, and then to double via strtod).
>>
>> That said though, I will make dec32 optional via a configure option
>> defaulted to off and make the slow path the default. This will bring the
>> Mysqli implementation in-line with what PDO-libmysqlclient does and fix the
>> slight discrepancy in precision that arises due to that.
>>
>> dec32 is more precise, for example 3.141593 vs. 3.14159 with
>> PDO-libmysqlclient when pi is stored in a Mysql 4 byte float column.
>>
>> I should have a pull request on Github in a day or two.
>>
>
> Sorry for the delay, the holidays intruded on my plans.
>
> The pull request is up here:
> https://github.com/php/php-src/pull/983 and
> all tests pass on Windows and Linux (with gcc 4.8.3). I'll merge it in in a
> few days if no concerns are raised.
>
> Thanks and Happy New Year!
> Keyur.
>
>
>>
>>> Thanks. Dmitry.
>>>
>>> On Fri, Dec 26, 2014 at 11:36 PM, Keyur Govande <keyur@php.net> wrote:
>>>
>>>> Commit: aa192f57c9d867ab3d7be69c7f269cfd7a10d14f
>>>> Author: Keyur Govande <keyur@php.net> Fri, 26 Dec 2014
>>>> 20:36:19 +0000
>>>> Parents: 80260bcfa667bf25c65264b129f08a35059436a0
>>>> Branches: PHP-5.5 PHP-5.6 master
>>>>
>>>> Link:
>>>>
>>>> http://git.php.net/?p=php-src.git;a=commitdiff;h=aa192f57c9d867ab3d7be69c7f269cfd7a10d14f
>>>>
>>>> Log:
>>>> Fix for failing tests. gcc 4.8.3 would optimize away the assigment.
>>>>
>>>> Changed paths:
>>>> M ext/mysqlnd/mysqlnd_ps_codec.c
>>>>
>>>>
>>>> Diff:
>>>> diff --git a/ext/mysqlnd/mysqlnd_ps_codec.c
>>>> b/ext/mysqlnd/mysqlnd_ps_codec.c
>>>> index d960912..a57ff5d 100644
>>>> --- a/ext/mysqlnd/mysqlnd_ps_codec.c
>>>> +++ b/ext/mysqlnd/mysqlnd_ps_codec.c
>>>> @@ -195,7 +195,8 @@ ps_fetch_float(zval * zv, const MYSQLND_FIELD *
>>>> const field, unsigned int pack_l
>>>> #ifdef HAVE_DECIMAL_FP_SUPPORT
>>>> {
>>>> typedef float dec32 __attribute__((mode(SD)));
>>>> - dec32 d32val = fval;
>>>> + /* volatile so the compiler will not optimize away the
>>>> conversion */
>>>> + volatile dec32 d32val = fval;
>>>>
>>>> /* The following cast is guaranteed to do the right
>>>> thing */
>>>> dval = (double) d32val;
>>>>
>>>>
>>>> --
>>>> PHP CVS Mailing List (http://www.php.net/)
>>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>>>
>>>>
>>>
>>
>