From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964800AbWAZQat (ORCPT ); Thu, 26 Jan 2006 11:30:49 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S964798AbWAZQar (ORCPT ); Thu, 26 Jan 2006 11:30:47 -0500 Received: from relais.videotron.ca ([24.201.245.36]:53888 "EHLO relais.videotron.ca") by vger.kernel.org with ESMTP id S964776AbWAZQao (ORCPT ); Thu, 26 Jan 2006 11:30:44 -0500 Date: Thu, 26 Jan 2006 11:30:43 -0500 (EST) From: Nicolas Pitre Subject: Re: [parisc-linux] Re: [PATCH 3/6] C-language equivalents of include/asm-*/bitops.h In-reply-to: <20060126161849.GA13632@colo.lackof.org> X-X-Sender: nico@localhost.localdomain To: Grant Grundler Cc: Akinobu Mita , lkml , Ivan Kokshaysky , Ian Molton , dev-etrax@axis.com, David Howells , Yoshinori Sato , Linus Torvalds , linux-ia64@vger.kernel.org, Hirokazu Takata , linux-m68k@vger.kernel.org, Greg Ungerer , linux-mips@linux-mips.org, parisc-linux@parisc-linux.org, linuxppc-dev@ozlabs.org, linux390@de.ibm.com, linuxsh-dev@lists.sourceforge.net, linuxsh-shmedia-dev@lists.sourceforge.net, sparclinux@vger.kernel.org, ultralinux@vger.kernel.org, Miles Bader , Andi Kleen , Chris Zankel Message-id: MIME-version: 1.0 Content-type: TEXT/PLAIN; charset=US-ASCII Content-transfer-encoding: 7BIT References: <20060125112625.GA18584@miraclelinux.com> <20060125113206.GD18584@miraclelinux.com> <20060125200250.GA26443@flint.arm.linux.org.uk> <20060126000618.GA5592@twiddle.net> <20060126085540.GA15377@flint.arm.linux.org.uk> <20060126161849.GA13632@colo.lackof.org> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 26 Jan 2006, Grant Grundler wrote: > On Thu, Jan 26, 2006 at 08:55:41AM +0000, Russell King wrote: > > Unfortunately that's not correct. You do not appear to have checked > > the compiler output like I did - this code does _not_ generate > > constant shifts. > > Russell, > By "written stupidly", I thought Richard meant they could have > used constants instead of "s". e.g.: > if (word << 16 == 0) { b += 16; word >>= 16); } > if (word << 24 == 0) { b += 8; word >>= 8); } > if (word << 28 == 0) { b += 4; word >>= 4); } > > But I prefer what Edgar Toernig suggested. It is just as bad on ARM since it requires large constants that cannot be expressed with immediate litteral values. The constant shift approach is really the best on ARM. Nicolas