// File: /workspace/github_c_makefile_star2_O2/genometools[P]genometools/src/external/md5-1.2/src/md5.c
// Function: md5
void md5 (const char *message, long len, char *output) {
  WORD32 d[4];
  int status = 0;
  long i = 0;
  inic_digest(d);
  while (status != 2) {
    WORD32 d_old[4];
    WORD32 wbuff[16];
    int numbytes = (len-i >= 64) ? 64 : len-i;
    /*salva os valores do vetor digest*/
    d_old[0]=d[0]; d_old[1]=d[1]; d_old[2]=d[2]; d_old[3]=d[3];
    status = converte(wbuff, message+i, numbytes, status);
    if (status == 2) put_length(wbuff, len);
    digest(wbuff, d);
    d[0]+=d_old[0]; d[1]+=d_old[1]; d[2]+=d_old[2]; d[3]+=d_old[3];
    i += numbytes;
  }
  word32tobytes(d, output);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq %rdx, 0x60(%rsp)
movq %rdi, 0x70(%rsp)
leal (,%rsi,8), %eax
movl %eax, 0xc(%rsp)
movq %rsi, 0x68(%rsp)
movl %esi, %eax
shrl $0x1d, %eax
movl %eax, 0x8(%rsp)
xorl %ecx, %ecx
movl $0x67452301, %r12d      # imm = 0x67452301
movl $0xefcdab89, %r13d      # imm = 0xEFCDAB89
movl $0x98badcfe, %ebp       # imm = 0x98BADCFE
movl $0x10325476, 0x4(%rsp)  # imm = 0x10325476
pushq $0x2
popq %r15
leaq 0x17a35e(%rip), %r14    # 0x369310
xorl %edx, %edx
cmpl $0x2, %edx
je 0x1ef35a
movl %r12d, %ebx
movl %r13d, %r12d
movq 0x68(%rsp), %rdi
subq %rcx, %rdi
cmpq $0x40, %rdi
pushq $0x40
popq %rax
cmovgeq %rax, %rdi
movq 0x70(%rsp), %rax
leaq (%rax,%rcx), %rsi
cmpl $0x3f, %edi
movq %rdi, 0x18(%rsp)
movq %rcx, 0x78(%rsp)
jg 0x1ef051
movl %ebp, 0x14(%rsp)
movslq %edi, %rbp
leaq 0x80(%rsp), %r15
movq %r15, %rdi
movl %edx, 0x10(%rsp)
movq %rbp, %rdx
callq 0x17630
leaq (%rsp,%rbp), %r13
addq $0x80, %r13
pushq $0x40
popq %rax
movl %eax, %edx
subl %ebp, %edx
movl 0x14(%rsp), %ebp
movq %r13, %rdi
xorl %esi, %esi
callq 0x17380
movq 0x18(%rsp), %rdi
movq %r15, %rsi
pushq $0x2
popq %r15
cmpl $0x0, 0x10(%rsp)
pushq $0x1
popq %rdx
jne 0x1ef053
movb $-0x80, (%r13)
leaq 0x80(%rsp), %rsi
jmp 0x1ef053
xorl %edx, %edx
xorl %eax, %eax
movl %r12d, %r13d
movl %ebx, %r12d
cmpq $0x10, %rax
je 0x1ef06d
movl (%rsi,%rax,4), %ecx
movl %ecx, 0x20(%rsp,%rax,4)
incq %rax
jmp 0x1ef05b
cmpl $0x38, %edi
cmovll %r15d, %edx
movl %edx, %ebx
jge 0x1ef088
movl 0xc(%rsp), %eax
movl %eax, 0x58(%rsp)
movl 0x8(%rsp), %eax
movl %eax, 0x5c(%rsp)
xorl %esi, %esi
movl 0x4(%rsp), %eax
movl %ebp, %ecx
movl %r13d, %edx
movl %r12d, %r9d
cmpq $0x10, %rsi
jae 0x1ef114
movl %ecx, %edi
xorl %eax, %edi
andl %edx, %edi
xorl %eax, %edi
addl %r9d, %edi
addl 0x20(%rsp,%rsi,4), %edi
addl (%r14,%rsi,4), %edi
roll $0x7, %edi
addl %edx, %edi
movl %edx, %r8d
xorl %ecx, %r8d
andl %edi, %r8d
addl 0x24(%rsp,%rsi,4), %eax
addl 0x4(%r14,%rsi,4), %eax
xorl %ecx, %r8d
addl %r8d, %eax
roll $0xc, %eax
addl %edi, %eax
movl %edi, %r8d
xorl %edx, %r8d
andl %eax, %r8d
addl 0x28(%rsp,%rsi,4), %ecx
addl 0x8(%r14,%rsi,4), %ecx
xorl %edx, %r8d
addl %r8d, %ecx
roll $0x11, %ecx
addl %eax, %ecx
movl %eax, %r8d
xorl %edi, %r8d
andl %ecx, %r8d
addl 0x2c(%rsp,%rsi,4), %edx
addl 0xc(%r14,%rsi,4), %edx
xorl %edi, %r8d
addl %r8d, %edx
roll $0x16, %edx
addl %ecx, %edx
addq $0x4, %rsi
movl %edi, %r9d
jmp 0x1ef096
pushq $0xa
popq %rsi
xorl %edi, %edi
cmpq $0x10, %rdi
jae 0x1ef1c5
movl %edx, %r8d
xorl %ecx, %r8d
andl %eax, %r8d
xorl %ecx, %r8d
leal -0xa(%rsi), %r10d
andl $0xc, %r10d
addl %r9d, %r8d
addl 0x24(%rsp,%r10,4), %r8d
addl 0x40(%r14,%rdi,4), %r8d
roll $0x5, %r8d
addl %edx, %r8d
movl %r8d, %r9d
xorl %edx, %r9d
andl %ecx, %r9d
leal -0x4(%rsi), %r11d
andl $0xe, %r11d
addl 0x20(%rsp,%r11,4), %eax
xorl %edx, %r9d
addl 0x44(%r14,%rdi,4), %eax
addl %r9d, %eax
roll $0x9, %eax
addl %r8d, %eax
movl %eax, %r9d
xorl %r8d, %r9d
andl %edx, %r9d
movl %esi, %r11d
andl $0xe, %r11d
addl 0x24(%rsp,%r11,4), %ecx
addl 0x48(%r14,%rdi,4), %ecx
xorl %r8d, %r9d
addl %r9d, %ecx
roll $0xe, %ecx
addl %eax, %ecx
movl %ecx, %r9d
xorl %eax, %r9d
andl %r8d, %r9d
addl 0x20(%rsp,%r10,4), %edx
addl 0x4c(%r14,%rdi,4), %edx
xorl %eax, %r9d
addl %r9d, %edx
roll $0x14, %edx
addl %ecx, %edx
addq $0x4, %rdi
addq $0x14, %rsi
movl %r8d, %r9d
jmp 0x1ef119
pushq $0xe
popq %rsi
xorl %edi, %edi
cmpq $0x10, %rdi
jae 0x1ef27c
movl %edx, %r10d
xorl %ecx, %r10d
movl %r10d, %r8d
xorl %eax, %r8d
addl %r9d, %r8d
leal -0x9(%rsi), %r9d
andl $0xd, %r9d
addl 0x20(%rsp,%r9,4), %r8d
addl 0x80(%r14,%rdi,4), %r8d
leal -0xe(%rsi), %r9d
roll $0x4, %r8d
addl %edx, %r8d
andl $0xc, %r9d
xorl $0x8, %r9d
addl 0x20(%rsp,%r9,4), %eax
xorl %r8d, %r10d
addl 0x84(%r14,%rdi,4), %eax
addl %r10d, %eax
roll $0xb, %eax
addl %r8d, %eax
movl %eax, %r9d
xorl %r8d, %r9d
movl %r9d, %r10d
leal -0x3(%rsi), %r11d
andl $0xf, %r11d
addl 0x20(%rsp,%r11,4), %ecx
addl 0x88(%r14,%rdi,4), %ecx
xorl %edx, %r10d
addl %r10d, %ecx
roll $0x10, %ecx
addl %eax, %ecx
movl %esi, %r10d
andl $0xe, %r10d
addl 0x20(%rsp,%r10,4), %edx
addl 0x8c(%r14,%rdi,4), %edx
xorl %ecx, %r9d
addl %r9d, %edx
roll $0x17, %edx
addl %ecx, %edx
addq $0x4, %rdi
addq $0xc, %rsi
movl %r8d, %r9d
jmp 0x1ef1ca
xorl %esi, %esi
xorl %r8d, %r8d
cmpq $0xf, %r8
ja 0x1ef33a
movl %eax, %edi
notl %edi
orl %edx, %edi
xorl %ecx, %edi
addl %r9d, %edi
movl %esi, %r9d
andl $0xc, %r9d
addl 0x20(%rsp,%r9,4), %edi
addl 0xc0(%r14,%r8,4), %edi
roll $0x6, %edi
addl %edx, %edi
movl %ecx, %r9d
notl %r9d
orl %edi, %r9d
leal 0x7(%rsi), %r10d
andl $0xf, %r10d
addl 0x20(%rsp,%r10,4), %eax
addl 0xc4(%r14,%r8,4), %eax
xorl %edx, %r9d
addl %r9d, %eax
roll $0xa, %eax
addl %edi, %eax
movl %edx, %r9d
notl %r9d
orl %eax, %r9d
leal 0xe(%rsi), %r10d
andl $0xe, %r10d
addl 0x20(%rsp,%r10,4), %ecx
xorl %edi, %r9d
addl 0xc8(%r14,%r8,4), %ecx
addl %r9d, %ecx
roll $0xf, %ecx
addl %eax, %ecx
movl %edi, %r9d
notl %r9d
orl %ecx, %r9d
leal 0x5(%rsi), %r10d
andl $0xd, %r10d
addl 0x20(%rsp,%r10,4), %edx
addl 0xcc(%r14,%r8,4), %edx
xorl %eax, %r9d
addl %r9d, %edx
roll $0x15, %edx
addl %ecx, %edx
addq $0x4, %r8
addq $0x1c, %rsi
movl %edi, %r9d
jmp 0x1ef281
addl %edi, %r12d
addl %edx, %r13d
addl %ecx, %ebp
addl %eax, 0x4(%rsp)
movslq 0x18(%rsp), %rax
movq 0x78(%rsp), %rcx
addq %rax, %rcx
movl %ebx, %edx
jmp 0x1eefb4
movl %r12d, 0x80(%rsp)
movl %r13d, 0x84(%rsp)
movl %ebp, 0x88(%rsp)
movl 0x4(%rsp), %eax
movl %eax, 0x8c(%rsp)
xorl %eax, %eax
movq 0x60(%rsp), %rdx
cmpq $0xf, %rax
ja 0x1ef399
movl 0x80(%rsp,%rax), %ecx
movl %ecx, (%rdx,%rax)
addq $0x4, %rax
jmp 0x1ef383
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop