// File: /workspace/github_c_makefile_star2_O2/Openvario[P]sensord/compdata.c
// Function: polyfit
static void polyfit(double val[][3], int idx, double pf[], double rmserr[])
{
	int i;
	double  x[4], y[3], inv[3][3];
	double det,cor,meanval,det2;

	for (i=0;i<3;++i) x[i]=y[i]=0;
	x[3]=0;
	for (i=0;i<idx;++i) {
		x[0]+=val[i][1];
		y[0]+=val[i][0];
		double tmp=val[i][1]*val[i][1];
		x[1]+=tmp;
		x[2]+=tmp*val[i][1];
		x[3]+=tmp*tmp;
		y[1]+=val[i][0]*val[i][1];
		y[2]+=val[i][0]*tmp;
	}
	det=x[3]*(x[1]*idx-x[0]*x[0])-x[2]*(x[2]*idx-x[0]*x[1])+x[1]*(x[2]*x[0]-x[1]*x[1]);
	inv[0][0]=x[1]*idx-x[0]*x[0];
	inv[0][1]=-(x[2]*idx-x[1]*x[0]);
	inv[0][2]=x[2]*x[0]-x[1]*x[1];
	inv[1][0]=-(x[2]*idx-x[1]*x[0]);
	inv[1][1]=x[3]*idx-x[1]*x[1];
	inv[1][2]=-(x[3]*x[0]-x[1]*x[2]);
	inv[2][0]=x[2]*x[0]-x[1]*x[1];
	inv[2][1]=-(x[3]*x[0]-x[2]*x[1]);
	inv[2][2]=x[3]*x[1]-x[2]*x[2];
	det=1/det;
	for (i=0;i<3;++i)
		pf[i]=(inv[i][0]*y[2]+inv[i][1]*y[1]+inv[i][2]*y[0])*det;
	for (i=0,meanval=det=0;i<idx;++i) {
		cor=(val[i][1]*val[i][1]*pf[0]+val[i][1]*pf[1]+pf[2])-val[i][0];
		meanval+=cor;
		det+=cor*cor;
	}
	meanval=meanval/(double)idx;
	for (i=0,det2=0;i<idx;++i) {
		cor=(val[i][1]*val[i][1]*pf[0]+val[i][1]*pf[1]+pf[2])-val[i][0];
		det2+=(cor-meanval)*(cor-meanval);
	}
	rmserr[0]=meanval;
	rmserr[2]=sqrt(det/idx);
	rmserr[1]=sqrt(det2/idx);
}

// Assembly:
pushq %rbx
subq $0xa0, %rsp
movq %rcx, %rbx
xorl %eax, %eax
cmpq $0x3, %rax
je 0x314d
andq $0x0, 0x10(%rsp,%rax,8)
andq $0x0, 0x30(%rsp,%rax,8)
incq %rax
jmp 0x3136
movsd 0x30(%rsp), %xmm3
movsd 0x38(%rsp), %xmm4
movsd 0x10(%rsp), %xmm0
movsd 0x40(%rsp), %xmm2
movupd 0x18(%rsp), %xmm1
shufpd $0x1, %xmm1, %xmm1      # xmm1 = xmm1[1,0]
xorl %ecx, %ecx
testl %esi, %esi
movl $0x0, %eax
cmovgl %esi, %eax
imulq $0x18, %rax, %rax
xorpd %xmm5, %xmm5
cmpq %rcx, %rax
je 0x31d9
movupd (%rdi,%rcx), %xmm6
movapd %xmm6, %xmm7
unpckhpd %xmm6, %xmm7            # xmm7 = xmm7[1],xmm6[1]
addsd %xmm7, %xmm3
addsd %xmm6, %xmm0
movapd %xmm7, %xmm8
mulsd %xmm7, %xmm8
addsd %xmm8, %xmm4
mulsd %xmm8, %xmm7
addsd %xmm7, %xmm2
movapd %xmm8, %xmm7
mulsd %xmm8, %xmm7
addsd %xmm7, %xmm5
unpcklpd %xmm6, %xmm8            # xmm8 = xmm8[0],xmm6[0]
mulpd %xmm6, %xmm8
addpd %xmm8, %xmm1
addq $0x18, %rcx
jmp 0x3184
cvtsi2sd %esi, %xmm13
movapd %xmm3, %xmm6
mulsd %xmm3, %xmm6
movapd %xmm4, %xmm8
mulsd %xmm13, %xmm8
subsd %xmm6, %xmm8
movapd %xmm2, %xmm9
mulsd %xmm13, %xmm9
movapd %xmm3, %xmm6
mulsd %xmm4, %xmm6
subsd %xmm6, %xmm9
movapd %xmm9, %xmm6
mulsd %xmm2, %xmm6
movapd %xmm5, %xmm10
mulsd %xmm8, %xmm10
subsd %xmm6, %xmm10
movapd 0x21e4(%rip), %xmm7     # 0x5410
movapd %xmm4, %xmm11
xorpd %xmm7, %xmm11
mulsd %xmm4, %xmm11
movapd %xmm2, %xmm12
mulsd %xmm3, %xmm12
addsd %xmm11, %xmm12
movapd %xmm4, %xmm6
mulsd %xmm12, %xmm6
addsd %xmm10, %xmm6
leaq 0x60(%rsp), %rcx
movsd %xmm8, -0x10(%rcx)
xorpd %xmm7, %xmm9
movlpd %xmm9, -0x8(%rcx)
movsd %xmm12, (%rcx)
movlpd %xmm9, 0x8(%rcx)
movapd %xmm5, %xmm8
mulsd %xmm13, %xmm8
addsd %xmm11, %xmm8
movsd %xmm8, 0x10(%rcx)
mulsd %xmm5, %xmm3
mulsd %xmm4, %xmm5
mulsd %xmm2, %xmm4
subsd %xmm4, %xmm3
xorpd %xmm7, %xmm3
movlpd %xmm3, 0x18(%rcx)
movsd %xmm12, 0x20(%rcx)
movlpd %xmm3, 0x28(%rcx)
mulsd %xmm2, %xmm2
subsd %xmm2, %xmm5
movsd %xmm5, 0x30(%rcx)
movsd 0x2191(%rip), %xmm2     # 0x5458
divsd %xmm6, %xmm2
movapd %xmm1, %xmm3
unpckhpd %xmm1, %xmm3            # xmm3 = xmm3[1],xmm1[1]
xorl %esi, %esi
cmpq $0x3, %rsi
je 0x330f
movsd -0x8(%rcx), %xmm4
mulsd %xmm3, %xmm4
movsd -0x10(%rcx), %xmm5
mulsd %xmm1, %xmm5
addsd %xmm4, %xmm5
movsd (%rcx), %xmm4
mulsd %xmm0, %xmm4
addsd %xmm5, %xmm4
mulsd %xmm2, %xmm4
movsd %xmm4, (%rdx,%rsi,8)
incq %rsi
addq $0x18, %rcx
jmp 0x32d5
xorpd %xmm0, %xmm0
xorl %ecx, %ecx
xorpd %xmm1, %xmm1
cmpq %rcx, %rax
je 0x3355
movsd 0x8(%rdi,%rcx), %xmm2
movapd %xmm2, %xmm3
mulsd 0x8(%rdx), %xmm2
mulsd %xmm3, %xmm3
mulsd (%rdx), %xmm3
addsd %xmm2, %xmm3
addsd 0x10(%rdx), %xmm3
subsd (%rdi,%rcx), %xmm3
addsd %xmm3, %xmm1
mulsd %xmm3, %xmm3
addsd %xmm3, %xmm0
addq $0x18, %rcx
jmp 0x3319
divsd %xmm13, %xmm1
xorpd %xmm4, %xmm4
xorl %ecx, %ecx
cmpq %rcx, %rax
je 0x339c
movsd 0x8(%rdi,%rcx), %xmm2
movapd %xmm2, %xmm3
mulsd 0x8(%rdx), %xmm2
mulsd %xmm3, %xmm3
mulsd (%rdx), %xmm3
addsd %xmm2, %xmm3
addsd 0x10(%rdx), %xmm3
subsd (%rdi,%rcx), %xmm3
subsd %xmm1, %xmm3
mulsd %xmm3, %xmm3
addsd %xmm3, %xmm4
addq $0x18, %rcx
jmp 0x3360
movsd %xmm1, (%rbx)
divsd %xmm13, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x33b5
sqrtsd %xmm0, %xmm0
jmp 0x33d6
movsd %xmm13, 0x8(%rsp)
movsd %xmm4, (%rsp)
callq 0x1240
xorpd %xmm1, %xmm1
movsd (%rsp), %xmm4
movsd 0x8(%rsp), %xmm13
movsd %xmm0, 0x10(%rbx)
divsd %xmm13, %xmm4
ucomisd %xmm1, %xmm4
jb 0x33ec
sqrtsd %xmm4, %xmm0
jmp 0x33f5
movapd %xmm4, %xmm0
callq 0x1240
movsd %xmm0, 0x8(%rbx)
addq $0xa0, %rsp
popq %rbx
retq
nop