// File: /workspace/github_cpp_makefile_star2_O1/kebwi[P]Trifid/src/FFT/matlib.cpp
// Function: cvprod(double*, double*, double*, long)
void cvprod(Float_t *a, Float_t *b, Float_t *out, long N){
/* complex vector product, can be in-place */
/* product of complex vector *a times complex vector *b */
/* INPUTS */
/* N vector length */
/* *a complex vector length N complex numbers */
/* *b complex vector length N complex numbers */
/* OUTPUTS */
/* *out complex vector length N */

long	OutCnt;		/* output counter */
Float_t	A0R; 		/* A storage */
Float_t	A0I; 		/* A storage */
Float_t	A1R; 		/* A storage */
Float_t	A1I; 		/* A storage */
Float_t	A2R; 		/* A storage */
Float_t	A2I; 		/* A storage */
Float_t	A3R; 		/* A storage */
Float_t	A3I; 		/* A storage */
Float_t	B0R; 		/* B storage */
Float_t	B0I; 		/* B storage */
Float_t	B1R; 		/* B storage */
Float_t	B1I; 		/* B storage */
Float_t	B2R; 		/* B storage */
Float_t	B2I; 		/* B storage */
Float_t	B3R; 		/* B storage */
Float_t	B3I; 		/* B storage */
Float_t	T0R; 		/* TMP storage */
Float_t	T0I; 		/* TMP storage */
Float_t	T1R; 		/* TMP storage */
Float_t	T1I; 		/* TMP storage */
Float_t	T2R; 		/* TMP storage */
Float_t	T2I; 		/* TMP storage */
Float_t	T3R; 		/* TMP storage */
Float_t	T3I; 		/* TMP storage */

if (N>=4){
	A0R = *a;
	B0R = *b;
	A0I = *(a +1);
	B0I = *(b +1);
	A1R = *(a +2);
	B1R = *(b +2);
	A1I = *(a +3);
	B1I = *(b +3);
	A2R = *(a +4);
	B2R = *(b +4);
	A2I = *(a +5);
	B2I = *(b +5);
	A3R = *(a +6);
	B3R = *(b +6);
	A3I = *(a +7);
	B3I = *(b +7);
	T0R = A0R * B0R;
	T0I = (A0R * B0I);
	T1R = A1R * B1R;
	T1I = (A1R * B1I);
	T2R = A2R * B2R;
	T2I = (A2R * B2I);
	T3R = A3R * B3R;
	T3I = (A3R * B3I);
	T0R -= (A0I * B0I);
	T0I = A0I * B0R + T0I;
	T1R -= (A1I * B1I);
	T1I = A1I * B1R + T1I;
	T2R -= (A2I * B2I);
	T2I = A2I * B2R + T2I;
	T3R -= (A3I * B3I);
	T3I = A3I * B3R + T3I;
	for (OutCnt=N/4-1; OutCnt > 0; OutCnt--){
		a += 8;
		b += 8;
		A0R = *a;
		B0R = *b;
		A0I = *(a +1);
		B0I = *(b +1);
		A1R = *(a +2);
		B1R = *(b +2);
		A1I = *(a +3);
		B1I = *(b +3);
		A2R = *(a +4);
		B2R = *(b +4);
		A2I = *(a +5);
		B2I = *(b +5);
		A3R = *(a +6);
		B3R = *(b +6);
		A3I = *(a +7);
		B3I = *(b +7);
		*out = T0R;
		*(out +1) = T0I;
		*(out +2) = T1R;
		*(out +3) = T1I;
		*(out +4) = T2R;
		*(out +5) = T2I;
		*(out +6) = T3R;
		*(out +7) = T3I;
		T0R = A0R * B0R;
		T0I = (A0R * B0I);
		T1R = A1R * B1R;
		T1I = (A1R * B1I);
		T2R = A2R * B2R;
		T2I = (A2R * B2I);
		T3R = A3R * B3R;
		T3I = (A3R * B3I);
		T0R -= (A0I * B0I);
		T0I = A0I * B0R + T0I;
		T1R -= (A1I * B1I);
		T1I = A1I * B1R + T1I;
		T2R -= (A2I * B2I);
		T2I = A2I * B2R + T2I;
		T3R -= (A3I * B3I);
		T3I = A3I * B3R + T3I;
		out += 8;
	}
	a += 8;
	b += 8;
	*out = T0R;
	*(out +1) = T0I;
	*(out +2) = T1R;
	*(out +3) = T1I;
	*(out +4) = T2R;
	*(out +5) = T2I;
	*(out +6) = T3R;
	*(out +7) = T3I;
	out += 8;
}
for (OutCnt=N%4; OutCnt > 0; OutCnt--){
	A0R = *a++;
	B0R = *b++;
	A0I = *a++;
	B0I = *b++;
	T0R = A0R * B0R;
	T0I = (A0R * B0I);
	T0R -= (A0I * B0I);
	T0I = A0I * B0R + T0I;
	*out++ = T0R;
	*out++ = T0I;
}
}

// Assembly:
cmpq $0x4, %rcx
jl 0x2a6cb
movsd (%rdi), %xmm1
movsd 0x8(%rdi), %xmm12
movsd (%rsi), %xmm6
movsd 0x8(%rsi), %xmm7
movsd 0x10(%rdi), %xmm2
movsd 0x10(%rsi), %xmm0
movsd 0x18(%rdi), %xmm8
movsd 0x18(%rsi), %xmm4
movsd 0x20(%rdi), %xmm3
movsd 0x20(%rsi), %xmm5
movapd %xmm1, %xmm11
mulsd %xmm6, %xmm11
mulsd %xmm7, %xmm1
mulsd %xmm12, %xmm7
subsd %xmm7, %xmm11
movsd 0x28(%rdi), %xmm13
mulsd %xmm6, %xmm12
movsd 0x28(%rsi), %xmm6
addsd %xmm1, %xmm12
movapd %xmm2, %xmm1
mulsd %xmm0, %xmm1
mulsd %xmm4, %xmm2
mulsd %xmm8, %xmm4
subsd %xmm4, %xmm1
movsd 0x30(%rdi), %xmm4
mulsd %xmm0, %xmm8
movsd 0x30(%rsi), %xmm0
addsd %xmm2, %xmm8
movapd %xmm3, %xmm2
mulsd %xmm5, %xmm2
mulsd %xmm6, %xmm3
mulsd %xmm13, %xmm6
subsd %xmm6, %xmm2
movsd 0x38(%rdi), %xmm14
mulsd %xmm5, %xmm13
movsd 0x38(%rsi), %xmm6
addsd %xmm3, %xmm13
movapd %xmm4, %xmm5
mulsd %xmm0, %xmm5
mulsd %xmm6, %xmm4
mulsd %xmm14, %xmm6
subsd %xmm6, %xmm5
mulsd %xmm0, %xmm14
addsd %xmm4, %xmm14
cmpq $0x8, %rcx
jb 0x2a675
movq %rcx, %rax
shrq $0x2, %rax
incq %rax
movsd %xmm14, -0x40(%rsp)
movsd %xmm13, -0x38(%rsp)
movsd 0x40(%rdi), %xmm0
movsd 0x48(%rdi), %xmm6
movsd 0x40(%rsi), %xmm3
movsd %xmm3, -0x30(%rsp)
movsd 0x48(%rsi), %xmm13
movsd 0x50(%rdi), %xmm4
movsd 0x50(%rsi), %xmm3
movsd %xmm3, -0x28(%rsp)
movsd 0x58(%rdi), %xmm7
movsd 0x58(%rsi), %xmm3
movsd 0x60(%rdi), %xmm9
movsd %xmm9, -0x18(%rsp)
movsd 0x60(%rsi), %xmm9
movsd %xmm9, -0x20(%rsp)
movsd 0x68(%rdi), %xmm9
movapd %xmm8, %xmm14
movsd 0x68(%rsi), %xmm8
movsd 0x70(%rdi), %xmm10
movsd %xmm10, -0x8(%rsp)
movsd 0x70(%rsi), %xmm10
movsd %xmm10, -0x10(%rsp)
movsd 0x78(%rdi), %xmm10
movsd 0x78(%rsi), %xmm15
movsd %xmm11, (%rdx)
movsd %xmm12, 0x8(%rdx)
movsd %xmm1, 0x10(%rdx)
movsd %xmm14, 0x18(%rdx)
movsd %xmm2, 0x20(%rdx)
movsd -0x38(%rsp), %xmm1
movsd %xmm1, 0x28(%rdx)
movsd %xmm5, 0x30(%rdx)
movsd -0x40(%rsp), %xmm1
movsd %xmm1, 0x38(%rdx)
movapd %xmm0, %xmm11
movsd -0x30(%rsp), %xmm1
mulsd %xmm1, %xmm11
mulsd %xmm13, %xmm0
mulsd %xmm6, %xmm13
subsd %xmm13, %xmm11
mulsd %xmm1, %xmm6
addsd %xmm0, %xmm6
movapd %xmm4, %xmm1
movsd -0x28(%rsp), %xmm0
mulsd %xmm0, %xmm1
mulsd %xmm3, %xmm4
mulsd %xmm7, %xmm3
subsd %xmm3, %xmm1
mulsd %xmm0, %xmm7
addsd %xmm4, %xmm7
movsd -0x18(%rsp), %xmm0
movapd %xmm0, %xmm2
movsd -0x20(%rsp), %xmm3
mulsd %xmm3, %xmm2
mulsd %xmm8, %xmm0
movapd %xmm0, %xmm4
mulsd %xmm9, %xmm8
subsd %xmm8, %xmm2
leaq 0x40(%rdi), %r8
leaq 0x40(%rsi), %r9
mulsd %xmm3, %xmm9
movsd -0x8(%rsp), %xmm0
movapd %xmm0, %xmm5
movsd -0x10(%rsp), %xmm3
mulsd %xmm3, %xmm5
mulsd %xmm15, %xmm0
addsd %xmm4, %xmm9
mulsd %xmm10, %xmm15
subsd %xmm15, %xmm5
mulsd %xmm3, %xmm10
addsd %xmm0, %xmm10
addq $0x40, %rdx
decq %rax
movapd %xmm10, %xmm14
movapd %xmm9, %xmm13
movapd %xmm7, %xmm8
movapd %xmm6, %xmm12
movq %r8, %rdi
movq %r9, %rsi
cmpq $0x2, %rax
jg 0x2a4cf
jmp 0x2a68f
movq %rsi, %r9
movq %rdi, %r8
movapd %xmm12, %xmm6
movapd %xmm8, %xmm7
movapd %xmm13, %xmm9
movapd %xmm14, %xmm10
addq $0x40, %r8
addq $0x40, %r9
movsd %xmm11, (%rdx)
movsd %xmm6, 0x8(%rdx)
movsd %xmm1, 0x10(%rdx)
movsd %xmm7, 0x18(%rdx)
movsd %xmm2, 0x20(%rdx)
movsd %xmm9, 0x28(%rdx)
movsd %xmm5, 0x30(%rdx)
movsd %xmm10, 0x38(%rdx)
addq $0x40, %rdx
movq %r9, %rsi
movq %r8, %rdi
leaq 0x3(%rcx), %rax
testq %rcx, %rcx
cmovnsq %rcx, %rax
andq $-0x4, %rax
subq %rax, %rcx
testq %rcx, %rcx
jle 0x2a731
incq %rcx
xorl %eax, %eax
movsd (%rdi,%rax), %xmm0
movsd 0x8(%rdi,%rax), %xmm1
movsd (%rsi,%rax), %xmm2
movsd 0x8(%rsi,%rax), %xmm3
movapd %xmm0, %xmm4
mulsd %xmm2, %xmm4
mulsd %xmm3, %xmm0
mulsd %xmm1, %xmm3
subsd %xmm3, %xmm4
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd %xmm4, (%rdx,%rax)
movsd %xmm1, 0x8(%rdx,%rax)
decq %rcx
addq $0x10, %rax
cmpq $0x1, %rcx
jg 0x2a6e7
retq