powerpc/atomic: Implement atomic*_inc_not_zero
authorAnton Blanchard <anton@samba.org>
Wed, 29 Feb 2012 21:12:16 +0000 (21:12 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 7 Mar 2012 06:06:08 +0000 (17:06 +1100)
commita6cf7ed5119fb22f54584a9f867b638edd3c4384
tree5a81f3e6cf92caa6e806e2a5b945406902e63e07
parentb1ada6010e234d6c53bfcd5a617610c9284846b8
powerpc/atomic: Implement atomic*_inc_not_zero

Implement atomic_inc_not_zero and atomic64_inc_not_zero. At the
moment we use atomic*_add_unless which requires us to put 0 and
1 constants into registers. We can also avoid a subtract by
saving the original value in a second temporary.

This removes 3 instructions from fget:

c0000000001b63c0:       39 00 00 00     li      r8,0
c0000000001b63c4:       39 40 00 01     li      r10,1
...
c0000000001b63e8:       7c 0a 00 50     subf    r0,r10,r0

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/include/asm/atomic.h