diff options
| author | Saleem Abdulrasool <compnerd@compnerd.org> | 2015-10-07 02:58:11 +0000 |
|---|---|---|
| committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2015-10-07 02:58:11 +0000 |
| commit | 396e79445946f433375e743737af525ac65c6d29 (patch) | |
| tree | 7aba403b3f4df192df2240cbf62beb048630c30a /compiler-rt/lib/builtins/int_lib.h | |
| parent | b0b7c8a8dd2d6800886a7eff5605c3af0ae37811 (diff) | |
| download | bcm5719-llvm-396e79445946f433375e743737af525ac65c6d29.tar.gz bcm5719-llvm-396e79445946f433375e743737af525ac65c6d29.zip | |
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!
llvm-svn: 249515
Diffstat (limited to 'compiler-rt/lib/builtins/int_lib.h')
| -rw-r--r-- | compiler-rt/lib/builtins/int_lib.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/compiler-rt/lib/builtins/int_lib.h b/compiler-rt/lib/builtins/int_lib.h index 771cc5cfe76..9acf063a4f2 100644 --- a/compiler-rt/lib/builtins/int_lib.h +++ b/compiler-rt/lib/builtins/int_lib.h @@ -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 */ |

