On Wed, 27 Mar 2019, Julien Grall wrote: > Clang is pickier than GCC for the register size in asm statement. It > expects the register size to match the value size. > > The instructions msr/mrs are expecting a 64-bit register. This means the > implementation of the 32-bit helpers is not correct. The easiest > solution is to implement the 32-bit helpers using the 64-bit helpers. > > Signed-off-by: Julien Grall <julien.gr...@arm.com>
Reviewed-by: Stefano Stabellini <sstabell...@kernel.org> > --- > xen/include/asm-arm/arm64/sysregs.h | 11 +++-------- > 1 file changed, 3 insertions(+), 8 deletions(-) > > diff --git a/xen/include/asm-arm/arm64/sysregs.h > b/xen/include/asm-arm/arm64/sysregs.h > index 08585a969e..c60029d38f 100644 > --- a/xen/include/asm-arm/arm64/sysregs.h > +++ b/xen/include/asm-arm/arm64/sysregs.h > @@ -59,14 +59,9 @@ > > /* Access to system registers */ > > -#define READ_SYSREG32(name) ({ \ > - uint32_t _r; \ > - asm volatile("mrs %0, "__stringify(name) : "=r" (_r)); \ > - _r; }) > -#define WRITE_SYSREG32(v, name) do { \ > - uint32_t _r = v; \ > - asm volatile("msr "__stringify(name)", %0" : : "r" (_r)); \ > -} while (0) > +#define READ_SYSREG32(name) ((uint32_t)READ_SYSREG64(name)) > + > +#define WRITE_SYSREG32(v, name) WRITE_SYSREG64((uint64_t)v, name) > > #define WRITE_SYSREG64(v, name) do { \ > uint64_t _r = v; \ > -- > 2.11.0 > _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel