// File: /workspace/github_c_makefile_star2_O2/genometools[P]genometools/src/core/encseq.c
// Function: gt_encseq_get_encoded_char_nospecial
GtUchar gt_encseq_get_encoded_char_nospecial(const GtEncseq *encseq,
                                             GtUword pos,
                                             GtReadmode readmode)
{
  gt_assert(encseq != NULL && pos < encseq->logicaltotallength);
  /* translate into forward coords */
  if (GT_ISDIRREVERSE(readmode))
    pos = GT_REVERSEPOS(encseq->logicaltotallength, pos);
  /* handle virtual coordinates */
  if (encseq->hasmirror) {
    if (pos > encseq->totallength) {
      /* invert coordinates and readmode */
      gt_readmode_invert(readmode);
      pos = GT_REVERSEPOS(encseq->totallength, pos - encseq->totallength - 1);
    } else if (pos == encseq->totallength) {
      return (GtUchar) GT_SEPARATOR;
    }
  }
  gt_assert(pos < encseq->totallength);
  if (encseq->twobitencoding != NULL) {
    GtUword twobits;

    twobits = EXTRACTENCODEDCHAR(encseq->twobitencoding, pos);
    return GT_ISDIRCOMPLEMENT(readmode)
             ? GT_COMPLEMENTBASE((GtUchar) twobits)
             : (GtUchar) twobits;
  }
  if (encseq->sat == GT_ACCESS_TYPE_BYTECOMPRESS) {
    gt_assert(!GT_ISDIRCOMPLEMENT(readmode));
    return delivercharViabytecompress(encseq, pos);
  }
  else {
    GtUchar cc;
    gt_assert(encseq->sat == GT_ACCESS_TYPE_DIRECTACCESS);
    cc = encseq->plainseq[pos];
    gt_assert(GT_ISNOTSPECIAL(cc));
    return GT_ISDIRCOMPLEMENT(readmode)
           ? GT_COMPLEMENTBASE(cc)
           : cc;
  }
}

// Assembly:
pushq %rax
testq %rdi, %rdi
je 0xa26c2
movq 0x38(%rdi), %rcx
cmpq %rsi, %rcx
jbe 0xa26c2
movl %edx, %eax
andl $-0x3, %eax
movq %rsi, %r8
notq %r8
addq %r8, %rcx
cmpl $0x1, %eax
cmovneq %rsi, %rcx
movq 0x30(%rdi), %rsi
cmpb $0x1, 0x3a8(%rdi)
jne 0xa263b
cmpq %rsi, %rcx
jbe 0xa2633
pushq $0x3
popq %rax
subl %edx, %eax
leaq (%rsi,%rsi), %r8
subq %rcx, %r8
movl %eax, %edx
movq %r8, %rcx
jmp 0xa263b
movb $-0x1, %al
je 0xa26c0
cmpq %rsi, %rcx
jae 0xa26f0
movq 0x280(%rdi), %rax
testq %rax, %rax
je 0xa2677
movq %rcx, %rsi
shrq $0x5, %rsi
movq (%rax,%rsi,8), %rax
notl %ecx
addl %ecx, %ecx
shrq %cl, %rax
andl $-0x2, %edx
andb $0x3, %al
movzbl %al, %ecx
xorb $0x3, %al
cmpl $0x2, %edx
movzbl %al, %eax
cmovnel %ecx, %eax
jmp 0xa26c0
movl (%rdi), %eax
testl %eax, %eax
je 0xa269b
cmpl $0x1, %eax
jne 0xa2728
andl $-0x2, %edx
cmpl $0x2, %edx
je 0xa2756
movq %rcx, %rsi
popq %rax
jmp 0xa2358
movq 0x290(%rdi), %rax
movb (%rax,%rcx), %al
cmpb $-0x2, %al
jae 0xa2784
andl $-0x2, %edx
movb $0x3, %cl
subb %al, %cl
cmpl $0x2, %edx
movzbl %cl, %ecx
movzbl %al, %eax
cmovel %ecx, %eax
popq %rcx
retq
movq 0x8b8ef(%rip), %rax     # 0x12dfb8
movq (%rax), %rdi
leaq 0x27993(%rip), %rsi     # 0xca066
leaq 0x49518(%rip), %rdx     # 0xebbf2
leaq 0x49631(%rip), %rcx     # 0xebd12
leaq 0x494b2(%rip), %r8      # 0xebb9a
movl $0x17d, %r9d            # imm = 0x17D
jmp 0xa271c
movq 0x8b8c1(%rip), %rax     # 0x12dfb8
movq (%rax), %rdi
leaq 0x27965(%rip), %rsi     # 0xca066
leaq 0x4d479(%rip), %rdx     # 0xefb81
leaq 0x49603(%rip), %rcx     # 0xebd12
leaq 0x49484(%rip), %r8      # 0xebb9a
movl $0x18b, %r9d            # imm = 0x18B
xorl %eax, %eax
callq 0xb8c0
callq 0xb300
movq 0x8b889(%rip), %rax     # 0x12dfb8
movq (%rax), %rdi
leaq 0x2792d(%rip), %rsi     # 0xca066
leaq 0x49546(%rip), %rdx     # 0xebc86
leaq 0x495cb(%rip), %rcx     # 0xebd12
leaq 0x4944c(%rip), %r8      # 0xebb9a
movl $0x19a, %r9d            # imm = 0x19A
jmp 0xa271c
movq 0x8b85b(%rip), %rax     # 0x12dfb8
movq (%rax), %rdi
leaq 0x278ff(%rip), %rsi     # 0xca066
leaq 0x494fa(%rip), %rdx     # 0xebc68
leaq 0x4959d(%rip), %rcx     # 0xebd12
leaq 0x4941e(%rip), %r8      # 0xebb9a
movl $0x195, %r9d            # imm = 0x195
jmp 0xa271c
movq 0x8b82d(%rip), %rax     # 0x12dfb8
movq (%rax), %rdi
leaq 0x278d1(%rip), %rsi     # 0xca066
leaq 0x4959b(%rip), %rdx     # 0xebd37
leaq 0x4956f(%rip), %rcx     # 0xebd12
leaq 0x493f0(%rip), %r8      # 0xebb9a
movl $0x19c, %r9d            # imm = 0x19C
jmp 0xa271c