// File: /workspace/github_c_makefile_star2_O0/mishun[P]plantri/plantri.c
// Function: testcanon_mirror
static int 
testcanon_mirror(EDGE *givenedge, int representation[], int colour[])

/* Tests whether starting from a given edge and constructing the code in
   "->prev" direction, an automorphism or even a better representation can 
   be found. Comments see testcanon -- it is exactly the same except for 
   the orientation */
{
    EDGE *temp, *run;  
    EDGE *startedge[MAXN+1];
    int number[MAXN], i; 
    int last_number, actual_number, vertex;

    for (i = 0; i < nv; i++) number[i] = 0;

    number[givenedge->start] = 1; 

    if (givenedge->start != givenedge->end)
      {
	number[givenedge->end] = 2;
	last_number = 2;
	startedge[1] = givenedge->invers;
      }
    else last_number = 1; 

    actual_number = 1;
    temp = givenedge;

    while (last_number < nv)
    {  
        for (run = temp->prev; run != temp; run = run->prev)
          { vertex = run->end;
            if (!number[vertex])
              { startedge[last_number] = run->invers;
                last_number++; number[vertex] = last_number;
                vertex = colour[vertex]; }
            else vertex = number[vertex];
            if (vertex > (*representation)) return 0;
            if (vertex < (*representation)) return 2;
            representation++; 
          }
        if ((*representation) != 0) return 2; 
        representation++;
        temp = startedge[actual_number];  actual_number++; 
    }

    while (actual_number <= nv) 
    {  
        for (run = temp->prev; run != temp; run = run->prev)
          { 
            vertex = number[run->end];
            if (vertex > (*representation)) return 0;
            if (vertex < (*representation)) return 2;
            representation++;
          }
        if ((*representation) != 0) return 2; 
        representation++;
        temp = startedge[actual_number];  actual_number++; 
    }

    return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2d0, %rsp            # imm = 0x2D0
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movl $0x0, -0x344(%rbp)
movl -0x344(%rbp), %eax
cmpl 0x24cd13(%rip), %eax    # 0x25a620
jge 0xd932
movslq -0x344(%rbp), %rax
movl $0x0, -0x340(%rbp,%rax,4)
movl -0x344(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x344(%rbp)
jmp 0xd901
movq -0x10(%rbp), %rax
movslq (%rax), %rax
movl $0x1, -0x340(%rbp,%rax,4)
movq -0x10(%rbp), %rax
movl (%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x4(%rcx), %eax
je 0xd981
movq -0x10(%rbp), %rax
movslq 0x4(%rax), %rax
movl $0x2, -0x340(%rbp,%rax,4)
movl $0x2, -0x348(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x238(%rbp)
jmp 0xd98b
movl $0x1, -0x348(%rbp)
movl $0x1, -0x34c(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
movl -0x348(%rbp), %eax
cmpl 0x24cc77(%rip), %eax    # 0x25a620
jge 0xdae4
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
cmpq -0x28(%rbp), %rax
je 0xda9c
movq -0x30(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x350(%rbp)
movslq -0x350(%rbp), %rax
cmpl $0x0, -0x340(%rbp,%rax,4)
jne 0xda37
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rcx
movslq -0x348(%rbp), %rax
movq %rcx, -0x240(%rbp,%rax,8)
movl -0x348(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x348(%rbp)
movl -0x348(%rbp), %ecx
movslq -0x350(%rbp), %rax
movl %ecx, -0x340(%rbp,%rax,4)
movq -0x20(%rbp), %rax
movslq -0x350(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x350(%rbp)
jmp 0xda4b
movslq -0x350(%rbp), %rax
movl -0x340(%rbp,%rax,4), %eax
movl %eax, -0x350(%rbp)
movl -0x350(%rbp), %eax
movq -0x18(%rbp), %rcx
cmpl (%rcx), %eax
jle 0xda65
movl $0x0, -0x4(%rbp)
jmp 0xdbb7
movl -0x350(%rbp), %eax
movq -0x18(%rbp), %rcx
cmpl (%rcx), %eax
jge 0xda7f
movl $0x2, -0x4(%rbp)
jmp 0xdbb7
movq -0x18(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x18(%rbp)
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xd9bb
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0xdab1
movl $0x2, -0x4(%rbp)
jmp 0xdbb7
movq -0x18(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x18(%rbp)
movslq -0x34c(%rbp), %rax
movq -0x240(%rbp,%rax,8), %rax
movq %rax, -0x28(%rbp)
movl -0x34c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34c(%rbp)
jmp 0xd99d
jmp 0xdae6
movl -0x34c(%rbp), %eax
cmpl 0x24cb2e(%rip), %eax    # 0x25a620
jg 0xdbb0
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
cmpq -0x28(%rbp), %rax
je 0xdb6b
movq -0x30(%rbp), %rax
movslq 0x4(%rax), %rax
movl -0x340(%rbp,%rax,4), %eax
movl %eax, -0x350(%rbp)
movl -0x350(%rbp), %eax
movq -0x18(%rbp), %rcx
cmpl (%rcx), %eax
jle 0xdb3a
movl $0x0, -0x4(%rbp)
jmp 0xdbb7
movl -0x350(%rbp), %eax
movq -0x18(%rbp), %rcx
cmpl (%rcx), %eax
jge 0xdb51
movl $0x2, -0x4(%rbp)
jmp 0xdbb7
movq -0x18(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x18(%rbp)
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xdb04
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0xdb7d
movl $0x2, -0x4(%rbp)
jmp 0xdbb7
movq -0x18(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x18(%rbp)
movslq -0x34c(%rbp), %rax
movq -0x240(%rbp,%rax,8), %rax
movq %rax, -0x28(%rbp)
movl -0x34c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34c(%rbp)
jmp 0xdae6
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x2d0, %rsp            # imm = 0x2D0
popq %rbp
retq
nopw %cs:(%rax,%rax)