diff gcc/testsuite/gcc.dg/builtin-bswap-4.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/gcc.dg/builtin-bswap-4.c	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,75 @@
+/* { dg-do run } */
+/* { dg-require-effective-target stdint_types } */
+/* { dg-options "-Wall" } */
+
+#include <stdint.h>
+
+#define MAKE_FUN(suffix, type)						\
+  type my_bswap##suffix(type x) {					\
+    type result = 0;							\
+    int shift;								\
+    for (shift = 0; shift < 8 * sizeof (type); shift += 8)	\
+      {									\
+	result <<= 8;							\
+	result |= (x >> shift) & 0xff;					\
+      }									\
+    return result;							\
+  }									\
+
+MAKE_FUN(16, uint16_t);
+MAKE_FUN(32, uint32_t);
+MAKE_FUN(64, uint64_t);
+
+extern void abort (void);
+
+#define NUMS16					\
+  {						\
+    0x0000,					\
+    0x1122,					\
+    0xffff,					\
+  }
+
+#define NUMS32					\
+  {						\
+    0x00000000UL,				\
+    0x11223344UL,				\
+    0xffffffffUL,				\
+  }
+
+#define NUMS64					\
+  {						\
+    0x0000000000000000ULL,			\
+    0x1122334455667788ULL,			\
+    0xffffffffffffffffULL,			\
+  }
+
+uint16_t uint16_ts[] =
+  NUMS16;
+
+uint32_t uint32_ts[] =
+  NUMS32;
+
+uint64_t uint64_ts[] =
+  NUMS64;
+
+#define N(table) (sizeof (table) / sizeof (table[0]))
+
+int
+main (void)
+{
+  int i;
+
+  for (i = 0; i < N(uint16_ts); i++)
+    if (__builtin_bswap16 (uint16_ts[i]) != my_bswap16 (uint16_ts[i]))
+      abort ();
+
+  for (i = 0; i < N(uint32_ts); i++)
+    if (__builtin_bswap32 (uint32_ts[i]) != my_bswap32 (uint32_ts[i]))
+      abort ();
+
+  for (i = 0; i < N(uint64_ts); i++)
+    if (__builtin_bswap64 (uint64_ts[i]) != my_bswap64 (uint64_ts[i]))
+      abort ();
+
+  return 0;
+}