// File: /workspace/github_cpp_makefile_star2_O1/kebwi[P]Trifid/src/FFT/matlib.cpp
// Function: cxpose(double*, long, double*, long, long, long)
void cxpose(Float_t *indata, long iRsiz, Float_t *outdata, long oRsiz, long Nrows, long Ncols){
/* not in-place complex Float_t matrix transpose	*/
/* INPUTS */
/* *indata = input data array	*/
/* iRsiz = offset to between rows of input data array	*/
/* oRsiz = offset to between rows of output data array	*/
/* Nrows = number of rows in input data array	*/
/* Ncols = number of columns in input data array	*/
/* OUTPUTS */
/* *outdata = output data array	*/

Float_t	*irow; 		/* pointer to input row start */
Float_t	*ocol; 		/* pointer to output col start */
Float_t	*idata; 	/* pointer to input data */
Float_t	*odata; 	/* pointer to output data */
long 	RowCnt;		/* row counter */
long 	ColCnt;		/* col counter */
Float_t	T0r; 		/* data storage */
Float_t	T0i; 		/* data storage */
Float_t	T1r; 		/* data storage */
Float_t	T1i; 		/* data storage */
Float_t	T2r; 		/* data storage */
Float_t	T2i; 		/* data storage */
Float_t	T3r; 		/* data storage */
Float_t	T3i; 		/* data storage */
const long inRsizd1 = 2*iRsiz;
const long inRsizd1i = 2*iRsiz + 1;
const long inRsizd2 = 4*iRsiz;
const long inRsizd2i = 4*iRsiz + 1;
const long inRsizd3 = inRsizd2+inRsizd1;
const long inRsizd3i = inRsizd2+inRsizd1 + 1;
const long inRsizd4 = 8*iRsiz;

ocol = outdata;
irow = indata;
for (RowCnt=Nrows/4; RowCnt>0; RowCnt--){
	idata = irow;
	odata = ocol;
	for (ColCnt=Ncols; ColCnt>0; ColCnt--){
		T0r = *idata;
		T0i = *(idata +1);
		T1r = *(idata+inRsizd1);
		T1i = *(idata+inRsizd1i);
		T2r = *(idata+inRsizd2);
		T2i = *(idata+inRsizd2i);
		T3r = *(idata+inRsizd3);
		T3i = *(idata+inRsizd3i);
		*odata = T0r;
		*(odata+1) = T0i;
		*(odata+2) = T1r;
		*(odata+3) = T1i;
		*(odata+4) = T2r;
		*(odata+5) = T2i;
		*(odata+6) = T3r;
		*(odata+7) = T3i;
		idata+=2;
		odata += 2*oRsiz;
	}
	irow += inRsizd4;
	ocol += 8;
}
if (Nrows%4 != 0){
	for (ColCnt=Ncols; ColCnt>0; ColCnt--){
		idata = irow;
		odata = ocol;
		for (RowCnt=Nrows%4; RowCnt>0; RowCnt--){
			T0r = *idata;
			T0i = *(idata+1);
			*odata = T0r;
			*(odata+1) = T0i;
			odata+=2;
			idata += 2*iRsiz;
		}
		irow+=2;
		ocol += 2*oRsiz;
	}
}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
cmpq $0x4, %r8
movq %rcx, -0x8(%rsp)
jl 0x2a367
movq %r8, %r11
shrq $0x2, %r11
movq %rcx, %rax
shlq $0x4, %rax
movq %rsi, %r10
shlq $0x6, %r10
leaq 0x38(%rdx), %rbx
leaq 0x1(%r9), %rcx
movq %rsi, %r15
shlq $0x4, %r15
testq %r9, %r9
jle 0x2a34f
movq %rcx, %r12
movq %rbx, %r13
movq %rdi, %rbp
movups (%rbp), %xmm0
leaq (%r15,%rbp), %r14
movups (%rbp,%r15), %xmm1
movups (%r15,%r14), %xmm2
addq %r15, %r14
movups (%r15,%r14), %xmm3
movups %xmm0, -0x38(%r13)
movups %xmm1, -0x28(%r13)
movups %xmm2, -0x18(%r13)
movups %xmm3, -0x8(%r13)
addq $0x10, %rbp
addq %rax, %r13
decq %r12
cmpq $0x1, %r12
jg 0x2a310
addq %r10, %rdi
addq $0x40, %rdx
leaq -0x1(%r11), %r14
addq $0x40, %rbx
cmpq $0x1, %r11
movq %r14, %r11
jg 0x2a302
leaq 0x3(%r8), %rax
testq %r8, %r8
cmovnsq %r8, %rax
andq $-0x4, %rax
subq %rax, %r8
sete %al
testq %r9, %r9
setle %cl
orb %al, %cl
movq -0x8(%rsp), %r14
jne 0x2a3d5
shlq $0x4, %r14
addq $0x8, %rdi
shlq $0x4, %rsi
leaq 0x1(%r8), %rax
testq %r8, %r8
jle 0x2a3c1
movq %rax, %r10
movq %rdi, %r11
movq %rdx, %rbx
movups -0x8(%r11), %xmm0
movups %xmm0, (%rbx)
addq $0x10, %rbx
addq %rsi, %r11
decq %r10
cmpq $0x1, %r10
jg 0x2a3a9
addq %r14, %rdx
leaq -0x1(%r9), %rcx
addq $0x10, %rdi
cmpq $0x1, %r9
movq %rcx, %r9
jg 0x2a39b
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq