root/arch/sparc/lib/hweight.S
/* SPDX-License-Identifier: GPL-2.0 */
#include <linux/export.h>
#include <linux/linkage.h>

        .text
        .align  32
ENTRY(__arch_hweight8)
        sethi   %hi(__sw_hweight8), %g1
        jmpl    %g1 + %lo(__sw_hweight8), %g0
         nop
ENDPROC(__arch_hweight8)
EXPORT_SYMBOL(__arch_hweight8)
        .section        .popc_3insn_patch, "ax"
        .word           __arch_hweight8
        sllx            %o0, 64-8, %g1
        retl
         popc           %g1, %o0
        .previous

ENTRY(__arch_hweight16)
        sethi   %hi(__sw_hweight16), %g1
        jmpl    %g1 + %lo(__sw_hweight16), %g0
         nop
ENDPROC(__arch_hweight16)
EXPORT_SYMBOL(__arch_hweight16)
        .section        .popc_3insn_patch, "ax"
        .word           __arch_hweight16
        sllx            %o0, 64-16, %g1
        retl
         popc           %g1, %o0
        .previous

ENTRY(__arch_hweight32)
        sethi   %hi(__sw_hweight32), %g1
        jmpl    %g1 + %lo(__sw_hweight32), %g0
         nop
ENDPROC(__arch_hweight32)
EXPORT_SYMBOL(__arch_hweight32)
        .section        .popc_3insn_patch, "ax"
        .word           __arch_hweight32
        sllx            %o0, 64-32, %g1
        retl
         popc           %g1, %o0
        .previous

ENTRY(__arch_hweight64)
        sethi   %hi(__sw_hweight64), %g1
        jmpl    %g1 + %lo(__sw_hweight64), %g0
         nop
ENDPROC(__arch_hweight64)
EXPORT_SYMBOL(__arch_hweight64)
        .section        .popc_3insn_patch, "ax"
        .word           __arch_hweight64
        retl
         popc           %o0, %o0
        nop
        .previous