From: Paul Eggert Date: Wed, 21 Nov 2012 06:25:05 +0000 (-0800) Subject: bitrotate: better 'inline' X-Git-Tag: v0.1~364 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=5cabadce63c02be518a0679cb02d2e7c8a002c54;p=gnulib.git bitrotate: better 'inline' * lib/bitrotate.c: New file. * lib/bitrotate.h (BITROTATE_INLINE): New macros. Replace all uses of 'static inline' with them. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * modules/bitrotate (Files, lib_SOURCES): Add lib/bitrotate.c. (Depends-on): Add extern-inline. (configure.ac): Do not require AC_C_INLINE. --- diff --git a/ChangeLog b/ChangeLog index 64f57e7147..c23c0fda74 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2012-11-29 Paul Eggert + + bitrotate: better 'inline' + * lib/bitrotate.c: New file. + * lib/bitrotate.h (BITROTATE_INLINE): + New macros. + Replace all uses of 'static inline' with them. + Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. + * modules/bitrotate (Files, lib_SOURCES): Add lib/bitrotate.c. + (Depends-on): Add extern-inline. + (configure.ac): Do not require AC_C_INLINE. + 2012-11-20 Theophile Ranquet maint.mk: avoid gratuitous failure diff --git a/lib/bitrotate.c b/lib/bitrotate.c new file mode 100644 index 0000000000..a8f602889d --- /dev/null +++ b/lib/bitrotate.c @@ -0,0 +1,3 @@ +#include +#define BITROTATE_INLINE _GL_EXTERN_INLINE +#include "bitrotate.h" diff --git a/lib/bitrotate.h b/lib/bitrotate.h index 5fb8f9be47..8a67558fbd 100644 --- a/lib/bitrotate.h +++ b/lib/bitrotate.h @@ -23,11 +23,16 @@ #include #include +_GL_INLINE_HEADER_BEGIN +#ifndef BITROTATE_INLINE +# define BITROTATE_INLINE _GL_INLINE +#endif + #ifdef UINT64_MAX /* Given an unsigned 64-bit argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 and 63 inclusive. */ -static inline uint64_t +BITROTATE_INLINE uint64_t rotl64 (uint64_t x, int n) { return ((x << n) | (x >> (64 - n))) & UINT64_MAX; @@ -36,7 +41,7 @@ rotl64 (uint64_t x, int n) /* Given an unsigned 64-bit argument X, return the value corresponding to rotating the bits N steps to the right. N must be between 1 to 63 inclusive.*/ -static inline uint64_t +BITROTATE_INLINE uint64_t rotr64 (uint64_t x, int n) { return ((x >> n) | (x << (64 - n))) & UINT64_MAX; @@ -46,7 +51,7 @@ rotr64 (uint64_t x, int n) /* Given an unsigned 32-bit argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 and 31 inclusive. */ -static inline uint32_t +BITROTATE_INLINE uint32_t rotl32 (uint32_t x, int n) { return ((x << n) | (x >> (32 - n))) & UINT32_MAX; @@ -55,7 +60,7 @@ rotl32 (uint32_t x, int n) /* Given an unsigned 32-bit argument X, return the value corresponding to rotating the bits N steps to the right. N must be between 1 to 31 inclusive.*/ -static inline uint32_t +BITROTATE_INLINE uint32_t rotr32 (uint32_t x, int n) { return ((x >> n) | (x << (32 - n))) & UINT32_MAX; @@ -64,7 +69,7 @@ rotr32 (uint32_t x, int n) /* Given a size_t argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 and (CHAR_BIT * sizeof (size_t) - 1) inclusive. */ -static inline size_t +BITROTATE_INLINE size_t rotl_sz (size_t x, int n) { return ((x << n) | (x >> ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX; @@ -73,7 +78,7 @@ rotl_sz (size_t x, int n) /* Given a size_t argument X, return the value corresponding to rotating the bits N steps to the right. N must be between 1 to (CHAR_BIT * sizeof (size_t) - 1) inclusive. */ -static inline size_t +BITROTATE_INLINE size_t rotr_sz (size_t x, int n) { return ((x >> n) | (x << ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX; @@ -84,7 +89,7 @@ rotr_sz (size_t x, int n) 15 inclusive, but on most relevant targets N can also be 0 and 16 because 'int' is at least 32 bits and the arguments must widen before shifting. */ -static inline uint16_t +BITROTATE_INLINE uint16_t rotl16 (uint16_t x, int n) { return ((x << n) | (x >> (16 - n))) & UINT16_MAX; @@ -95,7 +100,7 @@ rotl16 (uint16_t x, int n) inclusive, but on most relevant targets N can also be 0 and 16 because 'int' is at least 32 bits and the arguments must widen before shifting. */ -static inline uint16_t +BITROTATE_INLINE uint16_t rotr16 (uint16_t x, int n) { return ((x >> n) | (x << (16 - n))) & UINT16_MAX; @@ -106,7 +111,7 @@ rotr16 (uint16_t x, int n) inclusive, but on most relevant targets N can also be 0 and 8 because 'int' is at least 32 bits and the arguments must widen before shifting. */ -static inline uint8_t +BITROTATE_INLINE uint8_t rotl8 (uint8_t x, int n) { return ((x << n) | (x >> (8 - n))) & UINT8_MAX; @@ -117,10 +122,12 @@ rotl8 (uint8_t x, int n) inclusive, but on most relevant targets N can also be 0 and 8 because 'int' is at least 32 bits and the arguments must widen before shifting. */ -static inline uint8_t +BITROTATE_INLINE uint8_t rotr8 (uint8_t x, int n) { return ((x >> n) | (x << (8 - n))) & UINT8_MAX; } +_GL_INLINE_HEADER_END + #endif /* _GL_BITROTATE_H */ diff --git a/modules/bitrotate b/modules/bitrotate index 63124a89e0..97cd8dd460 100644 --- a/modules/bitrotate +++ b/modules/bitrotate @@ -3,15 +3,16 @@ Rotate bits in unsigned 8, 16, and 32 bit integers. Files: lib/bitrotate.h +lib/bitrotate.c Depends-on: +extern-inline stdint configure.ac: -AC_REQUIRE([AC_C_INLINE]) Makefile.am: -lib_SOURCES += bitrotate.h +lib_SOURCES += bitrotate.h bitrotate.c Include: "bitrotate.h"