Insert the definition from the linux kernel along with the copyright attribution for the fls() operation for ARM.
Signed-off-by: Jason Wessel <[email protected]> --- include/ust/processor.h | 53 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 53 insertions(+), 0 deletions(-) diff --git a/include/ust/processor.h b/include/ust/processor.h index 01aa290..70e244b 100644 --- a/include/ust/processor.h +++ b/include/ust/processor.h @@ -454,6 +454,59 @@ static __inline__ int fls(unsigned int x) struct registers { }; +/* constant_fls() and fls() were take directly from the linux kernel + * sources in 2.6.37 from the file arch/arm/include/asm/bitops.h + * which had the following copyright. + * + * Copyright 1995, Russell King. + * Various bits and pieces copyrights include: + * Linus Torvalds (test_bit). + * Big endian support: Copyright 2001, Nicolas Pitre + * reworked by rmk. + */ + +static inline int constant_fls(int x) +{ + int r = 32; + + if (!x) + return 0; + if (!(x & 0xffff0000u)) { + x <<= 16; + r -= 16; + } + if (!(x & 0xff000000u)) { + x <<= 8; + r -= 8; + } + if (!(x & 0xf0000000u)) { + x <<= 4; + r -= 4; + } + if (!(x & 0xc0000000u)) { + x <<= 2; + r -= 2; + } + if (!(x & 0x80000000u)) { + x <<= 1; + r -= 1; + } + return r; +} + +static __inline__ int fls(unsigned int x) +{ + int ret; + + if (__builtin_constant_p(x)) + return constant_fls(x); + + asm("clz\t%0, %1" : "=r" (ret) : "r" (x) : "cc"); + ret = 32 - ret; + return ret; +} +/*------- end of source taken from linux kernel headers -------*/ + #define ARCH_COPY_ADDR(dst) "ldr "dst", =2b\n\t" \ "b 55f\n\t" \ ".ltorg\n\t" \ -- 1.6.6.2 _______________________________________________ ltt-dev mailing list [email protected] http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
