1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#include <asm/processor.h>
21#include <asm/ppc_asm.h>
22#include <asm/export.h>
23
24
25
26_GLOBAL(__arch_hweight8)
27BEGIN_FTR_SECTION
28 b __sw_hweight8
29 nop
30 nop
31FTR_SECTION_ELSE
32 PPC_POPCNTB(R3,R3)
33 clrldi r3,r3,64-8
34 blr
35ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
36EXPORT_SYMBOL(__arch_hweight8)
37
38_GLOBAL(__arch_hweight16)
39BEGIN_FTR_SECTION
40 b __sw_hweight16
41 nop
42 nop
43 nop
44 nop
45FTR_SECTION_ELSE
46 BEGIN_FTR_SECTION_NESTED(50)
47 PPC_POPCNTB(R3,R3)
48 srdi r4,r3,8
49 add r3,r4,r3
50 clrldi r3,r3,64-8
51 blr
52 FTR_SECTION_ELSE_NESTED(50)
53 clrlwi r3,r3,16
54 PPC_POPCNTW(R3,R3)
55 clrldi r3,r3,64-8
56 blr
57 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 50)
58ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
59EXPORT_SYMBOL(__arch_hweight16)
60
61_GLOBAL(__arch_hweight32)
62BEGIN_FTR_SECTION
63 b __sw_hweight32
64 nop
65 nop
66 nop
67 nop
68 nop
69 nop
70FTR_SECTION_ELSE
71 BEGIN_FTR_SECTION_NESTED(51)
72 PPC_POPCNTB(R3,R3)
73 srdi r4,r3,16
74 add r3,r4,r3
75 srdi r4,r3,8
76 add r3,r4,r3
77 clrldi r3,r3,64-8
78 blr
79 FTR_SECTION_ELSE_NESTED(51)
80 PPC_POPCNTW(R3,R3)
81 clrldi r3,r3,64-8
82 blr
83 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 51)
84ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
85EXPORT_SYMBOL(__arch_hweight32)
86
87_GLOBAL(__arch_hweight64)
88BEGIN_FTR_SECTION
89 b __sw_hweight64
90 nop
91 nop
92 nop
93 nop
94 nop
95 nop
96 nop
97 nop
98FTR_SECTION_ELSE
99 BEGIN_FTR_SECTION_NESTED(52)
100 PPC_POPCNTB(R3,R3)
101 srdi r4,r3,32
102 add r3,r4,r3
103 srdi r4,r3,16
104 add r3,r4,r3
105 srdi r4,r3,8
106 add r3,r4,r3
107 clrldi r3,r3,64-8
108 blr
109 FTR_SECTION_ELSE_NESTED(52)
110 PPC_POPCNTD(R3,R3)
111 clrldi r3,r3,64-8
112 blr
113 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 52)
114ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
115EXPORT_SYMBOL(__arch_hweight64)
116