Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 30 Mar 2019 17:50:35 +0000
From:      John F Carr <jfc@mit.edu>
To:        bob prohaska <fbsd@www.zefox.net>
Cc:        "freebsd-ports@freebsd.org" <freebsd-ports@freebsd.org>, "freebsd-arm@freebsd.org" <freebsd-arm@freebsd.org>
Subject:   Re: RPI3, error: invalid operand in inline asm: 'rev16 ${0:w}, ${1:w}'
Message-ID:  <236A3D25-0B4D-46DA-95BA-71DA505CC2E0@exchange.mit.edu>
In-Reply-To: <20190330152327.GA11933@www.zefox.net>
References:  <20190330152327.GA11933@www.zefox.net>

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


> On Mar 30, 2019, at 11:23 , bob prohaska <fbsd@www.zefox.net> wrote:
>=20
> In a recent attempt to compile www/chromium on an RPI3 running r345516
> compilation stopped with repeated reports of=20
>=20
> /usr/include/machine/endian.h:89:19: error: invalid operand in inline asm=
: 'rev16 ${0:w}, ${1:w}'
>=20
> Chromium compiled on the same host a couple of months ago, but the=20
> executable failed on a runtime library error. Now attempts to upgrade
> stop during compilation. Ports are presently at revision 496949.
>=20
> Thanks for reading, and any guidance.
>=20
> bob prohaska

The swap function at that line in sys/arm64/include/endian.h doesn't look r=
ight to me.  I think it should read

  __asm("rev16 %w0, %w1\n" : "=3Dr" (ret) : "r" (w));

instead of

    __asm __volatile("rev16 %w0, %w1\n" : "=3D&r" (ret), "+r" (v));

Two changes: (1) it doesn't need to be volatile because it has no side effe=
cts and (2) the constraints and lack of explicit input operand are wrong.  =
The other swap functions should have similar changes.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?236A3D25-0B4D-46DA-95BA-71DA505CC2E0>