Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Feb 2021 19:36:42 +0000
From:      Jessica Clarke <jrtc27@freebsd.org>
To:        Mateusz Guzik <mjg@FreeBSD.org>
Cc:        "src-committers@freebsd.org" <src-committers@FreeBSD.org>, "dev-commits-src-all@freebsd.org" <dev-commits-src-all@FreeBSD.org>, "dev-commits-src-main@freebsd.org" <dev-commits-src-main@FreeBSD.org>
Subject:   Re: git: af366d353b84 - main - amd64: implement strlen in assembly
Message-ID:  <3E64387A-42DD-4470-8893-5B774F19754E@freebsd.org>
In-Reply-To: <202102081915.118JFXkJ067892@gitrepo.freebsd.org>
References:  <202102081915.118JFXkJ067892@gitrepo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 8 Feb 2021, at 19:15, Mateusz Guzik <mjg@FreeBSD.org> wrote:
>=20
> The branch main has been updated by mjg:
>=20
> URL: =
https://cgit.FreeBSD.org/src/commit/?id=3Daf366d353b84bdc4e730f0fc563853ab=
c338271c
>=20
> commit af366d353b84bdc4e730f0fc563853abc338271c
> Author:     Mateusz Guzik <mjg@FreeBSD.org>
> AuthorDate: 2021-02-08 17:01:48 +0000
> Commit:     Mateusz Guzik <mjg@FreeBSD.org>
> CommitDate: 2021-02-08 19:15:21 +0000
>=20
>    amd64: implement strlen in assembly
>=20
>    The C variant in libkern performs excessive branching to find the
>    non-zero byte instead of using the bsfq instruction. The same code
>    patched to use it is still slower than the routine implemented here
>    as the compiler keeps neglecting to perform certain optimizations
>    (like using leaq).
>=20
>    On top of that the routine can is a starting point for copyinstr
>    which operates on words instead of bytes.
>=20
>    Tested with glibc test suite.
>=20
>    Sample results (calls/s):
>=20
>    Haswell:
>    $(perl -e "print 'A' x 3"):
>    stock:  211198039
>    patched:338626619
>    asm:    465609618
>=20
>    $(perl -e "print 'A' x 100"):
>    stock:   83151997
>    patched: 98285919
>    asm:    120719888
>=20
>    AMD EPYC 7R32:
>    $(perl -e "print 'A' x 3"):
>    stock:  282523617
>    asm:    491498172
>=20
>    $(perl -e "print 'A' x 100"):
>    stock:  114857172
>    asm:    112082057

No Reviewed by? More than one pair of eyes on non-trivial assembly is
almost always a good idea.

Jess




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3E64387A-42DD-4470-8893-5B774F19754E>