compat: backport sign_extend32()
[~emulex/for-vlad/old/compat.git] / include / linux / bitops.h
index 679369b..aa76af1 100644 (file)
@@ -111,6 +111,17 @@ static inline __u8 ror8(__u8 word, unsigned int shift)
        return (word >> shift) | (word << (8 - shift));
 }
 
+/**
+ * sign_extend32 - sign extend a 32-bit value using specified bit as sign-bit
+ * @value: value to sign extend
+ * @index: 0 based bit index (0<=index<32) to sign bit
+ */
+static inline __s32 sign_extend32(__u32 value, int index)
+{
+       __u8 shift = 31 - index;
+       return (__s32)(value << shift) >> shift;
+}
+
 static inline unsigned fls_long(unsigned long l)
 {
        if (sizeof(l) == 4)