// File: /workspace/github_cpp_makefile_star2_O1/BenLangmead[P]bowtie/./ebwt.h
// Function: Ebwt::countFwSide(SideLocus const&, int) const
inline TIndexOffU Ebwt::countFwSide(const SideLocus& l, int c) const { /* check */
	assert_lt(c, 4);
	assert_geq(c, 0);
	assert_lt(l._by, (int)this->_eh._sideBwtSz);
	assert_geq(l._by, 0);
	assert_lt(l._bp, 4);
	assert_geq(l._bp, 0);
	const uint8_t *side = l.side(this->_ebwt);
	TIndexOffU cCnt = countUpTo(l, c);
	assert_leq(cCnt, this->_eh._sideBwtLen);
	if(c == 0 && l._sideByteOff <= _zEbwtByteOff && l._sideByteOff + l._by >= _zEbwtByteOff) {
		// Adjust for the fact that we represented $ with an 'A', but
		// shouldn't count it as an 'A' here
		if((l._sideByteOff + l._by > _zEbwtByteOff) ||
		   (l._sideByteOff + l._by == _zEbwtByteOff && l._bp > _zEbwtBpOff))
		{
			cCnt--; // Adjust for '$' looking like an 'A'
		}
	}
	TIndexOffU ret;
	// Now factor in the occ[] count at the side break
	if(c < 2) {
		const TIndexOffU *ac = reinterpret_cast<const TIndexOffU*>(side - 2*OFF_SIZE);
		assert_leq(ac[0], this->_eh._numSides * this->_eh._sideBwtLen); // b/c it's used as padding
		assert_leq(ac[1], this->_eh._len);
		ret = ac[c] + cCnt + this->_fchr[c];
	} else {
		const TIndexOffU *gt = reinterpret_cast<const TIndexOffU*>(side + this->_eh._sideSz - 2*OFF_SIZE); // next
		assert_leq(gt[0], this->_eh._len); assert_leq(gt[1], this->_eh._len);
		ret = gt[c-2] + cCnt + this->_fchr[c];
	}
#ifndef NDEBUG
	assert_leq(ret, this->_fchr[c+1]); // can't have jumpded into next char's section
	if(c == 0) {
		assert_leq(cCnt, this->_eh._sideBwtLen);
	} else {
		assert_leq(ret, this->_eh._bwtLen);
	}
#endif
	return ret;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %edx, %ebp
cmpl $0x4, %edx
jge 0x18d32
testl %ebp, %ebp
js 0x18dd6
movq %rsi, %r14
movq %rdi, %rbx
movswl 0x14(%rsi), %esi
cmpl %esi, 0x190(%rdi)
jle 0x18e77
movslq %esi, %rcx
testw %cx, %cx
js 0x18f1f
movsbq 0x16(%r14), %rax
cmpq $0x4, %rax
jge 0x18fc3
testb %al, %al
js 0x1906a
movq (%r14), %rdx
movq 0xc8(%rbx), %r15
addq %rdx, %r15
cmpb $0x0, (%rbx)
movl %ebp, %r12d
je 0x18aab
cmpw $0x8, %cx
jl 0x18b3d
leaq 0x1859b(%rip), %rdi     # 0x31000
movq (%rdi,%r12,8), %r8
xorl %edi, %edi
movabsq $0x5555555555555555, %r9 # imm = 0x5555555555555555
xorl %r14d, %r14d
movq %rdi, %r10
movq (%r15,%rdi), %rdi
xorq %r8, %rdi
movq %rdi, %r11
shrq %r11
andq %r9, %rdi
andq %r11, %rdi
popcntq %rdi, %r11
movslq %r11d, %rdi
addq %rdi, %r14
leaq 0x8(%r10), %rdi
addq $0xf, %r10
cmpq %rcx, %r10
jb 0x18a78
jmp 0x18b42
cmpw $0x8, %cx
jl 0x18b3d
movabsq $0x1111111111111111, %r8 # imm = 0x1111111111111111
leaq 0x1853a(%rip), %rdi     # 0x31000
movq (%rdi,%r12,8), %r9
xorl %edi, %edi
movabsq $0x707070707070707, %r10 # imm = 0x707070707070707
xorl %r14d, %r14d
movq %rdi, %r11
movq (%r15,%rdi), %rdi
xorq %r9, %rdi
movq %rdi, %r13
shrq %r13
andq %rdi, %r13
movq %r13, %rdi
andq %r8, %rdi
shrq $0x2, %r13
andq %r8, %r13
addq %rdi, %r13
movq %r13, %rdi
shrq $0x4, %rdi
addq %r13, %rdi
andq %r10, %rdi
movq %rdi, %r13
shrq $0x8, %r13
addq %rdi, %r13
movq %r13, %rdi
shrq $0x10, %rdi
addq %r13, %rdi
movq %rdi, %r13
shrq $0x20, %r13
addl %edi, %r13d
andl $0x3f, %r13d
addq %r13, %r14
leaq 0x8(%r11), %rdi
addq $0xf, %r11
cmpq %rcx, %r11
jb 0x18ad9
jmp 0x18b42
xorl %r14d, %r14d
xorl %edi, %edi
cmpl %esi, %edi
jge 0x18b70
movl %edi, %edi
movl %esi, %r8d
movq %r12, %r9
shlq $0x8, %r9
addq 0x1e47f(%rip), %r9      # 0x36fd8
movzbl (%r15,%rdi), %r10d
movzbl (%r10,%r9), %r10d
addq %r10, %r14
incq %rdi
cmpq %rdi, %r8
jne 0x18b59
movl %esi, %edi
testb %al, %al
je 0x18b9b
movl %edi, %esi
movzbl (%r15,%rsi), %esi
movq %rax, %rdi
shlq $0xa, %rdi
addq 0x1e44f(%rip), %rdi     # 0x36fd8
movq %r12, %r8
shlq $0x8, %r8
addq %rdi, %r8
movzbl (%rsi,%r8), %esi
addq %rsi, %r14
movl 0x194(%rbx), %esi
cmpq %rsi, %r14
ja 0x1910e
testl %ebp, %ebp
jne 0x18bcc
movq 0x70(%rbx), %rdi
cmpq %rdi, %rdx
ja 0x18bcc
addq %rcx, %rdx
cmpq %rdi, %rdx
jb 0x18bcc
ja 0x18bc9
jne 0x18bcc
cmpq %rax, 0x78(%rbx)
jge 0x18bcc
decq %r14
cmpl $0x1, %ebp
jg 0x18c08
leaq -0x10(%r15), %r13
movq 0x1a0(%rbx), %rax
imulq %rsi, %rax
cmpq %rax, -0x10(%r15)
ja 0x19262
movq -0x8(%r15), %rax
cmpq 0x108(%rbx), %rax
ja 0x19330
leaq (,%r12,8), %rax
addq %r13, %rax
jmp 0x18c3f
movl 0x18c(%rbx), %eax
leaq (%r15,%rax), %r13
addq $-0x10, %r13
movq 0x108(%rbx), %rcx
cmpq %rcx, (%r13)
ja 0x19311
addq %rax, %r15
cmpq %rcx, -0x8(%r15)
ja 0x193d8
leaq -0x10(,%r12,8), %rax
addq %r13, %rax
movq (%rax), %r15
addq %r14, %r15
movq 0xa0(%rbx), %rax
addq (%rax,%r12,8), %r15
cmpq 0x8(%rax,%r12,8), %r15
ja 0x191b4
testl %ebp, %ebp
je 0x18d17
cmpq 0x110(%rbx), %r15
jbe 0x18d20
movq 0x1e341(%rip), %r14     # 0x36fb8
leaq 0x14542(%rip), %rsi     # 0x2d1c0
movq %r14, %rdi
callq 0x4310
movq %rax, %rdi
movq %r15, %rsi
callq 0x40c0
leaq 0x1453f(%rip), %rsi     # 0x2d1d7
movq %rax, %rdi
callq 0x4310
movq 0x110(%rbx), %rsi
movq %rax, %rdi
callq 0x40c0
leaq 0x1665f(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x1440d(%rip), %rbx     # 0x2d0da
movq %r14, %rdi
movq %rbx, %rsi
callq 0x4310
leaq 0x15a39(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x816, %esi            # imm = 0x816
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x158f5(%rip), %rdi     # 0x2e5f8
leaq 0x1543c(%rip), %rcx     # 0x2e146
movq %rbx, %rsi
movl $0x816, %edx            # imm = 0x816
callq 0x41c0
cmpq %rsi, %r14
ja 0x19480
movq %r15, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x1e27f(%rip), %rbx     # 0x36fb8
leaq 0x14524(%rip), %rsi     # 0x2d264
movq %rbx, %rdi
callq 0x4310
movq %rax, %rdi
movl %ebp, %esi
callq 0x4610
leaq 0x14521(%rip), %rsi     # 0x2d27a
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x4, %esi
callq 0x4610
leaq 0x165a0(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x1434e(%rip), %r14     # 0x2d0da
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4310
leaq 0x1597a(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x7f3, %esi            # imm = 0x7F3
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x15836(%rip), %rdi     # 0x2e5f8
leaq 0x1537d(%rip), %rcx     # 0x2e146
movq %r14, %rsi
movl $0x7f3, %edx            # imm = 0x7F3
callq 0x41c0
movq 0x1e1db(%rip), %rbx     # 0x36fb8
leaq 0x1443e(%rip), %rsi     # 0x2d222
movq %rbx, %rdi
callq 0x4310
movq %rax, %rdi
movl %ebp, %esi
callq 0x4610
leaq 0x1443c(%rip), %rsi     # 0x2d239
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
xorl %esi, %esi
callq 0x4610
leaq 0x164ff(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x142ad(%rip), %r14     # 0x2d0da
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4310
leaq 0x158d9(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x7f4, %esi            # imm = 0x7F4
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x15795(%rip), %rdi     # 0x2e5f8
leaq 0x152dc(%rip), %rcx     # 0x2e146
movq %r14, %rsi
movl $0x7f4, %edx            # imm = 0x7F4
callq 0x41c0
movq 0x1e13a(%rip), %r15     # 0x36fb8
leaq 0x143df(%rip), %rsi     # 0x2d264
movq %r15, %rdi
callq 0x4310
movswl 0x14(%r14), %esi
movq %rax, %rdi
callq 0x42c0
leaq 0x143d9(%rip), %rsi     # 0x2d27a
movq %rax, %rdi
callq 0x4310
movl 0x190(%rbx), %esi
movq %rax, %rdi
callq 0x4610
leaq 0x16457(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x14205(%rip), %rbx     # 0x2d0da
movq %r15, %rdi
movq %rbx, %rsi
callq 0x4310
leaq 0x15831(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x7f5, %esi            # imm = 0x7F5
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x156ed(%rip), %rdi     # 0x2e5f8
leaq 0x15234(%rip), %rcx     # 0x2e146
movq %rbx, %rsi
movl $0x7f5, %edx            # imm = 0x7F5
callq 0x41c0
movq 0x1e092(%rip), %rbx     # 0x36fb8
leaq 0x142f5(%rip), %rsi     # 0x2d222
movq %rbx, %rdi
callq 0x4310
movswl 0x14(%r14), %esi
movq %rax, %rdi
callq 0x42c0
leaq 0x142f0(%rip), %rsi     # 0x2d239
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
xorl %esi, %esi
callq 0x4610
leaq 0x163b3(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x14161(%rip), %r14     # 0x2d0da
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4310
leaq 0x1578d(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x7f6, %esi            # imm = 0x7F6
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x15649(%rip), %rdi     # 0x2e5f8
leaq 0x15190(%rip), %rcx     # 0x2e146
movq %r14, %rsi
movl $0x7f6, %edx            # imm = 0x7F6
callq 0x41c0
movq 0x1dfee(%rip), %rbx     # 0x36fb8
leaq 0x14293(%rip), %rsi     # 0x2d264
movq %rbx, %rdi
callq 0x4310
movsbl 0x16(%r14), %esi
movq %rax, %rdi
callq 0x4470
leaq 0x1428d(%rip), %rsi     # 0x2d27a
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x4, %esi
callq 0x4610
leaq 0x1630c(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x140ba(%rip), %r14     # 0x2d0da
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4310
leaq 0x156e6(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x7f7, %esi            # imm = 0x7F7
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x155a2(%rip), %rdi     # 0x2e5f8
leaq 0x150e9(%rip), %rcx     # 0x2e146
movq %r14, %rsi
movl $0x7f7, %edx            # imm = 0x7F7
callq 0x41c0
movq 0x1df47(%rip), %rbx     # 0x36fb8
leaq 0x141aa(%rip), %rsi     # 0x2d222
movq %rbx, %rdi
callq 0x4310
movsbl 0x16(%r14), %esi
movq %rax, %rdi
callq 0x4470
leaq 0x141a5(%rip), %rsi     # 0x2d239
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
xorl %esi, %esi
callq 0x4610
leaq 0x16268(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x14016(%rip), %r14     # 0x2d0da
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4310
leaq 0x15642(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x7f8, %esi            # imm = 0x7F8
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x154fe(%rip), %rdi     # 0x2e5f8
leaq 0x15045(%rip), %rcx     # 0x2e146
movq %r14, %rsi
movl $0x7f8, %edx            # imm = 0x7F8
callq 0x41c0
movq 0x1dea3(%rip), %r15     # 0x36fb8
leaq 0x140a4(%rip), %rsi     # 0x2d1c0
movq %r15, %rdi
callq 0x4310
movq %rax, %rdi
movq %r14, %rsi
callq 0x40c0
leaq 0x140a1(%rip), %rsi     # 0x2d1d7
movq %rax, %rdi
callq 0x4310
movl 0x194(%rbx), %esi
movq %rax, %rdi
callq 0x4440
leaq 0x161c2(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x13f70(%rip), %rbx     # 0x2d0da
movq %r15, %rdi
movq %rbx, %rsi
callq 0x4310
leaq 0x1559c(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x7fb, %esi            # imm = 0x7FB
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x15458(%rip), %rdi     # 0x2e5f8
leaq 0x14f9f(%rip), %rcx     # 0x2e146
movq %rbx, %rsi
movl $0x7fb, %edx            # imm = 0x7FB
callq 0x41c0
incq %r12
movq 0x1ddfa(%rip), %r14     # 0x36fb8
leaq 0x13ffb(%rip), %rsi     # 0x2d1c0
movq %r14, %rdi
callq 0x4310
movq %rax, %rdi
movq %r15, %rsi
callq 0x40c0
leaq 0x13ff8(%rip), %rsi     # 0x2d1d7
movq %rax, %rdi
callq 0x4310
movq 0xa0(%rbx), %rcx
movq (%rcx,%r12,8), %rsi
movq %rax, %rdi
callq 0x40c0
leaq 0x16114(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x13ec2(%rip), %rbx     # 0x2d0da
movq %r14, %rdi
movq %rbx, %rsi
callq 0x4310
leaq 0x154ee(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x812, %esi            # imm = 0x812
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x153aa(%rip), %rdi     # 0x2e5f8
leaq 0x14ef1(%rip), %rcx     # 0x2e146
movq %rbx, %rsi
movl $0x812, %edx            # imm = 0x812
callq 0x41c0
movq 0x1dd4f(%rip), %r14     # 0x36fb8
leaq 0x13f50(%rip), %rsi     # 0x2d1c0
movq %r14, %rdi
callq 0x4310
movq (%r13), %rsi
movq %rax, %rdi
callq 0x40c0
leaq 0x13f4c(%rip), %rsi     # 0x2d1d7
movq %rax, %rdi
callq 0x4310
movl 0x194(%rbx), %esi
imulq 0x1a0(%rbx), %rsi
movq %rax, %rdi
callq 0x40c0
leaq 0x16065(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x13e13(%rip), %rbx     # 0x2d0da
movq %r14, %rdi
movq %rbx, %rsi
callq 0x4310
leaq 0x1543f(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x809, %esi            # imm = 0x809
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x152fb(%rip), %rdi     # 0x2e5f8
leaq 0x14e42(%rip), %rcx     # 0x2e146
movq %rbx, %rsi
movl $0x809, %edx            # imm = 0x809
callq 0x41c0
movq 0x1dca0(%rip), %r14     # 0x36fb8
leaq 0x13ea1(%rip), %rsi     # 0x2d1c0
movq %r14, %rdi
callq 0x4310
movq (%r13), %rsi
jmp 0x193f2
movq 0x1dc81(%rip), %r14     # 0x36fb8
leaq 0x13e82(%rip), %rsi     # 0x2d1c0
movq %r14, %rdi
callq 0x4310
movq -0x8(%r15), %rsi
movq %rax, %rdi
callq 0x40c0
leaq 0x13e7e(%rip), %rsi     # 0x2d1d7
movq %rax, %rdi
callq 0x4310
movq 0x108(%rbx), %rsi
movq %rax, %rdi
callq 0x40c0
leaq 0x15f9e(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x13d4c(%rip), %rbx     # 0x2d0da
movq %r14, %rdi
movq %rbx, %rsi
callq 0x4310
leaq 0x15378(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x80a, %esi            # imm = 0x80A
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x15234(%rip), %rdi     # 0x2e5f8
leaq 0x14d7b(%rip), %rcx     # 0x2e146
movq %rbx, %rsi
movl $0x80a, %edx            # imm = 0x80A
callq 0x41c0
movq 0x1dbd9(%rip), %r14     # 0x36fb8
leaq 0x13dda(%rip), %rsi     # 0x2d1c0
movq %r14, %rdi
callq 0x4310
movq -0x8(%r15), %rsi
movq %rax, %rdi
callq 0x40c0
leaq 0x13dd6(%rip), %rsi     # 0x2d1d7
movq %rax, %rdi
callq 0x4310
movq 0x108(%rbx), %rsi
movq %rax, %rdi
callq 0x40c0
leaq 0x15ef6(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x13ca4(%rip), %rbx     # 0x2d0da
movq %r14, %rdi
movq %rbx, %rsi
callq 0x4310
leaq 0x152d0(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x80e, %esi            # imm = 0x80E
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x1518c(%rip), %rdi     # 0x2e5f8
leaq 0x14cd3(%rip), %rcx     # 0x2e146
movq %rbx, %rsi
movl $0x80e, %edx            # imm = 0x80E
callq 0x41c0
movq 0x1db31(%rip), %r15     # 0x36fb8
leaq 0x13d32(%rip), %rsi     # 0x2d1c0
movq %r15, %rdi
callq 0x4310
movq %rax, %rdi
movq %r14, %rsi
callq 0x40c0
leaq 0x13d2f(%rip), %rsi     # 0x2d1d7
movq %rax, %rdi
callq 0x4310
movl 0x194(%rbx), %esi
movq %rax, %rdi
callq 0x4440
leaq 0x15e50(%rip), %rsi     # 0x2f315
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x13bfe(%rip), %rbx     # 0x2d0da
movq %r15, %rdi
movq %rbx, %rsi
callq 0x4310
leaq 0x1522a(%rip), %rsi     # 0x2e718
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x814, %esi            # imm = 0x814
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x150e6(%rip), %rdi     # 0x2e5f8
leaq 0x14c2d(%rip), %rcx     # 0x2e146
movq %rbx, %rsi
movl $0x814, %edx            # imm = 0x814
callq 0x41c0