1
2
3
4
5
6
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
14
15_GLOBAL(__arch_hweight8)
16BEGIN_FTR_SECTION
17 b __sw_hweight8
18 nop
19 nop
20FTR_SECTION_ELSE
21 PPC_POPCNTB(R3,R3)
22 clrldi r3,r3,64-8
23 blr
24ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
25EXPORT_SYMBOL(__arch_hweight8)
26
27_GLOBAL(__arch_hweight16)
28BEGIN_FTR_SECTION
29 b __sw_hweight16
30 nop
31 nop
32 nop
33 nop
34FTR_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)
47ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
48EXPORT_SYMBOL(__arch_hweight16)
49
50_GLOBAL(__arch_hweight32)
51BEGIN_FTR_SECTION
52 b __sw_hweight32
53 nop
54 nop
55 nop
56 nop
57 nop
58 nop
59FTR_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)
73ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
74EXPORT_SYMBOL(__arch_hweight32)
75
76_GLOBAL(__arch_hweight64)
77BEGIN_FTR_SECTION
78 b __sw_hweight64
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)
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)
103ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
104EXPORT_SYMBOL(__arch_hweight64)
105