// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/golomb.c
// Function: gt_golomb_bitwise_decoder_next
int gt_golomb_bitwise_decoder_next(GtGolombBitwiseDecoder *gbwd,
                                   bool bit, GtUword *x)
{
  gt_assert(gbwd);
  if (gbwd->status == IN_Q) {
    if (bit)
      gbwd->quotient += 1;
    else
      gbwd->status = REMAINDER;
    return 1;
  }
  else if (gbwd->status == REMAINDER) {
    gbwd->remain = gbwd->remain << 1;
    if (bit)
      gbwd->remain = gbwd->remain | 1;
    gbwd->cur_r_bit++;

    if (gbwd->len == 0) {
      *x = gbwd->quotient * gbwd->median + gbwd->remain;
      gbwd->status = IN_Q;
      gbwd->quotient = 0;
      gbwd->remain = 0;
      gbwd->cur_r_bit = 0;
      return 0;
    }
    else if (gbwd->cur_r_bit == gbwd->len - 1) {
      if (gbwd->remain < GT_POW2(gbwd->len) - gbwd->median) {
        *x = gbwd->quotient * gbwd->median + gbwd->remain;
        gbwd->status = IN_Q;
        gbwd->quotient = 0;
        gbwd->remain = 0;
        gbwd->cur_r_bit = 0;
        return 0;
      }
      else
        return 1;
    }
    else if (gbwd->cur_r_bit == gbwd->len) {
      gbwd->remain -= ((GT_POW2(gbwd->len)) - gbwd->median);
      *x = gbwd->quotient * gbwd->median + gbwd->remain;
      gbwd->status = IN_Q;
      gbwd->quotient = 0;
      gbwd->remain = 0;
      gbwd->cur_r_bit = 0;
      return 0;
    }
    return 1;
  }
  return -1;
}

// Assembly:
subq $0x28, %rsp
movb %sil, %al
movq %rdi, 0x18(%rsp)
andb $0x1, %al
movb %al, 0x17(%rsp)
movq %rdx, 0x8(%rsp)
cmpq $0x0, 0x18(%rsp)
jne 0x181757
movq 0x4ba87a(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x3948e3(%rip), %rsi    # 0x516013
leaq 0x3d2e3e(%rip), %rdx    # 0x554575
leaq 0x3d2e3c(%rip), %rcx    # 0x55457a
leaq 0x3d2dd4(%rip), %r8     # 0x554519
movl $0x82, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x181759
movq 0x18(%rsp), %rax
cmpl $0x0, 0x30(%rax)
jne 0x181797
testb $0x1, 0x17(%rsp)
je 0x18177e
movq 0x18(%rsp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
jmp 0x18178a
movq 0x18(%rsp), %rax
movl $0x1, 0x30(%rax)
movl $0x1, 0x24(%rsp)
jmp 0x1819ca
movq 0x18(%rsp), %rax
cmpl $0x1, 0x30(%rax)
jne 0x1819c0
movq 0x18(%rsp), %rax
movq 0x18(%rax), %rcx
shlq %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0x18(%rax)
testb $0x1, 0x17(%rsp)
je 0x1817d8
movq 0x18(%rsp), %rax
movq 0x18(%rax), %rcx
orq $0x1, %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0x18(%rax)
movq 0x18(%rsp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq 0x18(%rsp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x181858
movq 0x18(%rsp), %rax
movq 0x10(%rax), %rcx
movq 0x18(%rsp), %rax
imulq (%rax), %rcx
movq 0x18(%rsp), %rax
addq 0x18(%rax), %rcx
movq 0x8(%rsp), %rax
movq %rcx, (%rax)
movq 0x18(%rsp), %rax
movl $0x0, 0x30(%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x10(%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x18(%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x8(%rax)
movl $0x0, 0x24(%rsp)
jmp 0x1819ca
movq 0x18(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rsp), %rcx
movq 0x20(%rcx), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jne 0x181911
movq 0x18(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x18(%rsp), %rcx
movq 0x20(%rcx), %rcx
movl $0x1, %edx
shlq %cl, %rdx
movq %rdx, %rcx
movq 0x18(%rsp), %rdx
subq (%rdx), %rcx
cmpq %rcx, %rax
jae 0x181904
movq 0x18(%rsp), %rax
movq 0x10(%rax), %rcx
movq 0x18(%rsp), %rax
imulq (%rax), %rcx
movq 0x18(%rsp), %rax
addq 0x18(%rax), %rcx
movq 0x8(%rsp), %rax
movq %rcx, (%rax)
movq 0x18(%rsp), %rax
movl $0x0, 0x30(%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x10(%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x18(%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x8(%rax)
movl $0x0, 0x24(%rsp)
jmp 0x1819ca
movl $0x1, 0x24(%rsp)
jmp 0x1819ca
movq 0x18(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rsp), %rcx
cmpq 0x20(%rcx), %rax
jne 0x1819b2
movq 0x18(%rsp), %rax
movq 0x20(%rax), %rcx
movl $0x1, %edx
shlq %cl, %rdx
movq 0x18(%rsp), %rax
subq (%rax), %rdx
movq 0x18(%rsp), %rax
movq 0x18(%rax), %rcx
subq %rdx, %rcx
movq %rcx, 0x18(%rax)
movq 0x18(%rsp), %rax
movq 0x10(%rax), %rcx
movq 0x18(%rsp), %rax
imulq (%rax), %rcx
movq 0x18(%rsp), %rax
addq 0x18(%rax), %rcx
movq 0x8(%rsp), %rax
movq %rcx, (%rax)
movq 0x18(%rsp), %rax
movl $0x0, 0x30(%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x10(%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x18(%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x8(%rax)
movl $0x0, 0x24(%rsp)
jmp 0x1819ca
jmp 0x1819b4
jmp 0x1819b6
movl $0x1, 0x24(%rsp)
jmp 0x1819ca
jmp 0x1819c2
movl $0xffffffff, 0x24(%rsp) # imm = 0xFFFFFFFF
movl 0x24(%rsp), %eax
addq $0x28, %rsp
retq
nopw %cs:(%rax,%rax)