// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/core/encseq.c
// Function: checkextractunitatpos
static void checkextractunitatpos(const GtEncseq *encseq,
                                  GtReadmode readmode)
{
  GtEndofTwobitencoding ptbe1, ptbe2;
  GtEncseqReader *esr;
  GtUword startpos, twobitencodingstoppos;
  bool fwd = GT_ISDIRREVERSE(readmode) ? false : true,
       complement = GT_ISDIRCOMPLEMENT(readmode) ? true : false;

  esr = gt_encseq_create_reader_with_readmode(encseq, readmode, 0);
  for (startpos = 0; startpos < encseq->totallength; startpos++) {
    if (fwd)
      esr->currentpos = startpos;
    else
      esr->currentpos = GT_REVERSEPOS(encseq->totallength, startpos);

    if (gt_encseq_has_twobitencoding_stoppos_support(encseq))
      twobitencodingstoppos = gt_getnexttwobitencodingstoppos(fwd, esr);
    else
      twobitencodingstoppos = GT_TWOBITENCODINGSTOPPOSUNDEF(encseq);

    esr->currentpos = gt_encseq_extract2bitenc(&ptbe1, encseq, fwd,
                                               esr->currentpos,
                                               twobitencodingstoppos);
    extract2bitenc_bruteforce(fwd, &ptbe2, encseq, startpos);
    if (ptbe1.unitsnotspecial != ptbe2.unitsnotspecial) {
      fprintf(stderr, "fwd=%s, complement=%s: pos " GT_WU
                     ": fast.unitsnotspecial = %u "
                     " != %u = brute.unitsnotspecial\n",
              fwd ? "true" : "false",
              complement ? "true" : "false",
              esr->currentpos,
              ptbe1.unitsnotspecial, ptbe2.unitsnotspecial);
      gt_encseq_showatstartpos(stderr, fwd, complement, encseq,
                               esr->currentpos);
      exit(GT_EXIT_PROGRAMMING_ERROR);
    }
    if (!checktbe(fwd, ptbe1.tbe, ptbe2.tbe, ptbe1.unitsnotspecial)) {
      fprintf(stderr, "fwd=%s, complement=%s: pos "GT_WU"\n",
                      fwd ? "true" : "false",
                      complement ? "true" : "false",
                      esr->currentpos);
      gt_encseq_showatstartpos(stderr, fwd, complement, encseq,
                               esr->currentpos);
      exit(GT_EXIT_PROGRAMMING_ERROR);
    }
  }
  gt_encseq_reader_delete(esr);
}

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x70(%rsp)
movl %esi, 0x6c(%rsp)
movb $0x1, %al
cmpl $0x1, 0x6c(%rsp)
movb %al, 0x1d(%rsp)
je 0x120ad6
cmpl $0x3, 0x6c(%rsp)
sete %al
movb %al, 0x1d(%rsp)
movb 0x1d(%rsp), %dl
movl $0x1, %eax
xorl %ecx, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x1f(%rsp)
movb $0x1, %al
cmpl $0x2, 0x6c(%rsp)
movb %al, 0x1c(%rsp)
je 0x120b0c
cmpl $0x3, 0x6c(%rsp)
sete %al
movb %al, 0x1c(%rsp)
movb 0x1c(%rsp), %dl
xorl %eax, %eax
movl $0x1, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x1e(%rsp)
movq 0x70(%rsp), %rdi
movl 0x6c(%rsp), %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x116560
movq %rax, 0x30(%rsp)
movq $0x0, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq 0x70(%rsp), %rcx
cmpq 0x30(%rcx), %rax
jae 0x120daf
testb $0x1, 0x1f(%rsp)
je 0x120b74
movq 0x28(%rsp), %rcx
movq 0x30(%rsp), %rax
movq %rcx, 0x10(%rax)
jmp 0x120b8f
movq 0x70(%rsp), %rax
movq 0x30(%rax), %rcx
subq $0x1, %rcx
subq 0x28(%rsp), %rcx
movq 0x30(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x70(%rsp), %rdi
callq 0x116950
testb $0x1, %al
jne 0x120b9f
jmp 0x120bb9
movb 0x1f(%rsp), %al
movq 0x30(%rsp), %rsi
andb $0x1, %al
movzbl %al, %edi
callq 0x11d360
movq %rax, 0x20(%rsp)
jmp 0x120bef
movq 0x70(%rsp), %rax
testb $0x1, 0x3a8(%rax)
je 0x120bd7
movq 0x70(%rsp), %rax
movq 0x38(%rax), %rax
movq %rax, 0x10(%rsp)
jmp 0x120be5
movq 0x70(%rsp), %rax
movq 0x30(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x70(%rsp), %rsi
movb 0x1f(%rsp), %al
movq 0x30(%rsp), %rcx
movq 0x10(%rcx), %rcx
movq 0x20(%rsp), %r8
leaq 0x50(%rsp), %rdi
andb $0x1, %al
movzbl %al, %edx
callq 0x11d840
movq %rax, %rcx
movq 0x30(%rsp), %rax
movq %rcx, 0x10(%rax)
movb 0x1f(%rsp), %al
movq 0x70(%rsp), %rdx
movq 0x28(%rsp), %rcx
leaq 0x38(%rsp), %rsi
andb $0x1, %al
movzbl %al, %edi
callq 0x132e70
movl 0x58(%rsp), %eax
cmpl 0x40(%rsp), %eax
je 0x120ce7
movq 0x93385(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
movb 0x1f(%rsp), %cl
leaq 0x52105(%rip), %rdx     # 0x172d66
leaq 0x6d9e2(%rip), %rax     # 0x18e64a
testb $0x1, %cl
cmovneq %rax, %rdx
movb 0x1e(%rsp), %sil
leaq 0x520eb(%rip), %rcx     # 0x172d66
leaq 0x6d9c8(%rip), %rax     # 0x18e64a
testb $0x1, %sil
cmovneq %rax, %rcx
movq 0x30(%rsp), %rax
movq 0x10(%rax), %r8
movl 0x58(%rsp), %r9d
movl 0x40(%rsp), %eax
leaq 0x68c91(%rip), %rsi     # 0x189934
movl %eax, (%rsp)
movb $0x0, %al
callq 0xb890
movq 0x93324(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
movb 0x1f(%rsp), %dl
movb 0x1e(%rsp), %al
movq 0x70(%rsp), %rcx
movq 0x30(%rsp), %rsi
movq 0x10(%rsi), %r8
andb $0x1, %dl
andb $0x1, %al
movzbl %dl, %esi
movzbl %al, %edx
callq 0x11f720
movl $0x2, %edi
callq 0xb780
movb 0x1f(%rsp), %al
movq 0x50(%rsp), %rsi
movq 0x38(%rsp), %rdx
movl 0x58(%rsp), %ecx
andb $0x1, %al
movzbl %al, %edi
callq 0x132fa0
testb $0x1, %al
jne 0x120d9a
movq 0x932c6(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
movb 0x1f(%rsp), %cl
leaq 0x52046(%rip), %rdx     # 0x172d66
leaq 0x6d923(%rip), %rax     # 0x18e64a
testb $0x1, %cl
cmovneq %rax, %rdx
movb 0x1e(%rsp), %sil
leaq 0x5202c(%rip), %rcx     # 0x172d66
leaq 0x6d909(%rip), %rax     # 0x18e64a
testb $0x1, %sil
cmovneq %rax, %rcx
movq 0x30(%rsp), %rax
movq 0x10(%rax), %r8
leaq 0x68c35(%rip), %rsi     # 0x18998e
movb $0x0, %al
callq 0xb890
movq 0x93271(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
movb 0x1f(%rsp), %dl
movb 0x1e(%rsp), %al
movq 0x70(%rsp), %rcx
movq 0x30(%rsp), %rsi
movq 0x10(%rsi), %r8
andb $0x1, %dl
andb $0x1, %al
movzbl %dl, %esi
movzbl %al, %edx
callq 0x11f720
movl $0x2, %edi
callq 0xb780
jmp 0x120d9c
movq 0x28(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x28(%rsp)
jmp 0x120b49
movq 0x30(%rsp), %rdi
callq 0x1165d0
addq $0x78, %rsp
retq
nop