// File: kebwi[P]Trifid/src/FFT/fftlib.cpp
// Function: bfR2(double*, long, long)
inline void bfR2(Float_t *ioptr, long M, long NDiffU){
/*** 2nd radix 2 stage ***/
unsigned long	pos;
unsigned long	posi;
unsigned long	pinc;
unsigned long	pnext;
unsigned long 	NSameU;
unsigned long 	SameUCnt;

Float_t	*pstrt;
Float_t 	*p0r, *p1r, *p2r, *p3r;

Float_t f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i;
Float_t f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i;
const Float_t Two = 2.0;

pinc = NDiffU * 2;		// 2 floats per complex
pnext =  pinc * 4;
pos = 2;
posi = pos+1;
NSameU = POW2(M) / 4 /NDiffU;	// 4 Us at a time
pstrt = ioptr;
p0r = pstrt;
p1r = pstrt+pinc;
p2r = p1r+pinc;
p3r = p2r+pinc;

		/* Butterflys		*/
		/*
		f0	-	-	f4
		f1	-  1 -	f5
		f2	-	-	f6
		f3	-  1 -	f7
		*/
		/* Butterflys		*/
		/*
		f0	-	-	f4
		f1	-  1 -	f5
		f2	-	-	f6
		f3	-  1 -	f7
		*/

for (SameUCnt = NSameU; SameUCnt > 0 ; SameUCnt--){

	f0r = *p0r;
	f1r = *p1r;
	f0i = *(p0r + 1);
	f1i = *(p1r + 1);
	f2r = *p2r;
	f3r = *p3r;
	f2i = *(p2r + 1);
	f3i = *(p3r + 1);

	f4r = f0r + f1r;
	f4i = f0i + f1i;
	f5r = f0r - f1r;
	f5i = f0i - f1i;

	f6r = f2r + f3r;
	f6i = f2i + f3i;
	f7r = f2r - f3r;
	f7i = f2i - f3i;

	*p0r = f4r;
	*(p0r + 1) = f4i;
	*p1r = f5r;
	*(p1r + 1) = f5i;
	*p2r = f6r;
	*(p2r + 1) = f6i;
	*p3r = f7r;
	*(p3r + 1) = f7i;

	f0r = *(p0r + pos);
	f1i = *(p1r + posi);
	f0i = *(p0r + posi);
	f1r = *(p1r + pos);
	f2r = *(p2r + pos);
	f3i = *(p3r + posi);
	f2i = *(p2r + posi);
	f3r = *(p3r + pos);

	f4r = f0r + f1i;
	f4i = f0i - f1r;
	f5r = f0r - f1i;
	f5i = f0i + f1r;

	f6r = f2r + f3i;
	f6i = f2i - f3r;
	f7r = f2r - f3i;
	f7i = f2i + f3r;

	*(p0r + pos) = f4r;
	*(p0r + posi) = f4i;
	*(p1r + pos) = f5r;
	*(p1r + posi) = f5i;
	*(p2r + pos) = f6r;
	*(p2r + posi) = f6i;
	*(p3r + pos) = f7r;
	*(p3r + posi) = f7i;

	p0r += pnext;
	p1r += pnext;
	p2r += pnext;
	p3r += pnext;

}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x78, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movsd 0xb6bc(%rip), %xmm0     # 0x4a548
movsd %xmm0, -0xf8(%rbp)
movq -0x18(%rbp), %rax
shlq %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
shlq $0x2, %rax
movq %rax, -0x38(%rbp)
movq $0x2, -0x20(%rbp)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rcx
movl $0x1, %eax
shlq %cl, %rax
shrq $0x2, %rax
xorl %ecx, %ecx
movl %ecx, %edx
divq -0x18(%rbp)
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rax
movq -0x30(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movq -0x30(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
movq -0x30(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x70(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
jbe 0x3f33c
movq -0x58(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x78(%rbp)
movq -0x60(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x88(%rbp)
movq -0x58(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x80(%rbp)
movq -0x60(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x90(%rbp)
movq -0x68(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x98(%rbp)
movq -0x70(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xa8(%rbp)
movq -0x68(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0xa0(%rbp)
movq -0x70(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0xb0(%rbp)
movsd -0x78(%rbp), %xmm0
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0xb8(%rbp)
movsd -0x80(%rbp), %xmm0
addsd -0x90(%rbp), %xmm0
movsd %xmm0, -0xc0(%rbp)
movsd -0x78(%rbp), %xmm0
subsd -0x88(%rbp), %xmm0
movsd %xmm0, -0xc8(%rbp)
movsd -0x80(%rbp), %xmm0
subsd -0x90(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd -0x98(%rbp), %xmm0
addsd -0xa8(%rbp), %xmm0
movsd %xmm0, -0xd8(%rbp)
movsd -0xa0(%rbp), %xmm0
addsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0xe0(%rbp)
movsd -0x98(%rbp), %xmm0
subsd -0xa8(%rbp), %xmm0
movsd %xmm0, -0xe8(%rbp)
movsd -0xa0(%rbp), %xmm0
subsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0xf0(%rbp)
movsd -0xb8(%rbp), %xmm0
movq -0x58(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0xc0(%rbp), %xmm0
movq -0x58(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movsd -0xc8(%rbp), %xmm0
movq -0x60(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0xd0(%rbp), %xmm0
movq -0x60(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movsd -0xd8(%rbp), %xmm0
movq -0x68(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0xe0(%rbp), %xmm0
movq -0x68(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movsd -0xe8(%rbp), %xmm0
movq -0x70(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0xf0(%rbp), %xmm0
movq -0x70(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movq -0x58(%rbp), %rax
movq -0x20(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x78(%rbp)
movq -0x60(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x90(%rbp)
movq -0x58(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x80(%rbp)
movq -0x60(%rbp), %rax
movq -0x20(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x88(%rbp)
movq -0x68(%rbp), %rax
movq -0x20(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x98(%rbp)
movq -0x70(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0xb0(%rbp)
movq -0x68(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0xa0(%rbp)
movq -0x70(%rbp), %rax
movq -0x20(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0xa8(%rbp)
movsd -0x78(%rbp), %xmm0
addsd -0x90(%rbp), %xmm0
movsd %xmm0, -0xb8(%rbp)
movsd -0x80(%rbp), %xmm0
subsd -0x88(%rbp), %xmm0
movsd %xmm0, -0xc0(%rbp)
movsd -0x78(%rbp), %xmm0
subsd -0x90(%rbp), %xmm0
movsd %xmm0, -0xc8(%rbp)
movsd -0x80(%rbp), %xmm0
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd -0x98(%rbp), %xmm0
addsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0xd8(%rbp)
movsd -0xa0(%rbp), %xmm0
subsd -0xa8(%rbp), %xmm0
movsd %xmm0, -0xe0(%rbp)
movsd -0x98(%rbp), %xmm0
subsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0xe8(%rbp)
movsd -0xa0(%rbp), %xmm0
addsd -0xa8(%rbp), %xmm0
movsd %xmm0, -0xf0(%rbp)
movsd -0xb8(%rbp), %xmm0
movq -0x58(%rbp), %rax
movq -0x20(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0xc0(%rbp), %xmm0
movq -0x58(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0xc8(%rbp), %xmm0
movq -0x60(%rbp), %rax
movq -0x20(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0xd0(%rbp), %xmm0
movq -0x60(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0xd8(%rbp), %xmm0
movq -0x68(%rbp), %rax
movq -0x20(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0xe0(%rbp), %xmm0
movq -0x68(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0xe8(%rbp), %xmm0
movq -0x70(%rbp), %rax
movq -0x20(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0xf0(%rbp), %xmm0
movq -0x70(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x38(%rbp), %rax
shlq $0x3, %rax
addq -0x58(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x38(%rbp), %rax
shlq $0x3, %rax
addq -0x60(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x38(%rbp), %rax
shlq $0x3, %rax
addq -0x68(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x38(%rbp), %rax
shlq $0x3, %rax
addq -0x70(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x48(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x3ef2c
addq $0x78, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)