Hello Jacek,

With this patch clang builds example code from first message with and
without `-fms-extensions`.
I can provide prebuild clang-svn pacakge for msys2.

Thanks,
Mateusz


2017-02-16 15:06 GMT+01:00 Jacek Caban <ja...@codeweavers.com>:

> Hi Mateusz,
>
> Could you please try the attached patch? It should existing failures on
> clang. It also changes our generic guard to take __has_builtin into
> account, so this should prevent problems in the future, if clang
> introduces more builtins, but I don't have clang setup to test it.
>
> Thanks,
> Jacek
>
> On 09.02.2017 01:35, Mateusz Mikuła wrote:
> > You are right David and now I remember the thing about ms-extensions.
> > Declspec was part of those extensions and enabling it by default caused
> > errors with specific code so declspec was changed to general attribute
> > instead.
> > Since I have clang git build (trying to upstream some patches used by
> > MSYS2), I tried it also:
> > https://paste.ubuntu.com/23957478/
> >
> > While for 3.9.x Clang `-fms-extensions` didn't hurt, master branch
> require
> > some corrections but it is another issue.
> >
> >
> > 2017-02-09 0:15 GMT+01:00 David Grayson <davidegray...@gmail.com>:
> >
> >> I can confirm that MSYS2's x86_64 clang++ compiler does not support
> >> __popcnt but does support __builtin_popcount.  I looked into it a
> >> little bit, and found out that the clang commit that adds the __popcnt
> >> builtins is very recent (September 2016).  I seems like it has not
> >> made it into a release yet.
> >>
> >> Here is the commit:
> >>
> >> https://github.com/llvm-mirror/clang/commit/
> 5eb95c4c284486351e3ed0fdad011a
> >> cf41540c8b
> >>
> >> The source code archive that Alexey used to build the MSYS2 clang++
> >> does not have the changes from that commit in it:
> >>
> >> http://repo.msys2.org/mingw/sources/mingw-w64-clang-3.9.1-3.src.tar.gz
> >>
> >> I don't intend to submit any more patches for this issue.  Jacek has
> >> already committed my patch to mingw-w64 (thanks!).  Once the new
> >> version of clang comes out and people start using it there should not
> >> be any problems.  If any clang users are itching to use __popcnt
> >> before the new version of clang comes out, they can easily remove the
> >> #if I put in intrin-impl.h.  They could also use __has_builtin in
> >> intrin-impl.h to detect whether clang has the builtin or not.
> >>
> >> Mateusz, the "CodeGen" folder in clang is not just used for MSVC libs,
> >> it has tons of general-purpose code for generating LLVM code from
> >> C/C++ code.
> >>
> >> --David Grayson
> >>
> >> On Wed, Feb 8, 2017 at 1:24 PM, Mateusz <mati...@gmail.com> wrote:
> >>> Opps, gmail put output into quote. Improved version:
> >>> $ clang++ popcnt.cc -std=c++14 -fms-extensions
> >>> popcnt.cc:9:26: error: use of undeclared identifier '__popcnt16'
> >>>     unsigned short usr = __popcnt16(us[i]);
> >>>                          ^
> >>> popcnt.cc:17:24: error: use of undeclared identifier '__popcnt'
> >>>     unsigned int uir = __popcnt(ui[i]);
> >>>                        ^
> >>> popcnt.cc:26:28: error: use of undeclared identifier '__popcnt64'; did
> >> you
> >>> mean '_popcnt64'?
> >>>     unsigned __int64 ulr = __popcnt64(ul[i]);
> >>>                            ^~~~~~~~~~
> >>>                            _popcnt64
> >>> D:\msys64\mingw64\bin\..\lib\clang\3.9.1\include\popcntintrin.h:90:1:
> >> note:
> >>> '_popcnt64' declared here
> >>> _popcnt64(long long __A)
> >>> ^
> >>> 3 errors generated.
> >>>
> >>>
> >>>
> >>> 2017-02-08 22:22 GMT+01:00 Mateusz <mati...@gmail.com>:
> >>>
> >>>> I think ms-extensions was made default option for mingw and msvc clang
> >> and
> >>>> codegen is used only for creating msvc libs. Here is Clang output
> >> anyway:
> >>>> $ clang++ popcnt.cc -std=c++14 -fms-extensions
> >>>> popcnt.cc:9:26: error: use of undeclared identifier '__popcnt16'
> >>>>     unsigned short usr = __popcnt16(us[i]);
> >>>>                          ^
> >>>> popcnt.cc:17:24: error: use of undeclared identifier '__popcnt'
> >>>>     unsigned int uir = __popcnt(ui[i]);
> >>>>                        ^
> >>>> popcnt.cc:26:28: error: use of undeclared identifier '__popcnt64'; did
> >> you
> >>>> mean '_popcnt64'?
> >>>>     unsigned __int64 ulr = __popcnt64(ul[i]);
> >>>>                            ^~~~~~~~~~
> >>>>                            _popcnt64
> >>>> D:\msys64\mingw64\bin\..\lib\clang\3.9.1\include\popcntintrin.h:90:1:
> >>>> note: '_popcnt64' declared here
> >>>> _popcnt64(long long __A)
> >>>> ^
> >>>> 3 errors generated.
> >>>>
> >>>> 2017-02-08 20:10 GMT+01:00 David Grayson <davidegray...@gmail.com>:
> >>>>
> >>>>> Mateusz, thanks for looking in to this.
> >>>>>
> >>>>> Here are the relevant lines from the clang source code that indicate
> >>>>> that it supports those builtins:
> >>>>>
> >>>>> https://github.com/llvm-mirror/clang/blob/3e45634a7f951c2306
> >>>>> e4b368f9fb8c8d80c48273/include/clang/Basic/Builtins.def#L760-L762
> >>>>> https://github.com/llvm-mirror/clang/blob/4cedfcc1ecf8387082
> >>>>> 183508604b7f47c634f708/lib/CodeGen/CGBuiltin.cpp#L804-L821
> >>>>>
> >>>>> Can you try your clang test again with the "-fms-extensions"
> argument?
> >>>>>
> >>>>> (I tried to test clang myself earlier but I had various issues.  I
> >>>>> could probably try again tonight if you don't want to.)
> >>>>>
> >>>>> --David
> >>>>>
> >>>>> On Wed, Feb 8, 2017 at 10:54 AM, Mateusz <mati...@gmail.com> wrote:
> >>>>>> MSYS2 native Clang test-popcnt.cpp:
> >>>>>>
> >>>>>> $ clang++ popcnt.cc -std=c++14
> >>>>>> popcnt.cc:9:26: error: use of undeclared identifier '__popcnt16'
> >>>>>>     unsigned short usr = __popcnt16(us[i]);
> >>>>>>                          ^
> >>>>>> popcnt.cc:17:24: error: use of undeclared identifier '__popcnt'
> >>>>>>     unsigned int uir = __popcnt(ui[i]);
> >>>>>>                        ^
> >>>>>> popcnt.cc:26:28: error: use of undeclared identifier '__popcnt64';
> >> did
> >>>>> you
> >>>>>> mean '_popcnt64'?
> >>>>>>     unsigned __int64 ulr = __popcnt64(ul[i]);
> >>>>>>                            ^~~~~~~~~~
> >>>>>>                            _popcnt64
> >>>>>> D:\msys64\mingw64\bin\..\lib\clang\3.9.1\include\
> >> popcntintrin.h:90:1:
> >>>>> note:
> >>>>>> '_popcnt64' declared here
> >>>>>> _popcnt64(long long __A)
> >>>>>> ^
> >>>>>> 3 errors generated.
> >>>>>>
> >>>>>> Probably its safe to enable it for Clang, I'll try tomorrow late.
> >>>>>>
> >>>>>> 2017-02-08 18:37 GMT+01:00 David Grayson <davidegray...@gmail.com>:
> >>>>>>
> >>>>>>> Hello.  This patch adds support for the Microsoft __popcnt16,
> >> __popcnt,
> >>>>>>> and __popcnt64 intrinsics, which are documented here:
> >>>>>>>
> >>>>>>> https://msdn.microsoft.com/en-us/library/bb385231.aspx
> >>>>>>>
> >>>>>>> I was trying to compile ANGLE recently and one of the first errors
> I
> >>>>>>> encountered was due to both GCC/mingw-w64 not supporting __popcnt.
> >>>>>>>
> >>>>>>> I attached the simple C++ program I used to test this patch.
> >>>>>>>
> >>>>>>> I am not totally sure, but it looks like Clang already supports the
> >>>>>>> __popcnt intrinsics because I saw code for it in the clang
> >>>>> repository.  So
> >>>>>>> that is why this patch has "#if !defined(__clang__)" around it.
> >>>>>>>
> >>>>>>> I read the documentation for intrin.h and intrin-impl.h and I
> >> believe
> >>>>> this
> >>>>>>> patch follows all the rules.  It would be great if it could be
> >> merged
> >>>>> in.
> >>>>>>> Thanks!
> >>>>>>>
> >>>>>>> --David Grayson
> >>>>>>>
> >>>>>>> ------------------------------------------------------------
> >>>>>>> ------------------
> >>>>>>> Check out the vibrant tech community on one of the world's most
> >>>>>>> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> >>>>>>> _______________________________________________
> >>>>>>> Mingw-w64-public mailing list
> >>>>>>> Mingw-w64-public@lists.sourceforge.net
> >>>>>>> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
> >>>>>>>
> >>>>>>>
> >>>>>> ------------------------------------------------------------
> >>>>> ------------------
> >>>>>> Check out the vibrant tech community on one of the world's most
> >>>>>> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> >>>>>> _______________________________________________
> >>>>>> Mingw-w64-public mailing list
> >>>>>> Mingw-w64-public@lists.sourceforge.net
> >>>>>> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
> >>>>> ------------------------------------------------------------
> >>>>> ------------------
> >>>>> Check out the vibrant tech community on one of the world's most
> >>>>> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> >>>>> _______________________________________________
> >>>>> Mingw-w64-public mailing list
> >>>>> Mingw-w64-public@lists.sourceforge.net
> >>>>> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
> >>>>>
> >>>>
> >>> ------------------------------------------------------------
> >> ------------------
> >>> Check out the vibrant tech community on one of the world's most
> >>> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> >>> _______________________________________________
> >>> Mingw-w64-public mailing list
> >>> Mingw-w64-public@lists.sourceforge.net
> >>> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
> >> ------------------------------------------------------------
> >> ------------------
> >> Check out the vibrant tech community on one of the world's most
> >> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> >> _______________________________________________
> >> Mingw-w64-public mailing list
> >> Mingw-w64-public@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
> >>
> > ------------------------------------------------------------
> ------------------
> > Check out the vibrant tech community on one of the world's most
> > engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> > _______________________________________________
> > Mingw-w64-public mailing list
> > Mingw-w64-public@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
>
>
>
> ------------------------------------------------------------
> ------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> _______________________________________________
> Mingw-w64-public mailing list
> Mingw-w64-public@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
>
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to