// File: cjlin1[P]liblinear/linear.cpp
// Function: calc_start_C(problem const*, parameter const*)
static double calc_start_C(const problem *prob, const parameter *param)
{
	int i;
	double xTx, max_xTx;
	max_xTx = 0;
	for(i=0; i<prob->l; i++)
	{
		xTx = 0;
		feature_node *xi=prob->x[i];
		while(xi->index != -1)
		{
			double val = xi->value;
			xTx += val*val;
			xi++;
		}
		if(xTx > max_xTx)
			max_xTx = xTx;
	}

	double min_C = 1.0;
	if(param->solver_type == L2R_LR)
		min_C = 1.0 / (prob->l * max_xTx);
	else if(param->solver_type == L2R_L2LOSS_SVC)
		min_C = 1.0 / (2 * prob->l * max_xTx);
	else if(param->solver_type == L2R_L2LOSS_SVR)
	{
		double sum_y, loss, y_abs;
		double delta2 = 0.1;
		sum_y = 0, loss = 0;
		for(i=0; i<prob->l; i++)
		{
			y_abs = fabs(prob->y[i]);
			sum_y += y_abs;
			loss += max(y_abs - param->p, 0.0) * max(y_abs - param->p, 0.0);
		}
		if(loss > 0)
			min_C = delta2 * delta2 * loss / (8 * sum_y * sum_y * max_xTx);
		else
			min_C = INF;
	}

	return pow( 2, floor(log(min_C) / log(2.0)) );
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x28(%rbp)
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpl (%rcx), %eax
jge 0xa311
xorps %xmm0, %xmm0
movsd %xmm0, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x14(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
cmpl $-0x1, (%rax)
je 0xa2eb
movq -0x30(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x38(%rbp)
movsd -0x38(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
movsd -0x20(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movq -0x30(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x30(%rbp)
jmp 0xa2aa
movsd -0x20(%rbp), %xmm0
ucomisd -0x28(%rbp), %xmm0
jbe 0xa301
movsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
jmp 0xa303
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xa27f
movsd 0x7d0f(%rip), %xmm0     # 0x12028
movsd %xmm0, -0x40(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
jne 0xa34a
movq -0x8(%rbp), %rax
cvtsi2sdl (%rax), %xmm1
mulsd -0x28(%rbp), %xmm1
movsd 0x7cec(%rip), %xmm0     # 0x12028
divsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
jmp 0xa495
movq -0x10(%rbp), %rax
cmpl $0x2, (%rax)
jne 0xa37a
movq -0x8(%rbp), %rax
movl (%rax), %eax
shll %eax
cvtsi2sd %eax, %xmm1
mulsd -0x28(%rbp), %xmm1
movsd 0x7cbc(%rip), %xmm0     # 0x12028
divsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
jmp 0xa493
movq -0x10(%rbp), %rax
cmpl $0xb, (%rax)
jne 0xa491
movsd 0x7c91(%rip), %xmm0     # 0x12020
movsd %xmm0, -0x60(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x50(%rbp)
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpl (%rcx), %eax
jge 0xa443
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x14(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movaps 0x88ce(%rip), %xmm1     # 0x12ca0
pand %xmm1, %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x58(%rbp), %xmm0
addsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x58(%rbp), %xmm0
movq -0x10(%rbp), %rax
subsd 0x30(%rax), %xmm0
xorps %xmm1, %xmm1
callq 0x7070
movsd %xmm0, -0x68(%rbp)
movsd -0x58(%rbp), %xmm0
movq -0x10(%rbp), %rax
subsd 0x30(%rax), %xmm0
xorps %xmm1, %xmm1
callq 0x7070
movaps %xmm0, %xmm2
movsd -0x68(%rbp), %xmm0
movsd -0x50(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xa3ab
movsd -0x50(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xa482
movsd -0x60(%rbp), %xmm0
mulsd -0x60(%rbp), %xmm0
mulsd -0x50(%rbp), %xmm0
movsd 0x89b8(%rip), %xmm1     # 0x12e20
mulsd -0x48(%rbp), %xmm1
mulsd -0x48(%rbp), %xmm1
mulsd -0x28(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
jmp 0xa48f
movsd 0x7b86(%rip), %xmm0     # 0x12010
movsd %xmm0, -0x40(%rbp)
jmp 0xa491
jmp 0xa493
jmp 0xa495
movsd -0x40(%rbp), %xmm0
callq 0x20e0
movsd %xmm0, -0x70(%rbp)
movsd 0x8944(%rip), %xmm0     # 0x12df0
callq 0x20e0
movaps %xmm0, %xmm1
movsd -0x70(%rbp), %xmm0
divsd %xmm1, %xmm0
callq 0x2240
movl $0x2, %edi
callq 0x11760
addq $0x70, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)