> On Jun 3, 2014, at 9:40 AM, "Daney, David" <David.Daney@xxxxxxxxxxxxxxxxxx> wrote: > > In cases like this, I always wonder WWPD (What Would Pinski Do)... > > Let's get him to opine. > > Andrew, the patch in question is: > > http://www.linux-mips.org/archives/linux-mips/2014-05/msg00309.html Yes having two variables with the same register is safe as long as the only time the live ranges of them overlap is the inline-asm where they are used. Thanks, Andrew > > Thanks, > David Daney > >> On 06/03/2014 08:03 AM, Andreas Herrmann wrote: >>> On Tue, Jun 03, 2014 at 10:30:31AM +0200, Ralf Baechle wrote: >>>> On Wed, May 28, 2014 at 11:52:12PM +0200, Andreas Herrmann wrote: >>>> >>>> +/* >>>> + * Hypercalls for KVM. >>>> + * >>>> + * Hypercall number is passed in v0. >>>> + * Return value will be placed in v0. >>>> + * Up to 3 arguments are passed in a0, a1, and a2. >>>> + */ >>>> +static inline unsigned long kvm_hypercall0(unsigned long num) >>>> +{ >>>> + register unsigned long n asm("v0"); >>>> + register unsigned long r asm("v0"); >>> >>> Btw, is it safe to put two variables in the same register? >> >> I think it's safe. >> >> If we would have a matching constraint letter (say "v" for register v0) the >> asm should translate to >> >> __asm__ __volatile__( >> KVM_HYPERCALL >> : "=v" (n) : "v" (r) : "memory" >> ); >> >> which isn't unusual on other archs. (Or maybe I am just biased from >> x86 ... or missed something else.) >> >>> The syscall wrappers that used to be in <asm/unistd.h> were occasionally >>> hitting problems which eventually forced me to stop forcing variables >>> into particular registers instead using a MOVE instruction to shove >>> each variable into the right place. >>> >>> Of course they were being used from non-PIC and PIC code, kernel and userland >>> so GCC had a much better chance to do evil than in the hypercall wrapper >>> case - but it made me paranoid ... >> >> >> >> Andreas >>