// File: /workspace/github_c_makefile_star2_O0/olcaytaner[P]Isell/svmsolve.c
// Function: nu_calculate_rho
double nu_calculate_rho(Solverptr s, Solutioninfoptr si)
{
	/*Last Changed 29.04.2005*/
	int nr_free1 = 0, nr_free2 = 0, i;
	double ub1 = DBL_MAX, ub2 = DBL_MAX, lb1 = -DBL_MAX, lb2 = -DBL_MAX, sum_free1 = 0, sum_free2 = 0, r1, r2;
	for (i = 0; i < s->active_size; i++)
	 {
	 	if (s->y[i] == +1)
			 {
			  if (is_lower_bound(s, i))
				   ub1 = fmin(ub1, s->G[i]);
			  else 
						 if (is_upper_bound(s, i))
				     lb1 = fmax(lb1, s->G[i]);
			    else
							 {
				     ++nr_free1;
				     sum_free1 += s->G[i];
							 }
			 }
		 else
			 {
		  	if (is_lower_bound(s, i))
				   ub2 = fmin(ub2, s->G[i]);
			  else 
						 if (is_upper_bound(s, i))
				     lb2 = fmax(lb2, s->G[i]);
			    else
							 {
				     ++nr_free2;
				     sum_free2 += s->G[i];
							 }
			 }
	 }
	if (nr_free1 > 0)
		 r1 = sum_free1 / nr_free1;
	else
		 r1 = (ub1 + lb1) / 2;	
	if (nr_free2 > 0)
		 r2 = sum_free2 / nr_free2;
	else
		 r2 = (ub2 + lb2) / 2;	
	si->r = (r1 + r2) / 2;
	return (r1 - r2) / 2;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl $0x0, -0x14(%rbp)
movl $0x0, -0x18(%rbp)
movsd 0x185f2(%rip), %xmm0    # 0xe7578
movsd %xmm0, -0x28(%rbp)
movsd 0x185e5(%rip), %xmm0    # 0xe7578
movsd %xmm0, -0x30(%rbp)
movsd 0x185d0(%rip), %xmm0    # 0xe7570
movsd %xmm0, -0x38(%rbp)
movsd 0x185c3(%rip), %xmm0    # 0xe7570
movsd %xmm0, -0x40(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x50(%rbp)
movl $0x0, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpl (%rcx), %eax
jge 0xcf184
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x1c(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x1, %eax
jne 0xcf0b4
movq -0x8(%rbp), %rdi
movl -0x1c(%rbp), %esi
callq 0xcdc50
cmpl $0x0, %eax
je 0xcf03d
movsd -0x28(%rbp), %xmm3
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x1c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordsd %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
minsd %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movsd %xmm0, -0x28(%rbp)
jmp 0xcf0af
movq -0x8(%rbp), %rdi
movl -0x1c(%rbp), %esi
callq 0xcdc10
cmpl $0x0, %eax
je 0xcf089
movsd -0x38(%rbp), %xmm3
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x1c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordsd %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
maxsd %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movsd %xmm0, -0x38(%rbp)
jmp 0xcf0ad
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x1c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
addsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
jmp 0xcf0af
jmp 0xcf174
movq -0x8(%rbp), %rdi
movl -0x1c(%rbp), %esi
callq 0xcdc50
cmpl $0x0, %eax
je 0xcf100
movsd -0x30(%rbp), %xmm3
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x1c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordsd %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
minsd %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movsd %xmm0, -0x30(%rbp)
jmp 0xcf172
movq -0x8(%rbp), %rdi
movl -0x1c(%rbp), %esi
callq 0xcdc10
cmpl $0x0, %eax
je 0xcf14c
movsd -0x40(%rbp), %xmm3
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x1c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordsd %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
maxsd %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
jmp 0xcf170
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x1c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
addsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
jmp 0xcf172
jmp 0xcf174
jmp 0xcf176
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
jmp 0xcefc9
cmpl $0x0, -0x14(%rbp)
jle 0xcf19f
movsd -0x48(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x58(%rbp)
jmp 0xcf1ba
movsd -0x28(%rbp), %xmm0
addsd -0x38(%rbp), %xmm0
movsd 0x13aef(%rip), %xmm1    # 0xe2ca0
divsd %xmm1, %xmm0
movsd %xmm0, -0x58(%rbp)
cmpl $0x0, -0x18(%rbp)
jle 0xcf1d5
movsd -0x50(%rbp), %xmm0
cvtsi2sdl -0x18(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
jmp 0xcf1f0
movsd -0x30(%rbp), %xmm0
addsd -0x40(%rbp), %xmm0
movsd 0x13ab9(%rip), %xmm1    # 0xe2ca0
divsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x58(%rbp), %xmm0
addsd -0x60(%rbp), %xmm0
movsd 0x13a9e(%rip), %xmm1    # 0xe2ca0
divsd %xmm1, %xmm0
movq -0x10(%rbp), %rax
movsd %xmm0, 0x20(%rax)
movsd -0x58(%rbp), %xmm0
subsd -0x60(%rbp), %xmm0
movsd 0x13a7f(%rip), %xmm1    # 0xe2ca0
divsd %xmm1, %xmm0
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax,%rax)