.text .align 32, 0x90 .globl __gmpn_popcount .type __gmpn_popcount,@function __gmpn_popcount: push %rbx mov $0x5555555555555555, %r10 push %rbp mov $0x3333333333333333, %r11 lea (%rdi,%rsi,8), %rdi mov $0x0f0f0f0f0f0f0f0f, %rcx neg %rsi mov $0x0101010101010101, %rdx xor %eax, %eax test $1, %sil jz .Ltop mov (%rdi,%rsi,8), %r8 mov %r8, %r9 shr %r8 and %r10, %r8 sub %r8, %r9 mov %r9, %r8 shr $2, %r9 and %r11, %r8 and %r11, %r9 add %r8, %r9 dec %rsi jmp .Lmid .align 16, 0x90 .Ltop: mov (%rdi,%rsi,8), %r8 mov 8(%rdi,%rsi,8), %rbx mov %r8, %r9 mov %rbx, %rbp shr %r8 shr %rbx and %r10, %r8 and %r10, %rbx sub %r8, %r9 sub %rbx, %rbp mov %r9, %r8 mov %rbp, %rbx shr $2, %r9 shr $2, %rbp and %r11, %r8 and %r11, %r9 and %r11, %rbx and %r11, %rbp add %r8, %r9 add %rbx, %rbp add %rbp, %r9 .Lmid: mov %r9, %r8 shr $4, %r9 and %rcx, %r8 and %rcx, %r9 add %r8, %r9 imul %rdx, %r9 shr $56, %r9 add %r9, %rax add $2, %rsi jnc .Ltop .Lend: pop %rbp pop %rbx ret .size __gmpn_popcount,.-__gmpn_popcount