[compiler-rt] r249515 - builtins: implement instrinics for cl
Saleem Abdulrasool via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 6 19:58:11 PDT 2015
Author: compnerd
Date: Tue Oct 6 21:58:11 2015
New Revision: 249515
URL: http://llvm.org/viewvc/llvm-project?rev=249515&view=rev
Log:
builtins: implement instrinics for cl
cl does not support the same intrinsics as clang. Provide implementations for
the intrinsics using MSVC builtins.
Patch by Tee Hao Wei!
Modified:
compiler-rt/trunk/lib/builtins/int_lib.h
Modified: compiler-rt/trunk/lib/builtins/int_lib.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/int_lib.h?rev=249515&r1=249514&r2=249515&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/int_lib.h (original)
+++ compiler-rt/trunk/lib/builtins/int_lib.h Tue Oct 6 21:58:11 2015
@@ -88,4 +88,32 @@ COMPILER_RT_ABI si_int __clzti2(ti_int a
COMPILER_RT_ABI tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
#endif
+/* Definitions for builtins unavailable on MSVC */
+#if defined(_MSC_VER) && !defined(__clang__)
+#include <intrin.h>
+
+uint32_t __inline __builtin_ctz(uint32_t value) {
+ uint32_t trailing_zero = 0;
+ if (_BitScanForward(&trailing_zero, value))
+ return trailing_zero;
+ return 32;
+}
+
+uint32_t __inline __builtin_clz(uint32_t value) {
+ uint32_t leading_zero = 0;
+ if (_BitScanReverse(&leading_zero, value))
+ return 31 - leading_zero;
+ return 32;
+}
+
+uint32_t __inline __builtin_clzll(uint64_t value) {
+ uint32_t leading_zero = 0;
+ if (_BitScanReverse64(&leading_zero, value))
+ return 63 - leading_zero;
+ return 64;
+}
+
+#define __builtin_clzl __builtin_clzll
+#endif
+
#endif /* INT_LIB_H */
More information about the llvm-commits
mailing list