// File: /workspace/github_cpp_makefile_star2_O3/BenLangmead[P]bowtie/./ebwt.h
// Function: SideLocus::initFromRow(unsigned long, EbwtParams const&, unsigned char const*)
void initFromRow(TIndexOffU row, const EbwtParams& ep, const uint8_t* ebwt) {
		const uint32_t sideSz     = ep._sideSz;
		// Side length is hard-coded for now; this allows the compiler
		// to do clever things to accelerate / and %.
		if (ep._isBt2Index) {
			_sideNum = row / (48*OFF_SIZE);
			_charOff = row % (48*OFF_SIZE);
		} else {
			_sideNum = row / (56*OFF_SIZE);
			_charOff = row % (56*OFF_SIZE);
		}
		_sideByteOff = _sideNum * sideSz;
		assert_leq(row, ep._len);
		assert_leq(_sideByteOff + sideSz, ep._ebwtTotSz);
#ifndef NO_PREFETCH
		__builtin_prefetch((const void *)(ebwt + _sideByteOff),
		                   0 /* prepare for read */,
		                   PREFETCH_LOCALITY);
#endif
		// prefetch this side too
		_fw = ep._isBt2Index ? true : ((_sideNum & 1) != 0); // odd-numbered sides are forward
		_by = _charOff >> 2; // byte within side
		assert_lt(_by, (int)ep._sideBwtSz);
		_bp = _charOff & 3;  // bit-pair within byte
		if(!_fw) {
			_by = ep._sideBwtSz - _by - 1;
			_bp ^= 3;
		}
	}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rsi, %r12
movl 0x84(%rdx), %r15d
movzbl 0xb9(%rdx), %esi
xorl $0x1, %esi
shll $0x6, %esi
orq $0x180, %rsi            # imm = 0x180
movq %r12, %rax
xorl %edx, %edx
divq %rsi
movq %rax, 0x8(%rdi)
movw %dx, 0x10(%rdi)
movq %rax, %rsi
imulq %r15, %rsi
movq %rsi, (%rdi)
cmpq %r12, (%rbx)
jb 0x105b0
movq %rdi, %r14
leaq (%rsi,%r15), %rdi
cmpq 0xb0(%rbx), %rdi
ja 0x10653
prefetcht1 (%rcx,%rsi)
andb $0x1, %al
movzbl %al, %ecx
cmpb $0x0, 0xb9(%rbx)
movl $0x1, %eax
cmovel %ecx, %eax
movb %al, 0x12(%r14)
movzwl %dx, %ecx
shrl $0x2, %ecx
movw %cx, 0x14(%r14)
cmpl %ecx, 0x88(%rbx)
jle 0x106fd
andb $0x3, %dl
movb %dl, 0x16(%r14)
testb %al, %al
jne 0x105a4
movzwl %cx, %eax
notl %eax
addw 0x88(%rbx), %ax
movw %ax, 0x14(%r14)
xorb $0x3, %dl
movb %dl, 0x16(%r14)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq 0x26a01(%rip), %r14     # 0x36fb8
leaq 0x1bc92(%rip), %rsi     # 0x2c250
movq %r14, %rdi
callq 0x4310
movq %rax, %rdi
movq %r12, %rsi
callq 0x40c0
leaq 0x1bc8f(%rip), %rsi     # 0x2c267
movq %rax, %rdi
callq 0x4310
movq (%rbx), %rsi
movq %rax, %rdi
callq 0x40c0
leaq 0x1ddb3(%rip), %rsi     # 0x2e3a5
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x1bb61(%rip), %rbx     # 0x2c16a
movq %r14, %rdi
movq %rbx, %rsi
callq 0x4310
leaq 0x1d18d(%rip), %rsi     # 0x2d7a8
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x5c9, %esi            # imm = 0x5C9
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x1d049(%rip), %rdi     # 0x2d688
leaq 0x1cd7e(%rip), %rcx     # 0x2d3c4
movq %rbx, %rsi
movl $0x5c9, %edx            # imm = 0x5C9
callq 0x41c0
movq 0x2695e(%rip), %r12     # 0x36fb8
leaq 0x1bbef(%rip), %rsi     # 0x2c250
movq %r12, %rdi
callq 0x4310
addq (%r14), %r15
movq %rax, %rdi
movq %r15, %rsi
callq 0x40c0
leaq 0x1bbe9(%rip), %rsi     # 0x2c267
movq %rax, %rdi
callq 0x4310
movq 0xb0(%rbx), %rsi
movq %rax, %rdi
callq 0x40c0
leaq 0x1dd09(%rip), %rsi     # 0x2e3a5
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x1bab7(%rip), %rbx     # 0x2c16a
movq %r12, %rdi
movq %rbx, %rsi
callq 0x4310
leaq 0x1d0e3(%rip), %rsi     # 0x2d7a8
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x5ca, %esi            # imm = 0x5CA
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x1cf9f(%rip), %rdi     # 0x2d688
leaq 0x1ccd4(%rip), %rcx     # 0x2d3c4
movq %rbx, %rsi
movl $0x5ca, %edx            # imm = 0x5CA
callq 0x41c0
movq 0x268b4(%rip), %r15     # 0x36fb8
leaq 0x1bbe9(%rip), %rsi     # 0x2c2f4
movq %r15, %rdi
callq 0x4310
movswl 0x14(%r14), %esi
movq %rax, %rdi
callq 0x42c0
leaq 0x1bbe3(%rip), %rsi     # 0x2c30a
movq %rax, %rdi
callq 0x4310
movl 0x88(%rbx), %esi
movq %rax, %rdi
callq 0x4610
leaq 0x1dc61(%rip), %rsi     # 0x2e3a5
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x1ba0f(%rip), %rbx     # 0x2c16a
movq %r15, %rdi
movq %rbx, %rsi
callq 0x4310
leaq 0x1d03b(%rip), %rsi     # 0x2d7a8
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x5d3, %esi            # imm = 0x5D3
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x1cef7(%rip), %rdi     # 0x2d688
leaq 0x1cc2c(%rip), %rcx     # 0x2d3c4
movq %rbx, %rsi
movl $0x5d3, %edx            # imm = 0x5D3
callq 0x41c0
nop