Dan Eble <d...@faithful.be> writes:

> On Feb 4, 2020, at 09:44, Masamichi Hosoda <truer...@trueroad.jp> wrote:
>> 
>> +// FIXME: workaround: In GUB, g++ 4.9.4 for darwin-x86,
>> +// it seems that static cast from `unsigned long long` to `double`
>> +// by x86 SSE2 raises an internal compile error.
>> +// However, static cast from `signed long long` to `double`
>> +// does not raise the error.
>> +// So we use it for a workaround.
>> +#if defined (__i386__) && defined (__APPLE__) && \
>> +  defined (__SSE2_MATH__) && __GNUC__ < 5
>> +    {
>> +      I64 inum = num_;
>> +      I64 iden = den_;
>> +      return static_cast<double> (sign_) *
>> +        static_cast<double> (inum) / static_cast<double> (iden);
>> +    }
>> +#else
>>     return (double)sign_ * (double)num_ / (double)den_;
>> +#endif
>
> Is the conditional code really necessary?  Why not boil it down to the
> working code and a comment explaining the extra conversion to signed
> numbers?

That would be my impulse as well.  It is not like this code appears to
have notable drawbacks for the unafflicted platforms.

-- 
David Kastrup

Reply via email to