// File: /workspace/github_c_makefile_star2_O3/mishun[P]plantri/fullgen.c
// Function: reko_bb_code
void reko_bb_code(PLANMAP map, KNOTENTYP *code, KNOTENTYP *spiegelcode, int laenge, 
		  KANTE *start, KANTE *ministart[], KANTE *spiegelministart[], int *patchknz)
{
int i, j, stelle, zaehler, knotenzahl, flaechennumber, schichtenzaehler, verschiebung, merkeknoten;
/* zaehler zaehlt die Flaechengroesse, knotenzahl die zahl der restlichen knoten */
int laufzaehler;
KANTE *run, *merke, *run2, *merke_run, *mstart;
KNOTENTYP testcode[9];
int mstartzaehler, test, k, laenge_2;
BOOL mark[N+1];


if (start->mininame != aussen) { fprintf(stderr,"Reko_BB_code must start at external edge !\n"); 
			     exit(29); }
for (i=0; i<8; i++) { code[i]=spiegelcode[i]=unbelegt; testcode[i]=0; }

mstartzaehler=0;
for (i=0; i<7; i++) ministart[i]=spiegelministart[i]=nil;

for (i=1; i<=map[0][0].name; i++) mark[i]=0;
mark[start->ursprung]=1; *patchknz=1;

zaehle_knoten(map,start->ursprung,mark,patchknz);

laenge_2 = laenge/2;
run=start; knotenzahl=*patchknz;

verschiebung=schichtenzaehler=0;

while (!verschiebung)
  {for (i=1, run2=run->prev; (i<=laenge_2) && !verschiebung; i++, run2=run2->prev->invers->next->invers)
     /* muss bei 1 starten und nachher korrigiert werden, um den Abbruch bei 0 zu gewaehrleisten */
     { if (checksize(run2) == 5) { run=run2->next; verschiebung=i; } }
   if (!verschiebung) { schichtenzaehler++;
			knotenzahl -= laenge;
			run=run->prev->invers->next->invers;
			for (run2=run, i=0; i<laenge_2; i++, 
			     run2=run2->next->invers->next->invers->next)
			  { run2->dummy=infty; }
		      }
 } /* ende while */
code[0]=schichtenzaehler; code[1]=0; /* verschiebung wird nicht betrachtet */ stelle=2; 
merkeknoten=knotenzahl;
laufzaehler=1;
/* Jetzt den minimalen Code ausrechnen: */
for ( run2=run->prev; verschiebung<=laenge_2; verschiebung++, run2=run2->prev->invers->next->invers)
  if (checksize(run2)==5)
    { merke_run=run2->next; 
      laufzaehler++;
      run=run2->next;
      stelle=2; knotenzahl=merkeknoten;
      flaechennumber=0;
      while (stelle<8)
	{ 
	  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 REKO_BB_CODE: No 5- or 6-Gon !\n"); exit(30); }
	  if (knotenzahl==5) { testcode[stelle]=flaechennumber+1; stelle++; }
	} /* ende while */
      if ((test=codecmp_kn(code+2,testcode+2,6))>=0) 
	{ if (test>0) { for (stelle=2; stelle<8; stelle++) code[stelle]=testcode[stelle];
			for (k=0; k<mstartzaehler; k++) ministart[k]=nil;
		        mstartzaehler=0;}
	  mstart=merke_run;
	  for (k=0; k<schichtenzaehler; k++) mstart = mstart->invers->prev->invers->next;
	  ministart[mstartzaehler]=mstart->prev->invers->next;
	  mstartzaehler++;
	}
    } /* ende checksize==5 */



/* Jetzt den Spiegelcode */

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

run=start; knotenzahl=*patchknz;

verschiebung=schichtenzaehler=mstartzaehler=0;

while (!verschiebung)
  {for (i=1, run2=run->prev; (i<=laenge_2) && !verschiebung; i++, run2=run2->invers->prev->invers->next)
     /* muss bei 1 starten und nachher korrigiert werden, um den Abbruch bei 0 zu gewaehrleisten */
     { if (checksize(run2) == 5) { run=run2->next; verschiebung=i; } }
   if (!verschiebung) { schichtenzaehler++;
			knotenzahl -= laenge;
			run=run->next->invers->prev->invers;
			for (run2=run, i=0; i<laenge_2; i++, 
			     run2=run2->prev->invers->prev->invers->prev)
			  { run2->dummy=infty; }
		      }
 } /* ende while */
spiegelcode[0]=schichtenzaehler; spiegelcode[1]=0; /* verschiebung wird nicht betrachtet */ stelle=2; 
merkeknoten=knotenzahl;
laufzaehler=1;
/* Jetzt den minimalen Code ausrechnen: */
for ( run2=run->prev; verschiebung<=laenge_2; verschiebung++, run2=run2->invers->prev->invers->next)
  if (checksize(run2)==5)
    { merke_run=run2->next; 
      laufzaehler++;
      run=run2->next;
      stelle=2; knotenzahl=merkeknoten;
      flaechennumber=0;
      while (stelle<8)
	{ flaechennumber++;
	  zaehler=2;
	  while (run->next->invers->next->dummy>=laufzaehler) 
	    run=run->next->invers->next; /* sicherstellen, dass davor
					    keine aussenkanten sind */
	  run->next->invers->dummy=laufzaehler; run->prev->invers->dummy=laufzaehler;
	  run=run->prev->invers->prev; knotenzahl--;
	  while (run->dummy>=laufzaehler)
	    { zaehler++; knotenzahl--; run->next->invers->dummy=laufzaehler; 
	      run->prev->invers->dummy=laufzaehler;
	      run=run->prev->invers->prev; }
	  merke=run->prev;
	  run=run->next;
	  while (merke->dummy<laufzaehler)
	    { zaehler++; merke=merke->invers->next; }
	  if (zaehler==5) { testcode[stelle]=flaechennumber; stelle++; }
	  else if (zaehler!=6) { fprintf(stderr,"ERROR in REKO_BB_CODE(2):  No 5- or 6-Gon !\n"); exit(31); }
	  if (knotenzahl==5) { testcode[stelle]=flaechennumber+1; stelle++; }
	} /* ende while */
      if ((test=codecmp_kn(spiegelcode+2,testcode+2,6))>=0) 
	{ if (test>0) { for (stelle=2; stelle<8; stelle++) spiegelcode[stelle]=testcode[stelle];
			for (k=0; k<mstartzaehler; k++) spiegelministart[k]=nil;
		        mstartzaehler=0;}
	  mstart=merke_run;
	  for (k=0; k<schichtenzaehler; k++) mstart = mstart->invers->next->invers->prev;
	  spiegelministart[mstartzaehler]=mstart->next->invers->prev;
	  mstartzaehler++;
	}
    } /* ende checksize==5 */

return;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2a8, %rsp            # imm = 0x2A8
cmpw $0x246, 0x14(%r8)       # imm = 0x246
jne 0x750f
movq %r8, %r15
movl %ecx, %ebx
movq %rdi, %r12
movq 0x2e8(%rsp), %r13
movq 0x2e0(%rsp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
xorl %eax, %eax
movw $0xff, %cx
movw %cx, (%rdx,%rax,2)
movw %cx, (%rsi,%rax,2)
incq %rax
cmpq $0x8, %rax
jne 0x6e2c
movq %rsi, 0x40(%rsp)
movq %rdx, 0x38(%rsp)
xorl %eax, %eax
xorl %ecx, %ecx
movq %rax, (%rdi,%rcx,8)
movq %rax, (%r9,%rcx,8)
incq %rcx
cmpq $0x7, %rcx
jne 0x6e4b
movq %r9, 0x50(%rsp)
movzwl 0x2(%r12), %edx
testq %rdx, %rdx
je 0x6e78
leaq 0x61(%rsp), %rdi
xorl %esi, %esi
callq 0x1080
movabsq $0x7fffffffffffffff, %r14 # imm = 0x7FFFFFFFFFFFFFFF
movzwl (%r15), %esi
movb $0x1, 0x60(%rsp,%rsi)
movl $0x1, (%r13)
leaq 0x60(%rsp), %rdx
movq %r12, %rdi
movq %r13, %rcx
callq 0x6d5d
movq %r14, %r9
movl %ebx, %ebp
shrl $0x1f, %ebp
addl %ebx, %ebp
sarl %ebp
movl (%r13), %r8d
xorl %r10d, %r10d
movq %r15, %rax
movl %r8d, %r11d
cmpl $0x1, %ebx
jle 0x6f57
leaq 0x18(%rax), %rdx
movl $0x1, %ecx
movq (%rdx), %rdx
movl $0x5, %esi
movq %rdx, %rdi
movq 0x28(%rdi), %rdi
movq 0x20(%rdi), %rdi
decl %esi
cmpq %rdx, %rdi
jne 0x6ed9
xorl %r13d, %r13d
testl %esi, %esi
jne 0x6ef6
movq 0x20(%rdx), %rax
movl %ecx, %r13d
cmpl %ebp, %ecx
jge 0x6f11
incl %ecx
movq 0x18(%rdx), %rdx
movq 0x28(%rdx), %rdx
movq 0x20(%rdx), %rdx
addq $0x28, %rdx
testl %r13d, %r13d
je 0x6ece
testl %r13d, %r13d
jne 0x6f70
incl %r10d
subl %ebx, %r11d
xorl %r13d, %r13d
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
cmpl $0x2, %ebx
jl 0x6f70
movl %ebp, %ecx
movq %rax, %rdx
movq %r9, 0x8(%rdx)
movq 0x20(%rdx), %rdx
movq 0x28(%rdx), %rdx
movq 0x20(%rdx), %rdx
movq 0x28(%rdx), %rdx
movq 0x20(%rdx), %rdx
decl %ecx
jne 0x6f39
jmp 0x6f70
incl %r10d
subl %ebx, %r11d
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
xorl %r13d, %r13d
testl %r13d, %r13d
je 0x6ebc
movl %r11d, 0x4c(%rsp)
movq 0x40(%rsp), %rcx
movl %r10d, 0x48(%rsp)
movw %r10w, (%rcx)
movw $0x0, 0x2(%rcx)
cmpl %ebp, %r13d
movq 0x38(%rsp), %r10
movq 0x2e0(%rsp), %r11
jg 0x71e5
addq $0x18, %rax
movq 0x40(%rsp), %rcx
addq $0x4, %rcx
movq %rcx, 0x58(%rsp)
movl $0x1, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movl %r8d, 0xc(%rsp)
movl %ebx, 0x1c(%rsp)
movq (%rax), %r14
movl $0x5, %eax
movq %r14, %rcx
movq 0x28(%rcx), %rcx
movq 0x20(%rcx), %rcx
decl %eax
cmpq %r14, %rcx
jne 0x6fdf
testl %eax, %eax
jne 0x71c5
movq 0x20(%r14), %rbx
movl 0x8(%rsp), %eax
incl %eax
movl %eax, 0x8(%rsp)
cltq
movl $0x2, %ecx
xorl %r9d, %r9d
movq %rbx, %rdi
movl 0x4c(%rsp), %edx
movl %r9d, %esi
movq %rdi, %r8
movq 0x18(%rdi), %rdi
movq 0x28(%rdi), %r9
movq 0x18(%r9), %rdi
cmpq %rax, 0x8(%rdi)
jge 0x7018
movq %rax, 0x8(%r9)
movq 0x20(%r8), %rdi
movq 0x28(%rdi), %rdi
movq %rax, 0x8(%rdi)
movq 0x20(%rdi), %r9
cmpq %rax, 0x8(%r9)
jge 0x7051
decl %edx
movl $0x2, %r8d
jmp 0x7082
movl $0x1, %r8d
movq 0x18(%r9), %rdi
movq 0x28(%rdi), %rdi
movq %rax, 0x8(%rdi)
movq 0x20(%r9), %rdi
movq 0x28(%rdi), %rdi
movq %rax, 0x8(%rdi)
movq 0x20(%rdi), %r9
incl %r8d
cmpq %rax, 0x8(%r9)
jge 0x7057
subl %r8d, %edx
incl %r8d
movq 0x18(%r9), %rdi
movq 0x20(%r9), %r9
cmpq %rax, 0x8(%r9)
jge 0x709d
incl %r8d
movq 0x28(%r9), %r9
movq 0x18(%r9), %r9
jmp 0x708a
leal 0x1(%rsi), %r9d
cmpl $0x6, %r8d
je 0x70bc
cmpl $0x5, %r8d
jne 0x7505
movslq %ecx, %rcx
movw %r9w, 0x20(%rsp,%rcx,2)
incl %ecx
cmpl $0x5, %edx
jne 0x70ce
addl $0x2, %esi
movslq %ecx, %rcx
movw %si, 0x20(%rsp,%rcx,2)
incl %ecx
cmpl $0x8, %ecx
jl 0x7015
movq 0x58(%rsp), %rax
movzwl (%rax), %eax
movzwl 0x24(%rsp), %ecx
cmpw %cx, %ax
movabsq $0x7fffffffffffffff, %r9 # imm = 0x7FFFFFFFFFFFFFFF
movq 0x40(%rsp), %rdi
jne 0x7115
xorl %edx, %edx
movzwl 0x6(%rdi,%rdx,2), %eax
movzwl 0x26(%rsp,%rdx,2), %ecx
cmpw %cx, %ax
jne 0x7115
leaq 0x1(%rdx), %rsi
cmpl $0x4, %edx
movq %rsi, %rdx
jne 0x70fa
cmpw %cx, %ax
jb 0x71bc
je 0x717c
leaq 0x24(%rsp), %rdx
movl 0x8(%rdx), %eax
movq 0x58(%rsp), %rcx
movl %eax, 0x8(%rcx)
movq (%rdx), %rax
movq %rax, (%rcx)
movq 0x10(%rsp), %rax
testl %eax, %eax
jle 0x7173
movl %eax, %edx
shlq $0x3, %rdx
movq $0x0, 0x10(%rsp)
movq 0x50(%rsp), %rdi
xorl %esi, %esi
callq 0x1080
movabsq $0x7fffffffffffffff, %r9 # imm = 0x7FFFFFFFFFFFFFFF
movq 0x2e0(%rsp), %r11
movq 0x38(%rsp), %r10
jmp 0x717c
movq $0x0, 0x10(%rsp)
movl 0x48(%rsp), %eax
testl %eax, %eax
jle 0x7198
movq 0x28(%rbx), %rcx
movq 0x18(%rcx), %rcx
movq 0x28(%rcx), %rcx
movq 0x20(%rcx), %rbx
decl %eax
jne 0x7184
movq 0x18(%rbx), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq 0x10(%rsp), %rdx
movslq %edx, %rdx
movq 0x50(%rsp), %rcx
movq %rax, (%rcx,%rdx,8)
incl %edx
movq %rdx, 0x10(%rsp)
movl 0xc(%rsp), %r8d
movl 0x1c(%rsp), %ebx
leal 0x1(%r13), %ecx
movq 0x18(%r14), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
addq $0x28, %rax
cmpl %ebp, %r13d
movl %ecx, %r13d
jne 0x6fd4
movzwl 0x2(%r12), %eax
testq %rax, %rax
je 0x723a
addq $0xa4, %r12
movl $0x1, %ecx
cmpb $0x0, 0x60(%rsp,%rcx)
je 0x7227
xorl %edx, %edx
cmpw $0x246, (%r12,%rdx)     # imm = 0x246
movl $0x0, %esi
cmoveq %r9, %rsi
movq %rsi, -0xc(%r12,%rdx)
addq $0x30, %rdx
cmpq $0x90, %rdx
jne 0x7205
leaq 0x1(%rcx), %rdx
addq $0x90, %r12
cmpq %rax, %rcx
movq %rdx, %rcx
jne 0x71fc
xorl %r14d, %r14d
cmpl $0x1, %ebx
jle 0x72d8
leaq 0x18(%r15), %rcx
movl $0x1, %eax
movq (%rcx), %rcx
movl $0x5, %edx
movq %rcx, %rsi
movq 0x28(%rsi), %rsi
movq 0x20(%rsi), %rsi
decl %edx
cmpq %rcx, %rsi
jne 0x725a
xorl %r12d, %r12d
testl %edx, %edx
jne 0x7277
movq 0x20(%rcx), %r15
movl %eax, %r12d
cmpl %ebp, %eax
jge 0x7292
incl %eax
movq 0x28(%rcx), %rcx
movq 0x18(%rcx), %rcx
movq 0x28(%rcx), %rcx
addq $0x20, %rcx
testl %r12d, %r12d
je 0x724f
testl %r12d, %r12d
jne 0x72f1
incl %r14d
subl %ebx, %r8d
xorl %r12d, %r12d
movq 0x20(%r15), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %r15
cmpl $0x2, %ebx
jl 0x72f1
movl %ebp, %eax
movq %r15, %rcx
movq %r9, 0x8(%rcx)
movq 0x18(%rcx), %rcx
movq 0x28(%rcx), %rcx
movq 0x18(%rcx), %rcx
movq 0x28(%rcx), %rcx
movq 0x18(%rcx), %rcx
decl %eax
jne 0x72ba
jmp 0x72f1
incl %r14d
subl %ebx, %r8d
movq 0x20(%r15), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %r15
xorl %r12d, %r12d
testl %r12d, %r12d
je 0x723d
movl %r8d, 0xc(%rsp)
movw %r14w, (%r10)
movw $0x0, 0x2(%r10)
cmpl %ebp, %r12d
jg 0x74f3
addq $0x18, %r15
leaq 0x4(%r10), %rax
movq %rax, 0x10(%rsp)
movl $0x1, 0x8(%rsp)
xorl %ebx, %ebx
movq (%r15), %r15
movl $0x5, %eax
movq %r15, %rcx
movq 0x28(%rcx), %rcx
movq 0x20(%rcx), %rcx
decl %eax
cmpq %r15, %rcx
jne 0x7335
testl %eax, %eax
jne 0x74d2
movq 0x20(%r15), %r13
movl 0x8(%rsp), %eax
incl %eax
movl %eax, 0x8(%rsp)
cltq
movl $0x2, %ecx
xorl %r9d, %r9d
movq %r13, %rdi
movl 0xc(%rsp), %edx
movl %r9d, %esi
movq %rdi, %r8
movq 0x20(%rdi), %rdi
movq 0x28(%rdi), %r9
movq 0x20(%r9), %rdi
cmpq %rax, 0x8(%rdi)
jge 0x736e
movq %rax, 0x8(%r9)
movq 0x18(%r8), %rdi
movq 0x28(%rdi), %rdi
movq %rax, 0x8(%rdi)
movq 0x18(%rdi), %rdi
cmpq %rax, 0x8(%rdi)
jge 0x73a7
decl %edx
movl $0x2, %r8d
jmp 0x73d8
movl $0x1, %r8d
movq 0x20(%rdi), %r9
movq 0x28(%r9), %r9
movq %rax, 0x8(%r9)
movq 0x18(%rdi), %rdi
movq 0x28(%rdi), %rdi
movq %rax, 0x8(%rdi)
movq 0x18(%rdi), %rdi
incl %r8d
cmpq %rax, 0x8(%rdi)
jge 0x73ad
subl %r8d, %edx
incl %r8d
movq 0x18(%rdi), %r9
movq 0x20(%rdi), %rdi
cmpq %rax, 0x8(%r9)
jge 0x73f3
incl %r8d
movq 0x28(%r9), %r9
movq 0x20(%r9), %r9
jmp 0x73e0
leal 0x1(%rsi), %r9d
cmpl $0x6, %r8d
je 0x7412
cmpl $0x5, %r8d
jne 0x750a
movslq %ecx, %rcx
movw %r9w, 0x20(%rsp,%rcx,2)
incl %ecx
cmpl $0x5, %edx
jne 0x7424
addl $0x2, %esi
movslq %ecx, %rcx
movw %si, 0x20(%rsp,%rcx,2)
incl %ecx
cmpl $0x8, %ecx
jl 0x736b
movq 0x10(%rsp), %rax
movzwl (%rax), %eax
movzwl 0x24(%rsp), %ecx
cmpw %cx, %ax
jne 0x745d
xorl %edx, %edx
movzwl 0x6(%r10,%rdx,2), %eax
movzwl 0x26(%rsp,%rdx,2), %ecx
cmpw %cx, %ax
jne 0x745d
leaq 0x1(%rdx), %rsi
cmpl $0x4, %edx
movq %rsi, %rdx
jne 0x7441
cmpw %cx, %ax
jb 0x74d2
je 0x74a1
leaq 0x24(%rsp), %rdx
movl 0x8(%rdx), %eax
movq 0x10(%rsp), %rcx
movl %eax, 0x8(%rcx)
movq (%rdx), %rax
movq %rax, (%rcx)
testl %ebx, %ebx
jle 0x749f
movl %ebx, %edx
shlq $0x3, %rdx
xorl %ebx, %ebx
movq %r11, %rdi
xorl %esi, %esi
callq 0x1080
movq 0x2e0(%rsp), %r11
movq 0x38(%rsp), %r10
jmp 0x74a1
xorl %ebx, %ebx
testl %r14d, %r14d
jle 0x74bd
movl %r14d, %eax
movq 0x28(%r13), %rcx
movq 0x20(%rcx), %rcx
movq 0x28(%rcx), %rcx
movq 0x18(%rcx), %r13
decl %eax
jne 0x74a9
movq 0x20(%r13), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movslq %ebx, %rbx
movq %rax, (%r11,%rbx,8)
incl %ebx
leal 0x1(%r12), %eax
movq 0x28(%r15), %rcx
movq 0x18(%rcx), %rcx
movq 0x28(%rcx), %r15
addq $0x20, %r15
cmpl %ebp, %r12d
movl %eax, %r12d
jne 0x732a
addq $0x2a8, %rsp            # imm = 0x2A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x1777
callq 0x179c
callq 0x1752