segment .text cname popcnt_array global popcnt_array ; let the linker know about popcnt_array popcnt_array: push r12 push r13 push r14 push r15 xor eax, eax xor r8d, r8d xor ecx, ecx xor r14d, r14d xor r15d, r15d .count_more: popcnt rdx, [rdi+rcx*8] add rax, rdx popcnt r9, [rdi+rcx*8+8] add r8, r9 popcnt r12, [rdi+rcx*8+16] add r14, r12 popcnt r13, [rdi+rcx*8+24] add r15, r13 add rcx, 4 cmp rcx, rsi jl .count_more add rax, r8 add rax, r14 add rax, r15 pop r15 pop r14 pop r13 pop r12 ret