Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 636dd2b7 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by Linus Torvalds
Browse files

[PATCH] x86_64: fls in asm for x86_64



Use single instruction for find largest set bit on x86_64.

[Updated by Jan Beulich to fix wrong asm constraints in original
patch -AK]

Cc: jbeulich@novell.com
Signed-off-by: default avatarStephen Hemminger <shemminger@osdl.org>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent bd9cb64d
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -396,6 +396,22 @@ static __inline__ int fls64(__u64 x)
	return __fls(x) + 1;
}

/**
 * fls - find last bit set
 * @x: the word to search
 *
 * This is defined the same way as ffs.
 */
static __inline__ int fls(int x)
{
	int r;

	__asm__("bsrl %1,%0\n\t"
		"cmovzl %2,%0"
		: "=&r" (r) : "rm" (x), "rm" (-1));
	return r+1;
}

/**
 * hweightN - returns the hamming weight of a N-bit word
 * @x: the word to weigh
@@ -434,9 +450,6 @@ static __inline__ int fls64(__u64 x)
#define minix_find_first_zero_bit(addr,size) \
	find_first_zero_bit((void*)addr,size)

/* find last set bit */
#define fls(x) generic_fls(x)

#endif /* __KERNEL__ */

#endif /* _X86_64_BITOPS_H */