// File: /workspace/github_c_makefile_star2_O3/mishun[P]plantri/fullgen.c
// Function: sandwich_reko_sp
int sandwich_reko_sp(PLANMAP map,KNOTENTYP *code,KANTE *anfangskante)
{
int i,j, l1, l2, l1_p_l2, fuenfecke, vergleichsanfang, test;
KANTE *run, *startkante1, *startkante2, *startkante3, *anfang;
KNOTENTYP testcode[6];


l1=code[2]; l2=code[3]; 
l1_p_l2 = l1+l2;

for (i=1; i<=map[0][0].name; i++) for (j=0;j<3; j++) { map[i][j].dummy=map[i][j].noright=0;
						       map[i][j].mininame=1; }

/* markieren der Brille: */

anfangskante->mininame=anfangskante->noright=anfangskante->invers->noright=1;
anfangskante->invers->mininame=l1_p_l2;

for (i=1, run=anfangskante; i<code[0]; i++)
  { run=run->invers->next; 
    run->noright=run->invers->noright=1;
    run->mininame=i+1;
    run->dummy=run->prev->dummy=run->next->dummy=i;
    run->invers->mininame=i;
    if (i != l1_p_l2) run->next->mininame=aussen;
    i++;
    if (i<code[0])
      {
      run=run->invers->prev;
      run->noright=run->invers->noright=1;
      run->dummy=run->prev->dummy=run->next->dummy=i;
      run->mininame=i+1;
      run->invers->mininame=i;
      if (i != l1_p_l2) run->prev->mininame=aussen;
      }
  }

/*  reparieren: */ run->mininame=l1;

/* l1 ist immer >= 3, also geht das folgende: */

if (l1_p_l2%2) { startkante1=anfangskante->invers->prev; 
		 startkante3=startkante1->prev->invers->next;
		 if (l2>1) startkante2=anfangskante->next->invers->prev;
		 else /* dann ist l3 > 1 */
		   startkante2=anfangskante->prev->invers->next; }
   else
               { startkante3=anfangskante->invers->prev; 
		 startkante1=startkante3->prev->invers->next;
		 if (l2>1) startkante2=anfangskante->prev->invers->next;
		 else /* dann ist l3 > 1 */
		   startkante2=anfangskante->next->invers->prev; }


vergleichsanfang=4;
anfang=suchestart_reko_sp( startkante1, &fuenfecke);
reko_patch_sp(anfang,testcode,fuenfecke);
if ((test=codecmp_kn(testcode,code+vergleichsanfang,fuenfecke))<0) return(0);
if (test>0) return(1);
vergleichsanfang+=fuenfecke;
anfang=suchestart_reko_sp( startkante2, &fuenfecke);
reko_patch_sp(anfang,testcode,fuenfecke);
if ((test=codecmp_kn(testcode,code+vergleichsanfang,fuenfecke))<0) return(0);
if (test>0) return(1);
vergleichsanfang+=fuenfecke;
anfang=suchestart_reko_sp( startkante3, &fuenfecke);
reko_patch_sp(anfang,testcode,fuenfecke);
if ((test=codecmp_kn(testcode,code+vergleichsanfang,fuenfecke))<0) return(0);
if (test==0) return(2);

return(1); 
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %rbx
movzwl 0x4(%rsi), %esi
movzwl 0x6(%rbx), %eax
movq %rax, (%rsp)
leal (%rax,%rsi), %ecx
movzwl 0x2(%rdi), %r8d
testq %r8, %r8
je 0x8e85
addq $0xa4, %rdi
movl $0x1, %r9d
xorl %r10d, %r10d
movb $0x0, -0x2(%rdi,%r10)
movq $0x0, -0xc(%rdi,%r10)
movw $0x1, (%rdi,%r10)
addq $0x30, %r10
cmpq $0x90, %r10
jne 0x8e4f
leaq 0x1(%r9), %r10
addq $0x90, %rdi
cmpq %r8, %r9
movq %r10, %r9
jne 0x8e4c
movq 0x28(%rdx), %rdi
movb $0x1, %r8b
movb %r8b, 0x12(%rdi)
movb %r8b, 0x12(%rdx)
movw $0x1, 0x14(%rdx)
movw %cx, 0x14(%rdi)
cmpw $0x2, (%rbx)
movq %rdx, %r11
jb 0x8f61
movl %ecx, %r9d
leaq -0x1(%r9), %r10
addq $-0x2, %r9
xorl %r14d, %r14d
movq %rdx, %r11
movq %r14, %r15
leaq 0x1(%r14), %rbp
movq 0x28(%r11), %r11
movq 0x20(%r11), %r11
movq 0x28(%r11), %r12
movb %r8b, 0x12(%r12)
movb %r8b, 0x12(%r11)
addq $0x2, %r14
movw %r14w, 0x14(%r11)
movq 0x20(%r11), %r13
movq %rbp, 0x8(%r13)
movq 0x18(%r11), %rax
movq %rbp, 0x8(%rax)
movq %rbp, 0x8(%r11)
movw %bp, 0x14(%r12)
cmpq %r15, %r10
je 0x8f07
movw $0x246, 0x14(%r13)      # imm = 0x246
movzwl (%rbx), %eax
cmpq %rax, %r14
jae 0x8f51
movq 0x18(%r12), %r11
movq 0x28(%r11), %rax
movb %r8b, 0x12(%rax)
movb %r8b, 0x12(%r11)
movq 0x20(%r11), %r12
movq %r14, 0x8(%r12)
movq 0x18(%r11), %r12
movq %r14, 0x8(%r12)
movq %r14, 0x8(%r11)
leal 0x3(%r15), %ebp
movw %bp, 0x14(%r11)
movw %r14w, 0x14(%rax)
cmpq %r15, %r9
je 0x8f51
movw $0x246, 0x14(%r12)      # imm = 0x246
movzwl (%rbx), %eax
addq $0x3, %r15
cmpq %rax, %r15
jb 0x8ebc
movw %si, 0x14(%r11)
movq 0x18(%rdi), %rsi
movq 0x18(%rsi), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %r14
testb $0x1, %cl
jne 0x8fa2
xorl %ecx, %ecx
xorl %eax, %eax
cmpw $0x2, (%rsp)
setae %cl
setb %al
leaq 0x18(,%rax,8), %rax
leaq 0x18(,%rcx,8), %rcx
movq %r14, %rdi
movq %rsi, %r14
jmp 0x8fc4
xorl %ecx, %ecx
xorl %eax, %eax
cmpw $0x2, (%rsp)
setb %cl
setae %al
leaq 0x18(,%rax,8), %rax
leaq 0x18(,%rcx,8), %rcx
movq %rsi, %rdi
movq (%rdx,%rax), %rax
movq 0x28(%rax), %rax
movq (%rax,%rcx), %r15
leaq 0x8(%rsp), %r12
movq %r12, %rsi
callq 0x83d9
movl (%r12), %r12d
leaq 0xc(%rsp), %r13
movq %rax, %rdi
movq %r13, %rsi
movl %r12d, %edx
callq 0x86ad
movzwl (%r13), %eax
movzwl 0x8(%rbx), %ecx
cmpw %cx, %ax
sete %dl
cmpl $0x1, %r12d
setne %sil
andb %dl, %sil
cmpb $0x1, %sil
jne 0x9035
leal -0x2(%r12), %edx
xorl %esi, %esi
movzwl 0xe(%rsp,%rsi,2), %eax
movzwl 0xa(%rbx,%rsi,2), %ecx
cmpw %cx, %ax
jne 0x9035
leaq 0x1(%rsi), %rdi
cmpl %esi, %edx
movq %rdi, %rsi
jne 0x901b
cmpw %cx, %ax
jae 0x9041
xorl %ebp, %ebp
jmp 0x9163
movl $0x1, %ebp
jne 0x9163
movslq %r12d, %r13
leaq 0x4(%r13), %rax
movq %rax, (%rsp)
leaq 0x8(%rsp), %r12
movq %r15, %rdi
movq %r12, %rsi
callq 0x83d9
movl (%r12), %r15d
leaq 0xc(%rsp), %r12
movq %rax, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x86ad
movzwl (%r12), %eax
movzwl 0x8(%rbx,%r13,2), %ecx
cmpw %cx, %ax
sete %dl
cmpl $0x1, %r15d
setne %sil
andb %dl, %sil
cmpb $0x1, %sil
jne 0x90cb
leal -0x2(%r15), %edx
movq (%rsp), %rax
leaq (%rbx,%rax,2), %rsi
addq $0x2, %rsi
xorl %edi, %edi
movzwl 0xe(%rsp,%rdi,2), %eax
movzwl (%rsi,%rdi,2), %ecx
cmpw %cx, %ax
jne 0x90cb
leaq 0x1(%rdi), %r8
cmpl %edi, %edx
movq %r8, %rdi
jne 0x90b2
cmpw %cx, %ax
jb 0x903a
jne 0x9163
addl (%rsp), %r15d
leaq 0x8(%rsp), %r12
movq %r14, %rdi
movq %r12, %rsi
callq 0x83d9
movl (%r12), %r14d
leaq 0xc(%rsp), %r12
movq %rax, %rdi
movq %r12, %rsi
movl %r14d, %edx
callq 0x86ad
movslq %r15d, %rdx
movzwl (%r12), %eax
movzwl (%rbx,%rdx,2), %ecx
cmpw %cx, %ax
sete %sil
cmpl $0x1, %r14d
setne %dil
andb %sil, %dil
cmpb $0x1, %dil
jne 0x9151
addl $-0x2, %r14d
leaq (%rbx,%rdx,2), %rdx
addq $0x2, %rdx
xorl %esi, %esi
movzwl 0xe(%rsp,%rsi,2), %eax
movzwl (%rdx,%rsi,2), %ecx
cmpw %cx, %ax
jne 0x9151
leaq 0x1(%rsi), %rdi
cmpl %esi, %r14d
movq %rdi, %rsi
jne 0x9137
movl $0x0, %ebp
cmpw %cx, %ax
jb 0x9163
sete %al
movzbl %al, %ebp
incl %ebp
movl %ebp, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq