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
[email protected]
--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html