// File: /workspace/github_c_makefile_star2_O1/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 0x37aa
leaq (,%rax,8), %rcx
leaq (%rcx,%rcx,2), %rcx
xorpd %xmm0, %xmm0
xorl %r8d, %r8d
xorpd %xmm1, %xmm1
xorpd %xmm3, %xmm3
xorpd %xmm5, %xmm5
xorpd %xmm6, %xmm6
xorpd %xmm2, %xmm2
xorpd %xmm4, %xmm4
movsd (%rdi,%r8), %xmm7
movsd 0x8(%rdi,%r8), %xmm8
addsd %xmm8, %xmm6
addsd %xmm7, %xmm2
movapd %xmm8, %xmm9
mulsd %xmm8, %xmm9
addsd %xmm9, %xmm5
movapd %xmm9, %xmm10
mulsd %xmm8, %xmm10
addsd %xmm10, %xmm3
movapd %xmm9, %xmm10
mulsd %xmm9, %xmm10
addsd %xmm10, %xmm4
mulsd %xmm7, %xmm8
addsd %xmm8, %xmm1
mulsd %xmm7, %xmm9
addsd %xmm9, %xmm0
addq $0x18, %r8
cmpq %r8, %rcx
jne 0x3748
jmp 0x37c6
xorpd %xmm5, %xmm5
xorpd %xmm3, %xmm3
xorpd %xmm1, %xmm1
xorpd %xmm0, %xmm0
xorpd %xmm4, %xmm4
xorpd %xmm2, %xmm2
xorpd %xmm6, %xmm6
cvtsi2sd %esi, %xmm14
movapd %xmm6, %xmm7
mulsd %xmm6, %xmm7
movapd %xmm5, %xmm9
mulsd %xmm14, %xmm9
subsd %xmm7, %xmm9
movapd %xmm3, %xmm10
mulsd %xmm14, %xmm10
movapd %xmm6, %xmm7
mulsd %xmm5, %xmm7
subsd %xmm7, %xmm10
movapd %xmm10, %xmm7
mulsd %xmm3, %xmm7
movapd %xmm4, %xmm11
mulsd %xmm9, %xmm11
subsd %xmm7, %xmm11
movapd 0x1c16(%rip), %xmm8     # 0x5430
movapd %xmm5, %xmm12
xorpd %xmm8, %xmm12
mulsd %xmm5, %xmm12
movapd %xmm3, %xmm13
mulsd %xmm6, %xmm13
addsd %xmm12, %xmm13
movapd %xmm5, %xmm7
mulsd %xmm13, %xmm7
addsd %xmm11, %xmm7
leaq 0x20(%rsp), %rcx
movsd %xmm9, -0x10(%rcx)
xorpd %xmm8, %xmm10
movlpd %xmm10, -0x8(%rcx)
movsd %xmm13, (%rcx)
movlpd %xmm10, 0x8(%rcx)
movapd %xmm4, %xmm9
mulsd %xmm14, %xmm9
addsd %xmm12, %xmm9
movsd %xmm9, 0x10(%rcx)
mulsd %xmm4, %xmm6
mulsd %xmm5, %xmm4
mulsd %xmm3, %xmm5
subsd %xmm5, %xmm6
xorpd %xmm8, %xmm6
movlpd %xmm6, 0x18(%rcx)
movsd %xmm13, 0x20(%rcx)
movlpd %xmm6, 0x28(%rcx)
mulsd %xmm3, %xmm3
subsd %xmm3, %xmm4
movsd %xmm4, 0x30(%rcx)
movsd 0x1b5a(%rip), %xmm3     # 0x5410
divsd %xmm7, %xmm3
xorl %r8d, %r8d
movsd -0x8(%rcx), %xmm4
mulsd %xmm1, %xmm4
movsd -0x10(%rcx), %xmm5
mulsd %xmm0, %xmm5
addsd %xmm4, %xmm5
movsd (%rcx), %xmm4
mulsd %xmm2, %xmm4
addsd %xmm5, %xmm4
mulsd %xmm3, %xmm4
movsd %xmm4, (%rdx,%r8,8)
incq %r8
addq $0x18, %rcx
cmpq $0x3, %r8
jne 0x38bd
xorpd %xmm7, %xmm7
xorpd %xmm0, %xmm0
xorpd %xmm1, %xmm1
testl %esi, %esi
jle 0x395d
movsd (%rdx), %xmm2
movsd 0x8(%rdx), %xmm3
movsd 0x10(%rdx), %xmm4
leaq (,%rax,8), %rcx
leaq (%rcx,%rcx,2), %rcx
xorl %r8d, %r8d
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 0x3923
divsd %xmm14, %xmm1
testl %esi, %esi
jle 0x39ba
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 0x3982
movsd %xmm1, (%rbx)
divsd %xmm14, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x39d3
sqrtsd %xmm0, %xmm0
jmp 0x39f4
movsd %xmm14, 0x8(%rsp)
movsd %xmm7, (%rsp)
callq 0x1230
xorpd %xmm1, %xmm1
movsd (%rsp), %xmm7
movsd 0x8(%rsp), %xmm14
movsd %xmm0, 0x10(%rbx)
divsd %xmm14, %xmm7
ucomisd %xmm1, %xmm7
jb 0x3a0d
xorps %xmm0, %xmm0
sqrtsd %xmm7, %xmm0
jmp 0x3a16
movapd %xmm7, %xmm0
callq 0x1230
movsd %xmm0, 0x8(%rbx)
addq $0x60, %rsp
popq %rbx
retq
nopl (%rax)