// File: /workspace/github_c_makefile_star2_O3/asford[P]tmalign/./TMalign.h
// Function: score_matrix_rmsd(double**, double**, int, int, int*)
void score_matrix_rmsd(  double **x, 
						 double **y, 
						 int x_len,
						 int y_len,
						 int *y2x
						 )
{
	double t[3], u[3][3];
	double rmsd, dij;
	double d01=d0+1.5;
	if(d01 < D0_MIN) d01=D0_MIN;
	double d02=d01*d01;

	double xx[3];
	int i, k=0;
	for(int j=0; j<y_len; j++)
	{
		i=y2x[j];
		if(i>=0)
		{
			r1[k][0]=x[i][0];  
			r1[k][1]=x[i][1]; 
			r1[k][2]=x[i][2];   
            
			r2[k][0]=y[j][0];  
			r2[k][1]=y[j][1]; 
			r2[k][2]=y[j][2];
			
			k++;
		}
	}
	Kabsch(r1, r2, k, 1, &rmsd, t, u);
	//do_rotation(x, xt, x_len, t, u);
	
	
	for(int ii=0; ii<x_len; ii++)
	{		
		transform(t, u, &x[ii][0], xx);
		for(int jj=0; jj<y_len; jj++)
		{
			//dij=dist(&xt[ii][0], &y[jj][0]);   
			dij=dist(xx, &y[jj][0]); 
			score[ii+1][jj+1] = 1.0/(1+dij/d02);
			//	cout << ii+1 << " " << jj+1 << " " << score[ii+1][jj+1]<< endl;
		}
	}		
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x80, %rsp
movl %ecx, %ebx
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %r15
movsd 0x1f99ec(%rip), %xmm0   # 0x602580
addsd 0x17b4e4(%rip), %xmm0   # 0x584080
maxsd 0x1f99c4(%rip), %xmm0   # 0x602568
movsd %xmm0, 0x8(%rsp)
movq 0x1f9a67(%rip), %rdi    # 0x602618
movq 0x1f9a68(%rip), %rsi    # 0x602620
movl %ecx, %r12d
testl %ecx, %ecx
jle 0x408c29
xorl %eax, %eax
xorl %edx, %edx
movslq (%r8,%rax,4), %rcx
testq %rcx, %rcx
js 0x408c1f
movq (%r15,%rcx,8), %rcx
movsd (%rcx), %xmm0
movslq %edx, %rdx
movq (%rdi,%rdx,8), %r9
movsd %xmm0, (%r9)
movsd 0x8(%rcx), %xmm0
movsd %xmm0, 0x8(%r9)
movsd 0x10(%rcx), %xmm0
movsd %xmm0, 0x10(%r9)
movq (%r14,%rax,8), %rcx
movsd (%rcx), %xmm0
movq (%rsi,%rdx,8), %r9
movsd %xmm0, (%r9)
movsd 0x8(%rcx), %xmm0
movsd %xmm0, 0x8(%r9)
movsd 0x10(%rcx), %xmm0
movsd %xmm0, 0x10(%r9)
incl %edx
incq %rax
cmpq %rax, %r12
jne 0x408bc3
jmp 0x408c2b
xorl %edx, %edx
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
leaq 0x78(%rsp), %r8
leaq 0x60(%rsp), %r9
movl $0x1, %ecx
callq 0x406142
testl %ebp, %ebp
jle 0x408da0
movsd 0x8(%rsp), %xmm10
mulsd %xmm10, %xmm10
movsd 0x60(%rsp), %xmm0
movsd 0x10(%rsp), %xmm1
movsd 0x18(%rsp), %xmm2
movsd 0x20(%rsp), %xmm3
movupd 0x28(%rsp), %xmm4
movapd 0x30(%rsp), %xmm5
movupd 0x38(%rsp), %xmm6
movupd 0x68(%rsp), %xmm7
movq 0x1f9905(%rip), %rax    # 0x602598
movl %ebp, %ecx
movhpd 0x40(%rsp), %xmm4       # xmm4 = xmm4[0],mem[0]
movhpd 0x48(%rsp), %xmm5       # xmm5 = xmm5[0],mem[0]
movhpd 0x50(%rsp), %xmm6       # xmm6 = xmm6[0],mem[0]
movsd 0x17b358(%rip), %xmm8   # 0x584008
movapd %xmm8, %xmm9
divsd %xmm10, %xmm9
xorl %edx, %edx
testl %ebx, %ebx
jle 0x408d94
movq (%r15,%rdx,8), %rsi
movsd (%rsi), %xmm12
movsd 0x8(%rsi), %xmm13
movapd %xmm12, %xmm14
mulsd %xmm1, %xmm14
addsd %xmm0, %xmm14
movapd %xmm13, %xmm15
mulsd %xmm2, %xmm15
movsd 0x10(%rsi), %xmm10
movapd %xmm10, %xmm11
mulsd %xmm3, %xmm11
addsd %xmm15, %xmm11
addsd %xmm14, %xmm11
unpcklpd %xmm12, %xmm12          # xmm12 = xmm12[0,0]
mulpd %xmm4, %xmm12
addpd %xmm7, %xmm12
unpcklpd %xmm13, %xmm13          # xmm13 = xmm13[0,0]
mulpd %xmm5, %xmm13
unpcklpd %xmm10, %xmm10          # xmm10 = xmm10[0,0]
mulpd %xmm6, %xmm10
addpd %xmm13, %xmm10
addpd %xmm12, %xmm10
movq 0x8(%rax,%rdx,8), %rsi
xorl %edi, %edi
movq (%r14,%rdi,8), %r8
movapd %xmm11, %xmm12
subsd (%r8), %xmm12
mulsd %xmm12, %xmm12
movupd 0x8(%r8), %xmm13
movapd %xmm10, %xmm14
subpd %xmm13, %xmm14
mulpd %xmm14, %xmm14
addsd %xmm14, %xmm12
unpckhpd %xmm14, %xmm14          # xmm14 = xmm14[1,1]
addsd %xmm12, %xmm14
mulsd %xmm9, %xmm14
addsd %xmm8, %xmm14
movapd %xmm8, %xmm12
divsd %xmm14, %xmm12
movsd %xmm12, 0x8(%rsi,%rdi,8)
incq %rdi
cmpq %rdi, %r12
jne 0x408d3a
incq %rdx
cmpq %rcx, %rdx
jne 0x408cbc
addq $0x80, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq