// File: /workspace/github_c_makefile_star2_O2/mishun[P]plantri/fullgen.c
// Function: baue_sandwich
void baue_sandwich(PLANMAP map, int laenge_1, int laenge_2, int laenge_3,
		   KANTE **anfang_1, KANTE **anfang_2, KANTE **anfang_3) 

{ int stelle_2, knotenzahl, i, stelle, pfadlaenge; 
KANTE *aussenzeiger, *letzte_Kante, *startkante_1, *startkante_2,*startkante_3;

pfadlaenge=laenge_1+laenge_2+laenge_3; knotenzahl=pfadlaenge-1;


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 dem Sandwich verklebt werden */

stelle=laenge_1+laenge_2; 
if ((stelle%2)==0) aussenzeiger=map[stelle]+2; else aussenzeiger=map[stelle]+1;

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

if ((laenge_1%2)==0) aussenzeiger=map[laenge_1]+2; 
else aussenzeiger=map[laenge_1]+1; 
if ((knotenzahl%2)==0) letzte_Kante=map[knotenzahl]+1; else letzte_Kante=map[knotenzahl]+2;

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

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

/* Jetzt die anfangskanten belegen: */

if (laenge_2==1) stelle_2= stelle+1; else stelle_2=stelle-1;
if (stelle %2) { startkante_1=map[1]+1; startkante_2=map[stelle_2]+2; startkante_3=map[2]+2; } 
/* dann zeigt die Aussenkante von Knoten 1 ins innere von zykel_1 */ 
else { startkante_1=map[2]+2; startkante_2=map[stelle_2]+1; startkante_3=map[1]+1; }
*anfang_1=suchestart(startkante_1);
*anfang_2=suchestart(startkante_2);
*anfang_3=suchestart(startkante_3);

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r9, %rbx
movq %r8, %r14
movq 0x40(%rsp), %r13
leal (%rdx,%rsi), %eax
leal (%rax,%rcx), %r8d
leal -0x1(%rcx,%rax), %ecx
movw $0x2, 0xc2(%rdi)
leaq 0x120(%rdi), %r9
movq %r9, 0xe8(%rdi)
movslq %r8d, %r8
movslq %ecx, %rcx
pushq $0x1
popq %r9
movl $0x90, %r10d
cmpq %r8, %r9
jge 0xbbbf
leal -0x1(%r9), %r11d
imulq $0x90, %r9, %r12
leaq (%rdi,%r12), %r15
addq %rdi, %r12
addq $-0x60, %r12
movw %r11w, 0x62(%r12)
movq %r12, 0x88(%r12)
movw $0x246, 0x92(%r12) # imm = 0x246
andq $0x0, 0xb8(%r12)
leal 0x1(%r9), %r11d
movw %r11w, 0xc2(%r12)
leaq (%r15,%r10), %r11
movq %r11, 0xe8(%r12)
cmpq %rcx, %r9
jge 0xbbb6
addq $0x60, %r15
movw %r9w, 0x2(%r11)
movq %r15, 0x28(%r11)
movw $0x246, 0x62(%r11)      # imm = 0x246
andq $0x0, 0x88(%r11)
addq $0x2, %r9
movw %r9w, 0x32(%r11)
imulq $0x90, %r9, %r15
addq %rdi, %r15
movq %r15, 0x58(%r11)
jmp 0xbb1f
addq $0x2, %r9
jmp 0xbb1f
leaq 0xc0(%rdi), %r8
leaq 0x90(%rdi), %r10
movslq %eax, %r9
imulq $0x90, %r9, %r11
movslq %esi, %r9
imulq $0x90, %r9, %r15
testb $0x1, %sil
leaq 0x60(%rdi,%r15), %r12
leaq 0x30(%rdi,%r15), %rsi
cmoveq %r12, %rsi
imulq $0x90, %rcx, %r15
testb $0x1, %cl
leaq 0x30(%rdi,%r15), %r12
leaq 0x60(%rdi,%r15), %rbp
cmoveq %r12, %rbp
xorl %r15d, %r15d
cmpl $0x1, %edx
sete %r15b
leal (%rax,%r15,2), %edx
decl %edx
movslq %edx, %rdx
imulq $0x90, %rdx, %rdx
leaq 0x180(%rdi), %r15
testb $0x1, %al
leaq 0x60(%rdi,%r11), %r12
leaq 0x30(%rdi,%r11), %r11
cmoveq %r12, %r11
movw $0x1, 0x2(%r11)
movq %r10, 0x28(%r11)
movw %ax, 0x92(%rdi)
movq %r11, 0xb8(%rdi)
movw %r9w, 0x2(%rbp)
movq %rsi, 0x28(%rbp)
movw %cx, 0x2(%rsi)
movq %rbp, 0x28(%rsi)
movw %cx, 0x2(%rdi)
leaq 0x60(%rdi,%rdx), %rax
leaq 0x30(%rdi,%rdx), %r12
movq %r8, %rdi
cmoveq %r15, %rdi
cmovneq %rax, %r12
cmoveq %r8, %r15
callq 0xade9
movq %rax, (%r14)
movq %r12, %rdi
callq 0xade9
movq %rax, (%rbx)
movq %r15, %rdi
callq 0xade9
movq %rax, (%r13)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq