// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/core/md5_encoder.c
// Function: gt_md5_encoder_finish
void gt_md5_encoder_finish(GtMD5Encoder *enc, unsigned char *output,
                           char *outstr)
{
  gt_assert(enc && output);
  if (enc->status != 2) {
    if (enc->len > 0) {
      digest(enc->wbuff, enc->d);
      enc->d[0]+=enc->d_old[0]; enc->d[1]+=enc->d_old[1];
      enc->d[2]+=enc->d_old[2]; enc->d[3]+=enc->d_old[3];
    }
    enc->d_old[0]=enc->d[0]; enc->d_old[1]=enc->d[1];
    enc->d_old[2]=enc->d[2]; enc->d_old[3]=enc->d[3];
    enc->status = converte(enc->wbuff, NULL, 0, enc->status);
    gt_assert(enc->status == 2);
  }
  put_length(enc->wbuff, enc->len);
  digest(enc->wbuff, enc->d);
  enc->d[0]+=enc->d_old[0]; enc->d[1]+=enc->d_old[1];
  enc->d[2]+=enc->d_old[2]; enc->d[3]+=enc->d_old[3];
  word32tobytes(enc->d, (char*) output);
  if (outstr) {
    snprintf(outstr, 33,
             "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
             output[0], output[1], output[2], output[3], output[4], output[5],
             output[6], output[7], output[8], output[9], output[10], output[11],
             output[12], output[13], output[14], output[15]);
  }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %rdi, 0x90(%rsp)
movq %rsi, 0x88(%rsp)
movq %rdx, 0x80(%rsp)
cmpq $0x0, 0x90(%rsp)
je 0x14897f
cmpq $0x0, 0x88(%rsp)
jne 0x1489b7
movq 0x6b652(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x156d6(%rip), %rsi     # 0x15e066
leaq 0x43dcc(%rip), %rdx     # 0x18c763
leaq 0x43dd3(%rip), %rcx     # 0x18c771
leaq 0x43d5e(%rip), %r8      # 0x18c703
movl $0xe9, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x1489b9
movq 0x90(%rsp), %rax
cmpl $0x2, 0x68(%rax)
je 0x148b25
movq 0x90(%rsp), %rax
cmpq $0x0, 0x60(%rax)
jbe 0x148a55
movq 0x90(%rsp), %rdi
addq $0x20, %rdi
movq 0x90(%rsp), %rsi
callq 0x147f10
movq 0x90(%rsp), %rax
movl 0x10(%rax), %ecx
movq 0x90(%rsp), %rax
addl (%rax), %ecx
movl %ecx, (%rax)
movq 0x90(%rsp), %rax
movl 0x14(%rax), %ecx
movq 0x90(%rsp), %rax
addl 0x4(%rax), %ecx
movl %ecx, 0x4(%rax)
movq 0x90(%rsp), %rax
movl 0x18(%rax), %ecx
movq 0x90(%rsp), %rax
addl 0x8(%rax), %ecx
movl %ecx, 0x8(%rax)
movq 0x90(%rsp), %rax
movl 0x1c(%rax), %ecx
movq 0x90(%rsp), %rax
addl 0xc(%rax), %ecx
movl %ecx, 0xc(%rax)
movq 0x90(%rsp), %rax
movl (%rax), %ecx
movq 0x90(%rsp), %rax
movl %ecx, 0x10(%rax)
movq 0x90(%rsp), %rax
movl 0x4(%rax), %ecx
movq 0x90(%rsp), %rax
movl %ecx, 0x14(%rax)
movq 0x90(%rsp), %rax
movl 0x8(%rax), %ecx
movq 0x90(%rsp), %rax
movl %ecx, 0x18(%rax)
movq 0x90(%rsp), %rax
movl 0xc(%rax), %ecx
movq 0x90(%rsp), %rax
movl %ecx, 0x1c(%rax)
movq 0x90(%rsp), %rdi
addq $0x20, %rdi
movq 0x90(%rsp), %rax
movl 0x68(%rax), %ecx
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x1488a0
movl %eax, %ecx
movq 0x90(%rsp), %rax
movl %ecx, 0x68(%rax)
movq 0x90(%rsp), %rax
cmpl $0x2, 0x68(%rax)
je 0x148b21
movq 0x6b4e8(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x1556c(%rip), %rsi     # 0x15e066
leaq 0x43c86(%rip), %rdx     # 0x18c787
leaq 0x43c69(%rip), %rcx     # 0x18c771
leaq 0x43bf4(%rip), %r8      # 0x18c703
movl $0xf3, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x148b23
jmp 0x148b25
movq 0x90(%rsp), %rdi
addq $0x20, %rdi
movq 0x90(%rsp), %rax
movq 0x60(%rax), %rsi
callq 0x148d30
movq 0x90(%rsp), %rdi
addq $0x20, %rdi
movq 0x90(%rsp), %rsi
callq 0x147f10
movq 0x90(%rsp), %rax
movl 0x10(%rax), %ecx
movq 0x90(%rsp), %rax
addl (%rax), %ecx
movl %ecx, (%rax)
movq 0x90(%rsp), %rax
movl 0x14(%rax), %ecx
movq 0x90(%rsp), %rax
addl 0x4(%rax), %ecx
movl %ecx, 0x4(%rax)
movq 0x90(%rsp), %rax
movl 0x18(%rax), %ecx
movq 0x90(%rsp), %rax
addl 0x8(%rax), %ecx
movl %ecx, 0x8(%rax)
movq 0x90(%rsp), %rax
movl 0x1c(%rax), %ecx
movq 0x90(%rsp), %rax
addl 0xc(%rax), %ecx
movl %ecx, 0xc(%rax)
movq 0x90(%rsp), %rdi
movq 0x88(%rsp), %rsi
callq 0x148d80
cmpq $0x0, 0x80(%rsp)
je 0x148d1c
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rax
movzbl (%rax), %ecx
movq 0x88(%rsp), %rax
movzbl 0x1(%rax), %r8d
movq 0x88(%rsp), %rax
movzbl 0x2(%rax), %r9d
movq 0x88(%rsp), %rax
movzbl 0x3(%rax), %eax
movq 0x88(%rsp), %rdx
movzbl 0x4(%rdx), %edx
movl %edx, 0x70(%rsp)
movq 0x88(%rsp), %rdx
movzbl 0x5(%rdx), %edx
movl %edx, 0x74(%rsp)
movq 0x88(%rsp), %rdx
movzbl 0x6(%rdx), %edx
movl %edx, 0x78(%rsp)
movq 0x88(%rsp), %rdx
movzbl 0x7(%rdx), %r13d
movq 0x88(%rsp), %rdx
movzbl 0x8(%rdx), %r12d
movq 0x88(%rsp), %rdx
movzbl 0x9(%rdx), %r15d
movq 0x88(%rsp), %rdx
movzbl 0xa(%rdx), %r14d
movq 0x88(%rsp), %rdx
movzbl 0xb(%rdx), %ebp
movq 0x88(%rsp), %rdx
movzbl 0xc(%rdx), %ebx
movq 0x88(%rsp), %rdx
movzbl 0xd(%rdx), %r11d
movq 0x88(%rsp), %rdx
movzbl 0xe(%rdx), %r10d
movq 0x88(%rsp), %rdx
movzbl 0xf(%rdx), %edx
movl %edx, 0x7c(%rsp)
movl $0x21, %esi
leaq 0x43acc(%rip), %rdx     # 0x18c798
movl %eax, (%rsp)
movl 0x70(%rsp), %eax
movl %eax, 0x8(%rsp)
movl 0x74(%rsp), %eax
movl %eax, 0x10(%rsp)
movl 0x78(%rsp), %eax
movl %eax, 0x18(%rsp)
movl 0x7c(%rsp), %eax
movl %r13d, 0x20(%rsp)
movl %r12d, 0x28(%rsp)
movl %r15d, 0x30(%rsp)
movl %r14d, 0x38(%rsp)
movl %ebp, 0x40(%rsp)
movl %ebx, 0x48(%rsp)
movl %r11d, 0x50(%rsp)
movl %r10d, 0x58(%rsp)
movl %eax, 0x60(%rsp)
movb $0x0, %al
callq 0xb9d0
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop