// File: cjlin1[P]liblinear/linear.cpp
// Function: check_parameter
const char *check_parameter(const problem *prob, const parameter *param)
{
	if(param->eps <= 0)
		return "eps <= 0";

	if(param->C <= 0)
		return "C <= 0";

	if(param->p < 0 && param->solver_type == L2R_L2LOSS_SVR)
		return "p < 0";

	if(prob->bias >= 0 && param->solver_type == ONECLASS_SVM)
		return "prob->bias >=0, but this is ignored in ONECLASS_SVM";

	if(param->regularize_bias == 0)
	{
		if(prob->bias != 1.0)
			return "To not regularize bias, must specify -B 1 along with -R";
		if(param->solver_type != L2R_LR
			&& param->solver_type != L2R_L2LOSS_SVC
			&& param->solver_type != L1R_L2LOSS_SVC
			&& param->solver_type != L1R_LR
			&& param->solver_type != L2R_L2LOSS_SVR)
			return "-R option supported only for solver L2R_LR, L2R_L2LOSS_SVC, L1R_L2LOSS_SVC, L1R_LR, and L2R_L2LOSS_SVR";
	}

	if(param->solver_type != L2R_LR
		&& param->solver_type != L2R_L2LOSS_SVC_DUAL
		&& param->solver_type != L2R_L2LOSS_SVC
		&& param->solver_type != L2R_L1LOSS_SVC_DUAL
		&& param->solver_type != MCSVM_CS
		&& param->solver_type != L1R_L2LOSS_SVC
		&& param->solver_type != L1R_LR
		&& param->solver_type != L2R_LR_DUAL
		&& param->solver_type != L2R_L2LOSS_SVR
		&& param->solver_type != L2R_L2LOSS_SVR_DUAL
		&& param->solver_type != L2R_L1LOSS_SVR_DUAL
		&& param->solver_type != ONECLASS_SVM)
		return "unknown solver type";

	if(param->init_sol != NULL
		&& param->solver_type != L2R_LR
		&& param->solver_type != L2R_L2LOSS_SVC
		&& param->solver_type != L2R_L2LOSS_SVR)
		return "Initial-solution specification supported only for solvers L2R_LR, L2R_L2LOSS_SVC, and L2R_L2LOSS_SVR";

	if(param->w_recalc == true
		&& param->solver_type != L2R_L2LOSS_SVC_DUAL
		&& param->solver_type != L2R_L1LOSS_SVC_DUAL)
		return "Recalculating w in the end is only for dual solvers for L2-regularized L1/L2-loss SVM";

	return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x18(%rbp), %rax
xorps %xmm0, %xmm0
ucomisd 0x8(%rax), %xmm0
jb 0xbf5a
leaq 0x7224(%rip), %rax      # 0x13175
movq %rax, -0x8(%rbp)
jmp 0xc122
movq -0x18(%rbp), %rax
xorps %xmm0, %xmm0
ucomisd 0x10(%rax), %xmm0
jb 0xbf78
leaq 0x720f(%rip), %rax      # 0x1317e
movq %rax, -0x8(%rbp)
jmp 0xc122
movq -0x18(%rbp), %rax
xorps %xmm0, %xmm0
ucomisd 0x30(%rax), %xmm0
jbe 0xbf9f
movq -0x18(%rbp), %rax
cmpl $0xb, (%rax)
jne 0xbf9f
leaq 0x71ef(%rip), %rax      # 0x13185
movq %rax, -0x8(%rbp)
jmp 0xc122
movq -0x10(%rbp), %rax
movsd 0x18(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0xbfca
movq -0x18(%rbp), %rax
cmpl $0x15, (%rax)
jne 0xbfca
leaq 0x71ca(%rip), %rax      # 0x1318b
movq %rax, -0x8(%rbp)
jmp 0xc122
movq -0x18(%rbp), %rax
cmpl $0x0, 0x48(%rax)
jne 0xc03e
movq -0x10(%rbp), %rax
movsd 0x18(%rax), %xmm0
movsd 0x6043(%rip), %xmm1     # 0x12028
ucomisd %xmm1, %xmm0
jne 0xbfef
jp 0xbfef
jmp 0xbfff
leaq 0x71c9(%rip), %rax      # 0x131bf
movq %rax, -0x8(%rbp)
jmp 0xc122
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0xc03c
movq -0x18(%rbp), %rax
cmpl $0x2, (%rax)
je 0xc03c
movq -0x18(%rbp), %rax
cmpl $0x5, (%rax)
je 0xc03c
movq -0x18(%rbp), %rax
cmpl $0x6, (%rax)
je 0xc03c
movq -0x18(%rbp), %rax
cmpl $0xb, (%rax)
je 0xc03c
leaq 0x71c4(%rip), %rax      # 0x131f7
movq %rax, -0x8(%rbp)
jmp 0xc122
jmp 0xc03e
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0xc0b7
movq -0x18(%rbp), %rax
cmpl $0x1, (%rax)
je 0xc0b7
movq -0x18(%rbp), %rax
cmpl $0x2, (%rax)
je 0xc0b7
movq -0x18(%rbp), %rax
cmpl $0x3, (%rax)
je 0xc0b7
movq -0x18(%rbp), %rax
cmpl $0x4, (%rax)
je 0xc0b7
movq -0x18(%rbp), %rax
cmpl $0x5, (%rax)
je 0xc0b7
movq -0x18(%rbp), %rax
cmpl $0x6, (%rax)
je 0xc0b7
movq -0x18(%rbp), %rax
cmpl $0x7, (%rax)
je 0xc0b7
movq -0x18(%rbp), %rax
cmpl $0xb, (%rax)
je 0xc0b7
movq -0x18(%rbp), %rax
cmpl $0xc, (%rax)
je 0xc0b7
movq -0x18(%rbp), %rax
cmpl $0xd, (%rax)
je 0xc0b7
movq -0x18(%rbp), %rax
cmpl $0x15, (%rax)
je 0xc0b7
leaq 0x71ad(%rip), %rax      # 0x1325e
movq %rax, -0x8(%rbp)
jmp 0xc122
movq -0x18(%rbp), %rax
cmpq $0x0, 0x40(%rax)
je 0xc0ea
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0xc0ea
movq -0x18(%rbp), %rax
cmpl $0x2, (%rax)
je 0xc0ea
movq -0x18(%rbp), %rax
cmpl $0xb, (%rax)
je 0xc0ea
leaq 0x718e(%rip), %rax      # 0x13272
movq %rax, -0x8(%rbp)
jmp 0xc122
movq -0x18(%rbp), %rax
movb 0x4c(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0xc11a
movq -0x18(%rbp), %rax
cmpl $0x1, (%rax)
je 0xc11a
movq -0x18(%rbp), %rax
cmpl $0x3, (%rax)
je 0xc11a
leaq 0x71c3(%rip), %rax      # 0x132d7
movq %rax, -0x8(%rbp)
jmp 0xc122
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
popq %rbp
retq
nopl (%rax,%rax)