diff options
author | Pádraig Brady <P@draigBrady.com> | 2015-01-06 02:27:16 +0000 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2015-01-06 10:19:32 +0000 |
commit | df7ede08f08348a791ebaadafaa963ed804a725d (patch) | |
tree | 03f9b2daf1d00f875caa1730d74d310c58ae7731 /lib/count-trailing-zeros.h | |
parent | 257752a173c30b75018c9a6df1a8739010e6f4b3 (diff) | |
download | gnulib-df7ede08f08348a791ebaadafaa963ed804a725d.tar.gz |
count-leading-zeros: avoid 64-bit intrinsics on 32-bit Windows
* lib/count-leading-zeros.h (count_leading_zeros_ll): Use 32 bit
intrinsics in this case.
* lib/count-trailing-zeros.h: Likewise.
* lib/count-one-bits.h: Likewise.
Diffstat (limited to 'lib/count-trailing-zeros.h')
-rw-r--r-- | lib/count-trailing-zeros.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/count-trailing-zeros.h b/lib/count-trailing-zeros.h index 83ce2fbe26..1e71977fab 100644 --- a/lib/count-trailing-zeros.h +++ b/lib/count-trailing-zeros.h @@ -96,8 +96,13 @@ count_trailing_zeros_l (unsigned long int x) COUNT_TRAILING_ZEROS_INLINE int count_trailing_zeros_ll (unsigned long long int x) { +# if _MSC_VER && ! defined _M_X64 + int count = count_trailing_zeros (x); + return count < 32 ? count : 32 + count_trailing_zeros (x >> 31 >> 1); +# else COUNT_TRAILING_ZEROS (__builtin_ctzll, _BitScanForward64, unsigned long long int); +# endif } #endif |