• Uros Bizjak's avatar
    x86/asm: Use CC_SET/CC_OUT in percpu_cmpxchg8b_double() to micro-optimize code generation · 1966c5e5
    Uros Bizjak authored
    Use CC_SET(z)/CC_OUT(z) instead of explicit SETZ instruction.
    
    Using these two defines, the compiler that supports generation of
    condition code outputs from inline assembly flags generates e.g.:
    
      cmpxchg8b %fs:(%esi)
      jne    172255 <__kmalloc+0x65>
    
    instead of:
    
      cmpxchg8b %fs:(%esi)
      sete   %al
      test   %al,%al
      je     172255 <__kmalloc+0x65>
    
    Note that older compilers now generate:
    
      cmpxchg8b %fs:(%esi)
      sete   %cl
      test   %cl,%cl
      je     173a85 <__kmalloc+0x65>
    
    since we have to mark that cmpxchg8b instruction outputs to %eax
    register and this way clobbers the value in the register.
    Signed-off-by: default avatarUros Bizjak <ubizjak@gmail.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/lkml/20180605163910.13015-1-ubizjak@gmail.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    1966c5e5
percpu.h 19 KB