void dftcor(float w, float delta, float a, float b, float endpts[],
            float *corre, float *corim, float *corfac) {
  void nrerror(char error_text[]);
  float a0i, a0r, a1i, a1r, a2i, a2r, a3i, a3r, arg, c, cl, cr, s, sl, sr, t;
  float t2, t4, t6;
  double cth, ctth, spth2, sth, sth4i, stth, th, th2, th4, tmth2, tth4i;
  th = w * delta;
  if (a >= b || th < 0.0e0 || th > 3.01416e0)
    nrerror("bad arguments to dftcor");
  if (fabs(th) < 5.0e-2) {
    t = th;
    t2 = t * t;
    t4 = t2 * t2;
    t6 = t4 * t2;
    *corfac = 1.0 - (11.0 / 720.0) * t4 + (23.0 / 15120.0) * t6;
    a0r = (-2.0 / 3.0) + t2 / 45.0 + (103.0 / 15120.0) * t4 -
          (169.0 / 226800.0) * t6;
    a1r = (7.0 / 24.0) - (7.0 / 180.0) * t2 + (5.0 / 3456.0) * t4 -
          (7.0 / 259200.0) * t6;
    a2r = (-1.0 / 6.0) + t2 / 45.0 - (5.0 / 6048.0) * t4 + t6 / 64800.0;
    a3r = (1.0 / 24.0) - t2 / 180.0 + (5.0 / 24192.0) * t4 - t6 / 259200.0;
    a0i = t * (2.0 / 45.0 + (2.0 / 105.0) * t2 - (8.0 / 2835.0) * t4 +
               (86.0 / 467775.0) * t6);
    a1i = t * (7.0 / 72.0 - t2 / 168.0 + (11.0 / 72576.0) * t4 -
               (13.0 / 5987520.0) * t6);
    a2i = t * (-7.0 / 90.0 + t2 / 210.0 - (11.0 / 90720.0) * t4 +
               (13.0 / 7484400.0) * t6);
    a3i = t * (7.0 / 360.0 - t2 / 840.0 + (11.0 / 362880.0) * t4 -
               (13.0 / 29937600.0) * t6);
  } else {
    cth = cos(th);
    sth = sin(th);
    ctth = cth * cth - sth * sth;
    stth = 2.0e0 * sth * cth;
    th2 = th * th;
    th4 = th2 * th2;
    tmth2 = 3.0e0 - th2;
    spth2 = 6.0e0 + th2;
    sth4i = 1.0 / (6.0e0 * th4);
    tth4i = 2.0e0 * sth4i;
    *corfac = tth4i * spth2 * (3.0e0 - 4.0e0 * cth + ctth);
    a0r = sth4i * (-42.0e0 + 5.0e0 * th2 + spth2 * (8.0e0 * cth - ctth));
    a0i = sth4i * (th * (-12.0e0 + 6.0e0 * th2) + spth2 * stth);
    a1r = sth4i * (14.0e0 * tmth2 - 7.0e0 * spth2 * cth);
    a1i = sth4i * (30.0e0 * th - 5.0e0 * spth2 * sth);
    a2r = tth4i * (-4.0e0 * tmth2 + 2.0e0 * spth2 * cth);
    a2i = tth4i * (-12.0e0 * th + 2.0e0 * spth2 * sth);
    a3r = sth4i * (2.0e0 * tmth2 - spth2 * cth);
    a3i = sth4i * (6.0e0 * th - spth2 * sth);
  }
  cl = a0r * endpts[1] + a1r * endpts[2] + a2r * endpts[3] + a3r * endpts[4];
  sl = a0i * endpts[1] + a1i * endpts[2] + a2i * endpts[3] + a3i * endpts[4];
  cr = a0r * endpts[8] + a1r * endpts[7] + a2r * endpts[6] + a3r * endpts[5];
  sr = -a0i * endpts[8] - a1i * endpts[7] - a2i * endpts[6] - a3i * endpts[5];
  arg = w * (b - a);
  c = cos(arg);
  s = sin(arg);
  *corre = cl + c * cr - s * sr;
  *corim = sl + s * cr + c * sr;
}


x86 assembly (clang, -O0):
<dftcor>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  %xmm3,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
mov    %rcx,-0x30(%rbp)
movss  -0x4(%rbp),%xmm0
mulss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movss  -0xc(%rbp),%xmm0
ucomiss -0x10(%rbp),%xmm0
jae    11af <dftcor+0x7f>
xorps  %xmm0,%xmm0
ucomisd -0xb8(%rbp),%xmm0
ff
ja     11af <dftcor+0x7f>
movsd  -0xb8(%rbp),%xmm0
ff
movsd  0xe5b(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11bb <dftcor+0x8b>
lea    0xfda(%rip),%rdi
call   1030 <nrerror@plt>
movsd  -0xb8(%rbp),%xmm1
ff
movaps 0xfb6(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xe32(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    157d <dftcor+0x44d>
movsd  -0xb8(%rbp),%xmm0
ff
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x70(%rbp),%xmm0
mulss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x74(%rbp),%xmm0
mulss  -0x74(%rbp),%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x78(%rbp),%xmm0
mulss  -0x74(%rbp),%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  -0x78(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xf41(%rip),%xmm0
mulsd  %xmm0,%xmm1
movsd  0xe2d(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x7c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xf18(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x30(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x74(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xeb3(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xedf(%rip),%xmm0
addsd  %xmm1,%xmm0
movss  -0x78(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xec2(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movss  -0x7c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xea1(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x74(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe6f(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe6b(%rip),%xmm1
addsd  %xmm1,%xmm0
movss  -0x78(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xe46(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movss  -0x7c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe25(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x74(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdfb(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xde7(%rip),%xmm1
addsd  %xmm0,%xmm1
movss  -0x78(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdca(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movss  -0x7c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xda9(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x74(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd7f(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xd6b(%rip),%xmm1
subsd  %xmm0,%xmm1
movss  -0x78(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd4e(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movss  -0x7c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xd2d(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x74(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xcf2(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xcee(%rip),%xmm2
addsd  %xmm2,%xmm1
movss  -0x78(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
movsd  0xcc9(%rip),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movss  -0x7c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xca8(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x74(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xc71(%rip),%xmm1
divsd  %xmm1,%xmm2
movsd  0xc5d(%rip),%xmm1
subsd  %xmm2,%xmm1
movss  -0x78(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
movsd  0xc40(%rip),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movss  -0x7c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xc1f(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x74(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xbe8(%rip),%xmm1
divsd  %xmm1,%xmm2
movsd  0xbd4(%rip),%xmm1
addsd  %xmm2,%xmm1
movss  -0x78(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
movsd  0xbb7(%rip),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movss  -0x7c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xb96(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x74(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xb5f(%rip),%xmm1
divsd  %xmm1,%xmm2
movsd  0xb4b(%rip),%xmm1
subsd  %xmm2,%xmm1
movss  -0x78(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
movsd  0xb2e(%rip),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movss  -0x7c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xb0d(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
jmp    19a5 <dftcor+0x875>
movsd  -0xb8(%rbp),%xmm0
ff
call   1050 <cos@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
call   1040 <sin@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xa2a(%rip),%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0xa1a(%rip),%xmm0
subsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0x9b2(%rip),%xmm0
addsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0x99a(%rip),%xmm1
mulsd  -0xc8(%rbp),%xmm1
ff
movsd  0x9e2(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0x986(%rip),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  -0x98(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm1
ff
movsd  0x95e(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x98a(%rip),%xmm2
addsd  %xmm2,%xmm1
addsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x30(%rbp),%rax
movss  %xmm0,(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm2
ff
movsd  0x92e(%rip),%xmm1
mulsd  %xmm1,%xmm2
movsd  0x942(%rip),%xmm1
addsd  %xmm1,%xmm2
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0x88(%rbp),%xmm3
ff
movsd  -0x90(%rbp),%xmm4
ff
movq   %xmm4,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm4
movsd  0x8ff(%rip),%xmm5
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0xc0(%rbp),%xmm3
ff
movsd  0x882(%rip),%xmm2
mulsd  %xmm2,%xmm3
movsd  0x87e(%rip),%xmm2
addsd  %xmm2,%xmm3
movsd  -0x98(%rbp),%xmm2
ff
mulsd  -0xb0(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm1
ff
movsd  0x86d(%rip),%xmm2
mulsd  -0x98(%rbp),%xmm2
ff
mulsd  -0x88(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  0x836(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x40(%rbp)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  0x801(%rip),%xmm2
mulsd  -0x98(%rbp),%xmm2
ff
mulsd  -0xa0(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  0x7ca(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm1
ff
movsd  0x78d(%rip),%xmm2
mulsd  -0x98(%rbp),%xmm2
ff
mulsd  -0x88(%rbp),%xmm2
ff
movsd  0x77d(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  0x748(%rip),%xmm2
mulsd  -0x98(%rbp),%xmm2
ff
mulsd  -0xa0(%rbp),%xmm2
ff
movsd  0x728(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm2
ff
mulsd  -0x88(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
addsd  %xmm1,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x50(%rbp)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm2
ff
mulsd  -0xa0(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  0x680(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  0x4(%rax),%xmm2
movss  -0x40(%rbp),%xmm1
mov    -0x18(%rbp),%rax
mulss  0x8(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  -0x48(%rbp),%xmm1
mov    -0x18(%rbp),%rax
movss  0xc(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x50(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  0x10(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x34(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  0x4(%rax),%xmm2
movss  -0x3c(%rbp),%xmm1
mov    -0x18(%rbp),%rax
mulss  0x8(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  -0x44(%rbp),%xmm1
mov    -0x18(%rbp),%rax
movss  0xc(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x4c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  0x10(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  0x20(%rax),%xmm2
movss  -0x40(%rbp),%xmm1
mov    -0x18(%rbp),%rax
mulss  0x1c(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  -0x48(%rbp),%xmm1
mov    -0x18(%rbp),%rax
movss  0x18(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x50(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  0x14(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x34(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x18(%rbp),%rax
movss  0x20(%rax),%xmm2
movss  -0x3c(%rbp),%xmm1
mov    -0x18(%rbp),%rax
mulss  0x1c(%rax),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  -0x44(%rbp),%xmm1
mov    -0x18(%rbp),%rax
movss  0x18(%rax),%xmm2
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x4c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  0x14(%rax),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x4(%rbp),%xmm0
movss  -0x10(%rbp),%xmm1
subss  -0xc(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x54(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1040 <sin@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x5c(%rbp),%xmm0
movss  -0x58(%rbp),%xmm1
movss  -0x60(%rbp),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x64(%rbp),%xmm0
movss  -0x6c(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x68(%rbp),%xmm0
movss  -0x64(%rbp),%xmm1
movss  -0x60(%rbp),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x58(%rbp),%xmm0
movss  -0x6c(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dftcor>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %rcx,%r12
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,%rbx
movss  %xmm0,0x8(%rsp)
mulss  %xmm0,%xmm1
cvtss2sd %xmm1,%xmm12
ucomisd 0xea1(%rip),%xmm12
movss  %xmm3,(%rsp)
movss  %xmm2,0x4(%rsp)
movaps %xmm12,0x10(%rsp)
ja     117f <dftcor+0x4f>
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
ja     117f <dftcor+0x4f>
ucomiss %xmm3,%xmm2
jb     11a8 <dftcor+0x78>
lea    0x102a(%rip),%rdi
movss  %xmm1,0x30(%rsp)
call   1030 <nrerror@plt>
movss  0x30(%rsp),%xmm1
movaps 0x10(%rsp),%xmm12
movss  0x4(%rsp),%xmm2
movss  (%rsp),%xmm3
movapd 0xfa0(%rip),%xmm0
andpd  %xmm12,%xmm0
movsd  0xe4b(%rip),%xmm4
ucomisd %xmm0,%xmm4
jbe    13c0 <dftcor+0x290>
mulss  %xmm1,%xmm1
movaps %xmm1,%xmm0
mulss  %xmm1,%xmm0
cvtss2sd %xmm1,%xmm9
mulss  %xmm0,%xmm1
cvtss2sd %xmm0,%xmm7
movsd  0xe81(%rip),%xmm0
mulsd  %xmm7,%xmm0
addsd  0xe2d(%rip),%xmm0
cvtss2sd %xmm1,%xmm8
movsd  0xe70(%rip),%xmm1
mulsd  %xmm8,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movss  %xmm0,(%r12)
movaps %xmm9,%xmm0
divsd  0xe56(%rip),%xmm0
movsd  0xe56(%rip),%xmm1
movsd  0xe56(%rip),%xmm6
mulsd  %xmm9,%xmm6
addsd  0xe51(%rip),%xmm6
addsd  %xmm0,%xmm1
movapd %xmm7,%xmm5
unpcklpd %xmm7,%xmm5
mulpd  0xf2d(%rip),%xmm5
unpcklpd %xmm1,%xmm6
movapd %xmm8,%xmm4
unpcklpd %xmm8,%xmm4
mulpd  0xf27(%rip),%xmm4
addpd  %xmm6,%xmm5
addpd  %xmm5,%xmm4
addsd  0xe1f(%rip),%xmm0
movsd  0xe1f(%rip),%xmm1
mulsd  %xmm7,%xmm1
movapd %xmm8,%xmm10
divsd  0xe15(%rip),%xmm10
addsd  %xmm0,%xmm1
addsd  %xmm1,%xmm10
movapd %xmm9,%xmm0
divsd  0xe07(%rip),%xmm0
addsd  0xe07(%rip),%xmm0
movsd  0xe07(%rip),%xmm1
mulsd  %xmm7,%xmm1
addsd  %xmm0,%xmm1
movapd %xmm8,%xmm0
divsd  0xdfa(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  0xdf6(%rip),%xmm1
mulsd  %xmm9,%xmm1
addsd  0xdf1(%rip),%xmm1
movsd  0xdf1(%rip),%xmm5
mulsd  %xmm7,%xmm5
addsd  %xmm1,%xmm5
movsd  0xde8(%rip),%xmm13
mulsd  %xmm8,%xmm13
addsd  %xmm5,%xmm13
movapd %xmm9,%xmm1
divsd  0xdd9(%rip),%xmm1
mulsd  %xmm12,%xmm13
addsd  0xdd4(%rip),%xmm1
movsd  0xdd4(%rip),%xmm5
mulsd  %xmm7,%xmm5
addsd  %xmm1,%xmm5
movsd  0xdcb(%rip),%xmm11
mulsd  %xmm8,%xmm11
addsd  %xmm5,%xmm11
mulsd  %xmm12,%xmm11
movapd %xmm9,%xmm1
divsd  0xdb7(%rip),%xmm1
addsd  0xdb7(%rip),%xmm1
movsd  0xdb7(%rip),%xmm5
mulsd  %xmm7,%xmm5
addsd  %xmm1,%xmm5
movsd  0xdae(%rip),%xmm14
mulsd  %xmm8,%xmm14
addsd  %xmm5,%xmm14
divsd  0xda3(%rip),%xmm9
addsd  0xda2(%rip),%xmm9
mulsd  %xmm12,%xmm14
mulsd  0xd9d(%rip),%xmm7
addsd  %xmm9,%xmm7
mulsd  0xd97(%rip),%xmm8
addsd  %xmm7,%xmm8
mulsd  %xmm12,%xmm8
jmp    15d9 <dftcor+0x4a9>
movaps %xmm12,%xmm0
call   1050 <cos@plt>
movsd  %xmm0,0x20(%rsp)
movapd 0x10(%rsp),%xmm0
call   1040 <sin@plt>
movsd  0x20(%rsp),%xmm3
movapd %xmm3,%xmm4
movapd %xmm0,%xmm11
addsd  %xmm0,%xmm11
mulsd  %xmm3,%xmm11
movapd 0x10(%rsp),%xmm13
mulsd  %xmm13,%xmm13
movapd %xmm13,%xmm15
unpcklpd %xmm13,%xmm15
addpd  0xd4e(%rip),%xmm15
movapd %xmm15,%xmm1
unpckhpd %xmm15,%xmm15
movapd %xmm15,%xmm8
movapd %xmm3,%xmm2
movsd  0xc13(%rip),%xmm5
mulsd  %xmm3,%xmm5
movapd %xmm5,0x30(%rsp)
mulsd  %xmm15,%xmm11
movsd  0xc0b(%rip),%xmm12
mulsd  %xmm15,%xmm12
mulsd  %xmm3,%xmm12
movsd  0xc01(%rip),%xmm5
mulsd  %xmm15,%xmm5
mulsd  %xmm0,%xmm5
movapd %xmm15,%xmm7
addsd  %xmm15,%xmm7
movapd %xmm7,%xmm6
mulsd  %xmm3,%xmm6
movapd %xmm6,0x40(%rsp)
mulsd  %xmm0,%xmm7
mulsd  %xmm15,%xmm3
mulsd  %xmm0,%xmm15
mulsd  %xmm0,%xmm0
movapd %xmm4,%xmm6
mulsd  %xmm4,%xmm6
subsd  %xmm0,%xmm6
movsd  %xmm6,0x20(%rsp)
movapd %xmm13,%xmm0
mulsd  %xmm13,%xmm0
movsd  0xb69(%rip),%xmm14
mulsd  %xmm14,%xmm0
movsd  0xb64(%rip),%xmm4
divsd  %xmm0,%xmm4
movapd %xmm4,%xmm9
addsd  %xmm4,%xmm9
mulsd  %xmm9,%xmm8
movsd  0xb50(%rip),%xmm10
mulsd  %xmm10,%xmm2
movsd  0xb2b(%rip),%xmm0
addsd  %xmm0,%xmm2
addsd  %xmm6,%xmm2
mulsd  %xmm8,%xmm2
subsd  %xmm13,%xmm0
movsd  0xb31(%rip),%xmm6
mulsd  %xmm13,%xmm6
mulsd  %xmm14,%xmm13
movsd  0xb36(%rip),%xmm14
addsd  %xmm14,%xmm13
movapd 0x10(%rsp),%xmm8
mulsd  %xmm8,%xmm13
addsd  %xmm11,%xmm13
movsd  0xb2f(%rip),%xmm11
mulsd  %xmm8,%xmm11
addsd  %xmm5,%xmm11
movsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm10
addsd  %xmm0,%xmm0
subsd  %xmm3,%xmm0
mulsd  %xmm8,%xmm14
mulsd  0xabe(%rip),%xmm8
subsd  %xmm15,%xmm8
mulsd  %xmm4,%xmm13
mulsd  %xmm4,%xmm11
mulsd  %xmm4,%xmm0
xorps  %xmm5,%xmm5
cvtsd2ss %xmm2,%xmm5
movss  0x4(%rsp),%xmm2
movss  (%rsp),%xmm3
mulsd  %xmm4,%xmm8
movss  %xmm5,(%r12)
addsd  0xaa6(%rip),%xmm6
movapd 0x30(%rsp),%xmm15
subsd  0x20(%rsp),%xmm15
unpcklpd %xmm6,%xmm12
movapd 0xbc3(%rip),%xmm5
unpcklpd %xmm15,%xmm5
mulpd  %xmm1,%xmm5
addpd  %xmm12,%xmm5
unpcklpd %xmm4,%xmm4
mulpd  %xmm5,%xmm4
addsd  0x40(%rsp),%xmm10
mulsd  %xmm9,%xmm10
addsd  %xmm7,%xmm14
mulsd  %xmm9,%xmm14
xorps  %xmm12,%xmm12
cvtsd2ss %xmm4,%xmm12
movhlps %xmm4,%xmm4
xorps  %xmm1,%xmm1
cvtsd2ss %xmm4,%xmm1
cvtsd2ss %xmm10,%xmm10
xorps  %xmm15,%xmm15
cvtsd2ss %xmm0,%xmm15
movss  0x4(%rbx),%xmm0
movss  0x8(%rbx),%xmm7
movaps %xmm7,%xmm4
mulss  %xmm12,%xmm4
movaps %xmm1,%xmm5
mulss  %xmm0,%xmm5
addss  %xmm4,%xmm5
movss  0xc(%rbx),%xmm4
movaps %xmm10,%xmm6
mulss  %xmm4,%xmm6
addss  %xmm5,%xmm6
movss  0x10(%rbx),%xmm9
movaps %xmm15,%xmm5
mulss  %xmm9,%xmm5
addss  %xmm6,%xmm5
movss  %xmm5,0x10(%rsp)
cvtsd2ss %xmm13,%xmm13
xorps  %xmm5,%xmm5
cvtsd2ss %xmm11,%xmm5
xorps  %xmm6,%xmm6
cvtsd2ss %xmm14,%xmm6
cvtsd2ss %xmm8,%xmm8
mulss  %xmm5,%xmm7
mulss  %xmm13,%xmm0
addss  %xmm7,%xmm0
mulss  %xmm6,%xmm4
addss  %xmm0,%xmm4
mulss  %xmm8,%xmm9
addss  %xmm4,%xmm9
movss  %xmm9,0x30(%rsp)
movss  0x20(%rbx),%xmm0
movss  0x1c(%rbx),%xmm7
mulss  %xmm7,%xmm12
mulss  %xmm0,%xmm1
addss  %xmm12,%xmm1
movss  0x18(%rbx),%xmm4
mulss  %xmm4,%xmm10
addss  %xmm1,%xmm10
movss  0x14(%rbx),%xmm1
mulss  %xmm1,%xmm15
addss  %xmm10,%xmm15
movss  %xmm15,0x40(%rsp)
mulss  %xmm7,%xmm5
xorps  0xad6(%rip),%xmm13
mulss  %xmm0,%xmm13
subss  %xmm5,%xmm13
mulss  %xmm4,%xmm6
subss  %xmm6,%xmm13
mulss  %xmm1,%xmm8
subss  %xmm8,%xmm13
movaps %xmm13,0x20(%rsp)
subss  %xmm2,%xmm3
mulss  0x8(%rsp),%xmm3
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
movsd  %xmm0,0x8(%rsp)
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rsp)
movsd  0x8(%rsp),%xmm0
call   1040 <sin@plt>
cvtsd2ss %xmm0,%xmm0
movss  (%rsp),%xmm4
movaps %xmm4,%xmm1
movss  0x40(%rsp),%xmm2
mulss  %xmm2,%xmm1
addss  0x10(%rsp),%xmm1
mulss  %xmm0,%xmm2
movaps 0x20(%rsp),%xmm3
mulss  %xmm3,%xmm0
subss  %xmm0,%xmm1
movss  %xmm1,(%r15)
addss  0x30(%rsp),%xmm2
mulss  %xmm4,%xmm3
addss  %xmm2,%xmm3
movss  %xmm3,(%r14)
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [24 x i8] c"bad arguments to dftcor\00"
define void @dftcor(float %0, float %1, float %2, float %3, float* %4, float* %5, float* %6, float* %7) {
%9 = alloca float
%10 = alloca float
%11 = alloca float
%12 = alloca float
%13 = alloca float*
%14 = alloca float*
%15 = alloca float*
%16 = alloca float*
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca float
%23 = alloca float
%24 = alloca float
%25 = alloca float
%26 = alloca float
%27 = alloca float
%28 = alloca float
%29 = alloca float
%30 = alloca float
%31 = alloca float
%32 = alloca float
%33 = alloca float
%34 = alloca float
%35 = alloca float
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
%45 = alloca double
%46 = alloca double
store float %0, float* %9
store float %1, float* %10
store float %2, float* %11
store float %3, float* %12
store float* %4, float** %13
store float* %5, float** %14
store float* %6, float** %15
store float* %7, float** %16
%47 = load float, float* %9
%48 = load float, float* %10
%49 = fmul float %47, %48
%50 = fpext float %49 to double
store double %50, double* %42
%51 = load float, float* %11
%52 = load float, float* %12
%53 = fcmp oge float %51, %52
br i1 %53, label %60, label %54
54: ; preds = %8
%55 = load double, double* %42
%56 = fcmp olt double %55, 0.000000e+00
br i1 %56, label %60, label %57
57: ; preds = %54
%58 = load double, double* %42
%59 = fcmp ogt double %58, 3.014160e+00
br i1 %59, label %60, label %61
60: ; preds = %57, %54, %8
br label %61
61: ; preds = %60, %57
%62 = load double, double* %42
%63 = call double @llvm.fabs.f64(double %62)
%64 = fcmp olt double %63, 5.000000e-02
br i1 %64, label %65, label %185
65: ; preds = %61
%66 = load double, double* %42
%67 = fptrunc double %66 to float
store float %67, float* %32
%68 = load float, float* %32
%69 = load float, float* %32
%70 = fmul float %68, %69
store float %70, float* %33
%71 = load float, float* %33
%72 = load float, float* %33
%73 = fmul float %71, %72
store float %73, float* %34
%74 = load float, float* %34
%75 = load float, float* %33
%76 = fmul float %74, %75
store float %76, float* %35
%77 = load float, float* %34
%78 = fpext float %77 to double
%79 = call double @llvm.fmuladd.f64(double 0xBF8F49F49F49F49F, double %78, double 1.000000e+00)
%80 = load float, float* %35
%81 = fpext float %80 to double
%82 = call double @llvm.fmuladd.f64(double 0x3F58EC396E418EC4, double %81, double %79)
%83 = fptrunc double %82 to float
%84 = load float*, float** %16
store float %83, float* %84
%85 = load float, float* %33
%86 = fpext float %85 to double
%87 = fdiv double %86, 4.500000e+01
%88 = fadd double 0xBFE5555555555555, %87
%89 = load float, float* %34
%90 = fpext float %89 to double
%91 = call double @llvm.fmuladd.f64(double 0x3F7BE713C691BE71, double %90, double %88)
%92 = load float, float* %35
%93 = fpext float %92 to double
%94 = call double @llvm.fmuladd.f64(double 0xBF486AC5403D4268, double %93, double %91)
%95 = fptrunc double %94 to float
store float %95, float* %18
%96 = load float, float* %33
%97 = fpext float %96 to double
%98 = call double @llvm.fmuladd.f64(double 0xBFA3E93E93E93E94, double %97, double 0x3FD2AAAAAAAAAAAB)
%99 = load float, float* %34
%100 = fpext float %99 to double
%101 = call double @llvm.fmuladd.f64(double 0x3F57B425ED097B42, double %100, double %98)
%102 = load float, float* %35
%103 = fpext float %102 to double
%104 = call double @llvm.fmuladd.f64(double 0xBEFC516A10F0B406, double %103, double %101)
%105 = fptrunc double %104 to float
store float %105, float* %20
%106 = load float, float* %33
%107 = fpext float %106 to double
%108 = fdiv double %107, 4.500000e+01
%109 = fadd double 0xBFC5555555555555, %108
%110 = load float, float* %34
%111 = fpext float %110 to double
%112 = call double @llvm.fmuladd.f64(double 0xBF4B1706C5C1B170, double %111, double %109)
%113 = load float, float* %35
%114 = fpext float %113 to double
%115 = fdiv double %114, 6.480000e+04
%116 = fadd double %112, %115
%117 = fptrunc double %116 to float
store float %117, float* %22
%118 = load float, float* %33
%119 = fpext float %118 to double
%120 = fdiv double %119, 1.800000e+02
%121 = fsub double 0x3FA5555555555555, %120
%122 = load float, float* %34
%123 = fpext float %122 to double
%124 = call double @llvm.fmuladd.f64(double 0x3F2B1706C5C1B170, double %123, double %121)
%125 = load float, float* %35
%126 = fpext float %125 to double
%127 = fdiv double %126, 2.592000e+05
%128 = fsub double %124, %127
%129 = fptrunc double %128 to float
store float %129, float* %24
%130 = load float, float* %32
%131 = fpext float %130 to double
%132 = load float, float* %33
%133 = fpext float %132 to double
%134 = call double @llvm.fmuladd.f64(double 0x3F93813813813814, double %133, double 0x3FA6C16C16C16C17)
%135 = load float, float* %34
%136 = fpext float %135 to double
%137 = call double @llvm.fmuladd.f64(double 0xBF671DE3A556C734, double %136, double %134)
%138 = load float, float* %35
%139 = fpext float %138 to double
%140 = call double @llvm.fmuladd.f64(double 0x3F2818F38276630C, double %139, double %137)
%141 = fmul double %131, %140
%142 = fptrunc double %141 to float
store float %142, float* %17
%143 = load float, float* %32
%144 = fpext float %143 to double
%145 = load float, float* %33
%146 = fpext float %145 to double
%147 = fdiv double %146, 1.680000e+02
%148 = fsub double 0x3FB8E38E38E38E39, %147
%149 = load float, float* %34
%150 = fpext float %149 to double
%151 = call double @llvm.fmuladd.f64(double 0x3F23DDAFA2169330, double %150, double %148)
%152 = load float, float* %35
%153 = fpext float %152 to double
%154 = call double @llvm.fmuladd.f64(double 0xBEC2369453B8BBFA, double %153, double %151)
%155 = fmul double %144, %154
%156 = fptrunc double %155 to float
store float %156, float* %19
%157 = load float, float* %32
%158 = fpext float %157 to double
%159 = load float, float* %33
%160 = fpext float %159 to double
%161 = fdiv double %160, 2.100000e+02
%162 = fadd double 0xBFB3E93E93E93E94, %161
%163 = load float, float* %34
%164 = fpext float %163 to double
%165 = call double @llvm.fmuladd.f64(double 0xBF1FC919035751E7, double %164, double %162)
%166 = load float, float* %35
%167 = fpext float %166 to double
%168 = call double @llvm.fmuladd.f64(double 0x3EBD242085F45FF7, double %167, double %165)
%169 = fmul double %158, %168
%170 = fptrunc double %169 to float
store float %170, float* %21
%171 = load float, float* %32
%172 = fpext float %171 to double
%173 = load float, float* %33
%174 = fpext float %173 to double
%175 = fdiv double %174, 8.400000e+02
%176 = fsub double 0x3F93E93E93E93E94, %175
%177 = load float, float* %34
%178 = fpext float %177 to double
%179 = call double @llvm.fmuladd.f64(double 0x3EFFC919035751E7, double %178, double %176)
%180 = load float, float* %35
%181 = fpext float %180 to double
%182 = call double @llvm.fmuladd.f64(double 0xBE9D242085F45FF7, double %181, double %179)
%183 = fmul double %172, %182
%184 = fptrunc double %183 to float
store float %184, float* %23
br label %303
185: ; preds = %61
%186 = load double, double* %42
%187 = call double @cos(double %186)
store double %187, double* %36
%188 = load double, double* %42
%189 = call double @sin(double %188)
store double %189, double* %39
%190 = load double, double* %36
%191 = load double, double* %36
%192 = load double, double* %39
%193 = load double, double* %39
%194 = fmul double %192, %193
%195 = fneg double %194
%196 = call double @llvm.fmuladd.f64(double %190, double %191, double %195)
store double %196, double* %37
%197 = load double, double* %39
%198 = fmul double 2.000000e+00, %197
%199 = load double, double* %36
%200 = fmul double %198, %199
store double %200, double* %41
%201 = load double, double* %42
%202 = load double, double* %42
%203 = fmul double %201, %202
store double %203, double* %43
%204 = load double, double* %43
%205 = load double, double* %43
%206 = fmul double %204, %205
store double %206, double* %44
%207 = load double, double* %43
%208 = fsub double 3.000000e+00, %207
store double %208, double* %45
%209 = load double, double* %43
%210 = fadd double 6.000000e+00, %209
store double %210, double* %38
%211 = load double, double* %44
%212 = fmul double 6.000000e+00, %211
%213 = fdiv double 1.000000e+00, %212
store double %213, double* %40
%214 = load double, double* %40
%215 = fmul double 2.000000e+00, %214
store double %215, double* %46
%216 = load double, double* %46
%217 = load double, double* %38
%218 = fmul double %216, %217
%219 = load double, double* %36
%220 = call double @llvm.fmuladd.f64(double -4.000000e+00, double %219, double 3.000000e+00)
%221 = load double, double* %37
%222 = fadd double %220, %221
%223 = fmul double %218, %222
%224 = fptrunc double %223 to float
%225 = load float*, float** %16
store float %224, float* %225
%226 = load double, double* %40
%227 = load double, double* %43
%228 = call double @llvm.fmuladd.f64(double 5.000000e+00, double %227, double -4.200000e+01)
%229 = load double, double* %38
%230 = load double, double* %36
%231 = load double, double* %37
%232 = fneg double %231
%233 = call double @llvm.fmuladd.f64(double 8.000000e+00, double %230, double %232)
%234 = call double @llvm.fmuladd.f64(double %229, double %233, double %228)
%235 = fmul double %226, %234
%236 = fptrunc double %235 to float
store float %236, float* %18
%237 = load double, double* %40
%238 = load double, double* %42
%239 = load double, double* %43
%240 = call double @llvm.fmuladd.f64(double 6.000000e+00, double %239, double -1.200000e+01)
%241 = load double, double* %38
%242 = load double, double* %41
%243 = fmul double %241, %242
%244 = call double @llvm.fmuladd.f64(double %238, double %240, double %243)
%245 = fmul double %237, %244
%246 = fptrunc double %245 to float
store float %246, float* %17
%247 = load double, double* %40
%248 = load double, double* %45
%249 = load double, double* %38
%250 = fmul double 7.000000e+00, %249
%251 = load double, double* %36
%252 = fmul double %250, %251
%253 = fneg double %252
%254 = call double @llvm.fmuladd.f64(double 1.400000e+01, double %248, double %253)
%255 = fmul double %247, %254
%256 = fptrunc double %255 to float
store float %256, float* %20
%257 = load double, double* %40
%258 = load double, double* %42
%259 = load double, double* %38
%260 = fmul double 5.000000e+00, %259
%261 = load double, double* %39
%262 = fmul double %260, %261
%263 = fneg double %262
%264 = call double @llvm.fmuladd.f64(double 3.000000e+01, double %258, double %263)
%265 = fmul double %257, %264
%266 = fptrunc double %265 to float
store float %266, float* %19
%267 = load double, double* %46
%268 = load double, double* %45
%269 = load double, double* %38
%270 = fmul double 2.000000e+00, %269
%271 = load double, double* %36
%272 = fmul double %270, %271
%273 = call double @llvm.fmuladd.f64(double -4.000000e+00, double %268, double %272)
%274 = fmul double %267, %273
%275 = fptrunc double %274 to float
store float %275, float* %22
%276 = load double, double* %46
%277 = load double, double* %42
%278 = load double, double* %38
%279 = fmul double 2.000000e+00, %278
%280 = load double, double* %39
%281 = fmul double %279, %280
%282 = call double @llvm.fmuladd.f64(double -1.200000e+01, double %277, double %281)
%283 = fmul double %276, %282
%284 = fptrunc double %283 to float
store float %284, float* %21
%285 = load double, double* %40
%286 = load double, double* %45
%287 = load double, double* %38
%288 = load double, double* %36
%289 = fmul double %287, %288
%290 = fneg double %289
%291 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %286, double %290)
%292 = fmul double %285, %291
%293 = fptrunc double %292 to float
store float %293, float* %24
%294 = load double, double* %40
%295 = load double, double* %42
%296 = load double, double* %38
%297 = load double, double* %39
%298 = fmul double %296, %297
%299 = fneg double %298
%300 = call double @llvm.fmuladd.f64(double 6.000000e+00, double %295, double %299)
%301 = fmul double %294, %300
%302 = fptrunc double %301 to float
store float %302, float* %23
br label %303
303: ; preds = %185, %65
%304 = load float, float* %18
%305 = load float*, float** %13
%306 = getelementptr inbounds float, float* %305, i64 1
%307 = load float, float* %306
%308 = load float, float* %20
%309 = load float*, float** %13
%310 = getelementptr inbounds float, float* %309, i64 2
%311 = load float, float* %310
%312 = fmul float %308, %311
%313 = call float @llvm.fmuladd.f32(float %304, float %307, float %312)
%314 = load float, float* %22
%315 = load float*, float** %13
%316 = getelementptr inbounds float, float* %315, i64 3
%317 = load float, float* %316
%318 = call float @llvm.fmuladd.f32(float %314, float %317, float %313)
%319 = load float, float* %24
%320 = load float*, float** %13
%321 = getelementptr inbounds float, float* %320, i64 4
%322 = load float, float* %321
%323 = call float @llvm.fmuladd.f32(float %319, float %322, float %318)
store float %323, float* %27
%324 = load float, float* %17
%325 = load float*, float** %13
%326 = getelementptr inbounds float, float* %325, i64 1
%327 = load float, float* %326
%328 = load float, float* %19
%329 = load float*, float** %13
%330 = getelementptr inbounds float, float* %329, i64 2
%331 = load float, float* %330
%332 = fmul float %328, %331
%333 = call float @llvm.fmuladd.f32(float %324, float %327, float %332)
%334 = load float, float* %21
%335 = load float*, float** %13
%336 = getelementptr inbounds float, float* %335, i64 3
%337 = load float, float* %336
%338 = call float @llvm.fmuladd.f32(float %334, float %337, float %333)
%339 = load float, float* %23
%340 = load float*, float** %13
%341 = getelementptr inbounds float, float* %340, i64 4
%342 = load float, float* %341
%343 = call float @llvm.fmuladd.f32(float %339, float %342, float %338)
store float %343, float* %30
%344 = load float, float* %18
%345 = load float*, float** %13
%346 = getelementptr inbounds float, float* %345, i64 8
%347 = load float, float* %346
%348 = load float, float* %20
%349 = load float*, float** %13
%350 = getelementptr inbounds float, float* %349, i64 7
%351 = load float, float* %350
%352 = fmul float %348, %351
%353 = call float @llvm.fmuladd.f32(float %344, float %347, float %352)
%354 = load float, float* %22
%355 = load float*, float** %13
%356 = getelementptr inbounds float, float* %355, i64 6
%357 = load float, float* %356
%358 = call float @llvm.fmuladd.f32(float %354, float %357, float %353)
%359 = load float, float* %24
%360 = load float*, float** %13
%361 = getelementptr inbounds float, float* %360, i64 5
%362 = load float, float* %361
%363 = call float @llvm.fmuladd.f32(float %359, float %362, float %358)
store float %363, float* %28
%364 = load float, float* %17
%365 = fneg float %364
%366 = load float*, float** %13
%367 = getelementptr inbounds float, float* %366, i64 8
%368 = load float, float* %367
%369 = load float, float* %19
%370 = load float*, float** %13
%371 = getelementptr inbounds float, float* %370, i64 7
%372 = load float, float* %371
%373 = fmul float %369, %372
%374 = fneg float %373
%375 = call float @llvm.fmuladd.f32(float %365, float %368, float %374)
%376 = load float, float* %21
%377 = load float*, float** %13
%378 = getelementptr inbounds float, float* %377, i64 6
%379 = load float, float* %378
%380 = fneg float %376
%381 = call float @llvm.fmuladd.f32(float %380, float %379, float %375)
%382 = load float, float* %23
%383 = load float*, float** %13
%384 = getelementptr inbounds float, float* %383, i64 5
%385 = load float, float* %384
%386 = fneg float %382
%387 = call float @llvm.fmuladd.f32(float %386, float %385, float %381)
store float %387, float* %31
%388 = load float, float* %9
%389 = load float, float* %12
%390 = load float, float* %11
%391 = fsub float %389, %390
%392 = fmul float %388, %391
store float %392, float* %25
%393 = load float, float* %25
%394 = fpext float %393 to double
%395 = call double @cos(double %394)
%396 = fptrunc double %395 to float
store float %396, float* %26
%397 = load float, float* %25
%398 = fpext float %397 to double
%399 = call double @sin(double %398)
%400 = fptrunc double %399 to float
store float %400, float* %29
%401 = load float, float* %27
%402 = load float, float* %26
%403 = load float, float* %28
%404 = call float @llvm.fmuladd.f32(float %402, float %403, float %401)
%405 = load float, float* %29
%406 = load float, float* %31
%407 = fneg float %405
%408 = call float @llvm.fmuladd.f32(float %407, float %406, float %404)
%409 = load float*, float** %14
store float %408, float* %409
%410 = load float, float* %30
%411 = load float, float* %29
%412 = load float, float* %28
%413 = call float @llvm.fmuladd.f32(float %411, float %412, float %410)
%414 = load float, float* %26
%415 = load float, float* %31
%416 = call float @llvm.fmuladd.f32(float %414, float %415, float %413)
%417 = load float*, float** %15
store float %416, float* %417
ret void
}

LLVM IR (-O2):
@.str = [24 x i8] c"bad arguments to dftcor\00"
define void @dftcor(float %0, float %1, float %2, float %3, float* nocapture %4, float* nocapture writeonly %5, float* nocapture writeonly %6, float* nocapture writeonly %7) {
%9 = fmul float %0, %1
%10 = fpext float %9 to double
%11 = fcmp oge float %2, %3
%12 = fcmp olt float %9, 0.000000e+00
%13 = or i1 %12, %11
%14 = fcmp ogt double %10, 3.014160e+00
%15 = or i1 %14, %13
br i1 %15, label %16, label %17
16: ; preds = %8
tail call void @nrerror(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i64 0, i64 0))
br label %17
17: ; preds = %8, %16
%18 = tail call double @llvm.fabs.f64(double %10)
%19 = fcmp olt double %18, 5.000000e-02
br i1 %19, label %20, label %69
20: ; preds = %17
%21 = fmul float %9, %9
%22 = fmul float %21, %21
%23 = fmul float %21, %22
%24 = fpext float %22 to double
%25 = tail call double @llvm.fmuladd.f64(double %24, double 0xBF8F49F49F49F49F, double 1.000000e+00)
%26 = fpext float %23 to double
%27 = tail call double @llvm.fmuladd.f64(double %26, double 0x3F58EC396E418EC4, double %25)
%28 = fptrunc double %27 to float
store float %28, float* %7
%29 = fpext float %21 to double
%30 = fdiv double %29, 4.500000e+01
%31 = fadd double %30, 0xBFE5555555555555
%32 = tail call double @llvm.fmuladd.f64(double %29, double 0xBFA3E93E93E93E94, double 0x3FD2AAAAAAAAAAAB)
%33 = insertelement <2 x double> poison, double %24, i64 0
%34 = shufflevector <2 x double> %33, <2 x double> poison, <2 x i32> zeroinitializer
%35 = insertelement <2 x double> poison, double %32, i64 0
%36 = insertelement <2 x double> %35, double %31, i64 1
%37 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %34, <2 x double> <double 0x3F57B425ED097B42, double 0x3F7BE713C691BE71>, <2 x double> %36)
%38 = insertelement <2 x double> poison, double %26, i64 0
%39 = shufflevector <2 x double> %38, <2 x double> poison, <2 x i32> zeroinitializer
%40 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %39, <2 x double> <double 0xBEFC516A10F0B406, double 0xBF486AC5403D4268>, <2 x double> %37)
%41 = fadd double %30, 0xBFC5555555555555
%42 = tail call double @llvm.fmuladd.f64(double %24, double 0xBF4B1706C5C1B170, double %41)
%43 = fdiv double %26, 6.480000e+04
%44 = fadd double %42, %43
%45 = fdiv double %29, 1.800000e+02
%46 = fsub double 0x3FA5555555555555, %45
%47 = tail call double @llvm.fmuladd.f64(double %24, double 0x3F2B1706C5C1B170, double %46)
%48 = fdiv double %26, 2.592000e+05
%49 = fsub double %47, %48
%50 = tail call double @llvm.fmuladd.f64(double %29, double 0x3F93813813813814, double 0x3FA6C16C16C16C17)
%51 = tail call double @llvm.fmuladd.f64(double %24, double 0xBF671DE3A556C734, double %50)
%52 = tail call double @llvm.fmuladd.f64(double %26, double 0x3F2818F38276630C, double %51)
%53 = fmul double %52, %10
%54 = fdiv double %29, 1.680000e+02
%55 = fsub double 0x3FB8E38E38E38E39, %54
%56 = tail call double @llvm.fmuladd.f64(double %24, double 0x3F23DDAFA2169330, double %55)
%57 = tail call double @llvm.fmuladd.f64(double %26, double 0xBEC2369453B8BBFA, double %56)
%58 = fmul double %57, %10
%59 = fdiv double %29, 2.100000e+02
%60 = fadd double %59, 0xBFB3E93E93E93E94
%61 = tail call double @llvm.fmuladd.f64(double %24, double 0xBF1FC919035751E7, double %60)
%62 = tail call double @llvm.fmuladd.f64(double %26, double 0x3EBD242085F45FF7, double %61)
%63 = fmul double %62, %10
%64 = fdiv double %29, 8.400000e+02
%65 = fsub double 0x3F93E93E93E93E94, %64
%66 = tail call double @llvm.fmuladd.f64(double %24, double 0x3EFFC919035751E7, double %65)
%67 = tail call double @llvm.fmuladd.f64(double %26, double 0xBE9D242085F45FF7, double %66)
%68 = fmul double %67, %10
br label %128
69: ; preds = %17
%70 = tail call double @cos(double %10)
%71 = tail call double @sin(double %10)
%72 = fneg double %71
%73 = fmul double %71, %72
%74 = tail call double @llvm.fmuladd.f64(double %70, double %70, double %73)
%75 = fmul double %71, 2.000000e+00
%76 = fmul double %70, %75
%77 = fmul double %10, %10
%78 = fmul double %77, %77
%79 = insertelement <2 x double> poison, double %77, i64 0
%80 = shufflevector <2 x double> %79, <2 x double> poison, <2 x i32> zeroinitializer
%81 = fsub <2 x double> <double 3.000000e+00, double poison>, %80
%82 = fadd <2 x double> %80, <double poison, double 6.000000e+00>
%83 = shufflevector <2 x double> %81, <2 x double> %82, <2 x i32> <i32 0, i32 3>
%84 = fmul double %78, 6.000000e+00
%85 = fdiv double 1.000000e+00, %84
%86 = fmul double %85, 2.000000e+00
%87 = extractelement <2 x double> %82, i64 1
%88 = fmul double %87, %86
%89 = tail call double @llvm.fmuladd.f64(double %70, double -4.000000e+00, double 3.000000e+00)
%90 = fadd double %89, %74
%91 = fmul double %88, %90
%92 = fptrunc double %91 to float
store float %92, float* %7
%93 = tail call double @llvm.fmuladd.f64(double %77, double 5.000000e+00, double -4.200000e+01)
%94 = fneg double %74
%95 = tail call double @llvm.fmuladd.f64(double %70, double 8.000000e+00, double %94)
%96 = tail call double @llvm.fmuladd.f64(double %77, double 6.000000e+00, double -1.200000e+01)
%97 = fmul double %87, %76
%98 = tail call double @llvm.fmuladd.f64(double %10, double %96, double %97)
%99 = fmul double %85, %98
%100 = fmul double %87, -7.000000e+00
%101 = fmul double %100, %70
%102 = insertelement <2 x double> <double 1.400000e+01, double poison>, double %95, i64 1
%103 = insertelement <2 x double> poison, double %101, i64 0
%104 = insertelement <2 x double> %103, double %93, i64 1
%105 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %83, <2 x double> %102, <2 x double> %104)
%106 = insertelement <2 x double> poison, double %85, i64 0
%107 = shufflevector <2 x double> %106, <2 x double> poison, <2 x i32> zeroinitializer
%108 = fmul <2 x double> %107, %105
%109 = fmul double %87, -5.000000e+00
%110 = fmul double %109, %71
%111 = tail call double @llvm.fmuladd.f64(double %10, double 3.000000e+01, double %110)
%112 = fmul double %85, %111
%113 = fmul double %87, 2.000000e+00
%114 = fmul double %113, %70
%115 = extractelement <2 x double> %81, i64 0
%116 = tail call double @llvm.fmuladd.f64(double %115, double -4.000000e+00, double %114)
%117 = fmul double %86, %116
%118 = fmul double %113, %71
%119 = tail call double @llvm.fmuladd.f64(double %10, double -1.200000e+01, double %118)
%120 = fmul double %86, %119
%121 = fneg double %87
%122 = fmul double %70, %121
%123 = tail call double @llvm.fmuladd.f64(double %115, double 2.000000e+00, double %122)
%124 = fmul double %85, %123
%125 = fmul double %71, %121
%126 = tail call double @llvm.fmuladd.f64(double %10, double 6.000000e+00, double %125)
%127 = fmul double %85, %126
br label %128
128: ; preds = %69, %20
%129 = phi double [ %49, %20 ], [ %124, %69 ]
%130 = phi double [ %68, %20 ], [ %127, %69 ]
%131 = phi double [ %44, %20 ], [ %117, %69 ]
%132 = phi double [ %63, %20 ], [ %120, %69 ]
%133 = phi double [ %58, %20 ], [ %112, %69 ]
%134 = phi double [ %53, %20 ], [ %99, %69 ]
%135 = phi <2 x double> [ %40, %20 ], [ %108, %69 ]
%136 = fptrunc double %134 to float
%137 = extractelement <2 x double> %135, i64 1
%138 = fptrunc double %137 to float
%139 = fptrunc double %133 to float
%140 = extractelement <2 x double> %135, i64 0
%141 = fptrunc double %140 to float
%142 = fptrunc double %132 to float
%143 = fptrunc double %131 to float
%144 = fptrunc double %130 to float
%145 = fptrunc double %129 to float
%146 = getelementptr inbounds float, float* %4, i64 1
%147 = load float, float* %146
%148 = getelementptr inbounds float, float* %4, i64 2
%149 = load float, float* %148
%150 = fmul float %149, %141
%151 = tail call float @llvm.fmuladd.f32(float %138, float %147, float %150)
%152 = getelementptr inbounds float, float* %4, i64 3
%153 = load float, float* %152
%154 = tail call float @llvm.fmuladd.f32(float %143, float %153, float %151)
%155 = getelementptr inbounds float, float* %4, i64 4
%156 = load float, float* %155
%157 = tail call float @llvm.fmuladd.f32(float %145, float %156, float %154)
%158 = fmul float %149, %139
%159 = tail call float @llvm.fmuladd.f32(float %136, float %147, float %158)
%160 = tail call float @llvm.fmuladd.f32(float %142, float %153, float %159)
%161 = tail call float @llvm.fmuladd.f32(float %144, float %156, float %160)
%162 = getelementptr inbounds float, float* %4, i64 8
%163 = load float, float* %162
%164 = getelementptr inbounds float, float* %4, i64 7
%165 = load float, float* %164
%166 = fmul float %165, %141
%167 = tail call float @llvm.fmuladd.f32(float %138, float %163, float %166)
%168 = getelementptr inbounds float, float* %4, i64 6
%169 = load float, float* %168
%170 = tail call float @llvm.fmuladd.f32(float %143, float %169, float %167)
%171 = getelementptr inbounds float, float* %4, i64 5
%172 = load float, float* %171
%173 = tail call float @llvm.fmuladd.f32(float %145, float %172, float %170)
%174 = fneg float %136
%175 = fneg float %165
%176 = fmul float %139, %175
%177 = tail call float @llvm.fmuladd.f32(float %174, float %163, float %176)
%178 = fneg float %142
%179 = tail call float @llvm.fmuladd.f32(float %178, float %169, float %177)
%180 = fneg float %144
%181 = tail call float @llvm.fmuladd.f32(float %180, float %172, float %179)
%182 = fsub float %3, %2
%183 = fmul float %182, %0
%184 = fpext float %183 to double
%185 = tail call double @cos(double %184)
%186 = fptrunc double %185 to float
%187 = tail call double @sin(double %184)
%188 = fptrunc double %187 to float
%189 = tail call float @llvm.fmuladd.f32(float %186, float %173, float %157)
%190 = fneg float %188
%191 = tail call float @llvm.fmuladd.f32(float %190, float %181, float %189)
store float %191, float* %5
%192 = tail call float @llvm.fmuladd.f32(float %188, float %173, float %161)
%193 = tail call float @llvm.fmuladd.f32(float %186, float %181, float %192)
store float %193, float* %6
ret void
}