diff --git a/ChangeLog b/ChangeLog
index d7076285b27a3871b4ca2f88f9d9d87ac07aa0c8..92658fe7cd1c6842fd2873d0f93e90166c98fb0d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,6 +9,9 @@
 
 2018-01-08  Niels Möller  <nisse@lysator.liu.se>
 
+	* configure.ac: Check for __builtin_bswap64, define
+	HAVE_BUILTIN_BSWAP64 if available.
+
 	* ctr.c (ctr_fill): New function. Use in ctr_crypt.
 
 	* ctr.c (ctr_crypt): For in-place operation, increase max buffer
diff --git a/configure.ac b/configure.ac
index 8668263c104642fbe88dcd4048f39746d1999521..8fb1cb2aa40da2091ef380830fa4ca7423fa4f12 100644
--- a/configure.ac
+++ b/configure.ac
@@ -203,6 +203,22 @@ LSH_FUNC_STRERROR
 AC_CHECK_FUNCS(secure_getenv getline)
 AC_C_BIGENDIAN
 
+AC_CACHE_CHECK([for __builtin_bswap64],
+		nettle_cv_c_builtin_bswap64,
+[AC_TRY_COMPILE([
+#include <stdint.h>
+],[
+uint64_t x = 17;
+uint64_t y = __builtin_bswap64(x);
+],
+nettle_cv_c_builtin_bswap64=yes,
+nettle_cv_c_builtin_bswap64=no)])
+
+AH_TEMPLATE([HAVE_BUILTIN_BSWAP64], [Define if __builtin_bswap64 is available])
+if test "x$nettle_cv_c_builtin_bswap64" = "xyes" ; then
+  AC_DEFINE(HAVE_BUILTIN_BSWAP64)
+fi
+
 LSH_GCC_ATTRIBUTES
 
 # According to Simon Josefsson, looking for uint32_t and friends in