On Fri, Dec 11, 2020 at 07:54:07PM +0000, Maciej W. Rozycki wrote: > On Fri, 11 Dec 2020, Anders Roxell wrote: > > > diff --git a/arch/mips/lib/uncached.c b/arch/mips/lib/uncached.c > > index 09d5deea747f..f80a67c092b6 100644 > > --- a/arch/mips/lib/uncached.c > > +++ b/arch/mips/lib/uncached.c > > @@ -37,10 +37,12 @@ > > */ > > unsigned long run_uncached(void *func) > > { > > - register long sp __asm__("$sp"); > > register long ret __asm__("$2"); > > long lfunc = (long)func, ufunc; > > long usp; > > + long sp; > > + > > + __asm__("move %0, $sp" : "=r" (sp)); > > I thought it might be better to make `sp' global instead, so that it's > the compiler that chooses how to schedule accesses. Have you tried that? > > Maciej This will not work, as the LLVM Mips backend does not support using $sp as a global register variable: https://github.com/llvm/llvm-project/commit/1440bb2a26ff13df1b29762658ee122cc0bc47ae $ make -skj"$(nproc)" ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- LLVM=1 O=out \ distclean malta_kvm_guest_defconfig vmlinux fatal error: error in backend: Invalid register name global variable ... Cheers, Nathan