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