// File: /workspace/github_c_makefile_star2_O3/mishun[P]plantri/fullgen.c
// Function: berechne_brillenadressen
void berechne_brillenadressen( int l1, int lg, int l3, KNOTENTYP *seg,
			      KNOTENTYP *se3 )
{int l2, zaehler;
 int bogen1, bogen3; 

l2 = lg - l1 - l3;


if ((l1%2) != 0) lg--;

if ((l3 % 2) ==0)   /* l3 gerade */
  { se3[0]=4; se3[2]= (l3-2)/2; se3[3]=0; }
else { se3[0]=5; se3[2]= (l3-1)/2; lg--; }

/* Jetzt die grosse Sequenz: */

if ((l2 % 2) == 0) /* "normale" Brille */
  {
    if (l1%2) /* d.h. ungerade -- bestimmt den Umlaufsinn */
       { if ((lg % 2)==0) seg[2]=lg/2; else seg[2]= (lg-1)/2;
         zaehler=3;
	 if (l3 % 2) { seg[zaehler]=0; zaehler++; }
	 seg[zaehler]= (l2-2)/2; zaehler++; 
	 if (l1 % 2) { seg[zaehler]=0; zaehler++; }
	 seg[0]=8-zaehler;
       }
    else /* d.h. l1 gerade -- anderer Umlaufsinn */
       { if ((lg % 2)==0) seg[2]=lg/2; else seg[2]= (lg-1)/2;
         zaehler=3;
	 if (l1 % 2) { seg[zaehler]=0; zaehler++; }
	 seg[zaehler]= (l2-2)/2; zaehler++; 
	 if (l3 % 2) { seg[zaehler]=0; zaehler++; }
	 seg[0]=8-zaehler;
       }
  }/* ende "normale" Brille */ 
else /* d.h. "verbogene" Brille */
  {
    if (l1%2) bogen1= (l1+l2-2)/2; else bogen1=(l1+l2-1)/2; 
    if (l3%2) bogen3= (l3+l2-2)/2; else bogen3=(l3+l2-1)/2; 
    /* um das gleich kanonisch geordnet zu haben, muss da unterschieden werden */
    if (l1%2){
             /* l1 >= l3 reicht nicht, um die folgende Fallunterscheidung zu vermeiden */
             if ((bogen1 > bogen3) || ((bogen1==bogen3) && ((l3 % 2) == 0)))
	       { seg[2]=bogen1;
		 zaehler=3;
		 if (l3 % 2) { seg[zaehler]=0; zaehler++; }
		 seg[zaehler]=bogen3; zaehler++;
		 if (l1 % 2) { seg[zaehler]=0; zaehler++; }
		 seg[0]=8-zaehler;
	       }
	     else /* d.h. bogen3 kommt zuerst */
	       { seg[2]=bogen3;
		 zaehler=3;
		 if (l1 % 2) { seg[zaehler]=0; zaehler++; }
		 seg[zaehler]=bogen1; zaehler++;
		 if (l3 % 2) { seg[zaehler]=0; zaehler++; }
		 seg[0]=8-zaehler;
	       }
	   }
    else /* d.h. l1 gerade */
      { 
	/* keine Fallunterscheidung, da if immer true durch konvention l1>=l3 */
        /* if ((bogen1 > bogen3) || ((bogen1==bogen3) && ((l1 % 2) == 0))) */
	         seg[2]=bogen1;
		 seg[3]=bogen3; 
		 zaehler=4;
		 if (l3 % 2) { seg[zaehler]=0; zaehler++; }
		 seg[0]=8-zaehler;
       } 
  } /* ende verbogene brille */

}

// Assembly:
pushq %rbx
movl %esi, %r10d
subl %edi, %r10d
movl %r10d, %eax
subl %edx, %eax
movl %edi, %r9d
andl $0x1, %r9d
subl %r9d, %esi
testb $0x1, %dl
je 0xd268
leal 0x1ffff(%rdx), %r11d
decl %esi
movw $0x5, %bx
jmp 0xd27a
leal 0x1fffe(%rdx), %r11d
movw $0x0, 0x6(%r8)
movw $0x4, %bx
andl $0x1, %edx
shrl %r11d
movw %bx, (%r8)
movw %r11w, 0x4(%r8)
testb $0x1, %al
jne 0xd2d3
leal -0x1(%rsi), %edi
testb $0x1, %sil
cmovel %esi, %edi
shrl %edi
movw %di, 0x4(%rcx)
testl %r9d, %r9d
je 0xd313
movl $0x3, %esi
testl %edx, %edx
je 0xd2b6
movw $0x0, 0x6(%rcx)
movl $0x4, %esi
addl $0x1fffe, %eax          # imm = 0x1FFFE
shrl %eax
movl %esi, %edx
movw %ax, (%rcx,%rdx,2)
movw $0x0, 0x2(%rcx,%rdx,2)
movl $0x6, %eax
subl %esi, %eax
jmp 0xd336
movl %r9d, %esi
notl %esi
addl %edi, %esi
addl %eax, %esi
sarl %esi
movl %edx, %eax
notl %eax
addl %eax, %r10d
movl %r10d, %eax
shrl $0x1f, %eax
addl %r10d, %eax
sarl %eax
testl %r9d, %r9d
je 0xd31c
cmpl %eax, %esi
jle 0xd33b
movw %si, 0x4(%rcx)
movl $0x3, %esi
testl %edx, %edx
je 0xd2bd
movw $0x0, 0x6(%rcx)
movl $0x4, %esi
jmp 0xd2bd
addl $0x1fffe, %eax          # imm = 0x1FFFE
shrl %eax
jmp 0xd320
movw %si, 0x4(%rcx)
movw %ax, 0x6(%rcx)
movw $0x4, %ax
testl %edx, %edx
je 0xd336
movw $0x0, 0x8(%rcx)
movw $0x3, %ax
movw %ax, (%rcx)
popq %rbx
retq
testl %edx, %edx
jne 0xd351
cmpl %eax, %esi
jne 0xd351
movw %si, 0x4(%rcx)
movl $0x3, %esi
jmp 0xd2bd
movw %ax, 0x4(%rcx)
movw $0x0, 0x6(%rcx)
movw %si, 0x8(%rcx)
movw $0x3, %ax
testl %edx, %edx
je 0xd336
movw $0x0, 0xa(%rcx)
movw $0x2, %ax
jmp 0xd336