// File: /workspace/github_c_makefile_star2_O0/mishun[P]plantri/fullgen.c
// Function: add_polygon_invers
void add_polygon_invers(int n, PLANMAP map, KANTE *start, KANTE **lastout)
/* fuegt ein weiteres polygon einer Reihe an. Dabei ist n die groesse des polygons. 
   Angefuegt wird immer an start. Ueber lastout wird die letzte Aussenkante des 
   Polygons zurueckgegeben.
   Es arbeitet wie add_polygon nur im anderen Drehsinn. Das wird fuer die REkonstruktion
   der Patches gebraucht
   Im Falle, dass nur eine Kante eingefuegt werden muss, wird *lastout auf die naechste 
   zu benutzende Aussenkante gesetzt. Die ist nicht mit dem gebauten Polygon
   inzident. Im Falle, dass es sie nicht gibt, wird *lastout auf nil gesetzt.

   angefuegt wird in den Winkel in prev-Richtung, d.h. zwischen start und start->prev

 */


{
int i, new_tempknz, tempknz;
KANTE *ende, *run;
int common_vertices;


if (start->name != aussen) { fprintf(stderr,"ERROR ADD_P_INV not starting at external edge\n");
			     exit(86); }

if (IPR && (n==5))
  { 
    if (checksize_2(start->prev)==5) is_ipr=0;
    for (ende=start->prev->invers->prev, common_vertices=2; ende->name != aussen; 
	  ende=ende->invers->prev) {if (checksize_2(ende)==5) is_ipr=0;
                                     common_vertices++;
				   }
  }
else for (ende=start->prev->invers->prev, common_vertices=2; ende->name != aussen; 
	  ende=ende->invers->prev) common_vertices++;


if (n<common_vertices) 
   { fprintf(stderr,"polygon to insert (inv) too small !\n"); 
     exit(87); }

/* es muessen also n-common_vertices knoten hinzugefuegt werden */

tempknz=map[0][0].name;
new_tempknz=tempknz+n-common_vertices;

if (n-common_vertices==0) /* dann kommt kein knoten dazu */
  { start->name=ende->ursprung; start->invers=ende;
    ende->name=start->ursprung; ende->invers=start;

    for (ende=start->next->invers->next, common_vertices=2; 
	 (ende->name != aussen) && (common_vertices<6); 
         ende=ende->invers->next) common_vertices++;
    if (common_vertices<6) *lastout=ende; /* ein common_vertices+1 -- Eck ist noch moeglich */
    else { *lastout=nil;
	   if (ende==start->next) /* dann ist nur noch eine 5-Eck Luecke */
	     { for (i=anzahl_5ek+5, run=start->invers; anzahl_5ek<i; 
		  anzahl_5ek++, run=run->invers->next) { F_eck_kanten[anzahl_5ek]=run;
							 if (IPR)
							   if (checksize_right_2(run)==5) is_ipr=0; }
	     }
	 }
  }
else
  {
    if (n-common_vertices==1) /* dann kommt nur ein knoten dazu */
      {
	tempknz++;
	start->name=tempknz; start->invers=map[tempknz];
	map[tempknz][0].name=start->ursprung; map[tempknz][0].invers=start;
	map[tempknz][1].name=ende->ursprung; map[tempknz][1].invers=ende;
	ende->name=tempknz; ende->invers=map[tempknz]+1;
	map[tempknz][2].name=aussen; map[tempknz][2].invers=nil;
	*lastout=map[tempknz]+2;
	map[0][0].name=tempknz;
      }
    else
      {
	
	/* es bleibt: mindestens zwei neue knoten */
	
	tempknz++;
	start->name=tempknz; start->invers=map[tempknz];
	map[tempknz][0].name=start->ursprung; map[tempknz][0].invers=start;
	map[tempknz][1].name=tempknz+1; map[tempknz][1].invers=map[tempknz+1];
	map[tempknz][2].name=aussen; map[tempknz][2].invers=nil;
	
	for (tempknz++; tempknz<new_tempknz; tempknz++)
	  { map[tempknz][0].name=tempknz-1; map[tempknz][0].invers=map[tempknz-1]+1;
	    map[tempknz][1].name=tempknz+1; map[tempknz][1].invers=map[tempknz+1]; 
	    map[tempknz][2].name=aussen; map[tempknz][2].invers=nil; }
	
	/* und nun noch den letzten knoten */
	map[tempknz][0].name=tempknz-1; map[tempknz][0].invers=map[tempknz-1]+1;
	map[tempknz][1].name=ende->ursprung; map[tempknz][1].invers= ende;
	ende->name=tempknz; ende->invers=map[tempknz]+1;
	map[tempknz][2].name=aussen; map[tempknz][2].invers=nil;
	*lastout=map[tempknz]+2;
	map[0][0].name=tempknz;
      } /* ende zweites else */
  } /* ende erstes else */

if (n==5)
  for (i=anzahl_5ek+5, run=start; anzahl_5ek<i; 
       anzahl_5ek++, run=run->invers->next) F_eck_kanten[anzahl_5ek]=run;

return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movl %edi, -0x4(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
je 0x125d8
movq 0x9a3b(%rip), %rax      # 0x1bff8
movq (%rax), %rdi
leaq 0x66c2(%rip), %rsi      # 0x18c89
movb $0x0, %al
callq 0x1080
movl $0x56, %edi
callq 0x1120
movsbl 0x9ba2(%rip), %eax      # 0x1c181
cmpl $0x0, %eax
je 0x1265f
cmpl $0x5, -0x4(%rbp)
jne 0x1265f
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x122f0
cmpl $0x5, %eax
jne 0x12603
movb $0x0, 0x9b31(%rip)      # 0x1c134
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x38(%rbp)
movl $0x2, -0x44(%rbp)
movq -0x38(%rbp), %rax
movzwl 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
je 0x1265d
movq -0x38(%rbp), %rdi
callq 0x122f0
cmpl $0x5, %eax
jne 0x12642
movb $0x0, 0x9af2(%rip)      # 0x1c134
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
movq -0x38(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x1261e
jmp 0x126a6
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x38(%rbp)
movl $0x2, -0x44(%rbp)
movq -0x38(%rbp), %rax
movzwl 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
je 0x126a4
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
movq -0x38(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x1267a
jmp 0x126a6
movl -0x4(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x126d0
movq 0x9943(%rip), %rax      # 0x1bff8
movq (%rax), %rdi
leaq 0x65f9(%rip), %rsi      # 0x18cb8
movb $0x0, %al
callq 0x1080
movl $0x57, %edi
callq 0x1120
movq -0x10(%rbp), %rax
movzwl 0x2(%rax), %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
addl -0x4(%rbp), %eax
subl -0x44(%rbp), %eax
movl %eax, -0x28(%rbp)
movl -0x4(%rbp), %eax
subl -0x44(%rbp), %eax
cmpl $0x0, %eax
jne 0x1283e
movq -0x38(%rbp), %rax
movw (%rax), %cx
movq -0x18(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x38(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rax
movw (%rax), %cx
movq -0x38(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x38(%rbp)
movl $0x2, -0x44(%rbp)
movq -0x38(%rbp), %rax
movzwl 0x2(%rax), %ecx
xorl %eax, %eax
cmpl $0x246, %ecx            # imm = 0x246
movb %al, -0x45(%rbp)
je 0x12766
cmpl $0x6, -0x44(%rbp)
setl %al
movb %al, -0x45(%rbp)
movb -0x45(%rbp), %al
testb $0x1, %al
jne 0x1276f
jmp 0x1278a
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
movq -0x38(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x12747
cmpl $0x6, -0x44(%rbp)
jge 0x127a0
movq -0x38(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
jmp 0x12839
movq -0x20(%rbp), %rax
movq $0x0, (%rax)
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jne 0x12837
movl 0x16579(%rip), %eax     # 0x28d38
addl $0x5, %eax
movl %eax, -0x24(%rbp)
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x40(%rbp)
movl 0x16561(%rip), %eax     # 0x28d38
cmpl -0x24(%rbp), %eax
jge 0x12835
movq -0x40(%rbp), %rdx
movslq 0x16551(%rip), %rcx     # 0x28d38
leaq 0x9a62(%rip), %rax      # 0x1c250
movq %rdx, (%rax,%rcx,8)
cmpb $0x0, 0x9988(%rip)      # 0x1c181
je 0x12812
movq -0x40(%rbp), %rdi
callq 0x12280
cmpl $0x5, %eax
jne 0x12810
movb $0x0, 0x9924(%rip)      # 0x1c134
jmp 0x12812
jmp 0x12814
movl 0x1651e(%rip), %eax     # 0x28d38
addl $0x1, %eax
movl %eax, 0x16515(%rip)     # 0x28d38
movq -0x40(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0x127d1
jmp 0x12837
jmp 0x12839
jmp 0x12c6b
movl -0x4(%rbp), %eax
subl -0x44(%rbp), %eax
cmpl $0x1, %eax
jne 0x1297d
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x10(%rbp), %rcx
movslq -0x2c(%rbp), %rax
imulq $0x90, %rax, %rax
addq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rax
movw (%rax), %cx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x2(%rax)
movq -0x18(%rbp), %rcx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x28(%rax)
movq -0x38(%rbp), %rax
movw (%rax), %cx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x32(%rax)
movq -0x38(%rbp), %rcx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x58(%rax)
movl -0x2c(%rbp), %eax
movw %ax, %cx
movq -0x38(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x10(%rbp), %rcx
movslq -0x2c(%rbp), %rax
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x30, %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movw $0x246, 0x62(%rax)      # imm = 0x246
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movq $0x0, 0x88(%rax)
movq -0x10(%rbp), %rcx
movslq -0x2c(%rbp), %rax
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x60, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movl -0x2c(%rbp), %eax
movw %ax, %cx
movq -0x10(%rbp), %rax
movw %cx, 0x2(%rax)
jmp 0x12c69
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x10(%rbp), %rcx
movslq -0x2c(%rbp), %rax
imulq $0x90, %rax, %rax
addq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rax
movw (%rax), %cx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x2(%rax)
movq -0x18(%rbp), %rcx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x28(%rax)
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movw %ax, %cx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x32(%rax)
movq -0x10(%rbp), %rcx
movl -0x2c(%rbp), %eax
addl $0x1, %eax
cltq
imulq $0x90, %rax, %rax
addq %rax, %rcx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movw $0x246, 0x62(%rax)      # imm = 0x246
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movq $0x0, 0x88(%rax)
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
cmpl -0x28(%rbp), %eax
jge 0x12b57
movl -0x2c(%rbp), %eax
subl $0x1, %eax
movw %ax, %cx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x2(%rax)
movq -0x10(%rbp), %rcx
movl -0x2c(%rbp), %eax
subl $0x1, %eax
cltq
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x30, %rcx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x28(%rax)
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movw %ax, %cx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x32(%rax)
movq -0x10(%rbp), %rcx
movl -0x2c(%rbp), %eax
addl $0x1, %eax
cltq
imulq $0x90, %rax, %rax
addq %rax, %rcx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movw $0x246, 0x62(%rax)      # imm = 0x246
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movq $0x0, 0x88(%rax)
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x12a6e
movl -0x2c(%rbp), %eax
subl $0x1, %eax
movw %ax, %cx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x2(%rax)
movq -0x10(%rbp), %rcx
movl -0x2c(%rbp), %eax
subl $0x1, %eax
cltq
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x30, %rcx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x28(%rax)
movq -0x38(%rbp), %rax
movw (%rax), %cx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x32(%rax)
movq -0x38(%rbp), %rcx
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x58(%rax)
movl -0x2c(%rbp), %eax
movw %ax, %cx
movq -0x38(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x10(%rbp), %rcx
movslq -0x2c(%rbp), %rax
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x30, %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movw $0x246, 0x62(%rax)      # imm = 0x246
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movq $0x0, 0x88(%rax)
movq -0x10(%rbp), %rcx
movslq -0x2c(%rbp), %rax
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x60, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movl -0x2c(%rbp), %eax
movw %ax, %cx
movq -0x10(%rbp), %rax
movw %cx, 0x2(%rax)
jmp 0x12c6b
cmpl $0x5, -0x4(%rbp)
jne 0x12cc9
movl 0x160c1(%rip), %eax     # 0x28d38
addl $0x5, %eax
movl %eax, -0x24(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x40(%rbp)
movl 0x160ad(%rip), %eax     # 0x28d38
cmpl -0x24(%rbp), %eax
jge 0x12cc7
movq -0x40(%rbp), %rdx
movslq 0x1609d(%rip), %rcx     # 0x28d38
leaq 0x95ae(%rip), %rax      # 0x1c250
movq %rdx, (%rax,%rcx,8)
movl 0x1608c(%rip), %eax     # 0x28d38
addl $0x1, %eax
movl %eax, 0x16083(%rip)     # 0x28d38
movq -0x40(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0x12c85
jmp 0x12cc9
addq $0x50, %rsp
popq %rbp
retq
nop