From: "Alexander van Heukelum" <heukelum-97jfqw80gc6171pxa8y+qA@public.gmane.org>
To: Benny Halevy <bhalevy-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>,
Alexander van Heukelum
<heukelum-hWlb6USbxJRiLUuM0BA3LQ@public.gmane.org>
Cc: Andrew Morton
<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
linux-arch <linux-arch-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org>,
Andi Kleen <andi-Vw/NltI1exuRpAAqCnN02g@public.gmane.org>,
LKML <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [0/3] Improve generic fls64 for 64-bit machines
Date: Sun, 06 Apr 2008 21:10:50 +0200 [thread overview]
Message-ID: <1207509050.21093.1246359933@webmail.messagingengine.com> (raw)
In-Reply-To: <47F8E64C.9030104-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
On Sun, 06 Apr 2008 18:03:40 +0300, "Benny Halevy" <bhalevy-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
said:
> On Apr. 04, 2008, 17:22 +0300, Alexander van Heukelum
> <heukelum-hWlb6USbxJRiLUuM0BA3LQ@public.gmane.org> wrote:
> > On Thu, Apr 03, 2008 at 08:19:59PM +0300, Benny Halevy wrote:
> >> On Mar. 15, 2008, 19:29 +0200, Alexander van Heukelum <heukelum-hWlb6USbxJRiLUuM0BA3LQ@public.gmane.org> wrote:
> >>> This series of patches:
> >>>
> >>> [1/3] adds __fls.h to asm-generic
> >>> [2/3] modifies asm-*/bitops.h for 64-bit archs to implement __fls
> >>> [3/3] modifies asm-generic/fls64.h to make use of __fls
> >> I strongly support this.
> >>
> >> I wish we'd also have a consistent naming convention for all
> >> the bitops functions so it will be clearer what data type the
> >> function is working on and is the result 0 or 1 based.
> >>
> >> It seems like what we currently have is:
> >>
> >> name type first bit#
> >> ---- ---- ----------
> >> ffs int 1
> >> fls int 1
> >> __ffs ulong 0
> >> __fls ulong 0 # in your proposal
> >> ffz ulong 0
> >> fls64 __u64 1
> >>
> >> so it seems like
> >> - ffz is misnamed and is rather confusing.
> >> Apprently is should be renamed to __ffz.
> >>
> >> - (new) ffz(x) can be defined to ffs(~(x))
> >>
> >> - It'd be nice to have ffs64, and maybe ffz64.
> >>
> >> Benny
> >
> > I think every programmer who thinks in terms of bits realises
> > that ffz(x) == __ffs(~x) and ffz(~x) == __ffs(x) etc... so I
> > would rather get rid of ffz entirely by converting all uses
> > to __ffs. Patch (against current linus) below. After that all
> > implementations of ffz could be removed.
>
> Yeah, very few architectures have an optimized version of ffz
> that will perform noticeably better than __ffs(~x).
> (e.g. h8300, sh)
Yeah, and these implementations seem to be based on a loop over
all bits in the word. I don't think adding one extra not-operation
to convert ffz to __ffs will hurt much ;).
> > ffs64 would be a good addition to complete the set of functions,
> > but that would be the same as glibc's (and gcc-builtin) ffsll.
> >
> > Looking into that... the relevant gcc builtins are __builtin_ffs
> > (find first set bit), __builtin_clz (count leading zeroes),
> > __builtin_ctz (count trailing zeroes), __builtin_popcount, maybe
> > __builtin_parity and their -l and -ll variants. Maybe the kernel
> > should be changed to use those names instead of the current
> > ones? ffs would stay as it is. __ffs would become ctz, __fls
> > would become something like 31-clz, and hweight would become
> > popcount.
>
> Interesting idea. ctz much better than __ffs with regards to the
> return value's first bit number, but unless you expose clz
> and convert the code how do you get rid of the __fls vs. fls
> confusion?
Exposing clz/ctz on all architectures will be the harder part. Changing
all current uses of ffs/fls (and __fls) will take some time. Mostly
because converting code using fls to use clz instead needs to be
done a bit carefully, because fls(0) has defined behaviour, while
clz(0) is undefined.
> (BTW for __fls, I'd use BITS_PER_LONG - 1, not 31 :)
:)
> I think that adopting libc's convention might make more sense,
> i.e., define ffs, ffsl, ffsll, and fls, flsl, flsll, and have *all*
> be 1-based.
I agree that it makes sense for fls. For clz (and ctz) I would choose
clz(unsigned long), clz32(u32), and clz64(u64).
Greetings,
Alexander
> Benny
--
Alexander van Heukelum
heukelum-97jfqw80gc6171pxa8y+qA@public.gmane.org
--
http://www.fastmail.fm - Choose from over 50 domains or use your own
WARNING: multiple messages have this Message-ID (diff)
From: "Alexander van Heukelum" <heukelum@fastmail.fm>
To: Benny Halevy <bhalevy@panasas.com>,
Alexander van Heukelum <heukelum@mailshack.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-arch <linux-arch@vger.kernel.org>,
Ingo Molnar <mingo@elte.hu>, Andi Kleen <andi@firstfloor.org>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: [0/3] Improve generic fls64 for 64-bit machines
Date: Sun, 06 Apr 2008 21:10:50 +0200 [thread overview]
Message-ID: <1207509050.21093.1246359933@webmail.messagingengine.com> (raw)
Message-ID: <20080406191050.Nj7YGikl81Xs78pzjY29tlcUSAeCVd9cHh0v28ZCgxY@z> (raw)
In-Reply-To: <47F8E64C.9030104@panasas.com>
On Sun, 06 Apr 2008 18:03:40 +0300, "Benny Halevy" <bhalevy@panasas.com>
said:
> On Apr. 04, 2008, 17:22 +0300, Alexander van Heukelum
> <heukelum@mailshack.com> wrote:
> > On Thu, Apr 03, 2008 at 08:19:59PM +0300, Benny Halevy wrote:
> >> On Mar. 15, 2008, 19:29 +0200, Alexander van Heukelum <heukelum@mailshack.com> wrote:
> >>> This series of patches:
> >>>
> >>> [1/3] adds __fls.h to asm-generic
> >>> [2/3] modifies asm-*/bitops.h for 64-bit archs to implement __fls
> >>> [3/3] modifies asm-generic/fls64.h to make use of __fls
> >> I strongly support this.
> >>
> >> I wish we'd also have a consistent naming convention for all
> >> the bitops functions so it will be clearer what data type the
> >> function is working on and is the result 0 or 1 based.
> >>
> >> It seems like what we currently have is:
> >>
> >> name type first bit#
> >> ---- ---- ----------
> >> ffs int 1
> >> fls int 1
> >> __ffs ulong 0
> >> __fls ulong 0 # in your proposal
> >> ffz ulong 0
> >> fls64 __u64 1
> >>
> >> so it seems like
> >> - ffz is misnamed and is rather confusing.
> >> Apprently is should be renamed to __ffz.
> >>
> >> - (new) ffz(x) can be defined to ffs(~(x))
> >>
> >> - It'd be nice to have ffs64, and maybe ffz64.
> >>
> >> Benny
> >
> > I think every programmer who thinks in terms of bits realises
> > that ffz(x) == __ffs(~x) and ffz(~x) == __ffs(x) etc... so I
> > would rather get rid of ffz entirely by converting all uses
> > to __ffs. Patch (against current linus) below. After that all
> > implementations of ffz could be removed.
>
> Yeah, very few architectures have an optimized version of ffz
> that will perform noticeably better than __ffs(~x).
> (e.g. h8300, sh)
Yeah, and these implementations seem to be based on a loop over
all bits in the word. I don't think adding one extra not-operation
to convert ffz to __ffs will hurt much ;).
> > ffs64 would be a good addition to complete the set of functions,
> > but that would be the same as glibc's (and gcc-builtin) ffsll.
> >
> > Looking into that... the relevant gcc builtins are __builtin_ffs
> > (find first set bit), __builtin_clz (count leading zeroes),
> > __builtin_ctz (count trailing zeroes), __builtin_popcount, maybe
> > __builtin_parity and their -l and -ll variants. Maybe the kernel
> > should be changed to use those names instead of the current
> > ones? ffs would stay as it is. __ffs would become ctz, __fls
> > would become something like 31-clz, and hweight would become
> > popcount.
>
> Interesting idea. ctz much better than __ffs with regards to the
> return value's first bit number, but unless you expose clz
> and convert the code how do you get rid of the __fls vs. fls
> confusion?
Exposing clz/ctz on all architectures will be the harder part. Changing
all current uses of ffs/fls (and __fls) will take some time. Mostly
because converting code using fls to use clz instead needs to be
done a bit carefully, because fls(0) has defined behaviour, while
clz(0) is undefined.
> (BTW for __fls, I'd use BITS_PER_LONG - 1, not 31 :)
:)
> I think that adopting libc's convention might make more sense,
> i.e., define ffs, ffsl, ffsll, and fls, flsl, flsll, and have *all*
> be 1-based.
I agree that it makes sense for fls. For clz (and ctz) I would choose
clz(unsigned long), clz32(u32), and clz64(u64).
Greetings,
Alexander
> Benny
--
Alexander van Heukelum
heukelum@fastmail.fm
--
http://www.fastmail.fm - Choose from over 50 domains or use your own
next prev parent reply other threads:[~2008-04-06 19:10 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-15 17:29 [0/3] Improve generic fls64 for 64-bit machines Alexander van Heukelum
2008-03-15 17:29 ` Alexander van Heukelum
[not found] ` <20080315172913.GA21648-hWlb6USbxJRiLUuM0BA3LQ@public.gmane.org>
2008-03-15 17:30 ` [1/3] Introduce a generic __fls implementation Alexander van Heukelum
2008-03-15 17:30 ` Alexander van Heukelum
2008-03-15 17:31 ` [2/3] Implement __fls on all 64-bit archs Alexander van Heukelum
2008-03-15 17:31 ` Alexander van Heukelum
2008-03-15 17:32 ` [3/3] Use __fls for fls64 on " Alexander van Heukelum
2008-03-15 17:32 ` Alexander van Heukelum
2008-07-05 16:56 ` Ricardo M. Correia
2008-07-05 17:53 ` [PATCH] x86: fix description of __fls(): __fls(0) is undefined Alexander van Heukelum
2008-07-18 12:33 ` Ingo Molnar
2008-03-21 13:10 ` [0/3] Improve generic fls64 for 64-bit machines Ingo Molnar
2008-03-21 13:10 ` Ingo Molnar
2008-04-03 17:19 ` Benny Halevy
2008-04-03 17:19 ` Benny Halevy
[not found] ` <47F511BF.8090506-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2008-04-04 14:22 ` Alexander van Heukelum
2008-04-04 14:22 ` Alexander van Heukelum
2008-04-06 15:03 ` Benny Halevy
[not found] ` <47F8E64C.9030104-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2008-04-06 19:10 ` Alexander van Heukelum [this message]
2008-04-06 19:10 ` Alexander van Heukelum
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1207509050.21093.1246359933@webmail.messagingengine.com \
--to=heukelum-97jfqw80gc6171pxa8y+qa@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=andi-Vw/NltI1exuRpAAqCnN02g@public.gmane.org \
--cc=bhalevy-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org \
--cc=heukelum-hWlb6USbxJRiLUuM0BA3LQ@public.gmane.org \
--cc=linux-arch-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mingo-X9Un+BFzKDI@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.