// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/external/lpeg-0.10.2/lpeg.c
// Function: verify
static int verify (lua_State *L, Instruction *op, const Instruction *p,
                   Instruction *e, int postable, int rule) {
  static const char dummy[] = "";
  Stack back[MAXBACKVER];
  int backtop = 0;  /* point to first empty slot in back */
  while (p != e) {
    switch ((Opcode)p->i.code) {
      case IRet: {
        p = back[--backtop].p;
        continue;
      }
      case IChoice: {
        if (backtop >= MAXBACKVER)
          return luaL_error(L, "too many pending calls/choices");
        back[backtop].p = dest(0, p);
        back[backtop++].s = dummy;
        p++;
        continue;
      }
      case ICall: {
        assert((p + 1)->i.code != IRet);  /* no tail call */
        if (backtop >= MAXBACKVER)
          return luaL_error(L, "too many pending calls/choices");
        back[backtop].s = NULL;
        back[backtop++].p = p + 1;
        goto dojmp;
      }
      case IOpenCall: {
        int i;
        if (postable == 0)  /* grammar still not fixed? */
          goto fail;  /* to be verified later */
        for (i = 0; i < backtop; i++) {
          if (back[i].s == NULL && back[i].p == p + 1)
            return luaL_error(L, "%s is left recursive", val2str(L, rule));
        }
        if (backtop >= MAXBACKVER)
          return luaL_error(L, "too many pending calls/choices");
        back[backtop].s = NULL;
        back[backtop++].p = p + 1;
        p = op + getposition(L, postable, p->i.offset);
        continue;
      }
      case IBackCommit:
      case ICommit: {
        assert(backtop > 0 && p->i.offset > 0);
        backtop--;
        goto dojmp;
      }
      case IPartialCommit: {
        assert(backtop > 0);
        if (p->i.offset > 0) goto dojmp;  /* forward jump */
        else {  /* loop will be detected when checking corresponding rule */
          assert(postable != 0);
          backtop--;
          p++;  /* just go on now */
          continue;
        }
      }
      case IBack: {
        if (p->i.aux == 1 && isfixcheck(p + 1)) {  /* char test? */
          p++;  /* skip back instruction */
          p += sizei(p);  /* skip char test */
        }
        else {  /* standard lookbehind code */
          assert((Opcode)(p - 1)->i.code == IChoice);  /* look behind */
          backtop--;
          p += (p - 1)->i.offset;
          assert((Opcode)(p - 1)->i.code == IFail);  /* look behind */
        }
        continue;
      }
      case IAny:
      case IChar:
      case ISet: {
        const Instruction *next = p + sizei(p);
        if ((Opcode)next->i.code == IBack)
          p = next + 1;  /* continue after the back instruction */
        else if (p->i.offset == 0) goto fail;
        else  /* jump */
          p += p->i.offset;
        continue;
      }
      case IJmp:
      dojmp: {
        p += p->i.offset;
        continue;
      }
      case IFailTwice:  /* 'not' predicate */
        goto fail;  /* body could have failed; try to backtrack it */
      case IFail: {
        if (p > op && (p - 1)->i.code == IBackCommit) {  /* 'and' predicate? */
          p++;  /* pretend it succeeded and go ahead */
          continue;
        }
        /* else failed: go through */
      }
      fail: { /* pattern failed: try to backtrack */
        do {
          if (backtop-- == 0)
            return 1;  /* no more backtracking */
        } while (back[backtop].s == NULL);
        p = back[backtop].p;
        continue;
      }
      case ISpan:
      case IOpenCapture: case ICloseCapture:
      case IEmptyCapture: case IEmptyCaptureIdx:
      case IFullCapture: {
        p += sizei(p);
        continue;
      }
      case ICloseRunTime: {
        goto fail;  /* be liberal in this case */
      }
      case IFunc: {
        const char *r = (p+1)->f(dummy, dummy, dummy, (p+2)->buff);
        if (r != NULL) { p += funcinstsize(p); }
        else condfailed(p);
        continue;
      }
      case IEnd:  /* cannot happen (should stop before it) */
      default: assert(0); return 0;
    }
  }
  assert(backtop == 0);
  return 0;
}

// Assembly:
subq $0x1338, %rsp           # imm = 0x1338
movq %rdi, 0x1328(%rsp)
movq %rsi, 0x1320(%rsp)
movq %rdx, 0x1318(%rsp)
movq %rcx, 0x1310(%rsp)
movl %r8d, 0x130c(%rsp)
movl %r9d, 0x1308(%rsp)
movl $0x0, 0x3c(%rsp)
movq 0x1318(%rsp), %rax
cmpq 0x1310(%rsp), %rax
je 0x36024b
movq 0x1318(%rsp), %rax
movzbl (%rax), %eax
movq %rax, 0x18(%rsp)
subq $0x17, %rax
ja 0x36022c
movq 0x18(%rsp), %rax
leaq 0x23cebd(%rip), %rcx    # 0x59c9d8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x3c(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x3c(%rsp)
movslq %eax, %rcx
leaq 0x40(%rsp), %rax
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
movq %rax, 0x1318(%rsp)
jmp 0x35fadf
cmpl $0xc8, 0x3c(%rsp)
jl 0x35fb78
movq 0x1328(%rsp), %rdi
leaq 0x23d236(%rip), %rsi    # 0x59cd9b
movb $0x0, %al
callq 0x33a320
movl %eax, 0x1334(%rsp)
jmp 0x36027e
movq 0x1318(%rsp), %rcx
movq 0x1318(%rsp), %rax
movswl 0x2(%rax), %eax
cltq
shlq $0x3, %rax
addq %rax, %rcx
movslq 0x3c(%rsp), %rdx
leaq 0x40(%rsp), %rax
imulq $0x18, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x8(%rax)
movl 0x3c(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x3c(%rsp)
movslq %eax, %rcx
leaq 0x40(%rsp), %rax
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
leaq 0x23cfc3(%rip), %rcx    # 0x59cb90
movq %rcx, (%rax)
movq 0x1318(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x1318(%rsp)
jmp 0x35fadf
movq 0x1318(%rsp), %rax
movzbl 0x8(%rax), %eax
cmpl $0x5, %eax
je 0x35fbfc
jmp 0x35fc1b
leaq 0x23d1b7(%rip), %rdi    # 0x59cdba
leaq 0x23cff0(%rip), %rsi    # 0x59cbfa
movl $0x2a4, %edx            # imm = 0x2A4
leaq 0x23d1bc(%rip), %rcx    # 0x59cdd2
callq 0x19490
cmpl $0xc8, 0x3c(%rsp)
jl 0x35fc47
movq 0x1328(%rsp), %rdi
leaq 0x23d167(%rip), %rsi    # 0x59cd9b
movb $0x0, %al
callq 0x33a320
movl %eax, 0x1334(%rsp)
jmp 0x36027e
movslq 0x3c(%rsp), %rcx
leaq 0x40(%rsp), %rax
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq $0x0, (%rax)
movq 0x1318(%rsp), %rcx
addq $0x8, %rcx
movl 0x3c(%rsp), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x3c(%rsp)
movslq %eax, %rdx
leaq 0x40(%rsp), %rax
imulq $0x18, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x8(%rax)
jmp 0x36008b
cmpl $0x0, 0x130c(%rsp)
jne 0x35fc9f
jmp 0x3600f6
movl $0x0, 0x38(%rsp)
movl 0x38(%rsp), %eax
cmpl 0x3c(%rsp), %eax
jge 0x35fd47
movslq 0x38(%rsp), %rcx
leaq 0x40(%rsp), %rax
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
cmpq $0x0, (%rax)
jne 0x35fd35
movslq 0x38(%rsp), %rcx
leaq 0x40(%rsp), %rax
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
movq 0x1318(%rsp), %rcx
addq $0x8, %rcx
cmpq %rcx, %rax
jne 0x35fd35
movq 0x1328(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x1328(%rsp), %rdi
movl 0x1308(%rsp), %esi
callq 0x35f2b0
movq 0x10(%rsp), %rdi
movq %rax, %rdx
leaq 0x23d105(%rip), %rsi    # 0x59ce27
movb $0x0, %al
callq 0x33a320
movl %eax, 0x1334(%rsp)
jmp 0x36027e
jmp 0x35fd37
movl 0x38(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x38(%rsp)
jmp 0x35fca7
cmpl $0xc8, 0x3c(%rsp)
jl 0x35fd73
movq 0x1328(%rsp), %rdi
leaq 0x23d03b(%rip), %rsi    # 0x59cd9b
movb $0x0, %al
callq 0x33a320
movl %eax, 0x1334(%rsp)
jmp 0x36027e
movslq 0x3c(%rsp), %rcx
leaq 0x40(%rsp), %rax
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq $0x0, (%rax)
movq 0x1318(%rsp), %rcx
addq $0x8, %rcx
movl 0x3c(%rsp), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x3c(%rsp)
movslq %eax, %rdx
leaq 0x40(%rsp), %rax
imulq $0x18, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x8(%rax)
movq 0x1320(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x1328(%rsp), %rdi
movl 0x130c(%rsp), %esi
movq 0x1318(%rsp), %rax
movswl 0x2(%rax), %edx
callq 0x35f6a0
movl %eax, %ecx
movq 0x8(%rsp), %rax
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x1318(%rsp)
jmp 0x35fadf
cmpl $0x0, 0x3c(%rsp)
jle 0x35fe1c
movq 0x1318(%rsp), %rax
movswl 0x2(%rax), %eax
cmpl $0x0, %eax
jle 0x35fe1c
jmp 0x35fe3b
leaq 0x23d019(%rip), %rdi    # 0x59ce3c
leaq 0x23cdd0(%rip), %rsi    # 0x59cbfa
movl $0x2bc, %edx            # imm = 0x2BC
leaq 0x23cf9c(%rip), %rcx    # 0x59cdd2
callq 0x19490
movl 0x3c(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x3c(%rsp)
jmp 0x36008b
cmpl $0x0, 0x3c(%rsp)
jle 0x35fe54
jmp 0x35fe73
leaq 0x23d000(%rip), %rdi    # 0x59ce5b
leaq 0x23cd98(%rip), %rsi    # 0x59cbfa
movl $0x2c1, %edx            # imm = 0x2C1
leaq 0x23cf64(%rip), %rcx    # 0x59cdd2
callq 0x19490
movq 0x1318(%rsp), %rax
movswl 0x2(%rax), %eax
cmpl $0x0, %eax
jle 0x35fe89
jmp 0x36008b
cmpl $0x0, 0x130c(%rsp)
je 0x35fe95
jmp 0x35feb4
leaq 0x23cfcb(%rip), %rdi    # 0x59ce67
leaq 0x23cd57(%rip), %rsi    # 0x59cbfa
movl $0x2c4, %edx            # imm = 0x2C4
leaq 0x23cf23(%rip), %rcx    # 0x59cdd2
callq 0x19490
movl 0x3c(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x3c(%rsp)
movq 0x1318(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x1318(%rsp)
jmp 0x35fadf
movq 0x1318(%rsp), %rax
movzbl 0x1(%rax), %eax
cmpl $0x1, %eax
jne 0x35ff5c
movq 0x1318(%rsp), %rax
movzbl 0x8(%rax), %eax
movl %eax, %ecx
leaq 0x23cc32(%rip), %rax    # 0x59cb30
movl (%rax,%rcx,4), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x35ff5c
movq 0x1318(%rsp), %rax
movswl 0xa(%rax), %eax
cmpl $0x0, %eax
jne 0x35ff5c
movq 0x1318(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x1318(%rsp)
movq 0x1318(%rsp), %rdi
callq 0x35f7b0
movl %eax, %ecx
movq 0x1318(%rsp), %rax
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x1318(%rsp)
jmp 0x35fff3
movq 0x1318(%rsp), %rax
movzbl -0x8(%rax), %eax
cmpl $0x7, %eax
jne 0x35ff6f
jmp 0x35ff8e
leaq 0x23ceff(%rip), %rdi    # 0x59ce75
leaq 0x23cc7d(%rip), %rsi    # 0x59cbfa
movl $0x2d0, %edx            # imm = 0x2D0
leaq 0x23ce49(%rip), %rcx    # 0x59cdd2
callq 0x19490
movl 0x3c(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x3c(%rsp)
movq 0x1318(%rsp), %rax
movswl -0x6(%rax), %ecx
movq 0x1318(%rsp), %rax
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x1318(%rsp)
movq 0x1318(%rsp), %rax
movzbl -0x8(%rax), %eax
cmpl $0xf, %eax
jne 0x35ffd2
jmp 0x35fff1
leaq 0x23cebf(%rip), %rdi    # 0x59ce98
leaq 0x23cc1a(%rip), %rsi    # 0x59cbfa
movl $0x2d3, %edx            # imm = 0x2D3
leaq 0x23cde6(%rip), %rcx    # 0x59cdd2
callq 0x19490
jmp 0x35fff3
jmp 0x35fadf
movq 0x1318(%rsp), %rax
movq %rax, (%rsp)
movq 0x1318(%rsp), %rdi
callq 0x35f7b0
movl %eax, %ecx
movq (%rsp), %rax
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x4, %eax
jne 0x360046
movq 0x30(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x1318(%rsp)
jmp 0x360084
movq 0x1318(%rsp), %rax
movswl 0x2(%rax), %eax
cmpl $0x0, %eax
jne 0x36005c
jmp 0x3600f6
movq 0x1318(%rsp), %rax
movswl 0x2(%rax), %ecx
movq 0x1318(%rsp), %rax
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x1318(%rsp)
jmp 0x360084
jmp 0x35fadf
jmp 0x36008b
movq 0x1318(%rsp), %rax
movswl 0x2(%rax), %ecx
movq 0x1318(%rsp), %rax
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x1318(%rsp)
jmp 0x35fadf
jmp 0x3600f6
movq 0x1318(%rsp), %rax
cmpq 0x1320(%rsp), %rax
jbe 0x3600f4
movq 0x1318(%rsp), %rax
movzbl -0x8(%rax), %eax
cmpl $0xd, %eax
jne 0x3600f4
movq 0x1318(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x1318(%rsp)
jmp 0x35fadf
jmp 0x3600f6
jmp 0x3600f8
movl 0x3c(%rsp), %eax
movl %eax, %ecx
addl $-0x1, %ecx
movl %ecx, 0x3c(%rsp)
cmpl $0x0, %eax
jne 0x36011a
movl $0x1, 0x1334(%rsp)
jmp 0x36027e
jmp 0x36011c
movslq 0x3c(%rsp), %rcx
leaq 0x40(%rsp), %rax
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
cmpq $0x0, (%rax)
je 0x3600f8
movslq 0x3c(%rsp), %rcx
leaq 0x40(%rsp), %rax
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
movq %rax, 0x1318(%rsp)
jmp 0x35fadf
movq 0x1318(%rsp), %rdi
callq 0x35f7b0
movl %eax, %ecx
movq 0x1318(%rsp), %rax
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x1318(%rsp)
jmp 0x35fadf
jmp 0x3600f6
movq 0x1318(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x1318(%rsp), %rcx
addq $0x10, %rcx
leaq 0x23c9e9(%rip), %rdx    # 0x59cb90
movq %rdx, %rdi
movq %rdx, %rsi
callq *%rax
movq %rax, 0x28(%rsp)
cmpq $0x0, 0x28(%rsp)
je 0x3601e7
movq 0x1318(%rsp), %rax
movzbl 0x1(%rax), %ecx
addl $0x2, %ecx
movq 0x1318(%rsp), %rax
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x1318(%rsp)
jmp 0x360225
movq 0x1318(%rsp), %rax
movswl 0x2(%rax), %eax
movl %eax, 0x24(%rsp)
cmpl $0x0, 0x24(%rsp)
je 0x36021e
movl 0x24(%rsp), %ecx
movq 0x1318(%rsp), %rax
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x1318(%rsp)
jmp 0x360223
jmp 0x3600f6
jmp 0x360225
jmp 0x35fadf
jmp 0x36022c
leaq 0x1e04ba(%rip), %rdi    # 0x5406ed
leaq 0x23c9c0(%rip), %rsi    # 0x59cbfa
movl $0x309, %edx            # imm = 0x309
leaq 0x23cb8c(%rip), %rcx    # 0x59cdd2
callq 0x19490
cmpl $0x0, 0x3c(%rsp)
jne 0x360254
jmp 0x360273
leaq 0x23cc5e(%rip), %rdi    # 0x59ceb9
leaq 0x23c998(%rip), %rsi    # 0x59cbfa
movl $0x30c, %edx            # imm = 0x30C
leaq 0x23cb64(%rip), %rcx    # 0x59cdd2
callq 0x19490
movl $0x0, 0x1334(%rsp)
movl 0x1334(%rsp), %eax
addq $0x1338, %rsp           # imm = 0x1338
retq
nopl (%rax)