Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Mar 2020 18:28:01 +0000
From:      Brooks Davis <brooks@freebsd.org>
To:        Guido Falsi <madpilot@FreeBSD.org>
Cc:        Ryan Libby <rlibby@freebsd.org>, "Alexander V. Chernikov" <melifaro@ipfw.ru>, "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, "src-committers@freebsd.org" <src-committers@freebsd.org>, vbox@FreeBSD.org
Subject:   Re: svn commit: r358439 - head/sys/amd64/include
Message-ID:  <20200304182801.GA95422@spindle.one-eyed-alien.net>
In-Reply-To: <3d54ebc3-a511-a239-136d-c0f638a69351@FreeBSD.org>
References:  <202002281832.01SIWaEL071685@repo.freebsd.org> <5767791583138727@sas1-c7aad230fe87.qloud-c.yandex.net> <CAHgpiFzg1Co6KY2twE3Pa7-ozQti4kzMr432R_7w9hukMQU00A@mail.gmail.com> <3d54ebc3-a511-a239-136d-c0f638a69351@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--BXVAT5kNtrzKuDFl
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, Mar 04, 2020 at 12:27:08PM +0100, Guido Falsi wrote:
> On 02/03/20 18:13, Ryan Libby wrote:
> > On Mon, Mar 2, 2020 at 12:45 AM Alexander V. Chernikov <melifaro@ipfw.r=
u> wrote:
> >>
> >> 28.02.2020, 18:32, "Ryan Libby" <rlibby@freebsd.org>:
> >>> Author: rlibby
> >>> Date: Fri Feb 28 18:32:36 2020
> >>> New Revision: 358439
> >>> URL: https://svnweb.freebsd.org/changeset/base/358439
> >>>
> >>> Log:
> >>>   amd64 atomic.h: minor codegen optimization in flag access
> >>>
> >>>   Previously the pattern to extract status flags from inline assembly
> >>>   blocks was to use setcc in the block to write the flag to a registe=
r.
> >>>   This was suboptimal in a few ways:
> >>>    - It would lead to code like: sete %cl; test %cl; jne, i.e. a flag
> >>>      would just be loaded into a register and then reloaded to a flag.
> >>>    - The setcc would force the block to use an additional register.
> >>>    - If the client code didn't care for the flag value then the setcc
> >>>      would be entirely pointless but could not be eliminated by the
> >>>      optimizer.
> >>>
> >>>   A more modern inline asm construct (since gcc 6 and clang 9) allows=
 for
> >> This effectively restricts kernel builds by all older compilers.
> >> Is there any chance of making it conditional depending on the compiler=
 version/features?
> >=20
> > Yes, it is possible to test for __GCC_ASM_FLAG_OUTPUTS__.  It is more
> > maintenance effort going forward.  If building current with an old cross
> > compiler is an important scenario, we can either revert this and the
> > following revision or work up a patch to make it conditional.  I'll see
> > what that might look like.
> >=20
>=20
> Actually this causes emulators/virtualbox-ose port to fail to build:
>=20
> In file included from /usr/src/sys/sys/systm.h:44:
> /usr/include/machine/atomic.h:230:1: error: invalid output constraint
> '=3D@cce' in asm
> ATOMIC_CMPSET(char);
> ^
> /usr/include/machine/atomic.h:205:4: note: expanded from macro
> 'ATOMIC_CMPSET'
>         : "=3D@cce" (res),                /* 0 */         \
>           ^
> /usr/include/machine/atomic.h:230:1: error: invalid output constraint
> '=3D@cce' in asm
>=20
> (and so on)
>=20
>=20
> the virtualbox-ose port is forced to use an older clang version due to
> crashes when compiled with newer ones.
>=20
> Not sure whose responsibility is to fix this.

I suspect that now that we don't care about gcc 4.2.1, we should
restructure machine/atomic.h to use __atomic compiler builtins in nearly
all cases.  We could then conditionalize small sets of mircooptimized
assembly versions based on the availability of compiler features if they
add any value.

On CheriBSD we've switched the RISC-V to use the C versions and are
overdue to do the same to MIPS.  Reworking things to make this the
default would decrease our maintenance burden and it seems unlikely that
most of our platforms would benefit from handcode assembly (given the
general level of optimization in our lower-tier platforms).

-- Brooks

--BXVAT5kNtrzKuDFl
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEcBAEBAgAGBQJeX/MwAAoJEKzQXbSebgfANZEH/2FpA8Ft7xKiaPRT6Bol7o9x
l9TMA1FppM58LEHjDF1VySrWvJfkFJTqsx3X6xdByjabTV51KqrPfjupBCV+9T/3
pN7goV9AC43Y8ZhqkIlgz/nGGy547gEEtTV36wRzMRFLx8MhiehlYisUoi87DYZh
wQ/XYep8/XKc0Z7HnaxgRWE8mnoUCvyHG52bMMmnCPa/gjLf/klj5nL+XEKucONi
QFxedNSBp4CiyR4KjBodMR5WXsWsvFLb4WuZeMdW75A+mE1rN+6/a+vIVg7xQVOr
VTUHhPov6Giv11oUIHlWOk12uTh0Wky8cbyvNFPfVPvAnS6HJ8ScQhWkSqG0qvY=
=2Yo5
-----END PGP SIGNATURE-----

--BXVAT5kNtrzKuDFl--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20200304182801.GA95422>