// File: /workspace/github_c_makefile_star2_O0/mishun[P]plantri/plantri.c
// Function: threeconn_quad
static int
threeconn_quad(EDGE *e)

/* Difference to "threeconn": On the left hand side of e there must be a
   quadrangle instead of a triangle.

   tests whether the graph obtained by deleting EDGE e is still 3-connected.
   The edge e may have been deleted or not, but the values in e must be
   as before it was (possibly) deleted. The map must have been 3-connected
   before -- so especially there weren't any vertices of degree 2.
   degree[] is not assumed correct for the endvertices of e.

   On the left hand side of e there must be a quadrangle.
   (e->left_facesize==4) and it is assumed that it is checked before
   that the endvertices adjacent to e have degree at least 3 after the
   deletion.

   The way it works: If there is a 2-cut, e->start and e->end cannot
   be contained, but they must be in different components after
   removing e, so both faces neighbouring e must contain a
   cutvertex. Because on the left hand side there is a quadrangle this
   means that v=e->prev->end or w=e->invers->next->end MUST be
   contained.  It is checked whether v or w is contained in a face that
   shares yet another vertex with the face formerly on the right hand
   side of e (the new face obtained by deleting e).

   Note that this face cannot be the one v shares with e->start or
   w shares with e->end because that would have meant that a 2-cut
   already existed in the graph.

   Returns 1 if it is 3-connected after deleting e, 0 else.  */

{
    EDGE *run, *start, *end;

    RESETMARKS_V;

    /* The endvertices of e need not be marked */
    for ( run=e->next, end=e->invers->prev->invers ;
          run != end; run=run->invers->next) MARK_V(run->end);


    /* OK -- now test v. */ 

    start=e->prev->invers;

    end=start->prev;

    /* the face on the right hand side of start contains e->start so 
       need not be tested: */

    start=start->next;

    while (start != end)
      { run=start->invers;
        start=start->next;
        for ( ; run != start; run=run->prev->invers)
	    if (ISMARKED_V(run->start)) return 0; 
      }

    /* OK -- now test w. The face that also contains v was already tested */

    if (degree[end->end]==3) return 1;

    start=end->invers->next;
    end=end->invers->prev->prev;

    while (start != end)
      { run=start->invers;
        start=start->next;
        for ( ; run != start; run=run->prev->invers)
	    if (ISMARKED_V(run->start)) return 0; 
      }

    return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x10(%rbp)
movl 0x29792(%rip), %eax     # 0x3c090
addl $0x1, %eax
movl %eax, 0x29789(%rip)     # 0x3c090
cmpl $0x7530, %eax           # imm = 0x7530
jle 0x12944
movl $0x1, 0x29778(%rip)     # 0x3c090
movl $0x0, -0x2c(%rbp)
cmpl $0x40, -0x2c(%rbp)
jge 0x12942
movslq -0x2c(%rbp), %rcx
leaq 0x28e310(%rip), %rax    # 0x2a0c40
movl $0x0, (%rax,%rcx,4)
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x1291f
jmp 0x12944
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
cmpq -0x28(%rbp), %rax
je 0x12998
movl 0x2971c(%rip), %edx     # 0x3c090
movq -0x18(%rbp), %rax
movslq 0x4(%rax), %rcx
leaq 0x28e2bd(%rip), %rax    # 0x2a0c40
movl %edx, (%rax,%rcx,4)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x12964
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpq -0x28(%rbp), %rax
je 0x12a27
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
cmpq -0x20(%rbp), %rax
je 0x12a25
movq -0x18(%rbp), %rax
movslq (%rax), %rcx
leaq 0x28e246(%rip), %rax    # 0x2a0c40
movl (%rax,%rcx,4), %eax
cmpl 0x2968d(%rip), %eax     # 0x3c090
jne 0x12a11
movl $0x0, -0x4(%rbp)
jmp 0x12ad7
jmp 0x12a13
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x129e2
jmp 0x129c0
movq -0x28(%rbp), %rax
movslq 0x4(%rax), %rcx
leaq 0x2b1ca(%rip), %rax     # 0x3dc00
cmpl $0x3, (%rax,%rcx,4)
jne 0x12a48
movl $0x1, -0x4(%rbp)
jmp 0x12ad7
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
cmpq -0x28(%rbp), %rax
je 0x12ad0
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
cmpq -0x20(%rbp), %rax
je 0x12ace
movq -0x18(%rbp), %rax
movslq (%rax), %rcx
leaq 0x28e19a(%rip), %rax    # 0x2a0c40
movl (%rax,%rcx,4), %eax
cmpl 0x295e1(%rip), %eax     # 0x3c090
jne 0x12aba
movl $0x0, -0x4(%rbp)
jmp 0x12ad7
jmp 0x12abc
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x12a8e
jmp 0x12a6c
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
popq %rbp
retq
nopl (%rax)