// File: /workspace/github_c_makefile_star2_O2/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, %r12d
movq %rdx, %rbx
movl %esi, %r14d
movq %rdi, %r15
incl %r14d
leaq 0x10(%rsp), %rdx
movl %r14d, %esi
callq 0x1306
cmpl $0x5, %eax
jne 0x13dc
movb $0x1, 0x1c(%rsp)
movl $0x0, 0xc(%rsp)
pushq $0x1
popq %r13
xorl %ebp, %ebp
jmp 0x13e9
pushq $-0x1
popq %rbp
pushq $0x1
popq %rax
movl %eax, 0xc(%rsp)
xorl %r13d, %r13d
leaq 0x10(%rsp), %rdx
movq %r15, %rdi
movl %r14d, %esi
callq 0x134f
cmpl $0x5, %eax
jne 0x140a
incl %ebp
movb $0x2, 0x1c(%rsp,%rbp)
incl %r13d
jmp 0x140e
incl 0xc(%rsp)
movslq %ebp, %rax
xorl %ecx, %ecx
xorl %r15d, %r15d
cmpq %rax, %rcx
jg 0x1432
testb %r15b, %r15b
jne 0x1432
movb (%rbx,%rcx), %dl
cmpb %dl, 0x1c(%rsp,%rcx)
ja 0x1483
setb %r15b
incq %rcx
jmp 0x1416
movl %r12d, 0x18(%rsp)
movb $0x3, %r12b
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x1487
movl %r14d, %esi
leaq 0x10(%rsp), %rdx
callq 0x134f
cmpl $0x5, %eax
jne 0x146e
incl %r13d
movslq %ebp, %rbp
movb %r12b, 0x1d(%rsp,%rbp)
incq %rbp
testb %r15b, %r15b
je 0x1474
movb $0x1, %r15b
jmp 0x147e
incl 0xc(%rsp)
jmp 0x147e
cmpb (%rbx,%rbp), %r12b
ja 0x1483
setb %r15b
incb %r12b
jmp 0x143a
xorl %eax, %eax
jmp 0x14af
xorl %eax, %eax
cmpl $0xc, %r13d
jl 0x14af
movl 0xc(%rsp), %ecx
cmpl 0x18(%rsp), %ecx
jl 0x14af
xorl %eax, %eax
cmpq $0xc, %rax
je 0x14ad
movb 0x1c(%rsp,%rax), %cl
movb %cl, (%rbx,%rax)
incq %rax
jmp 0x149b
movb $0x1, %al
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq