Hi Jan,
On 28/07/2022 15:17, Jan Beulich wrote:
On 28.07.2022 15:49, Xenia Ragiadakou wrote:
--- a/xen/arch/arm/include/asm/arm64/sysregs.h
+++ b/xen/arch/arm/include/asm/arm64/sysregs.h
@@ -461,7 +461,7 @@
/* Access to system registers */
#define WRITE_SYSREG64(v, name) do { \
- uint64_t _r = v; \
+ uint64_t _r = (v); \
asm volatile("msr "__stringify(name)", %0" : : "r" (_r)); \
Out of curiosity - why is the intermediate variable necessary?
Can't v be used directly in the asm(), possibly with a suitable
modifier added to %0 such that it'll always be x<N> (and not
w<N>) which is used as the operand to "msr"?
It should be possible to use %x0. However, We may need to use (uint64_t)(v).
Linux seems to be use it, but IIRC they are not supported GCC versions
as old as ours. So we would want to check when %x0 was introduced.
Cheers,
--
Julien Grall