GLIBC's byte swap functions are a good fallback option.
# Determine which kind of byte swap functions your compiler supports.
-# GCC's __builtin_bswap* should be checked individually
-# because some of them can be missing depends on the GCC version.
check_cxx_source_compiles("
int main() {
__builtin_bswap16(0);
- return 0;
- }
-" HAVE_GCC_BYTESWAP_16)
-
-check_cxx_source_compiles("
- int main() {
__builtin_bswap32(0);
- return 0;
- }
-" HAVE_GCC_BYTESWAP_32)
-
-check_cxx_source_compiles("
- int main() {
__builtin_bswap64(0);
return 0;
}
-" HAVE_GCC_BYTESWAP_64)
+" HAVE_GCC_BYTESWAP)
-if(NOT HAVE_GCC_BYTESWAP_16 OR NOT HAVE_GCC_BYTESWAP_32 OR NOT HAVE_GCC_BYTESWAP_64)
+if(NOT HAVE_GCC_BYTESWAP)
check_cxx_source_compiles("
#include <byteswap.h>
int main() {
/* config.h. Generated by cmake from config.h.cmake */
/* Defined if your compiler supports some byte swap functions */
-#cmakedefine HAVE_GCC_BYTESWAP_16 1
-#cmakedefine HAVE_GCC_BYTESWAP_32 1
-#cmakedefine HAVE_GCC_BYTESWAP_64 1
+#cmakedefine HAVE_GCC_BYTESWAP 1
#cmakedefine HAVE_GLIBC_BYTESWAP 1
#cmakedefine HAVE_MSC_BYTESWAP 1
#cmakedefine HAVE_MAC_BYTESWAP 1
# include <sys/endian.h>
#endif
-#include "tstring.h"
+#include <tstring.h>
#include <cstdio>
#include <cstdarg>
#include <cstring>
*/
inline ushort byteSwap(ushort x)
{
-#if defined(HAVE_GCC_BYTESWAP_16)
+#if defined(HAVE_GCC_BYTESWAP)
return __builtin_bswap16(x);
*/
inline uint byteSwap(uint x)
{
-#if defined(HAVE_GCC_BYTESWAP_32)
+#if defined(HAVE_GCC_BYTESWAP)
return __builtin_bswap32(x);
*/
inline ulonglong byteSwap(ulonglong x)
{
-#if defined(HAVE_GCC_BYTESWAP_64)
+#if defined(HAVE_GCC_BYTESWAP)
return __builtin_bswap64(x);