From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.gmx.net (mail.gmx.de [213.165.64.21]) by ozlabs.org (Postfix) with SMTP id E65AD68AC4 for ; Thu, 26 Jan 2006 15:34:31 +1100 (EST) Date: Thu, 26 Jan 2006 05:34:12 +0100 From: Edgar Toernig To: Richard Henderson Subject: Re: [PATCH 3/6] C-language equivalents of include/asm-*/bitops.h Message-Id: <20060126053412.0da7f505.froese@gmx.de> In-Reply-To: <20060126000618.GA5592@twiddle.net> References: <20060125112625.GA18584@miraclelinux.com> <20060125113206.GD18584@miraclelinux.com> <20060125200250.GA26443@flint.arm.linux.org.uk> <20060126000618.GA5592@twiddle.net> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Cc: linux-mips@linux-mips.org, linux-m68k@vger.kernel.org, linux-ia64@vger.kernel.org, Ian Molton , Kleen , David Howells , linuxppc-dev@ozlabs.org, Greg Ungerer , sparclinux@vger.kernel.org, Miles Bader , Yoshinori Sato , Hirokazu Takata , Andi, linuxsh-shmedia-dev@lists.sourceforge.net, Linus Torvalds , Kokshaysky , Ivan, Akinobu Mita , Chris Zankel , dev-etrax@axis.com, ultralinux@vger.kernel.org, linux-kernel@vger.kernel.org, linuxsh-dev@lists.sourceforge.net, linux390@de.ibm.com, parisc-linux@parisc-linux.org List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Richard Henderson wrote: > > On Wed, Jan 25, 2006 at 08:02:50PM +0000, Russell King wrote: > > > + s = 16; if (word << 16 != 0) s = 0; b += s; word >>= s; > > > + s = 8; if (word << 24 != 0) s = 0; b += s; word >>= s; > > > + s = 4; if (word << 28 != 0) s = 0; b += s; word >>= s; > ... > > Basically, shifts which depend on a variable are more expensive than > > constant-based shifts. > > Actually, they're all constant shifts. Just written stupidly. Why shift at all? int ffs(u32 word) { int bit = 0; word &= -word; // only keep the lsb. if (word & 0xffff0000) bit |= 16; if (word & 0xff00ff00) bit |= 8; if (word & 0xf0f0f0f0) bit |= 4; if (word & 0xcccccccc) bit |= 2; if (word & 0xaaaaaaaa) bit |= 1; return bit; } Ciao, ET.