[U-Boot] [PATCH v7 02/21] include: Add generic bitops headers

Simon Glass sjg at chromium.org
Tue Dec 1 21:01:56 CET 2015


Hi York,

On 1 December 2015 at 10:26, York Sun <yorksun at freescale.com> wrote:
>
>
> On 11/05/2015 06:43 AM, Fabio Estevam wrote:
>> Use the generic bitops header files from the kernel.
>>
>> Imported from kernel 4.2.3.
>>
>> Signed-off-by: Fabio Estevam <fabio.estevam at freescale.com>
>> ---
>> Changes since v6:
>> - Do not touch include/linux/bitops here to avoid build warnings (Daniel)
>>
>>  include/asm-generic/bitops/__ffs.h | 43 ++++++++++++++++++++++++++++++++++++++
>>  include/asm-generic/bitops/__fls.h | 43 ++++++++++++++++++++++++++++++++++++++
>>  include/asm-generic/bitops/fls.h   | 41 ++++++++++++++++++++++++++++++++++++
>>  include/asm-generic/bitops/fls64.h | 36 +++++++++++++++++++++++++++++++
>>  4 files changed, 163 insertions(+)
>>  create mode 100644 include/asm-generic/bitops/__ffs.h
>>  create mode 100644 include/asm-generic/bitops/__fls.h
>>  create mode 100644 include/asm-generic/bitops/fls.h
>>  create mode 100644 include/asm-generic/bitops/fls64.h
>>
>
> <snip>
>
>> diff --git a/include/asm-generic/bitops/__fls.h b/include/asm-generic/bitops/__fls.h
>> new file mode 100644
>> index 0000000..a60a7cc
>> --- /dev/null
>> +++ b/include/asm-generic/bitops/__fls.h
>> @@ -0,0 +1,43 @@
>> +#ifndef _ASM_GENERIC_BITOPS___FLS_H_
>> +#define _ASM_GENERIC_BITOPS___FLS_H_
>> +
>> +#include <asm/types.h>
>> +
>> +/**
>> + * __fls - find last (most-significant) set bit in a long word
>> + * @word: the word to search
>> + *
>> + * Undefined if no set bit exists, so code should check against 0 first.
>> + */
>> +static __always_inline unsigned long __fls(unsigned long word)
>> +{
>> +     int num = BITS_PER_LONG - 1;
>> +
>> +#if BITS_PER_LONG == 64
>> +     if (!(word & (~0ul << 32))) {
>> +             num -= 32;
>> +             word <<= 32;
>> +     }
>> +#endif
>> +     if (!(word & (~0ul << (BITS_PER_LONG-16)))) {
>> +             num -= 16;
>> +             word <<= 16;
>> +     }
>> +     if (!(word & (~0ul << (BITS_PER_LONG-8)))) {
>> +             num -= 8;
>> +             word <<= 8;
>> +     }
>> +     if (!(word & (~0ul << (BITS_PER_LONG-4)))) {
>> +             num -= 4;
>> +             word <<= 4;
>> +     }
>> +     if (!(word & (~0ul << (BITS_PER_LONG-2)))) {
>> +             num -= 2;
>> +             word <<= 2;
>> +     }
>> +     if (!(word & (~0ul << (BITS_PER_LONG-1))))
>> +             num -= 1;
>> +     return num;
>> +}
>
> Sorry for catching this late. All above left shift causes compiling warning on
> 32-bit host (ubuntu 12.04 with gcc 4.6.3)
>
> include/asm-generic/bitops/__fls.h:17:2: warning: left shift count >= width of
> type [enabled by default]
>
> The root cause may be in include/configs/sandbox.h
> #define CONFIG_SANDBOX_BITS_PER_LONG  64

I think sandbox has a few issues on 32-bit machines. Probably this
should change to 32-bits. I don't have a 32-bit machine set up and in
regular use so I have not looked a tthis.

Regards,
Simon


More information about the U-Boot mailing list