// File: /workspace/github_cpp_makefile_star2_O2/tlestang[P]IW_gene/topo.cpp
// Function: Topography::FreeSlipBC(VelSite**, VelSite**)
void Topography::FreeSlipBC(VelSite **sites, VelSite **_sites)
{
  int x,y;
  int op[9] = {0, 1, 4, 3, 2, 6, 5, 8, 7};
  double dd; int cc= 0;

  // ofstream bb, lns, rns, ts;
  // bb.open("bb.dat");lns.open("lns.dat");rns.open("rns.dat");ts.open("ts.dat");
  for (int i=0;i<nbNodes;i++)
    {
      x = nodes[i][0]; y = nodes[i][1];

      if(lbl[i] == 1)
	{
	  _sites[x][y].f[6] = _sites[x][y].f[7];
	  _sites[x][y].f[2] = _sites[x][y].f[4];
	  _sites[x][y].f[5] = _sites[x][y].f[8];
	  // ts << x << " " << y << endl;
	  // cc += 1;
	}
      else if(lbl[i] == 2)
	{
	  if(nodes[i][0] == 0 || nodes[i][0] == nbNodes-1){dd = +1;}
	  else{dd = (nodes[i+1][1]-nodes[i-1][1])/2.;}

	  if(dd > 0.) // if mur gauche
	    {
	      _sites[x][y].f[3] = sites[x][y].f[4];
	      _sites[x][y].f[2] = sites[x][y].f[1];
	      _sites[x][y].f[6] = sites[x][y].f[8];
	      // _sites[x][y].f[6] = _sites[x][y].f[5];
	      // _sites[x][y].f[7] = _sites[x][y].f[8];
	      // _sites[x][y].f[3] = _sites[x][y].f[1];
	      // lns << x << " " << y << endl;
	      // cc += 1;
	    }
	  else
	    {
	      _sites[x][y].f[2] = sites[x][y].f[3];
	      _sites[x][y].f[1] = sites[x][y].f[4];
	      _sites[x][y].f[5] = sites[x][y].f[7];
	      // _sites[x][y].f[5] = _sites[x][y].f[6];
	      // _sites[x][y].f[8] = _sites[x][y].f[7];
	      // _sites[x][y].f[1] = _sites[x][y].f[3];
	      // rns << x << " " << y << endl;
	      // cc += 1;
	    }
	}
      else
	{
	  for (int k=0;k<9;k++)
	    {
	      _sites[x][y].f[k] = sites[x][y].f[op[k]];
	    }
	  // bb << x << " " << y << endl;
	  // cc += 1;
	}
    }

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movl 0x8(%rdi), %eax
movq 0x10(%rdi), %rcx
leal -0x1(%rax), %r8d
xorl %r9d, %r9d
testl %eax, %eax
cmovlel %r9d, %eax
movq 0x18(%rdi), %rdi
movsd 0x1ff8(%rip), %xmm0     # 0x5188
xorpd %xmm1, %xmm1
leaq 0x1ff5(%rip), %r10      # 0x5190
cmpq %rax, %r9
je 0x32da
movq (%rcx,%r9,8), %rbx
movslq (%rbx), %r11
movslq 0x4(%rbx), %rbx
movl (%rdi,%r9,4), %ebp
cmpl $0x1, %ebp
je 0x3233
cmpl $0x2, %ebp
jne 0x3264
testl %r11d, %r11d
sete %bpl
cmpl %r8d, %r11d
sete %r14b
orb %bpl, %r14b
jne 0x31f8
movq -0x8(%rcx,%r9,8), %r14
movq 0x8(%rcx,%r9,8), %r15
movl 0x4(%r15), %ebp
subl 0x4(%r14), %ebp
cvtsi2sd %ebp, %xmm2
mulsd %xmm0, %xmm2
ucomisd %xmm1, %xmm2
jbe 0x329f
movq (%rsi,%r11,8), %r14
imulq $0x88, %rbx, %rbx
movsd 0x28(%r14,%rbx), %xmm2
movq (%rdx,%r11,8), %r11
movsd %xmm2, 0x20(%r11,%rbx)
movsd 0x10(%r14,%rbx), %xmm2
movsd %xmm2, 0x18(%r11,%rbx)
movsd 0x48(%r14,%rbx), %xmm2
movsd %xmm2, 0x38(%r11,%rbx)
jmp 0x325c
movq (%rdx,%r11,8), %r11
imulq $0x88, %rbx, %rbx
movsd 0x28(%r11,%rbx), %xmm2
movsd %xmm2, 0x18(%r11,%rbx)
movups 0x40(%r11,%rbx), %xmm2
shufps $0x4e, %xmm2, %xmm2     # xmm2 = xmm2[2,3,0,1]
movups %xmm2, 0x30(%r11,%rbx)
incq %r9
jmp 0x319b
movq (%rsi,%r11,8), %r14
movq (%rdx,%r11,8), %r15
imulq $0x88, %rbx, %r11
leaq (%r15,%r11), %rbx
addq $0x8, %rbx
xorl %r15d, %r15d
cmpq $0x24, %r15
je 0x325c
movslq (%r15,%r10), %r12
leaq (%r14,%r11), %r13
movsd 0x8(%r13,%r12,8), %xmm2
movsd %xmm2, (%rbx,%r15,2)
addq $0x4, %r15
jmp 0x327e
movq (%rsi,%r11,8), %r14
imulq $0x88, %rbx, %rbx
movsd 0x20(%r14,%rbx), %xmm2
movq (%rdx,%r11,8), %r11
movsd %xmm2, 0x18(%r11,%rbx)
movsd 0x28(%r14,%rbx), %xmm2
movsd %xmm2, 0x10(%r11,%rbx)
movsd 0x40(%r14,%rbx), %xmm2
movsd %xmm2, 0x30(%r11,%rbx)
jmp 0x325c
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop