// File: /workspace/github_c_makefile_star2_O0/richarddurbin[P]hash10x/seqhash.c
// Function: minimizerRCiterator
SeqhashRCiterator *minimizerRCiterator (Seqhash *sh, char *s, int len)
{
  assert (s && len >= 0) ;
  SeqhashRCiterator *mi = (SeqhashRCiterator*) mycalloc (sizeof(SeqhashRCiterator), 1) ;
  mi->sh = sh ;
  mi->s = s ; mi->sEnd = s + len ;
  mi->hashBuf = new0 (sh->w, U64) ;
  mi->fBuf = new0 (sh->w, BOOL) ;
  if (len < sh->k) { mi->isDone = TRUE ; return mi ; } /* edge case */

  int i ;			/* preinitialise the hashes for the first kmer */
  for (i = 0 ; i < sh->k ; ++i, ++mi->s)
    { mi->h = (mi->h << 2) | *mi->s ;
      mi->hRC = (mi->hRC >> 2) | sh->patternRC[*(mi->s)] ;
    }
  
  /* store first w hashes in hashBuf and set ->iMin */
  U64 min = hashRC (mi, mi->fBuf) ;
  mi->iMin = 0 ;
  for (i = 1 ; i < sh->w ; ++i, ++mi->s)
    { mi->hashBuf[i] = advanceHashRC (mi, &mi->fBuf[i]) ;
      if (mi->hashBuf[i] < min) { min = mi->hashBuf[i] ; mi->iMin = i ; }
    }

  return mi ;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %edx, -0x1c(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x4622
cmpl $0x0, -0x1c(%rbp)
jl 0x4622
jmp 0x4641
leaq 0x543b(%rip), %rdi      # 0x9a64
leaq 0x5442(%rip), %rsi      # 0x9a72
movl $0x56, %edx
leaq 0x5440(%rip), %rcx      # 0x9a7c
callq 0x10c0
movl $0x48, %edi
movl $0x1, %esi
callq 0x82b0
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rcx
movslq -0x1c(%rbp), %rax
addq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x10(%rbp), %rax
movslq 0x4(%rax), %rdi
movl $0x8, %esi
callq 0x82b0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movslq 0x4(%rax), %rdi
movl $0x1, %esi
callq 0x82b0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x30(%rax)
movl -0x1c(%rbp), %eax
movq -0x10(%rbp), %rcx
cmpl (%rcx), %eax
jge 0x46d8
movq -0x28(%rbp), %rax
movb $0x1, 0x44(%rax)
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x480b
movl $0x0, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movq -0x10(%rbp), %rcx
cmpl (%rcx), %eax
jge 0x4751
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rcx
shlq $0x2, %rcx
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movsbq (%rax), %rax
orq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
shrq $0x2, %rcx
movq -0x10(%rbp), %rax
movq -0x28(%rbp), %rdx
movq 0x8(%rdx), %rdx
movsbq (%rdx), %rdx
orq 0x28(%rax,%rdx,8), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x20(%rax)
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
jmp 0x46df
movq -0x28(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rsi
callq 0x4820
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rax
movl $0x0, 0x40(%rax)
movl $0x1, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movq -0x10(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jge 0x4803
movq -0x28(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rsi
movslq -0x2c(%rbp), %rax
addq %rax, %rsi
callq 0x48a0
movq %rax, %rdx
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movslq -0x2c(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movslq -0x2c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
cmpq -0x38(%rbp), %rax
jae 0x47e3
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movslq -0x2c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x38(%rbp)
movl -0x2c(%rbp), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x40(%rax)
jmp 0x47e5
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
jmp 0x4778
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)