// File: /workspace/github_c_makefile_star2_O2/mishun[P]plantri/fullgen.c
// Function: baue_brille
void baue_brille(int pfadlaenge,int laenge_1,int laenge_3,PLANMAP map, 
		 KANTE **anfang_1, KANTE **anfang_2, KANTE **anfang_3)
{
int stelle_2, knotenzahl, i;
KANTE *aussenzeiger, *letzte_Kante, *startkante_1, *startkante_2;

knotenzahl=pfadlaenge-1;

/* zuerst:

    knotenzahl-------stelle_2----------stelle1-------
                                                    |
                                           1        |
					   |        |
					   2--3-----
ohne die zykelschliessenden Kanten */



map[1][1].name=2; map[1][1].invers=map[2]+0; 
for (i=1; i<=knotenzahl; i++)
  { map[i][0].name=i-1; map[i][0].invers=map[i-1]+1; 
    map[i][1].name=aussen; map[i][1].invers=nil;
    map[i][2].name=i+1; map[i][2].invers=map[i+1]+0; 
    i++;
    if (i<=knotenzahl)
      { map[i][0].name=i-1; map[i][0].invers=map[i-1]+2; 
	map[i][2].name=aussen; map[i][2].invers=nil;
	map[i][1].name=i+1; map[i][1].invers=map[i+1]+0; }
   }

/* Knoten 1 und Knoten knotenzahl haben jetzt falsche vorher bzw nachher
   werte, sie muessen jetzt mit der Brille verklebt werden */
   
if ((laenge_1%2)==0) aussenzeiger=map[laenge_1]+2; else aussenzeiger=map[laenge_1]+1;

aussenzeiger->name=1; aussenzeiger->invers=map[1]+0;
map[1][0].name=laenge_1; map[1][0].invers=aussenzeiger;

stelle_2=pfadlaenge-laenge_3;
if ((stelle_2%2)==0) aussenzeiger=map[stelle_2]+2; else aussenzeiger=map[stelle_2]+1;
if ((knotenzahl%2)==0) letzte_Kante=map[knotenzahl]+1; else letzte_Kante=map[knotenzahl]+2;

letzte_Kante->name=stelle_2; letzte_Kante->invers=aussenzeiger;
aussenzeiger->name=knotenzahl; aussenzeiger->invers=letzte_Kante;

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

/* Jetzt die anfangskanten belegen: */

if ((laenge_1 %2)==0) { startkante_1=map[2]+2; startkante_2=map[1]+1; }
                     /* dann zeigt die Aussenkante von Knoten 2 ins innere von zykel_1 */
               else  { startkante_2=map[2]+2; startkante_1=map[1]+1; }
*anfang_1=suchestart(startkante_1);
*anfang_2=suchestart(startkante_2);

if ((knotenzahl%2)==0)
  { if ((laenge_3 % 2)==0) startkante_1=map[knotenzahl-1]+1;
       else startkante_1=map[knotenzahl]+2; }
  else /* d.h. knotenzahl ungerade */
  { if ((laenge_3 % 2)==0) startkante_1=map[knotenzahl-1]+2;
       else startkante_1=map[knotenzahl]+1; }
*anfang_3=suchestart(startkante_1);

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r9, 0x10(%rsp)
movq %r8, 0x8(%rsp)
movq %rcx, %rbx
movl %edx, %ebp
leal -0x1(%rdi), %ecx
leaq 0x90(%rbx), %rax
movw $0x2, 0xc2(%rbx)
leaq 0x120(%rbx), %r8
movq %r8, 0xe8(%rbx)
movslq %edi, %r14
movslq %ecx, %r15
pushq $0x1
popq %rcx
movl $0x90, %r11d
cmpq %r14, %rcx
jge 0xb21e
leal -0x1(%rcx), %r8d
imulq $0x90, %rcx, %r10
leaq (%rbx,%r10), %r9
addq %rbx, %r10
addq $-0x60, %r10
movw %r8w, 0x62(%r10)
movq %r10, 0x88(%r10)
movw $0x246, 0x92(%r10)      # imm = 0x246
andq $0x0, 0xb8(%r10)
leal 0x1(%rcx), %r8d
movw %r8w, 0xc2(%r10)
leaq (%r9,%r11), %r8
movq %r8, 0xe8(%r10)
cmpq %r15, %rcx
jge 0xb215
addq $0x60, %r9
movw %cx, 0x2(%r8)
movq %r9, 0x28(%r8)
movw $0x246, 0x62(%r8)       # imm = 0x246
andq $0x0, 0x88(%r8)
addq $0x2, %rcx
movw %cx, 0x32(%r8)
imulq $0x90, %rcx, %r9
addq %rbx, %r9
movq %r9, 0x58(%r8)
jmp 0xb184
addq $0x2, %rcx
jmp 0xb184
movslq %esi, %r11
imulq $0x90, %r11, %r8
subl %ebp, %edi
movslq %edi, %r9
imulq $0x90, %r9, %rcx
testb $0x1, %dil
leaq 0x60(%rbx,%rcx), %rdi
leaq 0x30(%rbx,%rcx), %r10
cmoveq %rdi, %r10
leaq 0xc0(%rbx), %rcx
imulq $0x90, %r15, %rdi
testb $0x1, %r15b
leaq 0x30(%rbx,%rdi), %r13
leaq 0x60(%rbx,%rdi), %r12
movq %r12, %rdi
movq %r13, (%rsp)
cmoveq %r13, %rdi
leaq 0x180(%rbx), %r13
testb $0x1, %sil
leaq 0x60(%rbx,%r8), %rsi
leaq 0x30(%rbx,%r8), %r8
cmoveq %rsi, %r8
movw $0x1, 0x2(%r8)
movq %rax, 0x28(%r8)
movw %r11w, 0x92(%rbx)
movq %r8, 0xb8(%rbx)
movw %r9w, 0x2(%rdi)
movq %r10, 0x28(%rdi)
movw %r15w, 0x2(%r10)
movq %rdi, 0x28(%r10)
movw %r15w, 0x2(%rbx)
movq %rcx, %rdi
cmoveq %r13, %rdi
cmoveq %rcx, %r13
callq 0xade9
movq 0x8(%rsp), %rcx
movq %rax, (%rcx)
movq %r13, %rdi
callq 0xade9
movq 0x10(%rsp), %rcx
movq %rax, (%rcx)
testb $0x1, %r15b
jne 0xb2ff
testb $0x1, %bpl
jne 0xb31b
imulq $0x90, %r14, %rax
leaq (%rbx,%rax), %r12
addq $-0xf0, %r12
jmp 0xb31b
movq (%rsp), %r12
testb $0x1, %bpl
jne 0xb31b
imulq $0x90, %r14, %rax
leaq (%rbx,%rax), %r12
addq $-0xc0, %r12
movq %r12, %rdi
callq 0xade9
movq 0x50(%rsp), %rcx
movq %rax, (%rcx)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq