[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 01/11] bitrotate: better 'inline'
From: |
Paul Eggert |
Subject: |
[PATCH 01/11] bitrotate: better 'inline' |
Date: |
Mon, 29 Oct 2012 00:13:35 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20121011 Thunderbird/16.0.1 |
[This is a first of a series of 11 proposed patches to improve
the use of 'inline' in gnulib modules, to take advantage of
C99 'inline' semantics when available. There is one patch
per module in this series.]
* 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.
---
ChangeLog | 12 ++++++++++++
lib/bitrotate.c | 3 +++
lib/bitrotate.h | 27 +++++++++++++++++----------
modules/bitrotate | 5 +++--
4 files changed, 35 insertions(+), 12 deletions(-)
create mode 100644 lib/bitrotate.c
diff --git a/ChangeLog b/ChangeLog
index a379c32..f336149 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2012-10-28 Paul Eggert <address@hidden>
+
+ 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-10-26 Eric Blake <address@hidden>
maint.mk: let packages tweak sc_po_check pattern
diff --git a/lib/bitrotate.c b/lib/bitrotate.c
new file mode 100644
index 0000000..a8f6028
--- /dev/null
+++ b/lib/bitrotate.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define BITROTATE_INLINE _GL_EXTERN_INLINE
+#include "bitrotate.h"
diff --git a/lib/bitrotate.h b/lib/bitrotate.h
index 5fb8f9b..8a67558 100644
--- a/lib/bitrotate.h
+++ b/lib/bitrotate.h
@@ -23,11 +23,16 @@
#include <stdint.h>
#include <sys/types.h>
+_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 63124a8..97cd8dd 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"
--
1.7.11.7
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH 01/11] bitrotate: better 'inline',
Paul Eggert <=