// File: /workspace/github_c_makefile_star2_O3/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 %edi, %r14d
leal -0x1(%r14), %r12d
addq $0x90, %rcx
leaq 0xc0(%rbx), %rax
movw $0x2, 0xc2(%rbx)
leaq 0x120(%rbx), %rdi
movq %rdi, 0xe8(%rbx)
cmpl $0x1, %r14d
jle 0xd470
movl %r14d, %edi
movl %r12d, %r15d
movl $0x1, %r8d
leal -0x1(%r8), %r9d
leaq (%r8,%r8,8), %r10
shlq $0x4, %r10
leaq (%rbx,%r10), %r11
addq $-0x60, %r11
movw %r9w, 0x62(%r11)
movq %r11, 0x88(%r11)
movw $0x246, 0x92(%r11)      # imm = 0x246
movq $0x0, 0xb8(%r11)
leal 0x1(%r8), %r9d
movw %r9w, 0xc2(%r11)
leaq (%rbx,%r10), %r9
addq $0x90, %r9
movq %r9, -0x8(%r9)
cmpq %r15, %r8
jge 0xd461
addq %rbx, %r10
addq $0x60, %r10
movw %r8w, 0x2(%r9)
movq %r10, 0x28(%r9)
movw $0x246, 0x62(%r9)       # imm = 0x246
movq $0x0, 0x88(%r9)
addq $0x2, %r8
movw %r8w, 0x32(%r9)
leaq (%r8,%r8,8), %r10
shlq $0x4, %r10
addq %rbx, %r10
movq %r10, 0x58(%r9)
jmp 0xd465
addq $0x2, %r8
cmpq %rdi, %r8
jl 0xd3d0
jmp 0xd473
movslq %r12d, %r15
movslq %esi, %rdi
leaq (%rdi,%rdi,8), %r9
shlq $0x4, %r9
movl %r14d, %r10d
subl %edx, %r10d
movslq %r10d, %r8
leaq (%r8,%r8,8), %r11
shlq $0x4, %r11
testb $0x1, %r10b
leaq 0x60(%rbx,%r11), %r10
leaq 0x30(%rbx,%r11), %r11
cmoveq %r10, %r11
leaq (%r15,%r15,8), %r10
shlq $0x4, %r10
testb $0x1, %r12b
movl %edx, 0x4(%rsp)
leaq 0x30(%rbx,%r10), %rbp
leaq 0x60(%rbx,%r10), %r13
movq %r13, %rdx
cmoveq %rbp, %rdx
testb $0x1, %sil
leaq 0x60(%rbx,%r9), %rsi
leaq 0x30(%rbx,%r9), %r9
cmoveq %rsi, %r9
movw $0x1, 0x2(%r9)
movq %rcx, 0x28(%r9)
movw %di, 0x92(%rbx)
movq %r9, 0xb8(%rbx)
movw %r8w, 0x2(%rdx)
movq %r11, 0x28(%rdx)
movw %r12w, 0x2(%r11)
movq %rdx, 0x28(%r11)
leaq 0x180(%rbx), %r15
movq %rax, %rdi
cmoveq %r15, %rdi
cmoveq %rax, %r15
movw %r12w, 0x2(%rbx)
callq 0xcfa0
movq 0x8(%rsp), %rcx
movq %rax, (%rcx)
movq %r15, %rdi
callq 0xcfa0
movq 0x10(%rsp), %rcx
movq %rax, (%rcx)
testb $0x1, %r12b
jne 0xd558
testb $0x1, 0x4(%rsp)
jne 0xd578
movslq %r14d, %rax
leaq (%rax,%rax,8), %rax
shlq $0x4, %rax
leaq (%rbx,%rax), %r13
addq $-0xf0, %r13
jmp 0xd578
movq %rbp, %r13
testb $0x1, 0x4(%rsp)
jne 0xd578
movslq %r14d, %rax
leaq (%rax,%rax,8), %rax
shlq $0x4, %rax
leaq (%rbx,%rax), %r13
addq $-0xc0, %r13
movq %r13, %rdi
callq 0xcfa0
movq 0x50(%rsp), %rcx
movq %rax, (%rcx)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq