Skip to content
Snippets Groups Projects
Commit 655c97b9 authored by Matthieu Schaller's avatar Matthieu Schaller
Browse files

Added two more intrinsics for long long types.

parent d4a1703d
No related branches found
No related tags found
1 merge request!301New time line
......@@ -66,6 +66,23 @@ __attribute__((always_inline)) INLINE static int intrinsics_clz(
#endif
}
/**
* @brief Returns the number of leading 0-bits in x, starting at the most
* significant bit position. If x is 0, the result is undefined.
*
* This is a wrapper for the GNU intrinsic with an implementation.
*/
__attribute__((always_inline)) INLINE static int intrinsics_clzll(
unsigned long long x) {
#ifdef __GNUC__
/* Use GCC intrinsics if possible */
return __builtin_clzll(x);
#else
#error "Missing definition of clz for long long on this platform."
#endif
}
/**
* @brief Returns the number of 1-bits in x.
*
......@@ -88,4 +105,21 @@ __attribute__((always_inline)) INLINE static int intrinsics_popcount(
#endif
}
/**
* @brief Returns the number of 1-bits in x.
*
* This is a wrapper for the GNU intrinsic with an implementation (from
* Hacker's Delight) if the compiler intrinsics are not available.
*/
__attribute__((always_inline)) INLINE static int intrinsics_popcountll(
unsigned long long x) {
#ifdef __GNUC__
/* Use GCC intrinsics if possible */
return __builtin_popcountll(x);
#else
#error "Missing definition of popcount for long long on this platform."
#endif
}
#endif /* SWIFT_INTRINSICS_H */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment