compat: backport sign_extend32()
authorLuis R. Rodriguez <lrodriguez@atheros.com>
Thu, 11 Nov 2010 00:28:48 +0000 (16:28 -0800)
committerLuis R. Rodriguez <lrodriguez@atheros.com>
Thu, 11 Nov 2010 00:28:48 +0000 (16:28 -0800)
commit 5faec21f3a6973219481394534ce0e5f17507d84
Author: Andreas Herrmann <andreas.herrmann3@amd.com>
Date:   Mon Aug 30 19:04:01 2010 +0000

    bitops: Provide generic sign_extend32 function

    This patch moves code out from wireless drivers where two different
    functions are defined in three code locations for the same purpose and
    provides a common function to sign extend a 32-bit value.

Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
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));
 }
 
        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)
 static inline unsigned fls_long(unsigned long l)
 {
        if (sizeof(l) == 4)