// File: /workspace/github_cpp_makefile_star2_O2/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 0xe372
movq %rdi, %r14
leaq (%rsi,%r15), %rdi
cmpq 0xb0(%rbx), %rdi
ja 0xe415
prefetcht1 (%rcx,%rsi)
andb $0x1, %al
movzbl %al, %ecx
cmpb $0x0, 0xb9(%rbx)
pushq $0x1
popq %rax
cmovel %ecx, %eax
movb %al, 0x12(%r14)
movzwl %dx, %ecx
shrl $0x2, %ecx
movw %cx, 0x14(%r14)
cmpl %ecx, 0x88(%rbx)
jle 0xe4bf
andb $0x3, %dl
movb %dl, 0x16(%r14)
testb %al, %al
jne 0xe366
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 0x25c3f(%rip), %r14     # 0x33fb8
leaq 0x19e63(%rip), %rsi     # 0x281e3
movq %r14, %rdi
callq 0x42d0
movq %rax, %rdi
movq %r12, %rsi
callq 0x40b0
leaq 0x19e60(%rip), %rsi     # 0x281fa
movq %rax, %rdi
callq 0x42d0
movq (%rbx), %rsi
movq %rax, %rdi
callq 0x40b0
leaq 0x1c064(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x19d32(%rip), %rbx     # 0x280fd
movq %r14, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x1b35e(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x5c9, %esi            # imm = 0x5C9
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x1b21a(%rip), %rdi     # 0x2961b
leaq 0x1af4f(%rip), %rcx     # 0x29357
movq %rbx, %rsi
movl $0x5c9, %edx            # imm = 0x5C9
callq 0x4190
movq 0x25b9c(%rip), %r12     # 0x33fb8
leaq 0x19dc0(%rip), %rsi     # 0x281e3
movq %r12, %rdi
callq 0x42d0
addq (%r14), %r15
movq %rax, %rdi
movq %r15, %rsi
callq 0x40b0
leaq 0x19dba(%rip), %rsi     # 0x281fa
movq %rax, %rdi
callq 0x42d0
movq 0xb0(%rbx), %rsi
movq %rax, %rdi
callq 0x40b0
leaq 0x1bfba(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x19c88(%rip), %rbx     # 0x280fd
movq %r12, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x1b2b4(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x5ca, %esi            # imm = 0x5CA
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x1b170(%rip), %rdi     # 0x2961b
leaq 0x1aea5(%rip), %rcx     # 0x29357
movq %rbx, %rsi
movl $0x5ca, %edx            # imm = 0x5CA
callq 0x4190
movq 0x25af2(%rip), %r15     # 0x33fb8
leaq 0x19dba(%rip), %rsi     # 0x28287
movq %r15, %rdi
callq 0x42d0
movswl 0x14(%r14), %esi
movq %rax, %rdi
callq 0x4280
leaq 0x19db4(%rip), %rsi     # 0x2829d
movq %rax, %rdi
callq 0x42d0
movl 0x88(%rbx), %esi
movq %rax, %rdi
callq 0x45d0
leaq 0x1bf12(%rip), %rsi     # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
leaq 0x19be0(%rip), %rbx     # 0x280fd
movq %r15, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x1b20c(%rip), %rsi     # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0x5d3, %esi            # imm = 0x5D3
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x1b0c8(%rip), %rdi     # 0x2961b
leaq 0x1adfd(%rip), %rcx     # 0x29357
movq %rbx, %rsi
movl $0x5d3, %edx            # imm = 0x5D3
callq 0x4190
nop