// File: /workspace/github_c_makefile_star2_O0/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
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
movl %ecx, -0x24(%rbp)
movb $0x0, -0x39(%rbp)
movl $0x0, -0x4c(%rbp)
movl $0x0, -0x50(%rbp)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
movq -0x10(%rbp), %rdi
movl -0x28(%rbp), %esi
leaq -0x38(%rbp), %rdx
callq 0x1340
cmpl $0x5, %eax
jne 0x153a
movb $0x1, -0x45(%rbp)
movl $0x0, -0x54(%rbp)
movl $0x1, -0x4c(%rbp)
jmp 0x1548
movl $0xffffffff, -0x54(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x50(%rbp)
movq -0x10(%rbp), %rdi
movl -0x28(%rbp), %esi
leaq -0x38(%rbp), %rdx
callq 0x1410
cmpl $0x5, %eax
jne 0x157a
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
movslq -0x54(%rbp), %rax
movb $0x2, -0x45(%rbp,%rax)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x1583
movl -0x50(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x50(%rbp)
movl $0x0, -0x2c(%rbp)
movl -0x2c(%rbp), %ecx
xorl %eax, %eax
cmpl -0x54(%rbp), %ecx
movb %al, -0x55(%rbp)
jg 0x15a3
cmpb $0x0, -0x39(%rbp)
setne %al
xorb $-0x1, %al
movb %al, -0x55(%rbp)
movb -0x55(%rbp), %al
testb $0x1, %al
jne 0x15ac
jmp 0x15f8
movslq -0x2c(%rbp), %rax
movzbl -0x45(%rbp,%rax), %eax
movq -0x20(%rbp), %rcx
movslq -0x2c(%rbp), %rdx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
jle 0x15ce
movb $0x0, -0x1(%rbp)
jmp 0x16ce
movslq -0x2c(%rbp), %rax
movzbl -0x45(%rbp,%rax), %eax
movq -0x20(%rbp), %rcx
movslq -0x2c(%rbp), %rdx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
jge 0x15eb
movb $0x1, -0x39(%rbp)
jmp 0x15ed
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x158a
movb $0x3, -0x46(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x168b
movq -0x38(%rbp), %rdi
movl -0x28(%rbp), %esi
leaq -0x38(%rbp), %rdx
callq 0x1410
cmpl $0x5, %eax
jne 0x1675
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
movb -0x46(%rbp), %cl
movslq -0x54(%rbp), %rax
movb %cl, -0x45(%rbp,%rax)
cmpb $0x0, -0x39(%rbp)
jne 0x1673
movzbl -0x46(%rbp), %eax
movq -0x20(%rbp), %rcx
movslq -0x54(%rbp), %rdx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
jle 0x1659
movb $0x0, -0x1(%rbp)
jmp 0x16ce
movzbl -0x46(%rbp), %eax
movq -0x20(%rbp), %rcx
movslq -0x54(%rbp), %rdx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
jge 0x1671
movb $0x1, -0x39(%rbp)
jmp 0x1673
jmp 0x167e
movl -0x50(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x50(%rbp)
movb -0x46(%rbp), %al
addb $0x1, %al
movb %al, -0x46(%rbp)
jmp 0x15fc
cmpl $0xc, -0x4c(%rbp)
jl 0x1699
movl -0x50(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x169f
movb $0x0, -0x1(%rbp)
jmp 0x16ce
movl $0x0, -0x2c(%rbp)
cmpl $0xc, -0x2c(%rbp)
jge 0x16ca
movslq -0x2c(%rbp), %rax
movb -0x45(%rbp,%rax), %dl
movq -0x20(%rbp), %rax
movslq -0x2c(%rbp), %rcx
movb %dl, (%rax,%rcx)
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x16a6
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
addq $0x60, %rsp
popq %rbp
retq
nopw (%rax,%rax)