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