// File: /workspace/github_c_makefile_star2_O3/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), %r8d
leal (%r8,%rcx), %r9d
leal -0x1(%rcx,%r8), %eax
movw $0x2, 0xc2(%rdi)
leaq 0x120(%rdi), %rcx
movq %rcx, 0xe8(%rdi)
cmpl $0x1, %r9d
jle 0xde6a
movl %r9d, %r9d
movl %eax, %ecx
movl $0x1, %r10d
leal -0x1(%r10), %r11d
leaq (%r10,%r10,8), %r15
shlq $0x4, %r15
leaq (%rdi,%r15), %r12
addq $-0x60, %r12
movw %r11w, 0x62(%r12)
movq %r12, 0x88(%r12)
movw $0x246, 0x92(%r12) # imm = 0x246
movq $0x0, 0xb8(%r12)
leal 0x1(%r10), %r11d
movw %r11w, 0xc2(%r12)
leaq (%rdi,%r15), %r11
addq $0x90, %r11
movq %r11, -0x8(%r11)
cmpq %rcx, %r10
jge 0xde5b
addq %rdi, %r15
addq $0x60, %r15
movw %r10w, 0x2(%r11)
movq %r15, 0x28(%r11)
movw $0x246, 0x62(%r11)      # imm = 0x246
movq $0x0, 0x88(%r11)
addq $0x2, %r10
movw %r10w, 0x32(%r11)
leaq (%r10,%r10,8), %r15
shlq $0x4, %r15
addq %rdi, %r15
movq %r15, 0x58(%r11)
jmp 0xde5f
addq $0x2, %r10
cmpq %r9, %r10
jl 0xddc5
jmp 0xde6d
movslq %eax, %rcx
movslq %r8d, %r9
leaq (%r9,%r9,8), %r11
shlq $0x4, %r11
movslq %esi, %r9
leaq (%r9,%r9,8), %r10
shlq $0x4, %r10
testb $0x1, %sil
leaq 0x60(%rdi,%r10), %rsi
leaq 0x30(%rdi,%r10), %r10
cmoveq %rsi, %r10
leaq 0xc0(%rdi), %rsi
leaq (%rcx,%rcx,8), %rcx
shlq $0x4, %rcx
testb $0x1, %al
leaq 0x30(%rdi,%rcx), %r15
leaq 0x60(%rdi,%rcx), %rcx
cmoveq %r15, %rcx
leaq 0x90(%rdi), %r12
xorl %r15d, %r15d
cmpl $0x1, %edx
sete %r15b
leal (%r8,%r15,2), %edx
decl %edx
movslq %edx, %rdx
leaq (%rdx,%rdx,8), %rdx
shlq $0x4, %rdx
leaq 0x180(%rdi), %r15
testb $0x1, %r8b
leaq 0x60(%rdi,%r11), %rbp
leaq 0x30(%rdi,%r11), %r11
cmoveq %rbp, %r11
movw $0x1, 0x2(%r11)
movq %r12, 0x28(%r11)
movw %r8w, 0x92(%rdi)
movq %r11, 0xb8(%rdi)
movw %r9w, 0x2(%rcx)
movq %r10, 0x28(%rcx)
movw %ax, 0x2(%r10)
movq %rcx, 0x28(%r10)
movw %ax, 0x2(%rdi)
leaq 0x60(%rdi,%rdx), %rax
leaq 0x30(%rdi,%rdx), %r12
movq %rsi, %rdi
cmoveq %r15, %rdi
cmovneq %rax, %r12
cmoveq %rsi, %r15
callq 0xcfa0
movq %rax, (%r14)
movq %r12, %rdi
callq 0xcfa0
movq %rax, (%rbx)
movq %r15, %rdi
callq 0xcfa0
movq %rax, (%r13)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq