From: Ingo Molnar <mingo@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: "Andrew Cooper" <andrew.cooper3@citrix.com>,
"Arnd Bergmann" <arnd@arndb.de>,
"Arnd Bergmann" <arnd@kernel.org>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Ingo Molnar" <mingo@redhat.com>,
"Borislav Petkov" <bp@alien8.de>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
"Juergen Gross" <jgross@suse.com>,
"Boris Ostrovsky" <boris.ostrovsky@oracle.com>,
"Alexander Usyskin" <alexander.usyskin@intel.com>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Mateusz Jończyk" <mat.jonczyk@o2.pl>,
"Mike Rapoport" <rppt@kernel.org>,
"Ard Biesheuvel" <ardb@kernel.org>,
"Peter Zijlstra" <peterz@infradead.org>,
linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org
Subject: Re: [PATCH] bitops/32: Convert variable_ffs() and fls() zero-case handling to C
Date: Tue, 29 Apr 2025 12:08:03 +0200 [thread overview]
Message-ID: <aBClAy837xcLnVpp@gmail.com> (raw)
In-Reply-To: <CAHk-=wh5DUS+nhfTxPEEbaB9dsFib39gWatrX4NoFq_MpdOzGw@mail.gmail.com>
* Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Mon, 28 Apr 2025 at 00:14, Ingo Molnar <mingo@kernel.org> wrote:
> >
> > And, just out of intellectual curiosity, I also tried to measure the
> > code generation price of the +1 standards-quirk in the fls()/ffs()
> > interface as well:
> >
> > ... and unless I messed up the patch, it seems to have a surprisingly
> > low impact - maybe because the compiler can amortize its cost by
> > adjusting all dependent code mostly at build time, so the +1 doesn't
> > end up being generated most of the time?
>
> No, I think one issue is that most users actually end up subtracting
> one from the return value of 'ffs()', because the "bit #0 returns 1"
> semantics of the standard ffs() function really is insane.
>
> It's not just that it doesn't match sane hardware, it's also that it
> doesn't match sane *users*. If bit #0 is set, people want '0', so they
> typically subtract 1.
>
> So when you stop adding one, you aren't actually removing code -
> you're often adding it.
>
> Just see how many hits you get from
>
> git grep '\<ffs(.*).*-.*1'
>
> which is obviously not a very precise pattern, but just look at the
> output and see just *how* common that "subtract one" thing is.
>
> I really don't understand how anybody *ever* thought that the whole
> "return one bigger" was a good idea for ffs().
Yeah. No argument from me that it's a badly thought out interface - I
was just surprised that it doesn't seem to impact performance as badly
as I expected. I have to add that a lot of work went into absorbing the
negative effects of the ffs()/fls() interfaces:
starship:~/tip> git grep -Ee '__ffs\(|__fls\(' | wc -l
1055
So it impacts code quality negatively, which is arguably the worse side
effect.
> But maybe people really were poisoned by the Pascal mindset. Or maybe
> it was invented by some ancient Roman who hadn't heard of the concept
> of zero. Who knows?
Hey, ancient Romans didn't even have the concept of *whitespaces* and
punctuation to begin with:
https://historyofinformation.com/images/Vergilius_Augusteus,_Georgica_121.jpg
Lazy stonemasons the lot of them.
Romans were the worst ever coders too I suspect. What have the Romans
ever done for us??
Ingo
next prev parent reply other threads:[~2025-04-29 10:08 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-25 14:15 [PATCH] [RFC] x86/cpu: rework instruction set selection Arnd Bergmann
2025-04-25 15:34 ` H. Peter Anvin
2025-04-25 16:13 ` Arnd Bergmann
2025-04-25 20:15 ` H. Peter Anvin
2025-04-26 9:08 ` Ingo Molnar
2025-04-26 13:17 ` H. Peter Anvin
2025-04-26 18:55 ` Ingo Molnar
2025-04-27 0:35 ` H. Peter Anvin
2025-04-26 18:58 ` Arnd Bergmann
2025-04-26 19:09 ` Ingo Molnar
2025-04-27 13:24 ` Arnd Bergmann
2025-04-27 21:17 ` H. Peter Anvin
2025-04-26 19:24 ` Linus Torvalds
2025-04-26 19:55 ` Linus Torvalds
2025-04-26 23:47 ` H. Peter Anvin
2025-04-27 10:18 ` Ingo Molnar
2025-04-27 0:02 ` H. Peter Anvin
2025-04-27 19:17 ` Andrew Cooper
2025-04-27 19:34 ` Linus Torvalds
2025-04-27 21:14 ` H. Peter Anvin
2025-04-28 6:58 ` [PATCH] bitops/32: Convert variable_ffs() and fls() zero-case handling to C Ingo Molnar
2025-04-28 7:05 ` Ingo Molnar
2025-04-28 7:14 ` Ingo Molnar
2025-04-28 12:30 ` Arnd Bergmann
2025-04-28 13:41 ` H. Peter Anvin
2025-04-28 16:23 ` Linus Torvalds
2025-04-29 10:08 ` Ingo Molnar [this message]
2025-04-29 14:32 ` H. Peter Anvin
2025-04-28 16:14 ` Linus Torvalds
2025-04-28 21:38 ` H. Peter Anvin
2025-04-29 0:12 ` Andrew Cooper
2025-04-29 2:00 ` H. Peter Anvin
2025-04-29 2:22 ` Linus Torvalds
2025-04-29 2:25 ` Andrew Cooper
2025-04-29 3:13 ` H. Peter Anvin
2025-04-29 14:38 ` Andrew Cooper
2025-04-29 18:05 ` Linus Torvalds
2025-04-29 19:13 ` Andrew Cooper
2025-04-29 20:12 ` Linus Torvalds
2025-04-29 21:23 ` H. Peter Anvin
2025-04-29 21:53 ` Linus Torvalds
2025-04-29 21:59 ` Andrew Cooper
2025-04-29 22:04 ` Linus Torvalds
2025-04-29 22:10 ` H. Peter Anvin
2025-04-29 22:22 ` Andrew Cooper
2025-04-29 22:34 ` Linus Torvalds
2025-04-27 9:50 ` [PATCH] [RFC] x86/cpu: rework instruction set selection Ingo Molnar
2025-04-30 21:54 ` David Laight
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=aBClAy837xcLnVpp@gmail.com \
--to=mingo@kernel.org \
--cc=alexander.usyskin@intel.com \
--cc=andrew.cooper3@citrix.com \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=arnd@kernel.org \
--cc=boris.ostrovsky@oracle.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=hpa@zytor.com \
--cc=jgross@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mat.jonczyk@o2.pl \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rppt@kernel.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xenproject.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.