[Groonga-commit] groonga/grnxx [master] Add macros to check if __builtin_bswap*() are available or not.

Back to archive index

susumu.yata null+****@clear*****
Tue Apr 16 16:40:58 JST 2013


susumu.yata	2013-04-16 16:40:58 +0900 (Tue, 16 Apr 2013)

  New Revision: 5554da280d3d4abcceae9efcfa25fbee218fac7a
  https://github.com/groonga/grnxx/commit/5554da280d3d4abcceae9efcfa25fbee218fac7a

  Message:
    Add macros to check if __builtin_bswap*() are available or not.

  Modified files:
    lib/grnxx/features.hpp
    lib/grnxx/intrinsic.hpp

  Modified: lib/grnxx/features.hpp (+13 -3)
===================================================================
--- lib/grnxx/features.hpp    2013-04-15 22:56:09 +0900 (606dc5c)
+++ lib/grnxx/features.hpp    2013-04-16 16:40:58 +0900 (6ef1091)
@@ -107,8 +107,14 @@
 
 #ifdef GRNXX_CLANG
 # if GRNXX_CLANG_HAS(__builtin_bswap16)
-#  define GRNXX_HAS_GNUC_BUILTIN_BSWAP
-# endif  // GRNXX_CLANG_HAS(__builtin_clz)
+#  define GRNXX_HAS_GNUC_BUILTIN_BSWAP16
+# endif  // GRNXX_CLANG_HAS(__builtin_bswap16)
+# if GRNXX_CLANG_HAS(__builtin_bswap32)
+#  define GRNXX_HAS_GNUC_BUILTIN_BSWAP32
+# endif  // GRNXX_CLANG_HAS(__builtin_bswap32)
+# if GRNXX_CLANG_HAS(__builtin_bswap64)
+#  define GRNXX_HAS_GNUC_BUILTIN_BSWAP64
+# endif  // GRNXX_CLANG_HAS(__builtin_bswap64)
 # if GRNXX_CLANG_HAS(__builtin_clz)
 #  define GRNXX_HAS_GNUC_BUILTIN_CLZ
 # endif  // GRNXX_CLANG_HAS(__builtin_clz)
@@ -125,11 +131,15 @@
 # define GRNXX_HAS_GNUC_BUILTIN_CLZ
 # if GRNXX_GNUC_VERSION >= GRNXX_GNUC_MAKE_VERSION(4, 2, 0)
 #  define GRNXX_HAS_GNUC_BUILTIN_SYNC
-#  define GRNXX_HAS_GNUC_BUILTIN_BSWAP
+#  define GRNXX_HAS_GNUC_BUILTIN_BSWAP32
+#  define GRNXX_HAS_GNUC_BUILTIN_BSWAP64
 # endif  // GRNXX_GNUC_VERSION >= GRNXX_GNUC_MAKE_VERSION(4, 2, 0)
 # if GRNXX_GNUC_VERSION >= GRNXX_GNUC_MAKE_VERSION(4, 7, 0)
 #  define GRNXX_HAS_GNUC_BUILTIN_ATOMIC
 # endif  // GRNXX_GNUC_VERSION >= GRNXX_GNUC_MAKE_VERSION(4, 7, 0)
+# if GRNXX_GNUC_VERSION >= GRNXX_GNUC_MAKE_VERSION(4, 8, 0)
+#  define GRNXX_HAS_GNUC_BUILTIN_BSWAP16
+# endif  // GRNXX_GNUC_VERSION >= GRNXX_GNUC_MAKE_VERSION(4, 8, 0)
 #endif  // defined(GRNXX_GNUC)
 
 // Source features.

  Modified: lib/grnxx/intrinsic.hpp (+9 -9)
===================================================================
--- lib/grnxx/intrinsic.hpp    2013-04-15 22:56:09 +0900 (18f1cc1)
+++ lib/grnxx/intrinsic.hpp    2013-04-16 16:40:58 +0900 (d81d6b3)
@@ -264,32 +264,32 @@ inline uint8_t byte_swap(uint8_t value) {
 inline uint16_t byte_swap(uint16_t value) {
 #ifdef GRNXX_MSC
   return ::_byteswap_ushort(value);
-#elif defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP)
+#elif defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP16)
   return ::__builtin_bswap16(value);
-#else  // defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP)
+#else  // defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP16)
   return (value << 8) | (value >> 8);
-#endif  // defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP)
+#endif  // defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP16)
 }
 
 inline uint32_t byte_swap(uint32_t value) {
 #ifdef GRNXX_MSC
   return ::_byteswap_ulong(value);
-#elif defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP)
+#elif defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP32)
   return ::__builtin_bswap32(value);
-#else  // defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP)
+#else  // defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP32)
   return (value << 24) |
          ((value & (0xFF <<  8)) << 8) |
          ((value & (0xFF << 16)) >> 8) |
          (value >> 24);
-#endif  // defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP)
+#endif  // defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP32)
 }
 
 inline uint64_t byte_swap(uint64_t value) {
 #ifdef GRNXX_MSC
   return ::_byteswap_uint64(value);
-#elif defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP)
+#elif defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP64)
   return ::__builtin_bswap64(value);
-#else  // defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP)
+#else  // defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP64)
   return (value << 56) |
          ((value & (0xFFULL <<  8)) << 40) |
          ((value & (0xFFULL << 16)) << 24) |
@@ -298,7 +298,7 @@ inline uint64_t byte_swap(uint64_t value) {
          ((value & (0xFFULL << 40)) >> 24) |
          ((value & (0xFFULL << 48)) >> 40) |
          (value >> 56);
-#endif  // defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP)
+#endif  // defined(GRNXX_HAS_GNUC_BUILTIN_BSWAP64)
 }
 
 // Implementation of atomic_compare_and_swap.
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index