// File: /workspace/github_c_makefile_star2_O3/mishun[P]plantri/fullgen.c
// Function: get_spiralcode_inv
BOOL get_spiralcode_inv ( KANTE *edge, int minmark, FLAECHENTYP cmpcode[12],
		 int sixgons)

/* entwickelt den Spiralcode, bei dem die erste Flaeche links von edge
   liegt, die zweite rechts davon und die Entwicklung im GEGEN-Uhrzeigersinn
   geht. Sonst wie oben */

{
int mark, i;
KANTE *nextedge;
BOOL kleiner=0;
FLAECHENTYP code[12], zaehler;
int fuenfecke=0, sechsecke=0; /* zaehler fuer die wirklich eingefuegten Flaechen */
int stelle;

mark=minmark+1;  

if (checksize_mark_return( edge, mark, &nextedge)==5)
                      { code[0]=1; stelle=0; fuenfecke=1; } 
else { stelle= -1; sechsecke=1; }
if (checksize_mark_return_right( edge, mark, &nextedge)==5)
    { stelle++; code[stelle]=2; fuenfecke++; } else sechsecke++;

nextedge=edge->invers->prev;

for (i=0; (i<=stelle) && (!kleiner); i++)
  { if (code[i]>cmpcode[i]) return(0);
    if (code[i]<cmpcode[i]) kleiner=1; }

zaehler=3;

while (nextedge != nil)
  { 
    if (checksize_mark_return( nextedge, mark, &nextedge)==5)
                       { fuenfecke++;
			 stelle++; code[stelle]=zaehler; 
		         if (!kleiner)
			    { if (zaehler>cmpcode[stelle]) { return(0); }
			      if (zaehler<cmpcode[stelle]) kleiner=1;
			    }
		       }
    else sechsecke++;
    zaehler++;
  }

if ((fuenfecke<12) || (sechsecke < sixgons)) return(0);

for (i=0; i<12; i++) cmpcode[i]=code[i];
return(1);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movl %ecx, 0x18(%rsp)
movq %rdx, %rbx
movl %esi, %r14d
movq %rdi, %r15
incl %r14d
leaq 0x10(%rsp), %rdx
movl %r14d, %esi
callq 0x2bac
movl %eax, %r13d
cmpl $0x5, %eax
jne 0x2dc9
movb $0x1, 0x1c(%rsp)
xorl %ebp, %ebp
movl $0x1, %r12d
jmp 0x2dd1
movl $0x1, %ebp
xorl %r12d, %r12d
leaq 0x10(%rsp), %rdx
movq %r15, %rdi
movl %r14d, %esi
callq 0x2bf7
cmpl $0x5, %eax
jne 0x2e0c
movl %ebp, 0xc(%rsp)
movl %r12d, %eax
movb $0x2, 0x1c(%rsp,%rax)
movl %r12d, %ebp
leal 0x1(%r12), %eax
movq 0x28(%r15), %rcx
movq 0x18(%rcx), %rdi
movq %rdi, 0x10(%rsp)
movl %eax, %r12d
jmp 0x2e27
incl %ebp
movl %ebp, 0xc(%rsp)
xorl %ebp, %ebp
movq 0x28(%r15), %rax
movq 0x18(%rax), %rdi
movq %rdi, 0x10(%rsp)
cmpl $0x5, %r13d
jne 0x2e52
movl %ebp, %eax
xorl %ecx, %ecx
movb 0x1c(%rsp,%rcx), %dl
movb (%rbx,%rcx), %sil
cmpb %sil, %dl
ja 0x2ece
cmpq %rax, %rcx
jae 0x2e49
incq %rcx
cmpb %sil, %dl
jae 0x2e2b
cmpb %sil, %dl
setb %r15b
jmp 0x2e5a
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
xorl %r15d, %r15d
testq %rdi, %rdi
je 0x2ea9
movb $0x3, %r13b
movl %r14d, %esi
leaq 0x10(%rsp), %rdx
callq 0x2bac
cmpl $0x5, %eax
jne 0x2e8c
incl %r12d
movslq %ebp, %rbp
movb %r13b, 0x1d(%rsp,%rbp)
incq %rbp
testb %r15b, %r15b
je 0x2e92
movb $0x1, %r15b
jmp 0x2e9c
incl 0xc(%rsp)
jmp 0x2e9c
cmpb (%rbx,%rbp), %r13b
ja 0x2ece
setb %r15b
incb %r13b
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
jne 0x2e62
xorl %eax, %eax
cmpl $0xc, %r12d
jl 0x2ed0
movl 0xc(%rsp), %ecx
cmpl 0x18(%rsp), %ecx
jl 0x2ed0
movl 0x24(%rsp), %eax
movl %eax, 0x8(%rbx)
movq 0x1c(%rsp), %rax
movq %rax, (%rbx)
movb $0x1, %al
jmp 0x2ed0
xorl %eax, %eax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq