• Ingo Molnar's avatar
    x86/bitops: Remove unused __sw_hweight64() assembly implementation on x86-32 · ad424743
    Ingo Molnar authored
    Header cleanups in the fast-headers tree highlighted that we have an
    unused assembly implementation for __sw_hweight64():
    
        WARNING: modpost: EXPORT symbol "__sw_hweight64" [vmlinux] version ...
    
    __arch_hweight64() on x86-32 is defined in the
    arch/x86/include/asm/arch_hweight.h header as an inline, using
    __arch_hweight32():
    
      #ifdef CONFIG_X86_32
      static inline unsigned long __arch_hweight64(__u64 w)
      {
              return  __arch_hweight32((u32)w) +
                      __arch_hweight32((u32)(w >> 32));
      }
    
    *But* there's also a __sw_hweight64() assembly implementation:
    
      arch/x86/lib/hweight.S
    
      SYM_FUNC_START(__sw_hweight64)
      #ifdef CONFIG_X86_64
      ...
      #else /* CONFIG_X86_32 */
            /* We're getting an u64 arg in (%eax,%edx): unsigned long hweight64(__u64 w) */
            pushl   %ecx
    
            call    __sw_hweight32
            movl    %eax, %ecx                      # stash away result
            movl    %edx, %eax                      # second part of input
            call    __sw_hweight32
            addl    %ecx, %eax                      # result
    
            popl    %ecx
            ret
      #endif
    
    But this __sw_hweight64 assembly implementation is unused - and it's
    essentially doing the same thing that the inline wrapper does.
    
    Remove the assembly version and add a comment about it.
    Reported-by: default avatarNathan Chancellor <nathan@kernel.org>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: linux-kernel@vger.kernel.org
    ad424743
hweight.S 2.2 KB