From owner-svn-src-head@FreeBSD.ORG Thu Dec 4 17:50:34 2014 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id E147CF9E; Thu, 4 Dec 2014 17:50:34 +0000 (UTC) Received: from h2.funkthat.com (gate2.funkthat.com [208.87.223.18]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "funkthat.com", Issuer "funkthat.com" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 9F386B2D; Thu, 4 Dec 2014 17:50:34 +0000 (UTC) Received: from h2.funkthat.com (localhost [127.0.0.1]) by h2.funkthat.com (8.14.3/8.14.3) with ESMTP id sB4HoXfa025009 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 4 Dec 2014 09:50:33 -0800 (PST) (envelope-from jmg@h2.funkthat.com) Received: (from jmg@localhost) by h2.funkthat.com (8.14.3/8.14.3/Submit) id sB4HoW9Z025008; Thu, 4 Dec 2014 09:50:32 -0800 (PST) (envelope-from jmg) Date: Thu, 4 Dec 2014 09:50:32 -0800 From: John-Mark Gurney To: Hans Petter Selasky Subject: Re: svn commit: r275468 - head/sys/dev/usb/controller Message-ID: <20141204175032.GQ99957@funkthat.com> References: <201412032155.sB3LtjJN043364@svn.freebsd.org> <20141204005451.GM99957@funkthat.com> <54800B60.9020208@selasky.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <54800B60.9020208@selasky.org> User-Agent: Mutt/1.4.2.3i X-Operating-System: FreeBSD 7.2-RELEASE i386 X-PGP-Fingerprint: 54BA 873B 6515 3F10 9E88 9322 9CB1 8F74 6D3F A396 X-Files: The truth is out there X-URL: http://resnet.uoregon.edu/~gurney_j/ X-Resume: http://resnet.uoregon.edu/~gurney_j/resume.html X-TipJar: bitcoin:13Qmb6AeTgQecazTWph4XasEsP7nGRbAPE X-to-the-FBI-CIA-and-NSA: HI! HOW YA DOIN? can i haz chizburger? X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.2.2 (h2.funkthat.com [127.0.0.1]); Thu, 04 Dec 2014 09:50:33 -0800 (PST) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Dec 2014 17:50:35 -0000 Hans Petter Selasky wrote this message on Thu, Dec 04, 2014 at 08:21 +0100: > On 12/04/14 01:54, John-Mark Gurney wrote: > >Hans Petter Selasky wrote this message on Wed, Dec 03, 2014 at 21:55 +0000: > >>Author: hselasky > >>Date: Wed Dec 3 21:55:44 2014 > >>New Revision: 275468 > >>URL: https://svnweb.freebsd.org/changeset/base/275468 > >> > >>Log: > >> Optimise the bit searching loops, by quickly skipping the 16 first set > >> bits if all the 16 first bits are set. This way the worst case > >> searching time is reduced from 32 to 16 cycles. > > > >You could use ffs instead: > > x = ffs(~map); > > if (x) { > > x--; > > /* normal code */ > > } > > > >This has the benefit of using a single instruction on platforms that > >support it (bsfl on i386), though apparently, we haven't optimized this > >for all platforms... arm has a version for int, but their ffsl does > >the same linear search instead of just calling ffs, or at least > >detecting if sizeof(long) == sizeof(int) and calling ffs... > > > > Yes, I'm aware about that, but like you say it is not optimised for all > platforms yet. So I'm not sure if it will give any benefit for the > platform the driver is running on .... > > I'll see if I can change the logic inside the C-version of ffs() and the > do the swap like you suggest. Did you see the comment about usig __builtin_ffs{,l,ll} instead? this seems to be a better route... I was going to say we should leave the code for compatibility w/ other compilers, now that we are getting close to having an external tool chain, but I don't see us supporting non-gcc and non-clang compilers anytime soon, and it isn't hard to bring back the code... So, how about changing libkern.h to define the various ones to the built in, and dropping all the special versions? This should be an even better improvement as it'll eliminate some function call overhead.. Probably the same should be done in strings.h in userland too... -- John-Mark Gurney Voice: +1 415 225 5579 "All that I will do, has been done, All that I have, has not."