// Copyright 2010 The Code Cavern

// NOTE: This code is safe when xn==0 , but in general we dont require that
bda_bitcnt	bda_popcount(bda_srcptr xp,bda_len xn)
{bda_len i;
bda_bitcnt r=0;

for(i=0;i<xn;i++)r+=bda_digit_popcount(xp[i]);
return r;}


// NOTE: This code is safe when xn==0 , but in general we dont require that
bda_bitcnt	bda_hamdist(bda_srcptr xp,bda_srcptr yp,bda_len n)
{bda_len i;
bda_bitcnt r=0;

for(i=0;i<n;i++)r+=bda_digit_popcount(xp[i]^yp[i]);
return r;}


read in x				// x is 1 bit fields with val 0-1
y=((x>>1)&01010101)+(x&01010101)	// y is 2 bit fields with val 0-2	cp shr & & +	=  5-ops
y=x-((x>>1)&01010101)			// y is 2 bit fields with val 0-2	cp shr & -	=  4-ops
z=(y&00110011)+((y>>2)&00110011)	// z is 4 bit fields with val 0-4	cp shr & & +	=  5-ops
t=(z&00001111)+((z>>4)&00001111)	// t is 8 bit fields with val 0-8	cp shr & & +	=  5-ops
r=(t*0x0101010101)>>(64-8)