68 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// +build amd64,!appengine,!go1.9
 | 
						|
 | 
						|
package roaring
 | 
						|
 | 
						|
// *** the following functions are defined in popcnt_amd64.s
 | 
						|
 | 
						|
//go:noescape
 | 
						|
 | 
						|
func hasAsm() bool
 | 
						|
 | 
						|
// useAsm is a flag used to select the GO or ASM implementation of the popcnt function
 | 
						|
var useAsm = hasAsm()
 | 
						|
 | 
						|
//go:noescape
 | 
						|
 | 
						|
func popcntSliceAsm(s []uint64) uint64
 | 
						|
 | 
						|
//go:noescape
 | 
						|
 | 
						|
func popcntMaskSliceAsm(s, m []uint64) uint64
 | 
						|
 | 
						|
//go:noescape
 | 
						|
 | 
						|
func popcntAndSliceAsm(s, m []uint64) uint64
 | 
						|
 | 
						|
//go:noescape
 | 
						|
 | 
						|
func popcntOrSliceAsm(s, m []uint64) uint64
 | 
						|
 | 
						|
//go:noescape
 | 
						|
 | 
						|
func popcntXorSliceAsm(s, m []uint64) uint64
 | 
						|
 | 
						|
func popcntSlice(s []uint64) uint64 {
 | 
						|
	if useAsm {
 | 
						|
		return popcntSliceAsm(s)
 | 
						|
	}
 | 
						|
	return popcntSliceGo(s)
 | 
						|
}
 | 
						|
 | 
						|
func popcntMaskSlice(s, m []uint64) uint64 {
 | 
						|
	if useAsm {
 | 
						|
		return popcntMaskSliceAsm(s, m)
 | 
						|
	}
 | 
						|
	return popcntMaskSliceGo(s, m)
 | 
						|
}
 | 
						|
 | 
						|
func popcntAndSlice(s, m []uint64) uint64 {
 | 
						|
	if useAsm {
 | 
						|
		return popcntAndSliceAsm(s, m)
 | 
						|
	}
 | 
						|
	return popcntAndSliceGo(s, m)
 | 
						|
}
 | 
						|
 | 
						|
func popcntOrSlice(s, m []uint64) uint64 {
 | 
						|
	if useAsm {
 | 
						|
		return popcntOrSliceAsm(s, m)
 | 
						|
	}
 | 
						|
	return popcntOrSliceGo(s, m)
 | 
						|
}
 | 
						|
 | 
						|
func popcntXorSlice(s, m []uint64) uint64 {
 | 
						|
	if useAsm {
 | 
						|
		return popcntXorSliceAsm(s, m)
 | 
						|
	}
 | 
						|
	return popcntXorSliceGo(s, m)
 | 
						|
}
 |