mirror of https://github.com/prometheus/prometheus
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
|
|
}
|