[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <rnp80365-s71r-s169-7os0-r38s80qp8123@syhkavp.arg>
Date: Tue, 1 Apr 2025 18:10:26 -0400 (EDT)
From: Nicolas Pitre <nico@...xnic.net>
To: David Laight <david.laight.linux@...il.com>
cc: Uwe Kleine-König <u.kleine-koenig@...libre.com>,
Andrew Morton <akpm@...ux-foundation.org>, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] math64: Provide an uprounding variant of
mul_u64_u64_div_u64()
On Tue, 1 Apr 2025, David Laight wrote:
> On Tue, 1 Apr 2025 16:30:34 -0400 (EDT)
> Nicolas Pitre <nico@...xnic.net> wrote:
>
> > On Tue, 1 Apr 2025, Nicolas Pitre wrote:
> >
> > > On Tue, 1 Apr 2025, David Laight wrote:
> > >
> > > > Looking at the C version, I wonder if the two ilog2() calls are needed.
> > > > They may not be cheap, and are the same as checking 'n_hi == 0'.
> > >
> > > Which two calls? I see only one.
> >
> > Hmmm, sorry. If by ilog2() you mean the clz's then those are cheap. Most
> > CPUs have a dedicated instruction for that. The ctz, though, is more
> > expensive (unless it is ARMv7 and above with an RBIT instruction).
>
> The code (6.14-rc6) starts:
>
> u64 mul_u64_u64_div_u64(u64 a, u64 b, u64 c)
> {
> if (ilog2(a) + ilog2(b) <= 62)
> return div64_u64(a * b, c);
Oh! those... yeah. They are carry-overs from the previous
implementation. They kinda fell outside my consciousness.
> If you assume that most calls need the 128bit product (or why use the function)
> then there is little point adding code to optimise for the unusual case.
It's not that you "assume most calls". It is usually that you "may need
128 bits" but don't know in advance. I'd even argue that most of the
time, 128 bits might be needed but often enough isn't.
Nicolas
Powered by blists - more mailing lists