From owner-cvs-src@FreeBSD.ORG Tue Jan 13 20:54:06 2004 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 92CB916A4CE for ; Tue, 13 Jan 2004 20:54:06 -0800 (PST) Received: from sev.net.ua (sev.net.ua [212.86.233.226]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8685743D31 for ; Tue, 13 Jan 2004 20:54:03 -0800 (PST) (envelope-from root@umka.bear.com.ua) Received: from umka.bear.com.ua (st50.sevcity.net [212.86.245.254]) by sev.net.ua (8.12.10/8.12.9) with ESMTP id i0E4q6B9007112; Wed, 14 Jan 2004 06:52:06 +0200 (EET) (envelope-from root@umka.bear.com.ua) Received: from localhost (localhost [[UNIX: localhost]]) by umka.bear.com.ua (8.11.6/8.11.6) id i0E4pkN02321; Wed, 14 Jan 2004 06:51:46 +0200 Content-Type: text/plain; charset="iso-8859-1" From: Alex Lyashkov Organization: Positive Software Corporation To: Stefan Farfeleder Date: Wed, 14 Jan 2004 06:51:43 +0200 User-Agent: KMail/1.4.1 References: <200401131602.i0DG2Khx064321@repoman.freebsd.org> <20040113193300.GB626@wombat.fafoe.narf.at> In-Reply-To: <20040113193300.GB626@wombat.fafoe.narf.at> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-Id: <200401140651.45971.shadow@psoft.net> cc: cvs-src@FreeBSD.org Subject: Re: cvs commit: src/sys/libkern ffs.c ffsl.c fls.c flsl.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Jan 2004 04:54:06 -0000 On Tuesday 13 January 2004 21:33, Stefan Farfeleder wrote: > On Tue, Jan 13, 2004 at 08:02:20AM -0800, Dag-Erling Smorgrav wrote: > > des 2004/01/13 08:02:20 PST > > > > FreeBSD src repository > > > > Modified files: > > sys/libkern ffs.c ffsl.c fls.c flsl.c > > Log: > > Cast to unsigned to avoid sign-extension problems. > > > > Revision Changes Path > > 1.9 +1 -1 src/sys/libkern/ffs.c > > 1.2 +1 -1 src/sys/libkern/ffsl.c > > 1.2 +1 -1 src/sys/libkern/fls.c > > 1.2 +1 -1 src/sys/libkern/flsl.c > > @@ -47,6 +47,6 @@ ffs(int mask) > if (mask == 0) > return (0); > for (bit = 1; !(mask & 1); bit++) > - mask >>= 1; > + (unsigned int)mask >>= 1; > return (bit); > } > > This is an ugly GCC extension. Might I suggest using the portable > > mask = (unsigned int)mask >> 1; > > instead? > can be use asm inline instred this circle ? /** * find_next_bit - find the first set bit in a memory region * @addr: The address to base the search on * @offset: The bitnumber to start searching at * @size: The maximum size to search */ static __inline__ int find_next_bit (void * addr, int size, int offset) { unsigned long * p = ((unsigned long *) addr) + (offset >> 5); int set = 0, bit = offset & 31, res; if (bit) { /* * Look for nonzero in the first 32 bits: */ __asm__("bsfl %1,%0\n\t" "jne 1f\n\t" "movl $32, %0\n" "1:" : "=r" (set) : "r" (*p >> bit)); if (set < (32 - bit)) return set + offset; set = 32 - bit; p++; } /* * No set bit yet, search remaining full words for a bit */ res = find_first_bit (p, size - 32 * (p - (unsigned long *) addr)); return (offset + set + res); } -- With best regards, Alex