mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-30 07:59:40 -08:00
40 lines
533 B
Go
40 lines
533 B
Go
|
// +build !amd64 appengine
|
||
|
|
||
|
package bits
|
||
|
|
||
|
// Ctz counts trailing zeroes
|
||
|
func Ctz(x uint64) uint64 {
|
||
|
|
||
|
if x == 0 {
|
||
|
return 64
|
||
|
}
|
||
|
|
||
|
var n uint64
|
||
|
|
||
|
if (x & 0x00000000FFFFFFFF) == 0 {
|
||
|
n = n + 32
|
||
|
x = x >> 32
|
||
|
}
|
||
|
if (x & 0x000000000000FFFF) == 0 {
|
||
|
n = n + 16
|
||
|
x = x >> 16
|
||
|
}
|
||
|
if (x & 0x00000000000000FF) == 0 {
|
||
|
n = n + 8
|
||
|
x = x >> 8
|
||
|
}
|
||
|
if (x & 0x000000000000000F) == 0 {
|
||
|
n = n + 4
|
||
|
x = x >> 4
|
||
|
}
|
||
|
if (x & 0x0000000000000003) == 0 {
|
||
|
n = n + 2
|
||
|
x = x >> 2
|
||
|
}
|
||
|
if (x & 0x0000000000000001) == 0 {
|
||
|
n = n + 1
|
||
|
}
|
||
|
|
||
|
return n
|
||
|
}
|