// File: /workspace/github_c_makefile_star2_O0/felipelouza[P]egap/tools/src/gsacak.c
// Function: compute_lcp_phi_sparse
void compute_lcp_phi_sparse(int_t *s, uint_t *SA1, 
  uint_t *RA, int_t *LCP, int_t *PLCP,
  uint_t n1, int cs, uint_t separator) {

  uint_t i;

  PLCP[SA1[0]]=0;//PLCP* (lms) is stored in PLCP array
  for(i=1; i<n1; i++)
    PLCP[SA1[i]] = LCP[i]; 

  LCP[SA1[0]]=0;//PHI is stored in LCP array
  for(i=1; i<n1; i++)
    LCP[SA1[i]] = SA1[i-1]; //RA[SA1[i-1]];

  int_t l=0; //q=0;
  for(i=0; i<n1-1;i++){
    if(chr(RA[i])==separator) continue;

    l = max(PLCP[i], l);//consider the LCP-value of the lms-substrings

    while(chr(RA[i]+l)==chr(RA[LCP[i]]+l) && !(chr(RA[i]+l) == separator && chr(RA[LCP[i]]+l)==separator) ) ++l;
    PLCP[i]=l;

    if(LCP[i]==n1-1) l -= RA[i+1]-RA[i];
    else l -= max(RA[i+1]-RA[i], RA[LCP[i]+1]-RA[LCP[i]]);//LCP[i] stores the distance of i-th suffix to its successor
  }

  LCP[0]=0;
  for(i=1; i<n1;i++) LCP[i]=PLCP[SA1[i]];

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq 0x18(%rbp), %rax
movl 0x10(%rbp), %eax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
movq $0x0, (%rax,%rcx,8)
movq $0x1, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x30(%rbp), %rax
jae 0x7dca
movq -0x20(%rbp), %rax
movq -0x38(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x38(%rbp), %rsi
movq (%rcx,%rsi,8), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x7d92
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
movq $0x0, (%rax,%rcx,8)
movq $0x1, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x30(%rbp), %rax
jae 0x7e21
movq -0x10(%rbp), %rax
movq -0x38(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rdx
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x38(%rbp), %rsi
movq (%rcx,%rsi,8), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x7de5
movq $0x0, -0x40(%rbp)
movq $0x0, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq -0x30(%rbp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jae 0x816b
movslq 0x10(%rbp), %rax
cmpq $0x8, %rax
jne 0x7e6a
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x48(%rbp)
jmp 0x7e82
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movzbl (%rax,%rcx), %eax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
cmpq 0x18(%rbp), %rax
jne 0x7e91
jmp 0x815a
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movq (%rax,%rcx,8), %rax
cmpq -0x40(%rbp), %rax
jle 0x7eb5
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x50(%rbp)
jmp 0x7ebd
movq -0x40(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x40(%rbp)
movslq 0x10(%rbp), %rax
cmpq $0x8, %rax
jne 0x7eed
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
addq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x58(%rbp)
jmp 0x7f09
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
addq -0x40(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x60(%rbp)
movslq 0x10(%rbp), %rax
cmpq $0x8, %rax
jne 0x7f41
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %rsi
movq (%rdx,%rsi,8), %rdx
movq (%rcx,%rdx,8), %rcx
addq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x68(%rbp)
jmp 0x7f65
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %rsi
movq (%rdx,%rsi,8), %rdx
movq (%rcx,%rdx,8), %rcx
addq -0x40(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rcx
movq -0x68(%rbp), %rdx
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, -0x69(%rbp)
jne 0x8041
movslq 0x10(%rbp), %rax
cmpq $0x8, %rax
jne 0x7fa3
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
addq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x78(%rbp)
jmp 0x7fbf
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
addq -0x40(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rcx
xorl %eax, %eax
cmpq 0x18(%rbp), %rcx
movb %al, -0x79(%rbp)
jne 0x8039
movslq 0x10(%rbp), %rax
cmpq $0x8, %rax
jne 0x8001
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %rsi
movq (%rdx,%rsi,8), %rdx
movq (%rcx,%rdx,8), %rcx
addq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x88(%rbp)
jmp 0x8028
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %rsi
movq (%rdx,%rsi,8), %rdx
movq (%rcx,%rdx,8), %rcx
addq -0x40(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
cmpq 0x18(%rbp), %rax
sete %al
movb %al, -0x79(%rbp)
movb -0x79(%rbp), %al
xorb $-0x1, %al
movb %al, -0x69(%rbp)
movb -0x69(%rbp), %al
testb $0x1, %al
jne 0x804a
jmp 0x805b
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x7ec5
movq -0x40(%rbp), %rdx
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x20(%rbp), %rax
movq -0x38(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x30(%rbp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jne 0x80ad
movq -0x18(%rbp), %rax
movq -0x38(%rbp), %rcx
movq 0x8(%rax,%rcx,8), %rcx
movq -0x18(%rbp), %rax
movq -0x38(%rbp), %rdx
subq (%rax,%rdx,8), %rcx
movq -0x40(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x40(%rbp)
jmp 0x8158
movq -0x18(%rbp), %rax
movq -0x38(%rbp), %rcx
movq 0x8(%rax,%rcx,8), %rax
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rdx
subq (%rcx,%rdx,8), %rax
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %rsi
movq (%rdx,%rsi,8), %rdx
movq 0x8(%rcx,%rdx,8), %rcx
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rsi
movq -0x38(%rbp), %rdi
movq (%rsi,%rdi,8), %rsi
subq (%rdx,%rsi,8), %rcx
cmpq %rcx, %rax
jbe 0x8116
movq -0x18(%rbp), %rax
movq -0x38(%rbp), %rcx
movq 0x8(%rax,%rcx,8), %rax
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rdx
subq (%rcx,%rdx,8), %rax
movq %rax, -0x90(%rbp)
jmp 0x8146
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rcx
movq -0x38(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movq 0x8(%rax,%rcx,8), %rax
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %rsi
movq (%rdx,%rsi,8), %rdx
subq (%rcx,%rdx,8), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rcx
movq -0x40(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x40(%rbp)
jmp 0x815a
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x7e31
movq -0x20(%rbp), %rax
movq $0x0, (%rax)
movq $0x1, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x30(%rbp), %rax
jae 0x81b6
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x38(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movq (%rax,%rcx,8), %rdx
movq -0x20(%rbp), %rax
movq -0x38(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x817e
addq $0x10, %rsp
popq %rbp
retq
nopl (%rax)