// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/external/expat-2.0.1/lib/xmlparse.c
// Function: XML_ParseBuffer
enum XML_Status XMLCALL
XML_ParseBuffer(XML_Parser parser, int len, int isFinal)
{
  const char *start;
  enum XML_Status result = XML_STATUS_OK;

  switch (ps_parsing) {
  case XML_SUSPENDED:
    errorCode = XML_ERROR_SUSPENDED;
    return XML_STATUS_ERROR;
  case XML_FINISHED:
    errorCode = XML_ERROR_FINISHED;
    return XML_STATUS_ERROR;
  default:
    ps_parsing = XML_PARSING;
  }

  start = bufferPtr;
  positionPtr = start;
  bufferEnd += len;
  parseEndPtr = bufferEnd;
  parseEndByteIndex += len;
  ps_finalBuffer = (XML_Bool)isFinal;

  errorCode = processor(parser, start, parseEndPtr, &bufferPtr);

  if (errorCode != XML_ERROR_NONE) {
    eventEndPtr = eventPtr;
    processor = errorProcessor;
    return XML_STATUS_ERROR;
  }
  else {
    switch (ps_parsing) {
    case XML_SUSPENDED:
      result = XML_STATUS_SUSPENDED;
      break;
    case XML_INITIALIZED: 
    case XML_PARSING:
      if (isFinal) {
        ps_parsing = XML_FINISHED;
        return result;
      }
    default: ;  /* should not happen */
    }
  }

  XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position);
  positionPtr = bufferPtr;
  return result;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movl %esi, 0x24(%rsp)
movl %edx, 0x20(%rsp)
movl $0x1, 0x14(%rsp)
movq 0x28(%rsp), %rax
movl 0x378(%rax), %eax
movl %eax, 0x10(%rsp)
subl $0x2, %eax
je 0x375b96
jmp 0x375b6f
movl 0x10(%rsp), %eax
subl $0x3, %eax
jne 0x375bb2
jmp 0x375b7a
movq 0x28(%rsp), %rax
movl $0x21, 0x208(%rax)
movl $0x0, 0x34(%rsp)
jmp 0x375d56
movq 0x28(%rsp), %rax
movl $0x24, 0x208(%rax)
movl $0x0, 0x34(%rsp)
jmp 0x375d56
movq 0x28(%rsp), %rax
movl $0x1, 0x378(%rax)
movq 0x28(%rsp), %rax
movq 0x30(%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x220(%rax)
movl 0x24(%rsp), %edx
movq 0x28(%rsp), %rax
movq 0x38(%rax), %rcx
movslq %edx, %rdx
addq %rdx, %rcx
movq %rcx, 0x38(%rax)
movq 0x28(%rsp), %rax
movq 0x38(%rax), %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x50(%rax)
movslq 0x24(%rsp), %rcx
movq 0x28(%rsp), %rax
addq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
movl 0x20(%rsp), %eax
movb %al, %cl
movq 0x28(%rsp), %rax
movb %cl, 0x37c(%rax)
movq 0x28(%rsp), %rax
movq 0x200(%rax), %rax
movq 0x28(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rcx
movq 0x50(%rcx), %rdx
movq 0x28(%rsp), %rcx
addq $0x30, %rcx
callq *%rax
movl %eax, %ecx
movq 0x28(%rsp), %rax
movl %ecx, 0x208(%rax)
movq 0x28(%rsp), %rax
cmpl $0x0, 0x208(%rax)
je 0x375ca9
movq 0x28(%rsp), %rax
movq 0x210(%rax), %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x218(%rax)
movq 0x28(%rsp), %rax
leaq -0x3e5(%rip), %rcx      # 0x3758b0
movq %rcx, 0x200(%rax)
movl $0x0, 0x34(%rsp)
jmp 0x375d56
movq 0x28(%rsp), %rax
movl 0x378(%rax), %eax
movl %eax, 0xc(%rsp)
subl $0x2, %eax
jb 0x375cd4
jmp 0x375cbf
movl 0xc(%rsp), %eax
subl $0x3, %eax
jne 0x375cf6
jmp 0x375cca
movl $0x2, 0x14(%rsp)
jmp 0x375cf8
cmpl $0x0, 0x20(%rsp)
je 0x375cf4
movq 0x28(%rsp), %rax
movl $0x2, 0x378(%rax)
movl 0x14(%rsp), %eax
movl %eax, 0x34(%rsp)
jmp 0x375d56
jmp 0x375cf6
jmp 0x375cf8
jmp 0x375cfa
movq 0x28(%rsp), %rax
movq 0x120(%rax), %rax
movq 0x60(%rax), %rax
movq 0x28(%rsp), %rcx
movq 0x120(%rcx), %rdi
movq 0x28(%rsp), %rcx
movq 0x220(%rcx), %rsi
movq 0x28(%rsp), %rcx
movq 0x30(%rcx), %rdx
movq 0x28(%rsp), %rcx
addq $0x2f0, %rcx            # imm = 0x2F0
callq *%rax
movq 0x28(%rsp), %rax
movq 0x30(%rax), %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x220(%rax)
movl 0x14(%rsp), %eax
movl %eax, 0x34(%rsp)
movl 0x34(%rsp), %eax
addq $0x38, %rsp
retq
nop