mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Rich Felker <dalias@libc.org>
To: musl@lists.openwall.com
Subject: Re: [PATCH] a_ctz_32: Instead of a subtraction by 31, use an xor
Date: Thu, 12 Dec 2019 10:17:52 -0500	[thread overview]
Message-ID: <20191212151752.GQ1666@brightrain.aerifal.cx> (raw)
In-Reply-To: <alpine.LNX.2.20.13.1912121801300.28878@monopod.intra.ispras.ru>

On Thu, Dec 12, 2019 at 06:10:31PM +0300, Alexander Monakov wrote:
> On Thu, 7 Nov 2019, Rosen Penev wrote:
> 
> > This reduces produced assembly from a mov and sub to a single xor.
> > 
> > Tested with godbolt: https://godbolt.org/z/Qz-Qr5
> > 
> > Signed-off-by: Rosen Penev <rosenp@gmail.com>
> > ---
> >  src/internal/atomic.h | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/src/internal/atomic.h b/src/internal/atomic.h
> > index f938879b..196b3fb1 100644
> > --- a/src/internal/atomic.h
> > +++ b/src/internal/atomic.h
> > @@ -256,7 +256,7 @@ static inline void a_crash()
> >  static inline int a_ctz_32(uint32_t x)
> >  {
> >  #ifdef a_clz_32
> > -	return 31-a_clz_32(x&-x);
> > +	return a_clz_32(x&-x)^31;
> 
> (since there was no other response...)
> 
> While certainly this is a nice improvement when considered in isolation,
> looking at how this is used in the rest of the library (in ffs, ffsl, qsort)
> reveals that returned value is used in further arithmetics.
> 
> So e.g. ffs/ffsl do a_ctz_l(i)+1, and +1 may be folded together with 31-...,
> but not with the xor.  Thus the original is preferable.

Thanks for commenting on this. I hadn't thought about that, and indeed
the current version is probably better.

It would be even nicer if there were some way to make the compiler
aware that the range is limited (so that it could make such a
transformation itself in either direction if it wanted), but it
probably doesn't matter.

Rich


      reply	other threads:[~2019-12-12 15:17 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-08  2:39 Rosen Penev
2019-12-12 15:10 ` Alexander Monakov
2019-12-12 15:17   ` Rich Felker [this message]

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=20191212151752.GQ1666@brightrain.aerifal.cx \
    --to=dalias@libc.org \
    --cc=musl@lists.openwall.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).