// File: /workspace/github_c_makefile_star2_O0/olcaytaner[P]Isell/svmkernel.c
// Function: k_function
double k_function(Svm_nodeptr x, Svm_nodeptr y, Svm_parameter param)
{
	/*Last Changed 26.04.2005*/
	double sum, d;
	switch (param.kernel_type)
	 {
 		case    KLINEAR :return dot(x, y);
				                break;
		 case    KPOLY   :return pow(param.gamma * dot(x, y) + param.coef0, param.degree);
				                break;
		 case    KRBF    :sum = 0;
               		 	 while (x->index != -1 && y->index !=-1)
					   												 {
             		  	   	if (x->index == y->index)
																   			 {
					                   d = x->value - y->value;
					                   sum += d*d;
					                   ++x;
					                   ++y;
						   													 }
				                  else
		   																	 {
					                   if (x->index > y->index)
																		   			 {	
						                    sum += y->value * y->value;
						                    ++y;
												   									 }
					                   else
								   									  			{
						                    sum += x->value * x->value;
				   		                 ++x;
		   																			 }
   																			 }
																   	 }
			                 while (x->index != -1)
												   					 { 
				                  sum += x->value * x->value;
				                  ++x;
						   											 }
			                 while (y->index != -1)
		   															 {
   				               sum += y->value * y->value;
				                  ++y;
																   	 }
			                 return exp(-param.gamma * sum);
										 	   				 break;
		 case    KSIGMOID:return tanh(param.gamma * dot(x, y) + param.coef0);
			                 break;
   case KPREDEFINED:return current_dataset->kernel->values[(int)x->value][(int)y->value];
                    break;
		 default         :printf(m1232, param.kernel_type);
                    return 0;				            
	 }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
leaq 0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl 0x4(%rax), %eax
movq %rax, -0x30(%rbp)
subq $0x4, %rax
ja 0xcad58
movq -0x30(%rbp), %rax
leaq 0x23690(%rip), %rcx     # 0xee154
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xca490
movsd %xmm0, -0x8(%rbp)
jmp 0xcad75
movq -0x38(%rbp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, -0x40(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xca490
movq -0x38(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x40(%rbp), %xmm0
movsd 0x18(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsi2sdl 0x8(%rax), %xmm1
callq 0x4290
movsd %xmm0, -0x8(%rbp)
jmp 0xcad75
xorps %xmm0, %xmm0
movsd %xmm0, -0x20(%rbp)
movq -0x10(%rbp), %rcx
xorl %eax, %eax
cmpl $-0x1, (%rcx)
movb %al, -0x41(%rbp)
je 0xcab4f
movq -0x18(%rbp), %rax
cmpl $-0x1, (%rax)
setne %al
movb %al, -0x41(%rbp)
movb -0x41(%rbp), %al
testb $0x1, %al
jne 0xcab5b
jmp 0xcac2d
movq -0x10(%rbp), %rax
movl (%rax), %eax
movq -0x18(%rbp), %rcx
cmpl (%rcx), %eax
jne 0xcabb6
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x18(%rbp), %rax
subsd 0x8(%rax), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x28(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
movsd -0x20(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movq -0x10(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x18(%rbp)
jmp 0xcac28
movq -0x10(%rbp), %rax
movl (%rax), %eax
movq -0x18(%rbp), %rcx
cmpl (%rcx), %eax
jle 0xcabf6
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm2
movsd -0x20(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movq -0x18(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x18(%rbp)
jmp 0xcac26
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm2
movsd -0x20(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movq -0x10(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x10(%rbp)
jmp 0xcac28
jmp 0xcab34
jmp 0xcac2f
movq -0x10(%rbp), %rax
cmpl $-0x1, (%rax)
je 0xcac6a
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm2
movsd -0x20(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movq -0x10(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x10(%rbp)
jmp 0xcac2f
jmp 0xcac6c
movq -0x18(%rbp), %rax
cmpl $-0x1, (%rax)
je 0xcaca7
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm2
movsd -0x20(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movq -0x18(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x18(%rbp)
jmp 0xcac6c
movq -0x38(%rbp), %rax
movsd 0x10(%rax), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd -0x20(%rbp), %xmm0
callq 0x4060
movsd %xmm0, -0x8(%rbp)
jmp 0xcad75
movq -0x38(%rbp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, -0x50(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xca490
movq -0x38(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x50(%rbp), %xmm0
movsd 0x18(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
callq 0x4040
movsd %xmm0, -0x8(%rbp)
jmp 0xcad75
leaq 0x3ab1e(%rip), %rax     # 0x105840
movq (%rax), %rax
movq 0x1407210(%rax), %rax
movq 0x8(%rax), %rax
movq -0x10(%rbp), %rcx
cvttsd2si 0x8(%rcx), %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movq -0x18(%rbp), %rcx
cvttsd2si 0x8(%rcx), %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0xcad75
movq -0x38(%rbp), %rax
movl 0x4(%rax), %esi
leaq 0x23402(%rip), %rdi     # 0xee168
movb $0x0, %al
callq 0x4030
xorps %xmm0, %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
addq $0x50, %rsp
popq %rbp
retq