treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
[linux-block.git] / arch / powerpc / lib / hweight_64.S
CommitLineData
1a59d1b8 1/* SPDX-License-Identifier: GPL-2.0-or-later */
64ff3128 2/*
64ff3128
AB
3 *
4 * Copyright (C) IBM Corporation, 2010
5 *
6 * Author: Anton Blanchard <anton@au.ibm.com>
7 */
8#include <asm/processor.h>
9#include <asm/ppc_asm.h>
9445aa1a 10#include <asm/export.h>
2c86cd18 11#include <asm/feature-fixups.h>
64ff3128
AB
12
13/* Note: This code relies on -mminimal-toc */
14
15_GLOBAL(__arch_hweight8)
16BEGIN_FTR_SECTION
b1576fec 17 b __sw_hweight8
64ff3128
AB
18 nop
19 nop
20FTR_SECTION_ELSE
c75df6f9 21 PPC_POPCNTB(R3,R3)
64ff3128
AB
22 clrldi r3,r3,64-8
23 blr
24ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
9445aa1a 25EXPORT_SYMBOL(__arch_hweight8)
64ff3128
AB
26
27_GLOBAL(__arch_hweight16)
28BEGIN_FTR_SECTION
b1576fec 29 b __sw_hweight16
64ff3128
AB
30 nop
31 nop
32 nop
33 nop
34FTR_SECTION_ELSE
35 BEGIN_FTR_SECTION_NESTED(50)
c75df6f9 36 PPC_POPCNTB(R3,R3)
64ff3128
AB
37 srdi r4,r3,8
38 add r3,r4,r3
39 clrldi r3,r3,64-8
40 blr
41 FTR_SECTION_ELSE_NESTED(50)
42 clrlwi r3,r3,16
c75df6f9 43 PPC_POPCNTW(R3,R3)
64ff3128
AB
44 clrldi r3,r3,64-8
45 blr
46 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 50)
47ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
9445aa1a 48EXPORT_SYMBOL(__arch_hweight16)
64ff3128
AB
49
50_GLOBAL(__arch_hweight32)
51BEGIN_FTR_SECTION
b1576fec 52 b __sw_hweight32
64ff3128
AB
53 nop
54 nop
55 nop
56 nop
57 nop
58 nop
59FTR_SECTION_ELSE
60 BEGIN_FTR_SECTION_NESTED(51)
c75df6f9 61 PPC_POPCNTB(R3,R3)
64ff3128
AB
62 srdi r4,r3,16
63 add r3,r4,r3
64 srdi r4,r3,8
65 add r3,r4,r3
66 clrldi r3,r3,64-8
67 blr
68 FTR_SECTION_ELSE_NESTED(51)
c75df6f9 69 PPC_POPCNTW(R3,R3)
64ff3128
AB
70 clrldi r3,r3,64-8
71 blr
72 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 51)
73ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
9445aa1a 74EXPORT_SYMBOL(__arch_hweight32)
64ff3128
AB
75
76_GLOBAL(__arch_hweight64)
77BEGIN_FTR_SECTION
b1576fec 78 b __sw_hweight64
64ff3128
AB
79 nop
80 nop
81 nop
82 nop
83 nop
84 nop
85 nop
86 nop
87FTR_SECTION_ELSE
88 BEGIN_FTR_SECTION_NESTED(52)
c75df6f9 89 PPC_POPCNTB(R3,R3)
64ff3128
AB
90 srdi r4,r3,32
91 add r3,r4,r3
92 srdi r4,r3,16
93 add r3,r4,r3
94 srdi r4,r3,8
95 add r3,r4,r3
96 clrldi r3,r3,64-8
97 blr
98 FTR_SECTION_ELSE_NESTED(52)
c75df6f9 99 PPC_POPCNTD(R3,R3)
64ff3128
AB
100 clrldi r3,r3,64-8
101 blr
102 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 52)
103ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
9445aa1a 104EXPORT_SYMBOL(__arch_hweight64)