*/
 static inline __u64 rol64(__u64 word, unsigned int shift)
 {
-       return (word << shift) | (word >> (64 - shift));
+       return (word << (shift & 63)) | (word >> ((-shift) & 63));
 }
 
 /**
  */
 static inline __u64 ror64(__u64 word, unsigned int shift)
 {
-       return (word >> shift) | (word << (64 - shift));
+       return (word >> (shift & 63)) | (word << ((-shift) & 63));
 }
 
 /**
  */
 static inline __u32 rol32(__u32 word, unsigned int shift)
 {
-       return (word << shift) | (word >> ((-shift) & 31));
+       return (word << (shift & 31)) | (word >> ((-shift) & 31));
 }
 
 /**
  */
 static inline __u32 ror32(__u32 word, unsigned int shift)
 {
-       return (word >> shift) | (word << (32 - shift));
+       return (word >> (shift & 31)) | (word << ((-shift) & 31));
 }
 
 /**
  */
 static inline __u16 rol16(__u16 word, unsigned int shift)
 {
-       return (word << shift) | (word >> (16 - shift));
+       return (word << (shift & 15)) | (word >> ((-shift) & 15));
 }
 
 /**
  */
 static inline __u16 ror16(__u16 word, unsigned int shift)
 {
-       return (word >> shift) | (word << (16 - shift));
+       return (word >> (shift & 15)) | (word << ((-shift) & 15));
 }
 
 /**
  */
 static inline __u8 rol8(__u8 word, unsigned int shift)
 {
-       return (word << shift) | (word >> (8 - shift));
+       return (word << (shift & 7)) | (word >> ((-shift) & 7));
 }
 
 /**
  */
 static inline __u8 ror8(__u8 word, unsigned int shift)
 {
-       return (word >> shift) | (word << (8 - shift));
+       return (word >> (shift & 7)) | (word << ((-shift) & 7));
 }
 
 /**