* Jason Wessel ([email protected]) wrote: > Insert the definition from the linux kernel along with the copyright > attribution for the fls() operation for ARM.
You could instead use my own clean room reimplementation at: http://git.efficios.com/?p=babeltrace.git;a=blob;f=tests/test-bitfield.c (for LGPLv2.1 licensing concerns) The header of this file states "GPL", but I give you my blessing to relicense the arch-agnostic fls() implementation as LGPL for UST. If you don't feel like recoding the arm-specific fls, we can leave it out and just use the arch-agnostic version for now. Thanks, Mathieu > > 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 > -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com _______________________________________________ ltt-dev mailing list [email protected] http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
