diff --git a/src/intrinsics.h b/src/intrinsics.h
index 42dddf77c0cea59b8b12a9c1c9bb734652a486fc..7a4f0870b9d758ed6613e88b6b48a3c93887cd1c 100644
--- a/src/intrinsics.h
+++ b/src/intrinsics.h
@@ -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 */