AArch64: Add gdbserver MTE support
[deliverable/binutils-gdb.git] / libctf / swap.h
index f8cc822db2eb2511052565828fdf83627d2d89c3..4d0b48c9e759e9c002a3b5b70a16ccb4519365d0 100644 (file)
@@ -1,5 +1,5 @@
 /* Interface to byteswapping functions.
-   Copyright (C) 2006-2020 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 Free Software Foundation, Inc.
 
    This file is part of libctf.
 
 
 #include "config.h"
 #include <stdint.h>
+#include <assert.h>
 
 #ifdef HAVE_BYTESWAP_H
 #include <byteswap.h>
-#else
+#endif /* defined(HAVE_BYTESWAP_H) */
 
 /* Provide our own versions of the byteswap functions.  */
+
+#if !HAVE_DECL_BSWAP_16
 static inline uint16_t
 bswap_16 (uint16_t v)
 {
   return ((v >> 8) & 0xff) | ((v & 0xff) << 8);
 }
+#endif /* !HAVE_DECL_BSWAP16 */
 
+#if !HAVE_DECL_BSWAP_32
 static inline uint32_t
 bswap_32 (uint32_t v)
 {
@@ -42,13 +47,9 @@ bswap_32 (uint32_t v)
          | ((v & 0x0000ff00) <<  8)
          | ((v & 0x000000ff) << 24));
 }
+#endif /* !HAVE_DECL_BSWAP32 */
 
-inline uint64_t
-bswap_identity_64 (uint64_t v)
-{
-  return v;
-}
-
+#if !HAVE_DECL_BSWAP_64
 static inline uint64_t
 bswap_64 (uint64_t v)
 {
@@ -61,6 +62,31 @@ bswap_64 (uint64_t v)
          | ((v & 0x000000000000ff00ULL) << 40)
          | ((v & 0x00000000000000ffULL) << 56));
 }
-#endif /* !defined(HAVE_BYTESWAP_H) */
+#endif /* !HAVE_DECL_BSWAP64 */
+
+/* < C11? define away static assertions.  */
+
+#if !defined (__STDC_VERSION__) || __STDC_VERSION__ < 201112L
+#define _Static_assert(cond, err)
+#endif
+
+/* Swap the endianness of something.  */
+
+#define swap_thing(x)                                                  \
+  do                                                                   \
+    {                                                                  \
+      _Static_assert (sizeof (x) == 1 || (sizeof (x) % 2 == 0          \
+                                         && sizeof (x) <= 8),          \
+                     "Invalid size, update endianness code");          \
+      switch (sizeof (x)) {                                            \
+      case 2: x = bswap_16 (x); break;                                 \
+      case 4: x = bswap_32 (x); break;                                 \
+      case 8: x = bswap_64 (x); break;                                 \
+      case 1: /* Nothing needs doing */                                        \
+       break;                                                          \
+      }                                                                        \
+    }                                                                  \
+  while (0);
+
 
 #endif /* !defined(_CTF_SWAP_H) */
This page took 0.024285 seconds and 4 git commands to generate.