@@ -13,42 +13,42 @@ import "math/bits"
13
13
// ----------------------- //
14
14
15
15
func LeadingZeros (n uint ) int {
16
- //amd64:"BSRQ"
17
- //s390x:"FLOGR"
18
- //arm:"CLZ" arm64:"CLZ"
19
- //mips:"CLZ"
16
+ // amd64:"BSRQ"
17
+ // s390x:"FLOGR"
18
+ // arm:"CLZ" arm64:"CLZ"
19
+ // mips:"CLZ"
20
20
return bits .LeadingZeros (n )
21
21
}
22
22
23
23
func LeadingZeros64 (n uint64 ) int {
24
- //amd64:"BSRQ"
25
- //s390x:"FLOGR"
26
- //arm:"CLZ" arm64:"CLZ"
27
- //mips:"CLZ"
24
+ // amd64:"BSRQ"
25
+ // s390x:"FLOGR"
26
+ // arm:"CLZ" arm64:"CLZ"
27
+ // mips:"CLZ"
28
28
return bits .LeadingZeros64 (n )
29
29
}
30
30
31
31
func LeadingZeros32 (n uint32 ) int {
32
- //amd64:"BSRQ"
33
- //s390x:"FLOGR"
34
- //arm:"CLZ" arm64:"CLZ"
35
- //mips:"CLZ"
32
+ // amd64:"BSRQ"
33
+ // s390x:"FLOGR"
34
+ // arm:"CLZ" arm64:"CLZ"
35
+ // mips:"CLZ"
36
36
return bits .LeadingZeros32 (n )
37
37
}
38
38
39
39
func LeadingZeros16 (n uint16 ) int {
40
- //amd64:"BSRQ"
41
- //s390x:"FLOGR"
42
- //arm:"CLZ" arm64:"CLZ"
43
- //mips:"CLZ"
40
+ // amd64:"BSRQ"
41
+ // s390x:"FLOGR"
42
+ // arm:"CLZ" arm64:"CLZ"
43
+ // mips:"CLZ"
44
44
return bits .LeadingZeros16 (n )
45
45
}
46
46
47
47
func LeadingZeros8 (n uint8 ) int {
48
- //amd64 LeadingZeros8 not intrinsified (see ssa.go)
49
- //s390x:"FLOGR"
50
- //arm:"CLZ" arm64:"CLZ"
51
- //mips:"CLZ"
48
+ // amd64 LeadingZeros8 not intrinsified (see ssa.go)
49
+ // s390x:"FLOGR"
50
+ // arm:"CLZ" arm64:"CLZ"
51
+ // mips:"CLZ"
52
52
return bits .LeadingZeros8 (n )
53
53
}
54
54
@@ -57,42 +57,42 @@ func LeadingZeros8(n uint8) int {
57
57
// --------------- //
58
58
59
59
func Len (n uint ) int {
60
- //amd64:"BSRQ"
61
- //s390x:"FLOGR"
62
- //arm:"CLZ" arm64:"CLZ"
63
- //mips:"CLZ"
60
+ // amd64:"BSRQ"
61
+ // s390x:"FLOGR"
62
+ // arm:"CLZ" arm64:"CLZ"
63
+ // mips:"CLZ"
64
64
return bits .Len (n )
65
65
}
66
66
67
67
func Len64 (n uint64 ) int {
68
- //amd64:"BSRQ"
69
- //s390x:"FLOGR"
70
- //arm:"CLZ" arm64:"CLZ"
71
- //mips:"CLZ"
68
+ // amd64:"BSRQ"
69
+ // s390x:"FLOGR"
70
+ // arm:"CLZ" arm64:"CLZ"
71
+ // mips:"CLZ"
72
72
return bits .Len64 (n )
73
73
}
74
74
75
75
func Len32 (n uint32 ) int {
76
- //amd64:"BSRQ"
77
- //s390x:"FLOGR"
78
- //arm:"CLZ" arm64:"CLZ"
79
- //mips:"CLZ"
76
+ // amd64:"BSRQ"
77
+ // s390x:"FLOGR"
78
+ // arm:"CLZ" arm64:"CLZ"
79
+ // mips:"CLZ"
80
80
return bits .Len32 (n )
81
81
}
82
82
83
83
func Len16 (n uint16 ) int {
84
- //amd64:"BSRQ"
85
- //s390x:"FLOGR"
86
- //arm:"CLZ" arm64:"CLZ"
87
- //mips:"CLZ"
84
+ // amd64:"BSRQ"
85
+ // s390x:"FLOGR"
86
+ // arm:"CLZ" arm64:"CLZ"
87
+ // mips:"CLZ"
88
88
return bits .Len16 (n )
89
89
}
90
90
91
91
func Len8 (n uint8 ) int {
92
- //amd64 Len8 not intrisified (see ssa.go)
93
- //s390x:"FLOGR"
94
- //arm:"CLZ" arm64:"CLZ"
95
- //mips:"CLZ"
92
+ // amd64 Len8 not intrisified (see ssa.go)
93
+ // s390x:"FLOGR"
94
+ // arm:"CLZ" arm64:"CLZ"
95
+ // mips:"CLZ"
96
96
return bits .Len8 (n )
97
97
}
98
98
@@ -101,26 +101,26 @@ func Len8(n uint8) int {
101
101
// -------------------- //
102
102
103
103
func OnesCount (n uint ) int {
104
- //amd64:"POPCNTQ",".*support_popcnt"
105
- //arm64:"VCNT","VUADDLV"
104
+ // amd64:"POPCNTQ",".*support_popcnt"
105
+ // arm64:"VCNT","VUADDLV"
106
106
return bits .OnesCount (n )
107
107
}
108
108
109
109
func OnesCount64 (n uint64 ) int {
110
- //amd64:"POPCNTQ",".*support_popcnt"
111
- //arm64:"VCNT","VUADDLV"
110
+ // amd64:"POPCNTQ",".*support_popcnt"
111
+ // arm64:"VCNT","VUADDLV"
112
112
return bits .OnesCount64 (n )
113
113
}
114
114
115
115
func OnesCount32 (n uint32 ) int {
116
- //amd64:"POPCNTL",".*support_popcnt"
117
- //arm64:"VCNT","VUADDLV"
116
+ // amd64:"POPCNTL",".*support_popcnt"
117
+ // arm64:"VCNT","VUADDLV"
118
118
return bits .OnesCount32 (n )
119
119
}
120
120
121
121
func OnesCount16 (n uint16 ) int {
122
- //amd64:"POPCNTL",".*support_popcnt"
123
- //arm64:"VCNT","VUADDLV"
122
+ // amd64:"POPCNTL",".*support_popcnt"
123
+ // arm64:"VCNT","VUADDLV"
124
124
return bits .OnesCount16 (n )
125
125
}
126
126
@@ -129,61 +129,89 @@ func OnesCount16(n uint16) int {
129
129
// ----------------------- //
130
130
131
131
func ReverseBytes (n uint ) uint {
132
- //amd64:"BSWAPQ"
133
- //s390x:"MOVDBR"
134
- //arm64:"REV"
132
+ // amd64:"BSWAPQ"
133
+ // s390x:"MOVDBR"
134
+ // arm64:"REV"
135
135
return bits .ReverseBytes (n )
136
136
}
137
137
138
138
func ReverseBytes64 (n uint64 ) uint64 {
139
- //amd64:"BSWAPQ"
140
- //s390x:"MOVDBR"
141
- //arm64:"REV"
139
+ // amd64:"BSWAPQ"
140
+ // s390x:"MOVDBR"
141
+ // arm64:"REV"
142
142
return bits .ReverseBytes64 (n )
143
143
}
144
144
145
145
func ReverseBytes32 (n uint32 ) uint32 {
146
- //amd64:"BSWAPL"
147
- //s390x:"MOVWBR"
148
- //arm64:"REVW"
146
+ // amd64:"BSWAPL"
147
+ // s390x:"MOVWBR"
148
+ // arm64:"REVW"
149
149
return bits .ReverseBytes32 (n )
150
150
}
151
151
152
152
func ReverseBytes16 (n uint16 ) uint16 {
153
- //amd64:"ROLW"
153
+ // amd64:"ROLW"
154
154
return bits .ReverseBytes16 (n )
155
155
}
156
156
157
+ // --------------------- //
158
+ // bits.RotateLeft //
159
+ // --------------------- //
160
+
161
+ func RotateLeft64 (n uint64 ) uint64 {
162
+ // amd64:"ROLQ"
163
+ // arm64:"ROR"
164
+ // ppc64:"ROTL"
165
+ return bits .RotateLeft64 (n , 37 )
166
+ }
167
+
168
+ func RotateLeft32 (n uint32 ) uint32 {
169
+ // amd64:"ROLL" 386:"ROLL"
170
+ // arm64:"RORW"
171
+ // ppc64:"ROTLW"
172
+ return bits .RotateLeft32 (n , 9 )
173
+ }
174
+
175
+ func RotateLeft16 (n uint16 ) uint16 {
176
+ // amd64:"ROLW" 386:"ROLW"
177
+ return bits .RotateLeft16 (n , 5 )
178
+ }
179
+
180
+ func RotateLeft8 (n uint8 ) uint8 {
181
+ // amd64:"ROLB" 386:"ROLB"
182
+ return bits .RotateLeft8 (n , 5 )
183
+ }
184
+
157
185
// ------------------------ //
158
186
// bits.TrailingZeros //
159
187
// ------------------------ //
160
188
161
189
func TrailingZeros (n uint ) int {
162
- //amd64:"BSFQ","MOVL\t\\$64","CMOVQEQ"
163
- //s390x:"FLOGR"
190
+ // amd64:"BSFQ","MOVL\t\\$64","CMOVQEQ"
191
+ // s390x:"FLOGR"
164
192
return bits .TrailingZeros (n )
165
193
}
166
194
167
195
func TrailingZeros64 (n uint64 ) int {
168
- //amd64:"BSFQ","MOVL\t\\$64","CMOVQEQ"
169
- //s390x:"FLOGR"
196
+ // amd64:"BSFQ","MOVL\t\\$64","CMOVQEQ"
197
+ // s390x:"FLOGR"
170
198
return bits .TrailingZeros64 (n )
171
199
}
172
200
173
201
func TrailingZeros32 (n uint32 ) int {
174
- //amd64:"MOVQ\t\\$4294967296","ORQ\t[^$]","BSFQ"
175
- //s390x:"FLOGR","MOVWZ"
202
+ // amd64:"MOVQ\t\\$4294967296","ORQ\t[^$]","BSFQ"
203
+ // s390x:"FLOGR","MOVWZ"
176
204
return bits .TrailingZeros32 (n )
177
205
}
178
206
179
207
func TrailingZeros16 (n uint16 ) int {
180
- //amd64:"BSFQ","ORQ\t\\$65536"
181
- //s390x:"FLOGR","OR\t\\$65536"
208
+ // amd64:"BSFQ","ORQ\t\\$65536"
209
+ // s390x:"FLOGR","OR\t\\$65536"
182
210
return bits .TrailingZeros16 (n )
183
211
}
184
212
185
213
func TrailingZeros8 (n uint8 ) int {
186
- //amd64:"BSFQ","ORQ\t\\$256"
187
- //s390x:"FLOGR","OR\t\\$256"
214
+ // amd64:"BSFQ","ORQ\t\\$256"
215
+ // s390x:"FLOGR","OR\t\\$256"
188
216
return bits .TrailingZeros8 (n )
189
217
}
0 commit comments