// File: /workspace/github_c_makefile_star2_O3/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 $0x60, %rsp
movq %rcx, %rbx
movl %esi, %eax
testl %esi, %esi
jle 0x37d0
leaq (,%rax,8), %rcx
leaq (%rcx,%rcx,2), %rcx
xorpd %xmm0, %xmm0
xorpd %xmm2, %xmm2
xorl %r8d, %r8d
xorpd %xmm1, %xmm1
xorpd %xmm3, %xmm3
movupd (%rdi,%r8), %xmm4
addpd %xmm4, %xmm0
movapd %xmm4, %xmm5
mulpd %xmm4, %xmm5
movapd %xmm5, %xmm6
unpckhpd %xmm5, %xmm6            # xmm6 = xmm6[1],xmm5[1]
addsd %xmm6, %xmm2
movapd %xmm5, %xmm7
movsd %xmm4, %xmm7            # xmm7 = xmm4[0],xmm7[1]
unpckhpd %xmm4, %xmm5            # xmm5 = xmm5[1],xmm4[1]
shufpd $0x1, %xmm4, %xmm4      # xmm4 = xmm4[1,0]
mulpd %xmm4, %xmm7
addpd %xmm7, %xmm1
mulpd %xmm6, %xmm5
addpd %xmm5, %xmm3
addq $0x18, %r8
cmpq %r8, %rcx
jne 0x3786
jmp 0x37e0
xorpd %xmm0, %xmm0
xorpd %xmm2, %xmm2
xorpd %xmm1, %xmm1
xorpd %xmm3, %xmm3
cvtsi2sd %esi, %xmm13
movapd %xmm0, %xmm4
unpckhpd %xmm0, %xmm4            # xmm4 = xmm4[1],xmm0[1]
movapd %xmm4, %xmm5
mulsd %xmm4, %xmm5
movapd %xmm2, %xmm8
mulsd %xmm13, %xmm8
subsd %xmm5, %xmm8
movapd %xmm3, %xmm5
unpckhpd %xmm3, %xmm5            # xmm5 = xmm5[1],xmm3[1]
movapd %xmm5, %xmm9
mulsd %xmm13, %xmm9
movapd %xmm4, %xmm6
mulsd %xmm2, %xmm6
subsd %xmm6, %xmm9
movapd %xmm9, %xmm6
mulsd %xmm5, %xmm6
movapd %xmm3, %xmm10
mulsd %xmm8, %xmm10
subsd %xmm6, %xmm10
movapd 0x1bcd(%rip), %xmm7     # 0x5410
movapd %xmm2, %xmm11
xorpd %xmm7, %xmm11
mulsd %xmm2, %xmm11
movapd %xmm5, %xmm12
mulsd %xmm4, %xmm12
addsd %xmm11, %xmm12
movapd %xmm2, %xmm6
mulsd %xmm12, %xmm6
addsd %xmm10, %xmm6
leaq 0x20(%rsp), %rcx
movsd %xmm8, -0x10(%rcx)
xorpd %xmm7, %xmm9
movlpd %xmm9, -0x8(%rcx)
movsd %xmm12, (%rcx)
movlpd %xmm9, 0x8(%rcx)
movapd %xmm3, %xmm8
mulsd %xmm13, %xmm8
addsd %xmm11, %xmm8
movsd %xmm8, 0x10(%rcx)
mulsd %xmm3, %xmm4
mulsd %xmm2, %xmm3
mulsd %xmm5, %xmm2
subsd %xmm2, %xmm4
xorpd %xmm7, %xmm4
movlpd %xmm4, 0x18(%rcx)
movsd %xmm12, 0x20(%rcx)
movlpd %xmm4, 0x28(%rcx)
mulsd %xmm5, %xmm5
subsd %xmm5, %xmm3
movsd %xmm3, 0x30(%rcx)
movsd 0x1b7a(%rip), %xmm2     # 0x5458
divsd %xmm6, %xmm2
movapd %xmm1, %xmm3
unpckhpd %xmm1, %xmm3            # xmm3 = xmm3[1],xmm1[1]
xorl %r8d, %r8d
movsd -0x8(%rcx), %xmm4
mulsd %xmm1, %xmm4
movsd -0x10(%rcx), %xmm5
mulsd %xmm3, %xmm5
addsd %xmm4, %xmm5
movsd (%rcx), %xmm4
mulsd %xmm0, %xmm4
addsd %xmm5, %xmm4
mulsd %xmm2, %xmm4
movsd %xmm4, (%rdx,%r8,8)
incq %r8
addq $0x18, %rcx
cmpq $0x3, %r8
jne 0x38ed
testl %esi, %esi
jle 0x39ec
movsd (%rdx), %xmm2
movsd 0x8(%rdx), %xmm3
movsd 0x10(%rdx), %xmm4
leaq (,%rax,8), %rcx
leaq (%rcx,%rcx,2), %rcx
xorpd %xmm1, %xmm1
xorl %r8d, %r8d
xorpd %xmm0, %xmm0
movsd 0x8(%rdi,%r8), %xmm5
movapd %xmm5, %xmm6
mulsd %xmm5, %xmm6
mulsd %xmm2, %xmm6
mulsd %xmm3, %xmm5
addsd %xmm6, %xmm5
addsd %xmm4, %xmm5
subsd (%rdi,%r8), %xmm5
addsd %xmm5, %xmm1
mulsd %xmm5, %xmm5
addsd %xmm5, %xmm0
addq $0x18, %r8
cmpq %r8, %rcx
jne 0x3953
divsd %xmm13, %xmm1
testl %esi, %esi
jle 0x39f9
movsd (%rdx), %xmm2
movsd 0x8(%rdx), %xmm3
movsd 0x10(%rdx), %xmm4
shlq $0x3, %rax
leaq (%rax,%rax,2), %rax
xorpd %xmm7, %xmm7
xorl %ecx, %ecx
movsd 0x8(%rdi,%rcx), %xmm5
movapd %xmm5, %xmm6
mulsd %xmm5, %xmm6
mulsd %xmm2, %xmm6
mulsd %xmm3, %xmm5
addsd %xmm6, %xmm5
addsd %xmm4, %xmm5
subsd (%rdi,%rcx), %xmm5
subsd %xmm1, %xmm5
mulsd %xmm5, %xmm5
addsd %xmm5, %xmm7
addq $0x18, %rcx
cmpq %rcx, %rax
jne 0x39b2
jmp 0x39fd
xorpd %xmm0, %xmm0
xorpd %xmm1, %xmm1
divsd %xmm13, %xmm1
xorpd %xmm7, %xmm7
movsd %xmm1, (%rbx)
divsd %xmm13, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x3a16
sqrtsd %xmm0, %xmm0
jmp 0x3a37
movsd %xmm13, 0x8(%rsp)
movsd %xmm7, (%rsp)
callq 0x1230
xorpd %xmm1, %xmm1
movsd (%rsp), %xmm7
movsd 0x8(%rsp), %xmm13
movsd %xmm0, 0x10(%rbx)
divsd %xmm13, %xmm7
ucomisd %xmm1, %xmm7
jb 0x3a50
xorps %xmm0, %xmm0
sqrtsd %xmm7, %xmm0
jmp 0x3a59
movapd %xmm7, %xmm0
callq 0x1230
movsd %xmm0, 0x8(%rbx)
addq $0x60, %rsp
popq %rbx
retq