]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - arch/powerpc/lib/hweight_64.S
6effad901ef7a1c886c2411b89f263acc05f1106
[mirror_ubuntu-jammy-kernel.git] / arch / powerpc / lib / hweight_64.S
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
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>
10 #include <asm/export.h>
11 #include <asm/feature-fixups.h>
12
13 /* Note: This code relies on -mminimal-toc */
14
15 _GLOBAL(__arch_hweight8)
16 BEGIN_FTR_SECTION
17 b __sw_hweight8
18 nop
19 nop
20 FTR_SECTION_ELSE
21 PPC_POPCNTB(R3,R3)
22 clrldi r3,r3,64-8
23 blr
24 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
25 EXPORT_SYMBOL(__arch_hweight8)
26
27 _GLOBAL(__arch_hweight16)
28 BEGIN_FTR_SECTION
29 b __sw_hweight16
30 nop
31 nop
32 nop
33 nop
34 FTR_SECTION_ELSE
35 BEGIN_FTR_SECTION_NESTED(50)
36 PPC_POPCNTB(R3,R3)
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
43 PPC_POPCNTW(R3,R3)
44 clrldi r3,r3,64-8
45 blr
46 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 50)
47 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
48 EXPORT_SYMBOL(__arch_hweight16)
49
50 _GLOBAL(__arch_hweight32)
51 BEGIN_FTR_SECTION
52 b __sw_hweight32
53 nop
54 nop
55 nop
56 nop
57 nop
58 nop
59 FTR_SECTION_ELSE
60 BEGIN_FTR_SECTION_NESTED(51)
61 PPC_POPCNTB(R3,R3)
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)
69 PPC_POPCNTW(R3,R3)
70 clrldi r3,r3,64-8
71 blr
72 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 51)
73 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
74 EXPORT_SYMBOL(__arch_hweight32)
75
76 _GLOBAL(__arch_hweight64)
77 BEGIN_FTR_SECTION
78 b __sw_hweight64
79 nop
80 nop
81 nop
82 nop
83 nop
84 nop
85 nop
86 nop
87 FTR_SECTION_ELSE
88 BEGIN_FTR_SECTION_NESTED(52)
89 PPC_POPCNTB(R3,R3)
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)
99 PPC_POPCNTD(R3,R3)
100 clrldi r3,r3,64-8
101 blr
102 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 52)
103 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
104 EXPORT_SYMBOL(__arch_hweight64)