chiark / gitweb /
Improve portability for shift and rotate macros.
[mLib] / bits.h
diff --git a/bits.h b/bits.h
index 9d7c6d096ae594b0e095e4916dd4c2ab51eab445..4da3026b237611bcfcd4ce99c0dc4145a1ea65c2 100644 (file)
--- a/bits.h
+++ b/bits.h
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: bits.h,v 1.1 1999/06/01 09:46:19 mdw Exp $
+ * $Id: bits.h,v 1.2 1999/06/17 00:12:46 mdw Exp $
  *
  * Portable bit-level manipulation macros
  *
@@ -30,6 +30,9 @@
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: bits.h,v $
+ * Revision 1.2  1999/06/17 00:12:46  mdw
+ * Improve portability for shift and rotate macros.
+ *
  * Revision 1.1  1999/06/01 09:46:19  mdw
  * New addition: bit manipulation macros.
  *
@@ -93,21 +96,21 @@ typedef unsigned char octet;
 
 /* --- Safe shifting macros --- */
 
-#define LSL8(v, s) (U8(v) << ((s) & 7u))
-#define LSR8(v, s) (U8(v) >> ((s) & 7u))
-#define LSL16(v, s) (U16(v) << ((s) & 15u))
-#define LSR16(v, s) (U16(v) >> ((s) & 15u))
-#define LSL32(v, s) (U32(v) << ((s) & 31u))
-#define LSR32(v, s) (U32(v) >> ((s) & 31u))
+#define LSL8(v, s) U8(U8(v) << ((s) & 7u))
+#define LSR8(v, s) U8(U8(v) >> ((s) & 7u))
+#define LSL16(v, s) U16(U16(v) << ((s) & 15u))
+#define LSR16(v, s) U16(U16(v) >> ((s) & 15u))
+#define LSL32(v, s) U32(U32(v) << ((s) & 31u))
+#define LSR32(v, s) U32(U32(v) >> ((s) & 31u))
 
 /* --- Rotation macros --- */
 
-#define ROL8(v, s) (LSL8((v), (s)) | (LSR8((v), 8 - (s))))
-#define ROR8(v, s) (LSR8((v), (s)) | (LSL8((v), 8 - (s))))
-#define ROL16(v, s) (LSL16((v), (s)) | (LSR16((v), 16 - (s))))
-#define ROR16(v, s) (LSR16((v), (s)) | (LSL16((v), 16 - (s))))
-#define ROL32(v, s) (LSL32((v), (s)) | (LSR32((v), 32 - (s))))
-#define ROR32(v, s) (LSR32((v), (s)) | (LSL32((v), 32 - (s))))
+#define ROL8(v, s) (LSL8((v), (s)) | (LSR8((v), 8u - (s))))
+#define ROR8(v, s) (LSR8((v), (s)) | (LSL8((v), 8u - (s))))
+#define ROL16(v, s) (LSL16((v), (s)) | (LSR16((v), 16u - (s))))
+#define ROR16(v, s) (LSR16((v), (s)) | (LSL16((v), 16u - (s))))
+#define ROL32(v, s) (LSL32((v), (s)) | (LSR32((v), 32u - (s))))
+#define ROR32(v, s) (LSR32((v), (s)) | (LSL32((v), 32u - (s))))
 
 /* --- Storage and retrieval --- */