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

Reply via email to