• Uros Bizjak's avatar
    locking/atomic/x86: Introduce arch_atomic64_try_cmpxchg() to x86_32 · 276b8930
    Uros Bizjak authored
    Introduce arch_atomic64_try_cmpxchg() for 32-bit targets to use
    optimized target specific implementation instead of a generic one.
    This implementation eliminates dual-word compare after
    cmpxchg8b instruction and improves generated asm code from:
    
        2273:	f0 0f c7 0f          	lock cmpxchg8b (%edi)
        2277:	8b 74 24 2c          	mov    0x2c(%esp),%esi
        227b:	89 d3                	mov    %edx,%ebx
        227d:	89 c2                	mov    %eax,%edx
        227f:	89 5c 24 10          	mov    %ebx,0x10(%esp)
        2283:	8b 7c 24 30          	mov    0x30(%esp),%edi
        2287:	89 44 24 1c          	mov    %eax,0x1c(%esp)
        228b:	31 f2                	xor    %esi,%edx
        228d:	89 d0                	mov    %edx,%eax
        228f:	89 da                	mov    %ebx,%edx
        2291:	31 fa                	xor    %edi,%edx
        2293:	09 d0                	or     %edx,%eax
        2295:	0f 85 a5 00 00 00    	jne    2340 <...>
    
    to:
    
        2270:	f0 0f c7 0f          	lock cmpxchg8b (%edi)
        2274:	0f 85 a6 00 00 00    	jne    2320 <...>
    Signed-off-by: default avatarUros Bizjak <ubizjak@gmail.com>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/20240410062957.322614-1-ubizjak@gmail.com
    276b8930
atomic64_32.h 6.8 KB