[PATCH] D14748: bmiintrin.h: Allow using the tzcnt intrinsics for non-BMI targets
Hans Wennborg via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 17 08:49:45 PST 2015
hans created this revision.
hans added reviewers: thakis, echristo.
hans added a subscriber: cfe-commits.
The tzcnt intrinsics are used non non-BMI targets by code (e.g. ffmpeg) that uses it as a potentially faster BSF.
The TZCNT instruction is special in that it's encoded in a backward-compatible way and behaves as BSF on non-BMI targets.
http://reviews.llvm.org/D14748
Files:
lib/Headers/bmiintrin.h
Index: lib/Headers/bmiintrin.h
===================================================================
--- lib/Headers/bmiintrin.h
+++ lib/Headers/bmiintrin.h
@@ -39,7 +39,12 @@
/* Define the default attributes for the functions in this file. */
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("bmi")))
-static __inline__ unsigned short __DEFAULT_FN_ATTRS
+/* Allow using the tzcnt intrinsics even for non-BMI targets. Since the TZCNT
+ instruction behaves as BSF on non-BMI targets, there is code that expects
+ to use it as a potentially faster version of BSF. */
+#define __RELAXED_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
+
+static __inline__ unsigned short __RELAXED_FN_ATTRS
__tzcnt_u16(unsigned short __X)
{
return __X ? __builtin_ctzs(__X) : 16;
@@ -83,7 +88,7 @@
return __X & (__X - 1);
}
-static __inline__ unsigned int __DEFAULT_FN_ATTRS
+static __inline__ unsigned int __RELAXED_FN_ATTRS
__tzcnt_u32(unsigned int __X)
{
return __X ? __builtin_ctz(__X) : 32;
@@ -136,14 +141,15 @@
return __X & (__X - 1);
}
-static __inline__ unsigned long long __DEFAULT_FN_ATTRS
+static __inline__ unsigned long long __RELAXED_FN_ATTRS
__tzcnt_u64(unsigned long long __X)
{
return __X ? __builtin_ctzll(__X) : 64;
}
#endif /* __x86_64__ */
#undef __DEFAULT_FN_ATTRS
+#undef __RELAXED_FN_ATTRS
#endif /* __BMIINTRIN_H */
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D14748.40399.patch
Type: text/x-patch
Size: 1410 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151117/00a72600/attachment.bin>
More information about the cfe-commits
mailing list