// File: /workspace/github_c_makefile_star2_O2/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 %edx, %r9d
movl %esi, %eax
subl %edi, %eax
movl %eax, %edx
subl %r9d, %edx
movl %edi, %r10d
andl $0x1, %r10d
subl %r10d, %esi
testb $0x1, %r9b
je 0xb01c
leal 0x1ffff(%r9), %r11d
decl %esi
movw $0x5, %bx
jmp 0xb02d
leal 0x1fffe(%r9), %r11d
andw $0x0, 0x6(%r8)
movw $0x4, %bx
andl $0x1, %r9d
shrl %r11d
movw %bx, (%r8)
movw %r11w, 0x4(%r8)
testb $0x1, %dl
jne 0xb068
leal -0x1(%rsi), %eax
testb $0x1, %sil
cmovel %esi, %eax
shrl %eax
movw %ax, 0x4(%rcx)
testl %r10d, %r10d
je 0xb0a0
testl %r9d, %r9d
je 0xb0ca
andw $0x0, 0x6(%rcx)
movl $0x4, %esi
jmp 0xb0cf
movl %r10d, %esi
notl %esi
addl %edi, %esi
addl %edx, %esi
sarl %esi
movl %r9d, %edx
notl %edx
addl %edx, %eax
movl $0x2, %edi
cltd
idivl %edi
testl %r10d, %r10d
je 0xb0ae
cmpl %eax, %esi
jle 0xb0ec
movw %si, 0x4(%rcx)
testl %r9d, %r9d
je 0xb0f9
andw $0x0, 0x6(%rcx)
movl $0x4, %edx
jmp 0xb0fe
addl $0x1fffe, %edx          # imm = 0x1FFFE
shrl %edx
movw %dx, 0x6(%rcx)
jmp 0xb0b6
movw %si, 0x4(%rcx)
movw %ax, 0x6(%rcx)
movw $0x4, %ax
testl %r9d, %r9d
je 0xb111
andw $0x0, 0x8(%rcx)
movw $0x3, %ax
jmp 0xb111
movl $0x3, %esi
addl $0x1fffe, %edx          # imm = 0x1FFFE
shrl %edx
movl %esi, %eax
movw %dx, (%rcx,%rax,2)
andw $0x0, 0x2(%rcx,%rax,2)
movl $0x6, %eax
subl %esi, %eax
jmp 0xb111
testl %r9d, %r9d
jne 0xb116
cmpl %eax, %esi
jne 0xb116
movw %si, 0x4(%rcx)
movl $0x3, %edx
movl %edx, %esi
movw %ax, (%rcx,%rsi,2)
andw $0x0, 0x2(%rcx,%rsi,2)
movl $0x6, %eax
subl %edx, %eax
movw %ax, (%rcx)
popq %rbx
retq
andw $0x0, 0x6(%rcx)
movw %ax, 0x4(%rcx)
movw %si, 0x8(%rcx)
movw $0x3, %ax
testl %r9d, %r9d
je 0xb111
andw $0x0, 0xa(%rcx)
movw $0x2, %ax
jmp 0xb111