// File: /workspace/github_c_makefile_star2_O0/diaxen[P]fft-garden/./sr_bf.h
// Function: sr_dit_bf4_pi4
static inline void
sr_dit_bf4_pi4(unsigned s,
           complex double * restrict out)
{
  complex double a = out[0];
  complex double b = out[s];
  complex double c = out[s * 2];
  complex double d = out[s * 3];

  double rc   = M_SQRT1_2 * creal(c);
  double rd   = M_SQRT1_2 * creal(d);
  double ic   = M_SQRT1_2 * cimag(c);
  double id   = M_SQRT1_2 * cimag(d);
  double wcr  = ic + rc;
  double wci  = ic - rc;
  double wdr  = -rd + id;
  double wdi  = -rd - id;
  double rsu  = wcr + wdr;
  double rsb  = wcr - wdr;
  double isu  = wci + wdi;
  double isb  = wci - wdi;

  out[0]     = CMPLX(creal(a) + rsu, cimag(a) + isu);
  out[s]     = CMPLX(creal(b) + isb, cimag(b) - rsb);
  out[s * 2] = CMPLX(creal(a) - rsu, cimag(a) - isu);
  out[s * 3] = CMPLX(creal(b) - isb, cimag(b) + rsb);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movl %edi, -0x4(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movsd (%rax), %xmm1
movsd 0x8(%rax), %xmm0
movsd %xmm1, -0x20(%rbp)
movsd %xmm0, -0x18(%rbp)
movq -0x10(%rbp), %rax
movl -0x4(%rbp), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movsd (%rax), %xmm1
movsd 0x8(%rax), %xmm0
movsd %xmm1, -0x30(%rbp)
movsd %xmm0, -0x28(%rbp)
movq -0x10(%rbp), %rax
movl -0x4(%rbp), %ecx
shll %ecx
movl %ecx, %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movsd (%rax), %xmm1
movsd 0x8(%rax), %xmm0
movsd %xmm1, -0x40(%rbp)
movsd %xmm0, -0x38(%rbp)
movq -0x10(%rbp), %rax
imull $0x3, -0x4(%rbp), %ecx
movl %ecx, %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movsd (%rax), %xmm1
movsd 0x8(%rax), %xmm0
movsd %xmm1, -0x50(%rbp)
movsd %xmm0, -0x48(%rbp)
movsd 0x19d8(%rip), %xmm0     # 0x4240
mulsd -0x40(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movsd 0x19c6(%rip), %xmm0     # 0x4240
mulsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movsd 0x19b4(%rip), %xmm0     # 0x4240
mulsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd 0x19a2(%rip), %xmm0     # 0x4240
mulsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x68(%rbp), %xmm0
addsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x68(%rbp), %xmm0
subsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x60(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
addsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x60(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
subsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movsd -0x78(%rbp), %xmm0
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
movsd -0x78(%rbp), %xmm0
subsd -0x88(%rbp), %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd -0x80(%rbp), %xmm0
addsd -0x90(%rbp), %xmm0
movsd %xmm0, -0xa8(%rbp)
movsd -0x80(%rbp), %xmm0
subsd -0x90(%rbp), %xmm0
movsd %xmm0, -0xb0(%rbp)
movsd -0x20(%rbp), %xmm1
addsd -0x98(%rbp), %xmm1
movsd -0x18(%rbp), %xmm0
addsd -0xa8(%rbp), %xmm0
movsd %xmm1, -0xc0(%rbp)
movsd %xmm0, -0xb8(%rbp)
movsd -0xc0(%rbp), %xmm1
movsd -0xb8(%rbp), %xmm0
movq -0x10(%rbp), %rax
movsd %xmm1, (%rax)
movsd %xmm0, 0x8(%rax)
movsd -0x30(%rbp), %xmm1
addsd -0xb0(%rbp), %xmm1
movsd -0x28(%rbp), %xmm0
subsd -0xa0(%rbp), %xmm0
movsd %xmm1, -0xd0(%rbp)
movsd %xmm0, -0xc8(%rbp)
movsd -0xd0(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm0
movq -0x10(%rbp), %rax
movl -0x4(%rbp), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movsd %xmm1, (%rax)
movsd %xmm0, 0x8(%rax)
movsd -0x20(%rbp), %xmm1
subsd -0x98(%rbp), %xmm1
movsd -0x18(%rbp), %xmm0
subsd -0xa8(%rbp), %xmm0
movsd %xmm1, -0xe0(%rbp)
movsd %xmm0, -0xd8(%rbp)
movsd -0xe0(%rbp), %xmm1
movsd -0xd8(%rbp), %xmm0
movq -0x10(%rbp), %rax
movl -0x4(%rbp), %ecx
shll %ecx
movl %ecx, %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movsd %xmm1, (%rax)
movsd %xmm0, 0x8(%rax)
movsd -0x30(%rbp), %xmm1
subsd -0xb0(%rbp), %xmm1
movsd -0x28(%rbp), %xmm0
addsd -0xa0(%rbp), %xmm0
movsd %xmm1, -0xf0(%rbp)
movsd %xmm0, -0xe8(%rbp)
movsd -0xf0(%rbp), %xmm1
movsd -0xe8(%rbp), %xmm0
movq -0x10(%rbp), %rax
imull $0x3, -0x4(%rbp), %ecx
movl %ecx, %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movsd %xmm1, (%rax)
movsd %xmm0, 0x8(%rax)
addq $0x70, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)