[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 2/2] bitops: fix types
From: |
Blue Swirl |
Subject: |
[Qemu-devel] [PATCH v3 2/2] bitops: fix types |
Date: |
Sat, 14 Jul 2012 12:34:48 +0000 |
bitops.h uses inconsistently 'unsigned long' and 'int' for bit numbers.
Unify to 'unsigned long' because it generates better code on x86_64.
Adjust asserts accordingly.
Signed-off-by: Blue Swirl <address@hidden>
---
bitops.h | 40 +++++++++++++++++++++-------------------
1 files changed, 21 insertions(+), 19 deletions(-)
diff --git a/bitops.h b/bitops.h
index 74e14e5..4ad0219 100644
--- a/bitops.h
+++ b/bitops.h
@@ -30,7 +30,7 @@
*/
static unsigned long bitops_ffsl(unsigned long word)
{
- int num = 0;
+ unsigned long num = 0;
#if LONG_MAX > 0x7FFFFFFF
if ((word & 0xffffffff) == 0) {
@@ -68,7 +68,7 @@ static unsigned long bitops_ffsl(unsigned long word)
*/
static inline unsigned long bitops_flsl(unsigned long word)
{
- int num = BITS_PER_LONG - 1;
+ unsigned long num = BITS_PER_LONG - 1;
#if LONG_MAX > 0x7FFFFFFF
if (!(word & (~0ul << 32))) {
@@ -114,7 +114,7 @@ static inline unsigned long ffz(unsigned long word)
* @nr: the bit to set
* @addr: the address to start counting from
*/
-static inline void set_bit(int nr, unsigned long *addr)
+static inline void set_bit(unsigned long nr, unsigned long *addr)
{
unsigned long mask = BIT_MASK(nr);
unsigned long *p = addr + BIT_WORD(nr);
@@ -127,7 +127,7 @@ static inline void set_bit(int nr, unsigned long *addr)
* @nr: Bit to clear
* @addr: Address to start counting from
*/
-static inline void clear_bit(int nr, unsigned long *addr)
+static inline void clear_bit(unsigned long nr, unsigned long *addr)
{
unsigned long mask = BIT_MASK(nr);
unsigned long *p = addr + BIT_WORD(nr);
@@ -140,7 +140,7 @@ static inline void clear_bit(int nr, unsigned long *addr)
* @nr: Bit to change
* @addr: Address to start counting from
*/
-static inline void change_bit(int nr, unsigned long *addr)
+static inline void change_bit(unsigned long nr, unsigned long *addr)
{
unsigned long mask = BIT_MASK(nr);
unsigned long *p = addr + BIT_WORD(nr);
@@ -153,7 +153,7 @@ static inline void change_bit(int nr, unsigned long *addr)
* @nr: Bit to set
* @addr: Address to count from
*/
-static inline int test_and_set_bit(int nr, unsigned long *addr)
+static inline int test_and_set_bit(unsigned long nr, unsigned long *addr)
{
unsigned long mask = BIT_MASK(nr);
unsigned long *p = addr + BIT_WORD(nr);
@@ -168,7 +168,7 @@ static inline int test_and_set_bit(int nr, unsigned long
*addr)
* @nr: Bit to clear
* @addr: Address to count from
*/
-static inline int test_and_clear_bit(int nr, unsigned long *addr)
+static inline int test_and_clear_bit(unsigned long nr, unsigned long *addr)
{
unsigned long mask = BIT_MASK(nr);
unsigned long *p = addr + BIT_WORD(nr);
@@ -183,7 +183,7 @@ static inline int test_and_clear_bit(int nr, unsigned long
*addr)
* @nr: Bit to change
* @addr: Address to count from
*/
-static inline int test_and_change_bit(int nr, unsigned long *addr)
+static inline int test_and_change_bit(unsigned long nr, unsigned long *addr)
{
unsigned long mask = BIT_MASK(nr);
unsigned long *p = addr + BIT_WORD(nr);
@@ -198,7 +198,7 @@ static inline int test_and_change_bit(int nr, unsigned long
*addr)
* @nr: bit number to test
* @addr: Address to start counting from
*/
-static inline int test_bit(int nr, const unsigned long *addr)
+static inline int test_bit(unsigned long nr, const unsigned long *addr)
{
return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
}
@@ -282,9 +282,10 @@ static inline unsigned long hweight_long(unsigned long w)
*
* Returns: the value of the bit field extracted from the input value.
*/
-static inline uint32_t extract32(uint32_t value, int start, int length)
+static inline uint32_t extract32(uint32_t value, unsigned long start,
+ unsigned long length)
{
- assert(start >= 0 && length > 0 && length <= 32 - start);
+ assert(start < 32 && length > 0 && length <= 32 && start + length <= 32);
return (value >> start) & (~0U >> (32 - length));
}
@@ -301,9 +302,10 @@ static inline uint32_t extract32(uint32_t value, int
start, int length)
*
* Returns: the value of the bit field extracted from the input value.
*/
-static inline uint64_t extract64(uint64_t value, int start, int length)
+static inline uint64_t extract64(uint64_t value, unsigned long start,
+ unsigned long length)
{
- assert(start >= 0 && length > 0 && length <= 64 - start);
+ assert(start < 64 && length > 0 && length <= 64 && start + length <= 64);
return (value >> start) & (~0ULL >> (64 - length));
}
@@ -324,11 +326,11 @@ static inline uint64_t extract64(uint64_t value, int
start, int length)
*
* Returns: the modified @value.
*/
-static inline uint32_t deposit32(uint32_t value, int start, int length,
- uint32_t fieldval)
+static inline uint32_t deposit32(uint32_t value, unsigned long start,
+ unsigned long length, uint32_t fieldval)
{
uint32_t mask;
- assert(start >= 0 && length > 0 && length <= 32 - start);
+ assert(start < 32 && length > 0 && length <= 32 && start + length <= 32);
mask = (~0U >> (32 - length)) << start;
return (value & ~mask) | ((fieldval << start) & mask);
}
@@ -350,11 +352,11 @@ static inline uint32_t deposit32(uint32_t value, int
start, int length,
*
* Returns: the modified @value.
*/
-static inline uint64_t deposit64(uint64_t value, int start, int length,
- uint64_t fieldval)
+static inline uint64_t deposit64(uint64_t value, unsigned long start,
+ unsigned long length, uint64_t fieldval)
{
uint64_t mask;
- assert(start >= 0 && length > 0 && length <= 64 - start);
+ assert(start < 64 && length > 0 && length <= 64 && start + length <= 64);
mask = (~0ULL >> (64 - length)) << start;
return (value & ~mask) | ((fieldval << start) & mask);
}
--
1.7.2.5
- [Qemu-devel] [PATCH v3 0/2] bitops patches, Blue Swirl, 2012/07/14
- [Qemu-devel] [PATCH v3 1/2] bitops: drop volatile qualifier, Blue Swirl, 2012/07/14
- [Qemu-devel] [PATCH v3 2/2] bitops: fix types,
Blue Swirl <=
- Re: [Qemu-devel] [PATCH v3 2/2] bitops: fix types, Avi Kivity, 2012/07/16
- Re: [Qemu-devel] [PATCH v3 2/2] bitops: fix types, Peter Maydell, 2012/07/16
- Re: [Qemu-devel] [PATCH v3 2/2] bitops: fix types, Markus Armbruster, 2012/07/17
- Re: [Qemu-devel] [PATCH v3 2/2] bitops: fix types, Blue Swirl, 2012/07/23
- Re: [Qemu-devel] [PATCH v3 2/2] bitops: fix types, Peter Maydell, 2012/07/23
- Re: [Qemu-devel] [PATCH v3 2/2] bitops: fix types, Markus Armbruster, 2012/07/24
- Re: [Qemu-devel] [PATCH v3 2/2] bitops: fix types, Blue Swirl, 2012/07/24