[PATCH v2] x86_64: Optimize ffsll function code size.
Sunil Pandey
skpgkp2@gmail.com
Thu Jan 25 03:10:09 GMT 2024
On Wed, Jan 10, 2024 at 11:19 AM Carlos O'Donell <carlos@redhat.com> wrote:
> On 7/31/23 14:35, Sunil K Pandey via Libc-alpha wrote:
> > Ffsll function size is 17 byte, this patch optimizes size to 16 byte.
> > Currently ffsll function randomly regress by ~20%, depending on how
> > code get aligned.
> >
> > This patch fixes ffsll function random performance regression.
>
> Here is my suggestion.
>
> Commit this to glibc 2.39 as an incremental improvement that we can
> backport
> to any active branch.
>
> I have already approved the removal for glibc 2.40 via Adhemerval's patch.
>
> Reviewed-by: Carlos O'Donell <carlos@redhat.com>
>
> > Changes from v1:
> > - Further reduce size ffsll function size to 12 bytes.
> > ---
> > sysdeps/x86_64/ffsll.c | 10 +++++-----
> > 1 file changed, 5 insertions(+), 5 deletions(-)
> >
> > diff --git a/sysdeps/x86_64/ffsll.c b/sysdeps/x86_64/ffsll.c
> > index a1c13d4906..6a5803c7c1 100644
> > --- a/sysdeps/x86_64/ffsll.c
> > +++ b/sysdeps/x86_64/ffsll.c
> > @@ -26,13 +26,13 @@ int
> > ffsll (long long int x)
> > {
> > long long int cnt;
> > - long long int tmp;
> >
> > - asm ("bsfq %2,%0\n" /* Count low bits in X and store
> in %1. */
> > - "cmoveq %1,%0\n" /* If number was zero, use -1 as
> result. */
> > - : "=&r" (cnt), "=r" (tmp) : "rm" (x), "1" (-1));
> > + asm ("mov $-1,%k0\n" /* Intialize CNT to -1. */
> > + "bsf %1,%0\n" /* Count low bits in X and store in CNT. */
> > + "inc %k0\n" /* Increment CNT by 1. */
> > + : "=&r" (cnt) : "r" (x));
> >
> > - return cnt + 1;
> > + return cnt;
> > }
> >
> > #ifndef __ILP32__
>
> --
> Cheers,
> Carlos.
>
I would like to backport this patch to release branches from 2.28 to 2.38.
Any comments or objections?
--Sunil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20240124/bb348a21/attachment.htm>
More information about the Libc-alpha
mailing list