]> Pileus Git - ~andy/linux/commit
x86: atomic64 assembly improvements
authorJan Beulich <JBeulich@suse.com>
Fri, 20 Jan 2012 16:22:04 +0000 (16:22 +0000)
committerH. Peter Anvin <hpa@linux.intel.com>
Sat, 21 Jan 2012 01:29:49 +0000 (17:29 -0800)
commitcb8095bba6d24118135a5683a956f4f4fb5f17bb
tree25eff3732e8471e314591d0bc6ea41d96857c18b
parent819165fb34b9777f852429f2c6d6f79fbb71b9eb
x86: atomic64 assembly improvements

In the "xchg" implementation, %ebx and %ecx don't need to be copied
into %eax and %edx respectively (this is only necessary when desiring
to only read the stored value).

In the "add_unless" implementation, swapping the use of %ecx and %esi
for passing arguments allows %esi to become an input only (i.e.
permitting the register to be re-used to address the same object
without reload).

In "{add,sub}_return", doing the initial read64 through the passed in
%ecx decreases a register dependency.

In "inc_not_zero", a branch can be eliminated by or-ing together the
two halves of the current (64-bit) value, and code size can be further
reduced by adjusting the arithmetic slightly.

v2: Undo the folding of "xchg" and "set".

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Link: http://lkml.kernel.org/r/4F19A2BC020000780006E0DC@nat28.tlf.novell.com
Cc: Luca Barbieri <luca@luca-barbieri.com>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
arch/x86/include/asm/atomic64_32.h
arch/x86/lib/atomic64_386_32.S
arch/x86/lib/atomic64_cx8_32.S