// File: /workspace/github_c_makefile_star2_O3/mishun[P]plantri/fullgen.c
// Function: get_spiralcode
BOOL get_spiralcode ( 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 Uhrzeigersinn
   geht. Entwickelt wird solange der Code besser ist als cmpcode. Das
   Resultat wird in cmpcode geschrieben, wenn es besser ist. Wenn ein 
   Code gefunden wird, der besser ist, als cmpcode, wird 1 zurueckgegeben, 
   sonst 0.  Die aufrufende Funktion muss sicherstellen, dass alle Kanten
   kante->dummy <= minmark erfuellen.
*/

{
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++;

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_right(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, %r13d
movq %rdx, %rbx
movl %esi, %r14d
movq %rdi, %r12
incl %r14d
leaq 0x10(%rsp), %rdx
movl %r14d, %esi
callq 0x2bac
movl %eax, %r15d
cmpl $0x5, %eax
jne 0x2c88
movb $0x1, 0x1c(%rsp)
movl $0x0, 0xc(%rsp)
movl $0x1, %ebp
jmp 0x2c92
movl $0x1, 0xc(%rsp)
xorl %ebp, %ebp
leaq 0x10(%rsp), %rdx
movq %r12, %rdi
movl %r14d, %esi
callq 0x2bf7
cmpl $0x5, %eax
jne 0x2cb8
movl %ebp, %eax
movb $0x2, 0x1c(%rsp,%rax)
movl %ebp, %r12d
leal 0x1(%rbp), %eax
movl %eax, %ebp
jmp 0x2cc5
incl 0xc(%rsp)
xorl %r12d, %r12d
cmpl $0x5, %r15d
jne 0x2cf1
movl %r12d, %eax
xorl %ecx, %ecx
movb 0x1c(%rsp,%rcx), %dl
movb (%rbx,%rcx), %sil
cmpb %sil, %dl
ja 0x2d76
cmpq %rax, %rcx
jae 0x2ce8
incq %rcx
cmpb %sil, %dl
jae 0x2cca
cmpb %sil, %dl
setb %r15b
jmp 0x2cfa
movl $0xffffffff, %r12d      # imm = 0xFFFFFFFF
xorl %r15d, %r15d
movl %r13d, 0x18(%rsp)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x2d52
movb $0x3, %r13b
movl %r14d, %esi
leaq 0x10(%rsp), %rdx
callq 0x2bf7
cmpl $0x5, %eax
jne 0x2d35
incl %ebp
movslq %r12d, %r12
movb %r13b, 0x1d(%rsp,%r12)
incq %r12
testb %r15b, %r15b
je 0x2d3b
movb $0x1, %r15b
jmp 0x2d45
incl 0xc(%rsp)
jmp 0x2d45
cmpb (%rbx,%r12), %r13b
ja 0x2d76
setb %r15b
incb %r13b
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
jne 0x2d0c
xorl %eax, %eax
cmpl $0xc, %ebp
jl 0x2d78
movl 0xc(%rsp), %ecx
cmpl 0x18(%rsp), %ecx
jl 0x2d78
movl 0x24(%rsp), %eax
movl %eax, 0x8(%rbx)
movq 0x1c(%rsp), %rax
movq %rax, (%rbx)
movb $0x1, %al
jmp 0x2d78
xorl %eax, %eax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq