// File: BenLangmead[P]bowtie/./ebwt.h
// Function: void countInU64Ex<USE_POPCNT_INSTRUCTION>(unsigned long, unsigned long*)
inline static void countInU64Ex(uint64_t dw, TIndexOffU* arrs) {
	uint64_t c0 = c_table[0];
	uint64_t x0 = dw ^ c0;
	uint64_t x1 = (x0 >> 1);
	uint64_t x2 = x1 & (0x5555555555555555llu);
	uint64_t x3 = x0 & x2;
#ifdef POPCNT_CAPABILITY
	uint64_t tmp = Operation().pop64(x3);
#else
	uint64_t tmp = pop64(x3);
#endif
	arrs[0] += (uint32_t) tmp;

        c0 = c_table[1];
        x0 = dw ^ c0;
        x1 = (x0 >> 1);
        x2 = x1 & (0x5555555555555555llu);
        x3 = x0 & x2;
#ifdef POPCNT_CAPABILITY
        tmp = Operation().pop64(x3);
#else
        tmp = pop64(x3);
#endif
        arrs[1] += (uint32_t) tmp;

        c0 = c_table[2];
        x0 = dw ^ c0;
        x1 = (x0 >> 1);
        x2 = x1 & (0x5555555555555555llu);
        x3 = x0 & x2;
#ifdef POPCNT_CAPABILITY
        tmp = Operation().pop64(x3);
#else
        tmp = pop64(x3);
#endif
        arrs[2] += (uint32_t) tmp;

        c0 = c_table[3];
        x0 = dw ^ c0;
        x1 = (x0 >> 1);
        x2 = x1 & (0x5555555555555555llu);
        x3 = x0 & x2;
#ifdef POPCNT_CAPABILITY
        tmp = Operation().pop64(x3);
#else
        tmp = pop64(x3);
#endif
        arrs[3] += (uint32_t) tmp;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq 0x31289(%rip), %rax     # 0x43370
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
xorq -0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
shrq %rax
movq %rax, -0x28(%rbp)
movabsq $0x5555555555555555, %rax # imm = 0x5555555555555555
andq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
andq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
callq 0x26640
cltq
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movl %eax, %eax
movl %eax, %ecx
movq -0x10(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
movq 0x31230(%rip), %rax     # 0x43378
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
xorq -0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
shrq %rax
movq %rax, -0x28(%rbp)
movabsq $0x5555555555555555, %rax # imm = 0x5555555555555555
andq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
andq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
callq 0x26640
cltq
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movl %eax, %eax
movl %eax, %ecx
movq -0x10(%rbp), %rax
addq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq 0x311d5(%rip), %rax     # 0x43380
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
xorq -0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
shrq %rax
movq %rax, -0x28(%rbp)
movabsq $0x5555555555555555, %rax # imm = 0x5555555555555555
andq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
andq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
callq 0x26640
cltq
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movl %eax, %eax
movl %eax, %ecx
movq -0x10(%rbp), %rax
addq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq 0x3117a(%rip), %rax     # 0x43388
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
xorq -0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
shrq %rax
movq %rax, -0x28(%rbp)
movabsq $0x5555555555555555, %rax # imm = 0x5555555555555555
andq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
andq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
callq 0x26640
cltq
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movl %eax, %eax
movl %eax, %ecx
movq -0x10(%rbp), %rax
addq 0x18(%rax), %rcx
movq %rcx, 0x18(%rax)
addq $0x50, %rsp
popq %rbp
retq