// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/core/encseq.c
// Function: gt_encseq_compare_pairof_twobitencodings
int gt_encseq_compare_pairof_twobitencodings(bool fwd,
                                             bool complement,
                                             GtCommonunits *commonunits,
                                             const GtEndofTwobitencoding *ptbe1,
                                             const GtEndofTwobitencoding *ptbe2)
{
  GtTwobitencoding mask;

  if (ptbe1->unitsnotspecial < ptbe2->unitsnotspecial)
      /* GT_ISSPECIAL(seq1[ptbe1.unitsnotspecial]) &&
         GT_ISNOTSPECIAL(seq2[ptbe2.unitsnotspecial]) */ {
    GtTwobitencoding tbe1, tbe2;

    mask = GT_ENCSEQ_MASKEND(fwd, ptbe1->unitsnotspecial);
    tbe1 = ptbe1->tbe & mask;
    tbe2 = ptbe2->tbe & mask;
    if (tbe1 == tbe2) {
      gt_assert(ptbe1->unitsnotspecial < (unsigned int) GT_UNITSIN2BITENC &&
                commonunits != NULL);
      commonunits->common = ptbe1->unitsnotspecial;
      commonunits->leftspecial = true;
      commonunits->rightspecial = false;
      return 1;
    }
    return gt_encseq_compare_pairof_different_twobitencodings(fwd, complement,
                                                              commonunits,
                                                              tbe1, tbe2);
  }
  if (ptbe1->unitsnotspecial > ptbe2->unitsnotspecial)
     /* GT_ISSPECIAL(seq2[ptbe2->unitsnotspecial]) &&
        GT_ISNOTSPECIAL(seq1[ptbe2NOT->unitsnotspecial]) */ {
    GtTwobitencoding tbe1, tbe2;

    mask = GT_ENCSEQ_MASKEND(fwd, ptbe2->unitsnotspecial);
    tbe1 = ptbe1->tbe & mask;
    tbe2 = ptbe2->tbe & mask;
    if (tbe1 == tbe2) {
      gt_assert(ptbe2->unitsnotspecial < (unsigned int) GT_UNITSIN2BITENC &&
                commonunits != NULL);
      commonunits->common = ptbe2->unitsnotspecial;
      commonunits->leftspecial = false;
      commonunits->rightspecial = true;
      return -1;
    }
    return gt_encseq_compare_pairof_different_twobitencodings(fwd, complement,
                                                              commonunits,
                                                              tbe1, tbe2);
  }
  gt_assert(ptbe1->unitsnotspecial == ptbe2->unitsnotspecial);
  if (ptbe1->unitsnotspecial < (unsigned int) GT_UNITSIN2BITENC) {
    GtTwobitencoding tbe1, tbe2;

    mask = GT_ENCSEQ_MASKEND(fwd, ptbe1->unitsnotspecial);
    tbe1 = ptbe1->tbe & mask;
    tbe2 = ptbe2->tbe & mask;
    if (tbe1 == tbe2) {
      gt_assert(commonunits != NULL);
      commonunits->common = ptbe1->unitsnotspecial;
      commonunits->leftspecial = commonunits->rightspecial = true;
      return (ptbe1->referstartpos < ptbe2->referstartpos)
                ? -1
                : ((ptbe1->referstartpos > ptbe2->referstartpos) ? 1 : 0);
    }
    return gt_encseq_compare_pairof_different_twobitencodings(fwd, complement,
                                                              commonunits,
                                                              tbe1, tbe2);
  }
  gt_assert(ptbe1->unitsnotspecial == (unsigned int) GT_UNITSIN2BITENC &&
            ptbe2->unitsnotspecial == (unsigned int) GT_UNITSIN2BITENC);
  if (ptbe1->tbe != ptbe2->tbe) {
    return gt_encseq_compare_pairof_different_twobitencodings(fwd, complement,
                                                              commonunits,
                                                              ptbe1->tbe,
                                                              ptbe2->tbe);
  }
  gt_assert(commonunits != NULL);
  commonunits->common = (unsigned int) GT_UNITSIN2BITENC;
  commonunits->leftspecial = commonunits->rightspecial = false;
  return 0;
}

// Assembly:
subq $0x98, %rsp
movb %sil, %al
movb %dil, %sil
andb $0x1, %sil
movb %sil, 0x93(%rsp)
andb $0x1, %al
movb %al, 0x92(%rsp)
movq %rdx, 0x88(%rsp)
movq %rcx, 0x80(%rsp)
movq %r8, 0x78(%rsp)
movq 0x80(%rsp), %rax
movl 0x8(%rax), %eax
movq 0x78(%rsp), %rcx
cmpl 0x8(%rcx), %eax
jae 0x11e7dc
movq 0x80(%rsp), %rax
cmpl $0x0, 0x8(%rax)
jne 0x11e667
xorl %eax, %eax
movq %rax, 0x38(%rsp)
jmp 0x11e6ca
testb $0x1, 0x93(%rsp)
je 0x11e69e
movq 0x80(%rsp), %rcx
movl $0x20, %eax
subl 0x8(%rcx), %eax
shll %eax
movl %eax, %eax
movl %eax, %ecx
movl $0x1, %eax
shlq %cl, %rax
subq $0x1, %rax
xorq $-0x1, %rax
movq %rax, 0x30(%rsp)
jmp 0x11e6c0
movq 0x80(%rsp), %rax
movl 0x8(%rax), %eax
shll %eax
movl %eax, %eax
movl %eax, %ecx
movl $0x1, %eax
shlq %cl, %rax
subq $0x1, %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x80(%rsp), %rax
movq (%rax), %rax
andq 0x70(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x78(%rsp), %rax
movq (%rax), %rax
andq 0x70(%rsp), %rax
movq %rax, 0x60(%rsp)
movq 0x68(%rsp), %rax
cmpq 0x60(%rsp), %rax
jne 0x11e79d
jmp 0x11e70d
movq 0x80(%rsp), %rax
cmpl $0x20, 0x8(%rax)
jae 0x11e726
cmpq $0x0, 0x88(%rsp)
jne 0x11e75e
movq 0x958ab(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x3f92f(%rip), %rsi     # 0x15e066
leaq 0x68088(%rip), %rdx     # 0x1867c6
leaq 0x680d2(%rip), %rcx     # 0x186817
leaq 0x66f12(%rip), %r8      # 0x18565e
movl $0x194d, %r9d           # imm = 0x194D
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x11e760
movq 0x80(%rsp), %rax
movl 0x8(%rax), %ecx
movq 0x88(%rsp), %rax
movl %ecx, (%rax)
movq 0x88(%rsp), %rax
movb $0x1, 0x4(%rax)
movq 0x88(%rsp), %rax
movb $0x0, 0x5(%rax)
movl $0x1, 0x94(%rsp)
jmp 0x11ecc2
movb 0x93(%rsp), %sil
movb 0x92(%rsp), %al
movq 0x88(%rsp), %rdx
movq 0x68(%rsp), %rcx
movq 0x60(%rsp), %r8
andb $0x1, %sil
andb $0x1, %al
movzbl %sil, %edi
movzbl %al, %esi
callq 0x11e250
movl %eax, 0x94(%rsp)
jmp 0x11ecc2
movq 0x80(%rsp), %rax
movl 0x8(%rax), %eax
movq 0x78(%rsp), %rcx
cmpl 0x8(%rcx), %eax
jbe 0x11e972
movq 0x78(%rsp), %rax
cmpl $0x0, 0x8(%rax)
jne 0x11e809
xorl %eax, %eax
movq %rax, 0x28(%rsp)
jmp 0x11e866
testb $0x1, 0x93(%rsp)
je 0x11e83d
movq 0x78(%rsp), %rcx
movl $0x20, %eax
subl 0x8(%rcx), %eax
shll %eax
movl %eax, %eax
movl %eax, %ecx
movl $0x1, %eax
shlq %cl, %rax
subq $0x1, %rax
xorq $-0x1, %rax
movq %rax, 0x20(%rsp)
jmp 0x11e85c
movq 0x78(%rsp), %rax
movl 0x8(%rax), %eax
shll %eax
movl %eax, %eax
movl %eax, %ecx
movl $0x1, %eax
shlq %cl, %rax
subq $0x1, %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x80(%rsp), %rax
movq (%rax), %rax
andq 0x70(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x78(%rsp), %rax
movq (%rax), %rax
andq 0x70(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x58(%rsp), %rax
cmpq 0x50(%rsp), %rax
jne 0x11e933
jmp 0x11e8a9
movq 0x78(%rsp), %rax
cmpl $0x20, 0x8(%rax)
jae 0x11e8bf
cmpq $0x0, 0x88(%rsp)
jne 0x11e8f7
movq 0x95712(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x3f796(%rip), %rsi     # 0x15e066
leaq 0x67f69(%rip), %rdx     # 0x186840
leaq 0x67f39(%rip), %rcx     # 0x186817
leaq 0x66d79(%rip), %r8      # 0x18565e
movl $0x1961, %r9d           # imm = 0x1961
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x11e8f9
movq 0x78(%rsp), %rax
movl 0x8(%rax), %ecx
movq 0x88(%rsp), %rax
movl %ecx, (%rax)
movq 0x88(%rsp), %rax
movb $0x0, 0x4(%rax)
movq 0x88(%rsp), %rax
movb $0x1, 0x5(%rax)
movl $0xffffffff, 0x94(%rsp) # imm = 0xFFFFFFFF
jmp 0x11ecc2
movb 0x93(%rsp), %sil
movb 0x92(%rsp), %al
movq 0x88(%rsp), %rdx
movq 0x58(%rsp), %rcx
movq 0x50(%rsp), %r8
andb $0x1, %sil
andb $0x1, %al
movzbl %sil, %edi
movzbl %al, %esi
callq 0x11e250
movl %eax, 0x94(%rsp)
jmp 0x11ecc2
jmp 0x11e974
movq 0x80(%rsp), %rax
movl 0x8(%rax), %eax
movq 0x78(%rsp), %rcx
cmpl 0x8(%rcx), %eax
je 0x11e9c1
movq 0x95648(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x3f6cc(%rip), %rsi     # 0x15e066
leaq 0x67ef0(%rip), %rdx     # 0x186891
leaq 0x67e6f(%rip), %rcx     # 0x186817
leaq 0x66caf(%rip), %r8      # 0x18565e
movl $0x196b, %r9d           # imm = 0x196B
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x11e9c3
movq 0x80(%rsp), %rax
cmpl $0x20, 0x8(%rax)
jae 0x11eb9b
movq 0x80(%rsp), %rax
cmpl $0x0, 0x8(%rax)
jne 0x11e9ec
xorl %eax, %eax
movq %rax, 0x18(%rsp)
jmp 0x11ea4f
testb $0x1, 0x93(%rsp)
je 0x11ea23
movq 0x80(%rsp), %rcx
movl $0x20, %eax
subl 0x8(%rcx), %eax
shll %eax
movl %eax, %eax
movl %eax, %ecx
movl $0x1, %eax
shlq %cl, %rax
subq $0x1, %rax
xorq $-0x1, %rax
movq %rax, 0x10(%rsp)
jmp 0x11ea45
movq 0x80(%rsp), %rax
movl 0x8(%rax), %eax
shll %eax
movl %eax, %eax
movl %eax, %ecx
movl $0x1, %eax
shlq %cl, %rax
subq $0x1, %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x80(%rsp), %rax
movq (%rax), %rax
andq 0x70(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x78(%rsp), %rax
movq (%rax), %rax
andq 0x70(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x48(%rsp), %rax
cmpq 0x40(%rsp), %rax
jne 0x11eb5c
jmp 0x11ea92
cmpq $0x0, 0x88(%rsp)
jne 0x11ead5
movq 0x95534(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x3f5b8(%rip), %rsi     # 0x15e066
leaq 0x67d4e(%rip), %rdx     # 0x186803
leaq 0x67d5b(%rip), %rcx     # 0x186817
leaq 0x66b9b(%rip), %r8      # 0x18565e
movl $0x1973, %r9d           # imm = 0x1973
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x11ead7
movq 0x80(%rsp), %rax
movl 0x8(%rax), %ecx
movq 0x88(%rsp), %rax
movl %ecx, (%rax)
movq 0x88(%rsp), %rax
movb $0x1, 0x5(%rax)
movq 0x88(%rsp), %rax
movb $0x1, 0x4(%rax)
movq 0x80(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x78(%rsp), %rcx
cmpq 0x10(%rcx), %rax
jae 0x11eb26
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movl %eax, 0xc(%rsp)
jmp 0x11eb4c
movq 0x80(%rsp), %rax
movq 0x10(%rax), %rdx
movq 0x78(%rsp), %rax
movq 0x10(%rax), %rsi
xorl %eax, %eax
movl $0x1, %ecx
cmpq %rsi, %rdx
cmoval %ecx, %eax
movl %eax, 0xc(%rsp)
movl 0xc(%rsp), %eax
movl %eax, 0x94(%rsp)
jmp 0x11ecc2
movb 0x93(%rsp), %sil
movb 0x92(%rsp), %al
movq 0x88(%rsp), %rdx
movq 0x48(%rsp), %rcx
movq 0x40(%rsp), %r8
andb $0x1, %sil
andb $0x1, %al
movzbl %sil, %edi
movzbl %al, %esi
callq 0x11e250
movl %eax, 0x94(%rsp)
jmp 0x11ecc2
jmp 0x11eb9d
movq 0x80(%rsp), %rax
cmpl $0x20, 0x8(%rax)
jne 0x11ebb6
movq 0x78(%rsp), %rax
cmpl $0x20, 0x8(%rax)
je 0x11ebee
movq 0x9541b(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x3f49f(%rip), %rsi     # 0x15e066
leaq 0x67cf4(%rip), %rdx     # 0x1868c2
leaq 0x67c42(%rip), %rcx     # 0x186817
leaq 0x66a82(%rip), %r8      # 0x18565e
movl $0x197f, %r9d           # imm = 0x197F
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x11ebf0
movq 0x80(%rsp), %rax
movq (%rax), %rax
movq 0x78(%rsp), %rcx
cmpq (%rcx), %rax
je 0x11ec4a
movb 0x93(%rsp), %sil
movb 0x92(%rsp), %al
movq 0x88(%rsp), %rdx
movq 0x80(%rsp), %rcx
movq (%rcx), %rcx
movq 0x78(%rsp), %rdi
movq (%rdi), %r8
andb $0x1, %sil
andb $0x1, %al
movzbl %sil, %edi
movzbl %al, %esi
callq 0x11e250
movl %eax, 0x94(%rsp)
jmp 0x11ecc2
jmp 0x11ec4c
cmpq $0x0, 0x88(%rsp)
jne 0x11ec8f
movq 0x9537a(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x3f3fe(%rip), %rsi     # 0x15e066
leaq 0x67b94(%rip), %rdx     # 0x186803
leaq 0x67ba1(%rip), %rcx     # 0x186817
leaq 0x669e1(%rip), %r8      # 0x18565e
movl $0x1986, %r9d           # imm = 0x1986
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x11ec91
movq 0x88(%rsp), %rax
movl $0x20, (%rax)
movq 0x88(%rsp), %rax
movb $0x0, 0x5(%rax)
movq 0x88(%rsp), %rax
movb $0x0, 0x4(%rax)
movl $0x0, 0x94(%rsp)
movl 0x94(%rsp), %eax
addq $0x98, %rsp
retq
nopw %cs:(%rax,%rax)