r245084 - WindowsX86: long double is x87DoubleExtended on mingw

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 20 15:05:23 PDT 2015


I've reverted r245456 in r245623.

Thanks,
Hans

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


More information about the cfe-commits mailing list