3 // Copyright 2018 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
11 // ----------------------- //
12 // bits.LeadingZeros //
13 // ----------------------- //
15 func LeadingZeros(n uint) int {
18 // arm:"CLZ" arm64:"CLZ"
20 return bits.LeadingZeros(n)
23 func LeadingZeros64(n uint64) int {
26 // arm:"CLZ" arm64:"CLZ"
28 return bits.LeadingZeros64(n)
31 func LeadingZeros32(n uint32) int {
32 // amd64:"BSRQ","LEAQ",-"CMOVQEQ"
34 // arm:"CLZ" arm64:"CLZ"
36 return bits.LeadingZeros32(n)
39 func LeadingZeros16(n uint16) int {
40 // amd64:"BSRL","LEAL",-"CMOVQEQ"
42 // arm:"CLZ" arm64:"CLZ"
44 return bits.LeadingZeros16(n)
47 func LeadingZeros8(n uint8) int {
48 // amd64:"BSRL","LEAL",-"CMOVQEQ"
50 // arm:"CLZ" arm64:"CLZ"
52 return bits.LeadingZeros8(n)
59 func Len(n uint) int {
62 // arm:"CLZ" arm64:"CLZ"
67 func Len64(n uint64) int {
70 // arm:"CLZ" arm64:"CLZ"
75 func Len32(n uint32) int {
76 // amd64:"BSRQ","LEAQ",-"CMOVQEQ"
78 // arm:"CLZ" arm64:"CLZ"
83 func Len16(n uint16) int {
84 // amd64:"BSRL","LEAL",-"CMOVQEQ"
86 // arm:"CLZ" arm64:"CLZ"
91 func Len8(n uint8) int {
92 // amd64:"BSRL","LEAL",-"CMOVQEQ"
94 // arm:"CLZ" arm64:"CLZ"
99 // -------------------- //
101 // -------------------- //
103 func OnesCount(n uint) int {
104 // amd64:"POPCNTQ",".*support_popcnt"
105 // arm64:"VCNT","VUADDLV"
106 return bits.OnesCount(n)
109 func OnesCount64(n uint64) int {
110 // amd64:"POPCNTQ",".*support_popcnt"
111 // arm64:"VCNT","VUADDLV"
112 return bits.OnesCount64(n)
115 func OnesCount32(n uint32) int {
116 // amd64:"POPCNTL",".*support_popcnt"
117 // arm64:"VCNT","VUADDLV"
118 return bits.OnesCount32(n)
121 func OnesCount16(n uint16) int {
122 // amd64:"POPCNTL",".*support_popcnt"
123 // arm64:"VCNT","VUADDLV"
124 return bits.OnesCount16(n)
127 // ----------------------- //
128 // bits.ReverseBytes //
129 // ----------------------- //
131 func ReverseBytes(n uint) uint {
135 return bits.ReverseBytes(n)
138 func ReverseBytes64(n uint64) uint64 {
142 return bits.ReverseBytes64(n)
145 func ReverseBytes32(n uint32) uint32 {
149 return bits.ReverseBytes32(n)
152 func ReverseBytes16(n uint16) uint16 {
154 return bits.ReverseBytes16(n)
157 // --------------------- //
158 // bits.RotateLeft //
159 // --------------------- //
161 func RotateLeft64(n uint64) uint64 {
165 return bits.RotateLeft64(n, 37)
168 func RotateLeft32(n uint32) uint32 {
169 // amd64:"ROLL" 386:"ROLL"
172 return bits.RotateLeft32(n, 9)
175 func RotateLeft16(n uint16) uint16 {
176 // amd64:"ROLW" 386:"ROLW"
177 return bits.RotateLeft16(n, 5)
180 func RotateLeft8(n uint8) uint8 {
181 // amd64:"ROLB" 386:"ROLB"
182 return bits.RotateLeft8(n, 5)
185 // ------------------------ //
186 // bits.TrailingZeros //
187 // ------------------------ //
189 func TrailingZeros(n uint) int {
190 // amd64:"BSFQ","MOVL\t\\$64","CMOVQEQ"
192 return bits.TrailingZeros(n)
195 func TrailingZeros64(n uint64) int {
196 // amd64:"BSFQ","MOVL\t\\$64","CMOVQEQ"
198 return bits.TrailingZeros64(n)
201 func TrailingZeros32(n uint32) int {
202 // amd64:"BTSQ\\t\\$32","BSFQ"
203 // s390x:"FLOGR","MOVWZ"
204 return bits.TrailingZeros32(n)
207 func TrailingZeros16(n uint16) int {
208 // amd64:"BSFL","BTSL\\t\\$16"
209 // s390x:"FLOGR","OR\t\\$65536"
210 return bits.TrailingZeros16(n)
213 func TrailingZeros8(n uint8) int {
214 // amd64:"BSFL","BTSL\\t\\$8"
215 // s390x:"FLOGR","OR\t\\$256"
216 return bits.TrailingZeros8(n)
219 // IterateBitsNN checks special handling of TrailingZerosNN when the input is known to be non-zero.
221 func IterateBits(n uint) int {
224 // amd64:"BSFQ",-"CMOVEQ"
225 i += bits.TrailingZeros(n)
231 func IterateBits64(n uint64) int {
234 // amd64:"BSFQ",-"CMOVEQ"
235 i += bits.TrailingZeros64(n)
241 func IterateBits32(n uint32) int {
244 // amd64:"BSFL",-"BTSQ"
245 i += bits.TrailingZeros32(n)
251 func IterateBits16(n uint16) int {
254 // amd64:"BSFL",-"BTSL"
255 i += bits.TrailingZeros16(n)
261 func IterateBits8(n uint8) int {
264 // amd64:"BSFL",-"BTSL"
265 i += bits.TrailingZeros8(n)