changeset 30099:c0373f744092

bitrotate: Use UINT*_MAX constants. Doc string improvement.
author Simon Josefsson <simon@josefsson.org>
date Mon, 08 Sep 2008 12:15:14 +0200
parents 2ec09121ae6a
children 95479148df92
files ChangeLog lib/bitrotate.h
diffstat 2 files changed, 29 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sun Sep 07 23:20:21 2008 +0200
+++ b/ChangeLog	Mon Sep 08 12:15:14 2008 +0200
@@ -1,3 +1,12 @@
+2008-09-08  Simon Josefsson  <simon@josefsson.org>
+
+	* lib/bitrotate.h: Doc fix, mention that N can be wider than minimally
+	required for 16-bit and 8-bit rotates.
+	* lib/bitrotate.h (rotl64, rotr64, rotl32, rotl32, rotl16, rotr16,
+	rotl8, rotr8): Use UINT64_MAX, UINT32_MAX, UINT16_MAX, and
+	UINT8_MAX instead of hard-coded constants.  Suggested by Paul
+	Eggert.
+
 2008-09-07  Bruno Haible  <bruno@clisp.org>
 
 	* tests/test-striconveh.c (main): Check behaviour when converting from
--- a/lib/bitrotate.h	Sun Sep 07 23:20:21 2008 +0200
+++ b/lib/bitrotate.h	Mon Sep 08 12:15:14 2008 +0200
@@ -28,7 +28,7 @@
 static inline uint64_t
 rotl64 (uint64_t x, int n)
 {
-  return ((x << n) | (x >> (64 - n))) & 0xFFFFFFFFFFFFFFFFULL;
+  return ((x << n) | (x >> (64 - n))) & UINT64_MAX;
 }
 
 /* Given an unsigned 64-bit argument X, return the value corresponding
@@ -37,7 +37,7 @@
 static inline uint64_t
 rotr64 (uint64_t x, int n)
 {
-  return ((x >> n) | (x << (64 - n))) & 0xFFFFFFFFFFFFFFFFULL;
+  return ((x >> n) | (x << (64 - n))) & UINT64_MAX;
 }
 #endif
 
@@ -47,7 +47,7 @@
 static inline uint32_t
 rotl32 (uint32_t x, int n)
 {
-  return ((x << n) | (x >> (32 - n))) & 0xFFFFFFFF;
+  return ((x << n) | (x >> (32 - n))) & UINT32_MAX;
 }
 
 /* Given an unsigned 32-bit argument X, return the value corresponding
@@ -56,43 +56,51 @@
 static inline uint32_t
 rotr32 (uint32_t x, int n)
 {
-  return ((x >> n) | (x << (32 - n))) & 0xFFFFFFFF;
+  return ((x >> n) | (x << (32 - n))) & UINT32_MAX;
 }
 
 /* Given an unsigned 16-bit argument X, return the value corresponding
    to rotating the bits N steps to the left.  N must be between 1 to
-   15 inclusive. */
+   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
 rotl16 (uint16_t x, int n)
 {
-  return ((x << n) | (x >> (16 - n))) & 0xFFFF;
+  return ((x << n) | (x >> (16 - n))) & UINT16_MAX;
 }
 
 /* Given an unsigned 16-bit argument X, return the value corresponding
    to rotating the bits N steps to the right.  N must be in 1 to 15
-   inclusive. */
+   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
 rotr16 (uint16_t x, int n)
 {
-  return ((x >> n) | (x << (16 - n))) & 0xFFFF;
+  return ((x >> n) | (x << (16 - n))) & UINT16_MAX;
 }
 
 /* Given an unsigned 8-bit argument X, return the value corresponding
    to rotating the bits N steps to the left.  N must be between 1 to 7
-   inclusive. */
+   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
 rotl8 (uint8_t x, int n)
 {
-  return ((x << n) | (x >> (8 - n))) & 0xFF;
+  return ((x << n) | (x >> (8 - n))) & UINT8_MAX;
 }
 
 /* Given an unsigned 8-bit argument X, return the value corresponding
    to rotating the bits N steps to the right.  N must be in 1 to 7
-   inclusive. */
+   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
 rotr8 (uint8_t x, int n)
 {
-  return ((x >> n) | (x << (8 - n))) & 0xFF;
+  return ((x >> n) | (x << (8 - n))) & UINT8_MAX;
 }
 
 #endif /* _GL_BITROTATE_H */