We needed this goodness for Clang. Its another case of Clang
pretending to be another compiler, but failing to consume a program.
The frustrating thing is, we have dedicated code paths for Clang,
including inline assembly that works around its integrated assembler
bugs. If Clang would stop pretending to be other compilers, then
things would "just work".

 #if defined(__GNUC__) && defined(__BMI__)
 # include <immintrin.h>
+# if defined(__clang__)
+#  define _tzcnt_u32(x) __tzcnt_u32(x)
+#  define _tzcnt_u64(x) __tzcnt_u64(x)
+#  define  _blsr_u32(x)  __blsr_u32(x)
+#  define  _blsr_u64(x)  __blsr_u64(x)
+# endif
 #endif


On Sat, Jun 25, 2016 at 9:41 PM, Jeffrey Walton <noloa...@gmail.com> wrote:
> Hi Everyone,
>
> We got a user report of a compile failure using Apple's Clang. I don't
> know the exact Apple Clang version at the moment. Its on OS X 10.11,
> and its probably the one bundled with the latest Xcode.
>
> Here's the error report
> (https://groups.google.com/forum/#!topic/cryptopp-users/BI8yGpr2XNo):
>
>     misc.h:675:23: error: use of undeclared identifier '_tzcnt_u64'
>     misc.h:790:22: error: use of undeclared identifier '_blsr_u64';
> did you mean '__blsr_u32'?
>
> Here's the code in question from misc.h (from
> http://github.com/weidai11/cryptopp/blob/master/misc.h):
>
> #if defined(__GNUC__) && defined(__BMI__)
>     return (unsigned int)_tzcnt_u64(v);
> #elif defined(__GNUC__) && (GCC_VERSION >= 30400)
>     return (unsigned int)__builtin_ctzll(v);
> #elif ...
>     ....
> #endif
>
> And from misc.h (from http://github.com/weidai11/cryptopp/blob/master/misc.h):
>
> #if defined(__GNUC__) && defined(__BMI__)
> template <>
> inline bool IsPowerOf2<word64>(const word64 &value)
> {
>     return value > 0 && _blsr_u64(value) == 0;
> }
> #endif
>
> I believe both symbols are available in <immintrin.h>
> http://software.intel.com/sites/landingpage/IntrinsicsGuide/#=undefined&text=_blsr_u64&expand=421):
>
> #if defined(__GNUC__) && defined(__BMI__)
>     #include <immintrin.h>
> #endif
>
>
> Given __BMI__ is defined, why are we catching the "undeclared identifier" 
> error?
>
> Thanlk in advance/
_______________________________________________
cfe-users mailing list
cfe-users@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users

Reply via email to