<div dir="rtl"><div dir="ltr">Yes, worth merging with Richard approval.</div></div><div class="gmail_extra"><br><div class="gmail_quote"><div dir="ltr">2015-08-19 23:16 GMT+03:00 Hans Wennborg <span dir="ltr"><<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>></span>:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I assume this is a merge request?<br>
<br>
Richard: what do you think about r245459+r245462?<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
On Wed, Aug 19, 2015 at 10:22 AM, Yaron Keren <<a href="mailto:yaron.keren@gmail.com">yaron.keren@gmail.com</a>> wrote:<br>
> Sorry to notice late (just diagnosed the issue from a failing boost::math<br>
> test), according to i686 ABI, long double size on x86 is 12 bytes (the<br>
> memory allocated, not the underlying 80 bits register), see<br>
><br>
> <a href="https://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/i386-and-x86-64-Options.html" rel="noreferrer" target="_blank">https://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/i386-and-x86-64-Options.html</a><br>
><br>
> -m128bit-long-double<br>
> Control the size of long double type. i386 application binary interface<br>
> specify the size to be 12 bytes, while modern architectures (Pentium and<br>
> newer) prefer long double aligned to 8 or 16 byte boundary. This is<br>
> impossible to reach with 12 byte long doubles in the array accesses.<br>
> Warning: if you use the -m128bit-long-double switch, the structures and<br>
> arrays containing long double will change their size as well as function<br>
> calling convention for function taking long double will be modified.<br>
><br>
> -m96bit-long-double<br>
> Set the size of long double to 96 bits as required by the i386 application<br>
> binary interface. This is the default.<br>
><br>
><br>
> You can check long double size out by running<br>
><br>
> #include <iostream><br>
> int main() {<br>
>   long double a;<br>
>   std::cout<<sizeof(a)<<std::endl;<br>
> }<br>
><br>
> which outputs 12 with mingw 32 bit, 16 with mingw 64 bit but always 16 with<br>
> current clang.<br>
> I fixed this and added test in r245459+r245462.<br>
><br>
><br>
> 2015-08-19 19:41 GMT+03:00 Hans Wennborg via cfe-commits<br>
> <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>>:<br>
>><br>
>> On Tue, Aug 18, 2015 at 6:11 PM, Richard Smith <<a href="mailto:richard@metafoo.co.uk">richard@metafoo.co.uk</a>><br>
>> wrote:<br>
>> > On Tue, Aug 18, 2015 at 3:01 PM, Hans Wennborg <<a href="mailto:hans@chromium.org">hans@chromium.org</a>><br>
>> > wrote:<br>
>> >><br>
>> >> Richard, I tried to ping you on the review thread but I'm not sure it<br>
>> >> got through. Martell requested this be merged to 3.7. What do you<br>
>> >> think?<br>
>> ><br>
>> ><br>
>> > LGTM<br>
>><br>
>> Thanks! r245456.<br>
>><br>
>> ><br>
>> >><br>
>> >> On Fri, Aug 14, 2015 at 12:05 PM, Martell Malone via cfe-commits<br>
>> >> <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br>
>> >> > Author: martell<br>
>> >> > Date: Fri Aug 14 14:05:56 2015<br>
>> >> > New Revision: 245084<br>
>> >> ><br>
>> >> > URL: <a href="http://llvm.org/viewvc/llvm-project?rev=245084&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=245084&view=rev</a><br>
>> >> > Log:<br>
>> >> > WindowsX86: long double is x87DoubleExtended on mingw<br>
>> >> ><br>
>> >> >     Summary:<br>
>> >> >     long double on x86 mingw is 80bits and is aligned to 16bytes<br>
>> >> ><br>
>> >> >         Fixes:<br>
>> >> >     <a href="https://llvm.org/bugs/show_bug.cgi?id=24398" rel="noreferrer" target="_blank">https://llvm.org/bugs/show_bug.cgi?id=24398</a><br>
>> >> ><br>
>> >> >     Reviewers: rnk<br>
>> >> ><br>
>> >> >     Subscribers: cfe-commits<br>
>> >> ><br>
>> >> >     Differential Revision: <a href="http://reviews.llvm.org/D12037" rel="noreferrer" target="_blank">http://reviews.llvm.org/D12037</a><br>
>> >> ><br>
>> >> > Modified:<br>
>> >> >     cfe/trunk/lib/Basic/Targets.cpp<br>
>> >> ><br>
>> >> > Modified: cfe/trunk/lib/Basic/Targets.cpp<br>
>> >> > URL:<br>
>> >> ><br>
>> >> > <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=245084&r1=245083&r2=245084&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=245084&r1=245083&r2=245084&view=diff</a><br>
>> >> ><br>
>> >> ><br>
>> >> > ==============================================================================<br>
>> >> > --- cfe/trunk/lib/Basic/Targets.cpp (original)<br>
>> >> > +++ cfe/trunk/lib/Basic/Targets.cpp Fri Aug 14 14:05:56 2015<br>
>> >> > @@ -3784,7 +3784,10 @@ namespace {<br>
>> >> >  class MinGWX86_32TargetInfo : public WindowsX86_32TargetInfo {<br>
>> >> >  public:<br>
>> >> >    MinGWX86_32TargetInfo(const llvm::Triple &Triple)<br>
>> >> > -      : WindowsX86_32TargetInfo(Triple) {}<br>
>> >> > +      : WindowsX86_32TargetInfo(Triple) {<br>
>> >> > +    LongDoubleWidth = LongDoubleAlign = 128;<br>
>> >> > +    LongDoubleFormat = &llvm::APFloat::x87DoubleExtended;<br>
>> >> > +  }<br>
>> >> >    void getTargetDefines(const LangOptions &Opts,<br>
>> >> >                          MacroBuilder &Builder) const override {<br>
>> >> >      WindowsX86_32TargetInfo::getTargetDefines(Opts, Builder);<br>
>> >> > @@ -4014,7 +4017,10 @@ public:<br>
>> >> >  class MinGWX86_64TargetInfo : public WindowsX86_64TargetInfo {<br>
>> >> >  public:<br>
>> >> >    MinGWX86_64TargetInfo(const llvm::Triple &Triple)<br>
>> >> > -      : WindowsX86_64TargetInfo(Triple) {}<br>
>> >> > +      : WindowsX86_64TargetInfo(Triple) {<br>
>> >> > +    LongDoubleWidth = LongDoubleAlign = 128;<br>
>> >> > +    LongDoubleFormat = &llvm::APFloat::x87DoubleExtended;<br>
>> >> > +  }<br>
>> >> >    void getTargetDefines(const LangOptions &Opts,<br>
>> >> >                          MacroBuilder &Builder) const override {<br>
>> >> >      WindowsX86_64TargetInfo::getTargetDefines(Opts, Builder);<br>
>> >> ><br>
>> >> ><br>
>> >> > _______________________________________________<br>
>> >> > cfe-commits mailing list<br>
>> >> > <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
>> >> > <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
>> ><br>
>> ><br>
>> _______________________________________________<br>
>> cfe-commits mailing list<br>
>> <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
><br>
><br>
</div></div></blockquote></div><br></div>