On Tue, Aug 18, 2009 at 11:07:26AM +0400, Maxim Kuvyrkov wrote: > Brad Boyer wrote: > >On Tue, Aug 18, 2009 at 01:48:39AM +0400, Maxim Kuvyrkov wrote: > >>+/* This syscall gets its arguments in A0 (mem), A1 (oldval) and > >>+ D1 (newval). */ > >>+asmlinkage int > >>+m68k_sys_atomic_cmpxchg_32(unsigned long newval, int d2, int d3, int d4, > >>int d5, > >>+ unsigned long __user *mem, unsigned long oldval) > >>+{ > > > >Any particular reason for this calling convention? The real CAS instruction > >specifically takes two data registers for the two values. It seems more > >logical to me to have oldval and newval in data registers and just have > >the mem argument in an address register. > > The reason for this calling convention is to minimize difference in > invokation of the vDSO helper and the syscall. The helper gets its > arguments in a0 (mem), d0 (oldval) and d1 (newval); in a stub, which is > used when vDSO is not available, one then can do: > > movel %d0,%a1 > movel #NR,%d0 > trap #0
Then wouldn't it make sense to use %d2 instead of %a1? Brad Boyer f...@allandria.com -- To unsubscribe from this list: send the line "unsubscribe linux-m68k" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html