From owner-freebsd-hackers@FreeBSD.ORG Sun Jun 7 11:52:52 2015 Return-Path: Delivered-To: freebsd-hackers@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id B47E7DF4 for ; Sun, 7 Jun 2015 11:52:52 +0000 (UTC) (envelope-from erichsfreebsdlist@alogt.com) Received: from alogt.com (alogt.com [69.36.191.58]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 920E013A8 for ; Sun, 7 Jun 2015 11:52:52 +0000 (UTC) (envelope-from erichsfreebsdlist@alogt.com) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=alogt.com; s=default; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date; bh=d1bfNmuijitKM2q4PAyZgyXANXsz/14VkndlheZGA6s=; b=iN0nzxtSmYZE5L+tRUX8JrhVuwvgYte52jNmS05zXv9PKHZEtZgR5ntNd6QF12AXB+sJDuQHmpx8bINcrK7iV95eXKsIuj6wRSgfCHmLTqg/cCGeU71eUhO7d/DyqAMTPWho+GSQm4w6jdtmltu7HAFRnBNNpxzyqlQhRdutjcU=; Received: from [114.124.31.137] (port=40298 helo=B85M-HD3-0.alogt.com) by sl-508-2.slc.westdc.net with esmtpsa (TLSv1.2:AES128-GCM-SHA256:128) (Exim 4.85) (envelope-from ) id 1Z1Z8D-001NIE-Uz; Sun, 07 Jun 2015 05:52:50 -0600 Date: Sun, 7 Jun 2015 19:52:45 +0800 From: Erich Dollansky To: Hans Petter Selasky Cc: "freebsd-hackers@freebsd.org" Subject: Re: allow ffs & co. a binary search Message-ID: <20150607195245.62dc191f@B85M-HD3-0.alogt.com> In-Reply-To: <5573EA5E.40806@selasky.org> References: <20150607081315.7c0f09fb@B85M-HD3-0.alogt.com> <5573EA5E.40806@selasky.org> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - sl-508-2.slc.westdc.net X-AntiAbuse: Original Domain - freebsd.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - alogt.com X-Get-Message-Sender-Via: sl-508-2.slc.westdc.net: authenticated_id: erichsfreebsdlist@alogt.com X-Source: X-Source-Args: X-Source-Dir: X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2015 11:52:52 -0000 Hi Hanns, On Sun, 07 Jun 2015 08:53:18 +0200 Hans Petter Selasky wrote: > On 06/07/15 02:13, Erich Dollansky wrote: > > > > If you like the binary way I could give you the sources for the > > complete family following your style to replace the older functions. > > > I think this is not the fastest way to do it. You first find the LSB, I never thought of this as I took the code a long, long time from university and expanded it over time from 8 to 64 bits. > then you do a sumbits, which doesn't have any conditionals IF/ELSE > and performs better with the CPU pipeline. I think the software ffs() > is only used for platforms which doesn't have a hardware version btw: The code is not x86 specific. > This one is the same: > From my libmbin: > > int ffs(int value) > { > int retval = mbin_sumbits32(mbin_lsb32(value) - 1); > if (retval == 32) > retval = 0; > else > retval++; > return (retval); > } > Where is this? Should this also be in 10.1? What I saw is that all CPUs except ARM uses the software version. Erich