Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/powerpc/lib/hweight_64.S
26424 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/*
3
*
4
* Copyright (C) IBM Corporation, 2010
5
*
6
* Author: Anton Blanchard <[email protected]>
7
*/
8
#include <linux/export.h>
9
#include <asm/processor.h>
10
#include <asm/ppc_asm.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 CFUNC(__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 CFUNC(__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 CFUNC(__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 CFUNC(__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)
105
106