// File: /workspace/github_cpp_makefile_star2_O2/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 %r12
pushq %rbx
movl %edx, %ebp
cmpl $0x4, %edx
jge 0x14eb1
testl %ebp, %ebp
js 0x14f53
movq %rsi, %r15
movq %rdi, %rbx
movswl 0x14(%rsi), %eax
cmpl %eax, 0x190(%rdi)
jle 0x14ff4
testw %ax, %ax
js 0x1509c
movb 0x16(%r15), %al
cmpb $0x4, %al
jge 0x15140
testb %al, %al
js 0x151e5
movq 0xc8(%rbx), %r12
addq (%r15), %r12
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0x172e4
movq %rax, %r14
movl 0x194(%rbx), %eax
cmpq %rax, %r14
ja 0x15289
testl %ebp, %ebp
je 0x14d6a
cmpl $0x1, %ebp
je 0x14d93
movl 0x18c(%rbx), %eax
leaq (%r12,%rax), %r15
addq $-0x10, %r15
movq 0x108(%rbx), %rcx
cmpq %rcx, (%r15)
ja 0x15534
addq %rax, %r12
cmpq %rcx, -0x8(%r12)
ja 0x1554f
movl %ebp, %r12d
movq -0x10(%r15,%r12,8), %r15
addq %r14, %r15
movq 0xa0(%rbx), %rax
addq (%rax,%r12,8), %r15
cmpq 0x8(%rax,%r12,8), %r15
jbe 0x14de8
jmp 0x1532f
movq (%r15), %rcx
movq 0x70(%rbx), %rdx
cmpq %rdx, %rcx
ja 0x14d93
movswq 0x14(%r15), %rsi
addq %rsi, %rcx
cmpq %rdx, %rcx
jb 0x14d93
ja 0x14d90
movsbq 0x16(%r15), %rcx
cmpq %rcx, 0x78(%rbx)
jge 0x14d93
decq %r14
leaq -0x10(%r12), %r15
movq 0x1a0(%rbx), %rcx
imulq %rax, %rcx
cmpq %rcx, -0x10(%r12)
ja 0x153dd
movq -0x8(%r12), %rcx
cmpq 0x108(%rbx), %rcx
ja 0x1548b
movl %ebp, %r12d
movq (%r15,%r12,8), %r15
addq %r14, %r15
movq 0xa0(%rbx), %rcx
addq (%rcx,%r12,8), %r15
cmpq 0x8(%rcx,%r12,8), %r15
ja 0x1532f
testl %ebp, %ebp
je 0x14e9c
cmpq 0x110(%rbx), %r15
jbe 0x14ea5
movq 0x1f1bc(%rip), %r14     # 0x33fb8
leaq 0x133e0(%rip), %rsi     # 0x281e3
movq %r14, %rdi
callq 0x42d0
movq %rax, %rdi
movq %r15, %rsi
callq 0x40b0
leaq 0x133dd(%rip), %rsi     # 0x281fa
movq %rax, %rdi
callq 0x42d0
movq 0x110(%rbx), %rsi
movq %rax, %rdi
callq 0x40b0
leaq 0x155dd(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x132ab(%rip), %rbx     # 0x280fd
movq %r14, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x148d7(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x816, %esi            # imm = 0x816
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x14793(%rip), %rdi     # 0x2961b
leaq 0x142da(%rip), %rcx     # 0x29169
movq %rbx, %rsi
movl $0x816, %edx            # imm = 0x816
callq 0x4190
cmpq %rax, %r14
ja 0x155f8
movq %r15, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq 0x1f100(%rip), %rbx     # 0x33fb8
leaq 0x133c8(%rip), %rsi     # 0x28287
movq %rbx, %rdi
callq 0x42d0
movq %rax, %rdi
movl %ebp, %esi
callq 0x45d0
leaq 0x133c5(%rip), %rsi     # 0x2829d
movq %rax, %rdi
callq 0x42d0
pushq $0x4
popq %rsi
movq %rax, %rdi
callq 0x45d0
leaq 0x15526(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x131f4(%rip), %r14     # 0x280fd
movq %rbx, %rdi
movq %r14, %rsi
callq 0x42d0
leaq 0x14820(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x7f3, %esi            # imm = 0x7F3
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x146dc(%rip), %rdi     # 0x2961b
leaq 0x14223(%rip), %rcx     # 0x29169
movq %r14, %rsi
movl $0x7f3, %edx            # imm = 0x7F3
callq 0x4190
movq 0x1f05e(%rip), %rbx     # 0x33fb8
leaq 0x132e4(%rip), %rsi     # 0x28245
movq %rbx, %rdi
callq 0x42d0
movq %rax, %rdi
movl %ebp, %esi
callq 0x45d0
leaq 0x132e2(%rip), %rsi     # 0x2825c
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
xorl %esi, %esi
callq 0x45d0
leaq 0x15485(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x13153(%rip), %r14     # 0x280fd
movq %rbx, %rdi
movq %r14, %rsi
callq 0x42d0
leaq 0x1477f(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x7f4, %esi            # imm = 0x7F4
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x1463b(%rip), %rdi     # 0x2961b
leaq 0x14182(%rip), %rcx     # 0x29169
movq %r14, %rsi
movl $0x7f4, %edx            # imm = 0x7F4
callq 0x4190
movq 0x1efbd(%rip), %r14     # 0x33fb8
leaq 0x13285(%rip), %rsi     # 0x28287
movq %r14, %rdi
callq 0x42d0
movswl 0x14(%r15), %esi
movq %rax, %rdi
callq 0x4280
leaq 0x1327f(%rip), %rsi     # 0x2829d
movq %rax, %rdi
callq 0x42d0
movl 0x190(%rbx), %esi
movq %rax, %rdi
callq 0x45d0
leaq 0x153dd(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x130ab(%rip), %rbx     # 0x280fd
movq %r14, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x146d7(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x7f5, %esi            # imm = 0x7F5
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x14593(%rip), %rdi     # 0x2961b
leaq 0x140da(%rip), %rcx     # 0x29169
movq %rbx, %rsi
movl $0x7f5, %edx            # imm = 0x7F5
callq 0x4190
movq 0x1ef15(%rip), %rbx     # 0x33fb8
leaq 0x1319b(%rip), %rsi     # 0x28245
movq %rbx, %rdi
callq 0x42d0
movswl 0x14(%r15), %esi
movq %rax, %rdi
callq 0x4280
leaq 0x13196(%rip), %rsi     # 0x2825c
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
xorl %esi, %esi
callq 0x45d0
leaq 0x15339(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x13007(%rip), %r14     # 0x280fd
movq %rbx, %rdi
movq %r14, %rsi
callq 0x42d0
leaq 0x14633(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x7f6, %esi            # imm = 0x7F6
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x144ef(%rip), %rdi     # 0x2961b
leaq 0x14036(%rip), %rcx     # 0x29169
movq %r14, %rsi
movl $0x7f6, %edx            # imm = 0x7F6
callq 0x4190
movq 0x1ee71(%rip), %rbx     # 0x33fb8
leaq 0x13139(%rip), %rsi     # 0x28287
movq %rbx, %rdi
callq 0x42d0
movsbl 0x16(%r15), %esi
movq %rax, %rdi
callq 0x4430
leaq 0x13133(%rip), %rsi     # 0x2829d
movq %rax, %rdi
callq 0x42d0
pushq $0x4
popq %rsi
movq %rax, %rdi
callq 0x45d0
leaq 0x15294(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x12f62(%rip), %r14     # 0x280fd
movq %rbx, %rdi
movq %r14, %rsi
callq 0x42d0
leaq 0x1458e(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x7f7, %esi            # imm = 0x7F7
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x1444a(%rip), %rdi     # 0x2961b
leaq 0x13f91(%rip), %rcx     # 0x29169
movq %r14, %rsi
movl $0x7f7, %edx            # imm = 0x7F7
callq 0x4190
movq 0x1edcc(%rip), %rbx     # 0x33fb8
leaq 0x13052(%rip), %rsi     # 0x28245
movq %rbx, %rdi
callq 0x42d0
movsbl 0x16(%r15), %esi
movq %rax, %rdi
callq 0x4430
leaq 0x1304d(%rip), %rsi     # 0x2825c
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
xorl %esi, %esi
callq 0x45d0
leaq 0x151f0(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x12ebe(%rip), %r14     # 0x280fd
movq %rbx, %rdi
movq %r14, %rsi
callq 0x42d0
leaq 0x144ea(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x7f8, %esi            # imm = 0x7F8
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x143a6(%rip), %rdi     # 0x2961b
leaq 0x13eed(%rip), %rcx     # 0x29169
movq %r14, %rsi
movl $0x7f8, %edx            # imm = 0x7F8
callq 0x4190
movq 0x1ed28(%rip), %r15     # 0x33fb8
leaq 0x12f4c(%rip), %rsi     # 0x281e3
movq %r15, %rdi
callq 0x42d0
movq %rax, %rdi
movq %r14, %rsi
callq 0x40b0
leaq 0x12f49(%rip), %rsi     # 0x281fa
movq %rax, %rdi
callq 0x42d0
movl 0x194(%rbx), %esi
movq %rax, %rdi
callq 0x4400
leaq 0x1514a(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x12e18(%rip), %rbx     # 0x280fd
movq %r15, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x14444(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x7fb, %esi            # imm = 0x7FB
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x14300(%rip), %rdi     # 0x2961b
leaq 0x13e47(%rip), %rcx     # 0x29169
movq %rbx, %rsi
movl $0x7fb, %edx            # imm = 0x7FB
callq 0x4190
incq %r12
movq 0x1ec7f(%rip), %r14     # 0x33fb8
leaq 0x12ea3(%rip), %rsi     # 0x281e3
movq %r14, %rdi
callq 0x42d0
movq %rax, %rdi
movq %r15, %rsi
callq 0x40b0
leaq 0x12ea0(%rip), %rsi     # 0x281fa
movq %rax, %rdi
callq 0x42d0
movq 0xa0(%rbx), %rcx
movq (%rcx,%r12,8), %rsi
movq %rax, %rdi
callq 0x40b0
leaq 0x1509c(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x12d6a(%rip), %rbx     # 0x280fd
movq %r14, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x14396(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x812, %esi            # imm = 0x812
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x14252(%rip), %rdi     # 0x2961b
leaq 0x13d99(%rip), %rcx     # 0x29169
movq %rbx, %rsi
movl $0x812, %edx            # imm = 0x812
callq 0x4190
movq 0x1ebd4(%rip), %r14     # 0x33fb8
leaq 0x12df8(%rip), %rsi     # 0x281e3
movq %r14, %rdi
callq 0x42d0
movq (%r15), %rsi
movq %rax, %rdi
callq 0x40b0
leaq 0x12df5(%rip), %rsi     # 0x281fa
movq %rax, %rdi
callq 0x42d0
movl 0x194(%rbx), %esi
imulq 0x1a0(%rbx), %rsi
movq %rax, %rdi
callq 0x40b0
leaq 0x14fee(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x12cbc(%rip), %rbx     # 0x280fd
movq %r14, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x142e8(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x809, %esi            # imm = 0x809
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x141a4(%rip), %rdi     # 0x2961b
leaq 0x13ceb(%rip), %rcx     # 0x29169
movq %rbx, %rsi
movl $0x809, %edx            # imm = 0x809
callq 0x4190
movq 0x1eb26(%rip), %r14     # 0x33fb8
leaq 0x12d4a(%rip), %rsi     # 0x281e3
movq %r14, %rdi
callq 0x42d0
movq -0x8(%r12), %rsi
movq %rax, %rdi
callq 0x40b0
leaq 0x12d45(%rip), %rsi     # 0x281fa
movq %rax, %rdi
callq 0x42d0
movq 0x108(%rbx), %rsi
movq %rax, %rdi
callq 0x40b0
leaq 0x14f45(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x12c13(%rip), %rbx     # 0x280fd
movq %r14, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x1423f(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x80a, %esi            # imm = 0x80A
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x140fb(%rip), %rdi     # 0x2961b
leaq 0x13c42(%rip), %rcx     # 0x29169
movq %rbx, %rsi
movl $0x80a, %edx            # imm = 0x80A
callq 0x4190
movq 0x1ea7d(%rip), %r14     # 0x33fb8
leaq 0x12ca1(%rip), %rsi     # 0x281e3
movq %r14, %rdi
callq 0x42d0
movq (%r15), %rsi
jmp 0x1556a
movq 0x1ea62(%rip), %r14     # 0x33fb8
leaq 0x12c86(%rip), %rsi     # 0x281e3
movq %r14, %rdi
callq 0x42d0
movq -0x8(%r12), %rsi
movq %rax, %rdi
callq 0x40b0
leaq 0x12c81(%rip), %rsi     # 0x281fa
movq %rax, %rdi
callq 0x42d0
movq 0x108(%rbx), %rsi
movq %rax, %rdi
callq 0x40b0
leaq 0x14e81(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x12b4f(%rip), %rbx     # 0x280fd
movq %r14, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x1417b(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x80e, %esi            # imm = 0x80E
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x14037(%rip), %rdi     # 0x2961b
leaq 0x13b7e(%rip), %rcx     # 0x29169
movq %rbx, %rsi
movl $0x80e, %edx            # imm = 0x80E
callq 0x4190
movq 0x1e9b9(%rip), %r15     # 0x33fb8
leaq 0x12bdd(%rip), %rsi     # 0x281e3
movq %r15, %rdi
callq 0x42d0
movq %rax, %rdi
movq %r14, %rsi
callq 0x40b0
leaq 0x12bda(%rip), %rsi     # 0x281fa
movq %rax, %rdi
callq 0x42d0
movl 0x194(%rbx), %esi
movq %rax, %rdi
callq 0x4400
leaq 0x14ddb(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x12aa9(%rip), %rbx     # 0x280fd
movq %r15, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x140d5(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x814, %esi            # imm = 0x814
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x13f91(%rip), %rdi     # 0x2961b
leaq 0x13ad8(%rip), %rcx     # 0x29169
movq %rbx, %rsi
movl $0x814, %edx            # imm = 0x814
callq 0x4190