1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
std::size_t cnt_mismatch_std( const std::bitset<200>& a, const std::bitset<200>& b )
{
return (a^b).count() ;
/*
# clang++, libc++, -O3, -march=native
_Z16cnt_mismatch_stdRKNSt3__16bitsetILm200EEES3_:
# (a^b)
movq (%rsi), %rax
movq 8(%rsi), %rcx
xorq (%rdi), %rax
xorq 8(%rdi), %rcx
movq 16(%rsi), %rdx
xorq 16(%rdi), %rdx
movl 24(%rsi), %esi
xorl 24(%rdi), %esi
# count()
popcntq %rax, %rax
popcntq %rcx, %rcx
addq %rax, %rcx
popcntq %rdx, %rdx
addq %rcx, %rdx
movzbl %sil, %eax
popcntq %rax, %rax
addq %rdx, %rax
retq
*/
}
|