// File: /workspace/github_c_makefile_star2_O3/mishun[P]plantri/fullgen.c
// Function: codiere
int codiere(PLANMAP map, FLAECHENTYP *code, KANTE *start, int codesize, int laenge)
{
int i, j, stelle, zaehler, knotenzahl, flaechennumber, verschiebung, merkeknoten;
/* zaehler zaehlt die Flaechengroesse, knotenzahl die zahl der restlichen knoten */
int tempknz, laufzaehler, autozaehler, minitest;
KANTE *run, *merke, *run2;
FLAECHENTYP testcode[9];


if (start->name != aussen) { fprintf(stderr,"Codiere must start at external edge !\n"); 
			     exit(8); }

tempknz=map[0][0].name;

if (tempknz==5) { code[0]=1; return(1); }

for (i=1; i<=tempknz; i++) for (j=0; j<3; j++)
  if (map[i][j].name == aussen) map[i][j].dummy= infty; else map[i][j].dummy=0;

run=start; stelle=0; knotenzahl=tempknz;

if (laenge) /* d.h. 6-Fuenfecke-patch */
  { verschiebung=0;
    code[2]=unbelegt; 
    code[0]=0; /*code[1]=verschiebung;*/ stelle=2; 
    merkeknoten=knotenzahl;
    laufzaehler=1;
    /* Jetzt den minimalen Code ausrechnen: */
    for ( autozaehler=0, run2=start->prev; 
	 (verschiebung<laenge) && !autozaehler; verschiebung++, run2=run2->prev->invers->next->invers)
      if (checksize(run2)==5)
	{
	  laufzaehler++;
	  run=run2->next;
	  stelle=2; knotenzahl=merkeknoten;
	  flaechennumber=0;
	  while (stelle<codesize)
	    { flaechennumber++;
	      zaehler=2;
	      while (run->prev->invers->prev->dummy>=laufzaehler) 
		                                     run=run->prev->invers->prev; /* sicherstellen, dass davor
										     keine aussenkanten sind */
	      run->prev->invers->dummy=laufzaehler; run->next->invers->dummy=laufzaehler;
	      run=run->next->invers->next; knotenzahl--;
	      while (run->dummy>=laufzaehler)
		{ zaehler++; knotenzahl--; run->prev->invers->dummy=laufzaehler; 
		  run->next->invers->dummy=laufzaehler;
		  run=run->next->invers->next; }
	      merke=run->next;
	      run=run->prev;
	      while (merke->dummy<laufzaehler)
		{ zaehler++; merke=merke->invers->prev; }
	      if (zaehler==5) { testcode[stelle]=flaechennumber; stelle++; }
	      else if (zaehler!=6) { fprintf(stderr,"ERROR in CODIERE: No 5- or 6-Gon !\n"); exit(9); }
	      if (knotenzahl==5) { testcode[stelle]=flaechennumber+1; stelle++; }
	    } /* ende while */
	  if ((minitest=codecmp(code+2,testcode+2,6))>0) 
	    { if (verschiebung) return(0);
	      else { for (stelle=2; stelle<8; stelle++) code[stelle]=testcode[stelle]; }
	    }
	  if (minitest==0) autozaehler=1; /* verschiebung>=1 ist automatisch */
	} /* ende checksize==5 */
    if (autozaehler) code[1]=verschiebung-1;
    else code[1]=laenge;
    return(1);
  } /* ende if */



 flaechennumber=0;



while (stelle<codesize)
  { flaechennumber++;
    zaehler=2;
    while (run->prev->invers->prev->dummy) run=run->prev->invers->prev; /* sicherstellen, dass davor
									   keine aussenkanten sind */
    run->prev->invers->dummy=1; run->next->invers->dummy=1;
    run=run->next->invers->next; knotenzahl--;
    while (run->dummy)
      { zaehler++; knotenzahl--; run->prev->invers->dummy=1; run->next->invers->dummy=1;
	run=run->next->invers->next; }
    merke=run->next;
    run=run->prev;
    while (!(merke->dummy))
      { zaehler++; merke=merke->invers->prev; }
    if (zaehler==5) { code[stelle]=flaechennumber; stelle++; }
    else if (zaehler!=6) { fprintf(stderr,"ERROR in CODIERE(2): No 5- or 6-Gon !\n"); exit(10); }
    if (knotenzahl==5) { code[stelle]=flaechennumber+1; stelle++; }
  } /* ende while */

return(1);

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
cmpw $0x246, 0x2(%rdx)       # imm = 0x246
jne 0x54b6
movzwl 0x2(%rdi), %r9d
testl %r9d, %r9d
je 0x51f7
cmpl $0x5, %r9d
jne 0x51a9
movb $0x1, (%rsi)
jmp 0x5494
leaq 0x1(%r9), %rax
addq $0x98, %rdi
movl $0x1, %r10d
movabsq $0x7fffffffffffffff, %r11 # imm = 0x7FFFFFFFFFFFFFFF
xorl %ebx, %ebx
cmpw $0x246, -0x6(%rdi,%rbx) # imm = 0x246
movl $0x0, %r14d
cmoveq %r11, %r14
movq %r14, (%rdi,%rbx)
addq $0x30, %rbx
cmpq $0x90, %rbx
jne 0x51c6
incq %r10
addq $0x90, %rdi
cmpq %rax, %r10
jne 0x51c4
testl %r8d, %r8d
je 0x53b2
movb $-0x1, 0x2(%rsi)
movb $0x0, (%rsi)
jle 0x53a9
leaq 0x2(%rsi), %rdi
addq $0x18, %rdx
xorl %eax, %eax
movl $0x1, %r10d
movq (%rdx), %rdx
movl $0x5, %ebp
movq %rdx, %r11
movq 0x28(%r11), %r11
movq 0x20(%r11), %r11
decl %ebp
cmpq %rdx, %r11
jne 0x5228
movb $0x1, %r11b
testl %ebp, %ebp
jne 0x5380
incl %r10d
cmpl $0x3, %ecx
jl 0x532e
movq 0x20(%rdx), %r12
movslq %r10d, %rbx
movl $0x2, %r14d
xorl %r11d, %r11d
movl %r9d, %ebp
movl %r11d, %r15d
movq %r12, %r11
movq 0x18(%r12), %r12
movq 0x28(%r12), %r13
movq 0x18(%r13), %r12
cmpq %rbx, 0x8(%r12)
jge 0x5264
movq %rbx, 0x8(%r13)
movq 0x20(%r11), %r11
movq 0x28(%r11), %r11
movq %rbx, 0x8(%r11)
movq 0x20(%r11), %r11
cmpq %rbx, 0x8(%r11)
jge 0x52a0
decl %ebp
movl $0x2, %r13d
jmp 0x52d3
movl $0x1, %r13d
movq 0x18(%r11), %r12
movq 0x28(%r12), %r12
movq %rbx, 0x8(%r12)
movq 0x20(%r11), %r11
movq 0x28(%r11), %r11
movq %rbx, 0x8(%r11)
movq 0x20(%r11), %r11
incl %r13d
cmpq %rbx, 0x8(%r11)
jge 0x52a6
subl %r13d, %ebp
incl %r13d
movq 0x18(%r11), %r12
movq 0x20(%r11), %r11
cmpq %rbx, 0x8(%r11)
jge 0x52ee
incl %r13d
movq 0x28(%r11), %r11
movq 0x18(%r11), %r11
jmp 0x52db
leal 0x1(%r15), %r11d
cmpl $0x6, %r13d
je 0x530d
cmpl $0x5, %r13d
jne 0x54ac
movslq %r14d, %r14
movb %r11b, 0xf(%rsp,%r14)
incl %r14d
cmpl $0x5, %ebp
jne 0x5321
addb $0x2, %r15b
movslq %r14d, %r14
movb %r15b, 0xf(%rsp,%r14)
incl %r14d
cmpl %ecx, %r14d
jl 0x5261
movb 0x11(%rsp), %bl
movb (%rdi), %r11b
movl %ebx, %ebp
cmpb %bl, %r11b
jne 0x5357
xorl %r14d, %r14d
movb 0x3(%rsi,%r14), %r11b
movb 0x12(%rsp,%r14), %bpl
cmpb %bpl, %r11b
jne 0x5357
leaq 0x1(%r14), %r15
cmpl $0x4, %r14d
movq %r15, %r14
jne 0x533b
cmpb %bpl, %r11b
jbe 0x5379
testl %eax, %eax
jne 0x54a8
leaq 0x11(%rsp), %r15
movzwl 0x4(%r15), %r14d
movw %r14w, 0x4(%rdi)
movl (%r15), %r14d
movl %r14d, (%rdi)
cmpb %bpl, %r11b
setne %r11b
incl %eax
cmpl %r8d, %eax
jge 0x53a0
movq 0x18(%rdx), %rdx
movq 0x28(%rdx), %rdx
movq 0x20(%rdx), %rdx
addq $0x28, %rdx
testb %r11b, %r11b
jne 0x521d
testb %r11b, %r11b
je 0x548f
movb %r8b, 0x1(%rsi)
jmp 0x5494
movl $0x1, %eax
testl %ecx, %ecx
jle 0x5499
xorl %ebx, %ebx
movl $0x1, %edi
xorl %r8d, %r8d
movl %ebx, %r10d
movq %rdx, %r11
movq 0x18(%rdx), %rdx
movq 0x28(%rdx), %rbx
movq 0x18(%rbx), %rdx
cmpq $0x0, 0x8(%rdx)
jne 0x53cc
movq %rdi, 0x8(%rbx)
movq 0x20(%r11), %rdx
movq 0x28(%rdx), %rdx
movq %rdi, 0x8(%rdx)
movq 0x20(%rdx), %rbx
cmpq $0x0, 0x8(%rbx)
je 0x5431
movl $0x1, %r11d
movq 0x18(%rbx), %rdx
movq 0x28(%rdx), %rdx
movq %rdi, 0x8(%rdx)
movq 0x20(%rbx), %rdx
movq 0x28(%rdx), %rdx
movq %rdi, 0x8(%rdx)
movq 0x20(%rdx), %rbx
incl %r11d
cmpq $0x0, 0x8(%rbx)
jne 0x5403
subl %r11d, %r9d
incl %r11d
jmp 0x543a
decl %r9d
movl $0x2, %r11d
movq 0x18(%rbx), %rdx
movq 0x20(%rbx), %rbx
cmpq $0x0, 0x8(%rbx)
jne 0x5456
incl %r11d
movq 0x28(%rbx), %rbx
movq 0x18(%rbx), %rbx
jmp 0x5442
leal 0x1(%r10), %ebx
cmpl $0x6, %r11d
je 0x5470
cmpl $0x5, %r11d
jne 0x54b1
movslq %r8d, %r8
movb %bl, (%rsi,%r8)
incl %r8d
cmpl $0x5, %r9d
jne 0x5484
addb $0x2, %r10b
movslq %r8d, %r8
movb %r10b, (%rsi,%r8)
incl %r8d
cmpl %ecx, %r8d
jl 0x53c9
jmp 0x5499
decb %al
movb %al, 0x1(%rsi)
movl $0x1, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
xorl %eax, %eax
jmp 0x5499
callq 0x1571
callq 0x1596
callq 0x154c