#if @GNULIB_STDC_LOAD8_ALIGNED@ || @GNULIB_STDC_STORE8_ALIGNED@
-/* Get bswap_16, bswap_32, bswap_64. */
-# include <byteswap.h>
+/* Get bswap_16, bswap_32, bswap_64, but keep namespace clean on GNU. */
+# if defined __GNUC__ && 4 < __GNUC__ + (8 <= __GNUC_MINOR__)
+# define _GL_STDBIT_HAS_BUILTIN_BSWAP16 1
+# elif defined __has_builtin
+# if __has_builtin (__builtin_bswap16)
+# define _GL_STDBIT_HAS_BUILTIN_BSWAP16 1
+# endif
+# endif
+# if defined __GNUC__ && 4 < __GNUC__ + (3 <= __GNUC_MINOR__)
+# define _GL_STDBIT_HAS_BUILTIN_BSWAP32 1
+# define _GL_STDBIT_HAS_BUILTIN_BSWAP64 1
+# elif defined __has_builtin
+# if __has_builtin (__builtin_bswap32)
+# define _GL_STDBIT_HAS_BUILTIN_BSWAP32 1
+# endif
+# if __has_builtin (__builtin_bswap64)
+# define _GL_STDBIT_HAS_BUILTIN_BSWAP64 1
+# endif
+# endif
+# if ! (defined _GL_STDBIT_HAS_BUILTIN_BSWAP16 \
+ && defined _GL_STDBIT_HAS_BUILTIN_BSWAP32 \
+ && defined _GL_STDBIT_HAS_BUILTIN_BSWAP64)
+# include <byteswap.h>
+# endif
+# ifdef _GL_STDBIT_HAS_BUILTIN_BSWAP16
+# define _GL_STDBIT_BSWAP16(x) __builtin_bswap16 (x)
+# else
+# define _GL_STDBIT_BSWAP16(x) bswap_16 (x)
+# endif
+# ifdef _GL_STDBIT_HAS_BUILTIN_BSWAP32
+# define _GL_STDBIT_BSWAP32(x) __builtin_bswap32 (x)
+# else
+# define _GL_STDBIT_BSWAP32(x) bswap_32 (x)
+# endif
+# ifdef _GL_STDBIT_HAS_BUILTIN_BSWAP64
+# define _GL_STDBIT_BSWAP64(x) __builtin_bswap64 (x)
+# else
+# define _GL_STDBIT_BSWAP64(x) bswap_64 (x)
+# endif
/* Get memcpy, but keep namespace clean on GNU. */
# ifdef __has_builtin
uint_least16_t value;
_GL_STDBIT_MEMCPY (&value, _GL_STDBIT_ASSUME_ALIGNED (ptr, 2), 2);
if (!_GL_STDBIT_BIGENDIAN)
- value = bswap_16 (value);
+ value = _GL_STDBIT_BSWAP16 (value);
return value;
}
else
uint_least32_t value;
_GL_STDBIT_MEMCPY (&value, _GL_STDBIT_ASSUME_ALIGNED (ptr, 4), 4);
if (!_GL_STDBIT_BIGENDIAN)
- value = bswap_32 (value);
+ value = _GL_STDBIT_BSWAP32 (value);
return value;
}
else
uint_least64_t value;
_GL_STDBIT_MEMCPY (&value, _GL_STDBIT_ASSUME_ALIGNED (ptr, 8), 8);
if (!_GL_STDBIT_BIGENDIAN)
- value = bswap_64 (value);
+ value = _GL_STDBIT_BSWAP64 (value);
return value;
}
else
uint_least16_t value;
_GL_STDBIT_MEMCPY (&value, _GL_STDBIT_ASSUME_ALIGNED (ptr, 2), 2);
if (_GL_STDBIT_BIGENDIAN)
- value = bswap_16 (value);
+ value = _GL_STDBIT_BSWAP16 (value);
return value;
}
else
uint_least32_t value;
_GL_STDBIT_MEMCPY (&value, _GL_STDBIT_ASSUME_ALIGNED (ptr, 4), 4);
if (_GL_STDBIT_BIGENDIAN)
- value = bswap_32 (value);
+ value = _GL_STDBIT_BSWAP32 (value);
return value;
}
else
uint_least64_t value;
_GL_STDBIT_MEMCPY (&value, _GL_STDBIT_ASSUME_ALIGNED (ptr, 8), 8);
if (_GL_STDBIT_BIGENDIAN)
- value = bswap_64 (value);
+ value = _GL_STDBIT_BSWAP64 (value);
return value;
}
else
if (_GL_STDBIT_OPTIMIZE_VIA_MEMCPY)
{
if (!_GL_STDBIT_BIGENDIAN)
- value = bswap_16 (value);
+ value = _GL_STDBIT_BSWAP16 (value);
_GL_STDBIT_MEMCPY (_GL_STDBIT_ASSUME_ALIGNED (ptr, 2), &value, 2);
}
else
if (_GL_STDBIT_OPTIMIZE_VIA_MEMCPY)
{
if (!_GL_STDBIT_BIGENDIAN)
- value = bswap_32 (value);
+ value = _GL_STDBIT_BSWAP32 (value);
_GL_STDBIT_MEMCPY (_GL_STDBIT_ASSUME_ALIGNED (ptr, 4), &value, 4);
}
else
if (_GL_STDBIT_OPTIMIZE_VIA_MEMCPY)
{
if (!_GL_STDBIT_BIGENDIAN)
- value = bswap_64 (value);
+ value = _GL_STDBIT_BSWAP64 (value);
_GL_STDBIT_MEMCPY (_GL_STDBIT_ASSUME_ALIGNED (ptr, 8), &value, 8);
}
else
if (_GL_STDBIT_OPTIMIZE_VIA_MEMCPY)
{
if (_GL_STDBIT_BIGENDIAN)
- value = bswap_16 (value);
+ value = _GL_STDBIT_BSWAP16 (value);
_GL_STDBIT_MEMCPY (_GL_STDBIT_ASSUME_ALIGNED (ptr, 2), &value, 2);
}
else
if (_GL_STDBIT_OPTIMIZE_VIA_MEMCPY)
{
if (_GL_STDBIT_BIGENDIAN)
- value = bswap_32 (value);
+ value = _GL_STDBIT_BSWAP32 (value);
_GL_STDBIT_MEMCPY (_GL_STDBIT_ASSUME_ALIGNED (ptr, 4), &value, 4);
}
else
if (_GL_STDBIT_OPTIMIZE_VIA_MEMCPY)
{
if (_GL_STDBIT_BIGENDIAN)
- value = bswap_64 (value);
+ value = _GL_STDBIT_BSWAP64 (value);
_GL_STDBIT_MEMCPY (_GL_STDBIT_ASSUME_ALIGNED (ptr, 8), &value, 8);
}
else