user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<dradf4>:
  endbr64
  push   %r15
  push   %r14
  mov    %r9,%r14
  push   %r13
  mov    %r8,%r13
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  mov    %edi,%ebp
  mov    %esi,%edi
  imul   %ebp,%edi
  push   %rbx
  mov    %rcx,%rbx
  mov    0x38(%rsp),%r15
  lea    (%rdi,%rdi,1),%eax
  mov    %esi,-0x54(%rsp)
  mov    %eax,-0x18(%rsp)
  add    %edi,%eax
  mov    %edi,-0x2c(%rsp)
  test   %esi,%esi
  jle    L82
  lea    0x0(,%rbp,4),%ecx
  lea    0x0(%rbp,%rbp,1),%r11d
  mov    %ecx,-0x70(%rsp)
  cmp    $0x1,%ebp
  jne    L118
  cltq
  mov    %edi,%esi
  lea    (%r12,%rax,8),%r8
  movslq -0x18(%rsp),%rax
  movslq %esi,%rdx
  lea    (%r12,%rdx,8),%rdi
  lea    (%r12,%rax,8),%r9
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L32:
  movsd  (%r9,%rax,8),%xmm0
  addsd  (%r12,%rax,8),%xmm0
  lea    0x0(,%rax,4),%edx
  movsd  (%r8,%rax,8),%xmm1
  addsd  (%rdi,%rax,8),%xmm1
  movslq %edx,%rcx
  movapd %xmm0,%xmm2
  addsd  %xmm1,%xmm2
  subsd  %xmm1,%xmm0
  movsd  %xmm2,(%rbx,%rcx,8)
  lea    0x4(%rdx),%ecx
  add    $0x2,%edx
  movslq %ecx,%rcx
  movslq %edx,%rdx
  movsd  %xmm0,-0x8(%rbx,%rcx,8)
  movsd  (%r12,%rax,8),%xmm0
  subsd  (%r9,%rax,8),%xmm0
  movsd  %xmm0,-0x8(%rbx,%rdx,8)
  movsd  (%r8,%rax,8),%xmm0
  subsd  (%rdi,%rax,8),%xmm0
  add    $0x1,%rax
  movsd  %xmm0,(%rbx,%rdx,8)
  cmp    %rsi,%rax
  jne    L32
L0:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L118:
  movslq %ebp,%rcx
  movslq -0x2c(%rsp),%r10
  movslq %eax,%rsi
  movslq -0x18(%rsp),%rdi
  shl    $0x3,%rcx
  lea    0x0(,%rsi,8),%r8
  mov    %ebp,-0x60(%rsp)
  mov    -0x70(%rsp),%ebp
  mov    %rcx,-0x68(%rsp)
  sub    %rsi,%r10
  lea    (%rdx,%r8,1),%rax
  xor    %ecx,%ecx
  mov    %r12,-0x70(%rsp)
  mov    -0x68(%rsp),%r12
  neg    %r8
  xor    %edx,%edx
  mov    %r13,-0x68(%rsp)
  mov    -0x54(%rsp),%r13d
  mov    %r10,%r9
  sub    %rsi,%rdi
  nopl   0x0(%rax,%rax,1)
L112:
  movsd  (%rax,%r9,8),%xmm1
  addsd  (%rax),%xmm1
  movslq %edx,%rsi
  add    $0x1,%ecx
  movsd  (%rax,%r8,1),%xmm0
  addsd  (%rax,%rdi,8),%xmm0
  movapd %xmm1,%xmm2
  addsd  %xmm0,%xmm2
  subsd  %xmm1,%xmm0
  movsd  %xmm2,(%rbx,%rsi,8)
  lea    0x0(%rbp,%rdx,1),%esi
  add    %r11d,%edx
  movslq %esi,%r10
  movslq %edx,%rdx
  movsd  %xmm0,-0x8(%rbx,%r10,8)
  movsd  (%rax,%r8,1),%xmm0
  subsd  (%rax,%rdi,8),%xmm0
  movsd  %xmm0,-0x8(%rbx,%rdx,8)
  movsd  (%rax),%xmm0
  subsd  (%rax,%r9,8),%xmm0
  add    %r12,%rax
  movsd  %xmm0,(%rbx,%rdx,8)
  mov    %esi,%edx
  cmp    %ecx,%r13d
  jne    L112
  mov    -0x60(%rsp),%ebp
  mov    -0x70(%rsp),%r12
  mov    -0x68(%rsp),%r13
L82:
  cmp    $0x1,%ebp
  jle    L0
  cmp    $0x2,%ebp
  je     L33
  mov    %ebp,%eax
  mov    -0x54(%rsp),%ecx
  and    $0x1,%eax
  mov    %eax,-0x14(%rsp)
  test   %ecx,%ecx
  jle    L0
  movslq %ebp,%rax
  lea    0x0(%rbp,%rbp,1),%edi
  movl   $0x0,-0x68(%rsp)
  mov    %rax,-0x20(%rsp)
  shl    $0x3,%rax
  mov    %rax,-0x40(%rsp)
  movslq -0x2c(%rsp),%rax
  mov    %edi,-0x30(%rsp)
  lea    (%r12,%rax,8),%rcx
  mov    %rax,-0x28(%rsp)
  shl    $0x4,%rax
  mov    %rax,-0x48(%rsp)
  movslq %edi,%rax
  mov    %rax,-0x50(%rsp)
  sub    $0x2,%rax
  movl   $0x0,-0x70(%rsp)
  mov    %rax,-0x38(%rsp)
  mov    %r12,-0x60(%rsp)
  mov    %r12,-0x10(%rsp)
  mov    %rcx,%r12
  nopl   (%rax)
L31:
  mov    -0x48(%rsp),%rdi
  mov    -0x68(%rsp),%eax
  mov    -0x60(%rsp),%rsi
  mov    %rdi,%r9
  lea    (%rdi,%r12,1),%r8
  mov    -0x30(%rsp),%edi
  shl    $0x2,%eax
  add    %rsi,%r9
  lea    (%rdi,%rax,1),%ecx
  cltq
  movslq %ecx,%rcx
  lea    (%rbx,%rax,8),%r11
  add    -0x50(%rsp),%rax
  lea    (%rbx,%rcx,8),%rdx
  add    -0x38(%rsp),%rcx
  lea    (%rbx,%rax,8),%r10
  mov    $0x2,%eax
  lea    -0x8(%rbx,%rcx,8),%rdi
  mov    %r12,%rcx
  nopw   0x0(%rax,%rax,1)
L107:
  movupd 0x8(%rcx),%xmm0
  add    $0x10,%r9
  add    $0x10,%rcx
  movupd -0x10(%r13,%rax,8),%xmm2
  add    $0x10,%r8
  add    $0x10,%rsi
  sub    $0x10,%rdx
  sub    $0x10,%rdi
  movapd %xmm0,%xmm3
  unpcklpd %xmm2,%xmm2
  movupd -0x10(%r14,%rax,8),%xmm4
  movupd -0x10(%r15,%rax,8),%xmm6
  mulpd  %xmm0,%xmm2
  shufpd $0x1,%xmm0,%xmm3
  movupd -0x10(%r13,%rax,8),%xmm0
  unpcklpd %xmm4,%xmm4
  unpcklpd %xmm6,%xmm6
  unpckhpd %xmm0,%xmm0
  mulpd  %xmm0,%xmm3
  movupd -0x8(%r9),%xmm0
  mulpd  %xmm0,%xmm4
  movapd %xmm2,%xmm1
  shufpd $0x1,%xmm0,%xmm0
  subpd  %xmm3,%xmm1
  addpd  %xmm2,%xmm3
  movupd -0x10(%r14,%rax,8),%xmm2
  unpckhpd %xmm2,%xmm2
  mulpd  %xmm2,%xmm0
  movapd %xmm0,%xmm2
  addpd  %xmm4,%xmm2
  subpd  %xmm0,%xmm4
  movupd -0x8(%r8),%xmm0
  mulpd  %xmm0,%xmm6
  shufpd $0x1,%xmm0,%xmm0
  movsd  %xmm2,%xmm4
  movupd -0x10(%r15,%rax,8),%xmm2
  unpckhpd %xmm2,%xmm2
  mulpd  %xmm2,%xmm0
  movapd %xmm6,%xmm5
  subpd  %xmm0,%xmm5
  addpd  %xmm6,%xmm0
  movapd %xmm1,%xmm6
  unpckhpd %xmm1,%xmm1
  movsd  %xmm3,%xmm6
  movapd %xmm5,%xmm2
  unpckhpd %xmm5,%xmm5
  subsd  %xmm5,%xmm1
  movupd -0x8(%rsi),%xmm5
  movsd  %xmm0,%xmm2
  subsd  %xmm3,%xmm0
  addpd  %xmm6,%xmm2
  movupd -0x8(%rsi),%xmm3
  addpd  %xmm4,%xmm5
  subpd  %xmm4,%xmm3
  movapd %xmm5,%xmm4
  addpd  %xmm2,%xmm4
  movapd %xmm3,%xmm7
  unpckhpd %xmm7,%xmm7
  movups %xmm4,-0x8(%r11,%rax,8)
  movapd %xmm3,%xmm4
  subsd  %xmm1,%xmm4
  unpcklpd %xmm0,%xmm1
  addpd  %xmm3,%xmm1
  movsd  %xmm4,-0x8(%rdx)
  movapd %xmm0,%xmm4
  movapd %xmm5,%xmm0
  unpckhpd %xmm5,%xmm5
  subsd  %xmm2,%xmm0
  unpckhpd %xmm2,%xmm2
  subsd  %xmm7,%xmm4
  subsd  %xmm5,%xmm2
  movsd  %xmm4,(%rdx)
  unpcklpd %xmm2,%xmm0
  movups %xmm1,-0x8(%r10,%rax,8)
  add    $0x2,%rax
  movups %xmm0,0x10(%rdi)
  cmp    %eax,%ebp
  jg     L107
  mov    -0x40(%rsp),%rsi
  addl   $0x1,-0x70(%rsp)
  add    %ebp,-0x68(%rsp)
  mov    -0x70(%rsp),%eax
  add    %rsi,-0x60(%rsp)
  add    %rsi,%r12
  cmp    %eax,-0x54(%rsp)
  jne    L31
  mov    -0x14(%rsp),%eax
  mov    -0x10(%rsp),%r12
  test   %eax,%eax
  jne    L0
  mov    -0x2c(%rsp),%eax
  mov    -0x18(%rsp),%edi
  lea    -0x1(%rax,%rbp,1),%edx
  shl    $0x2,%ebp
  add    %edx,%edi
L24:
  mov    -0x20(%rsp),%r11
  mov    -0x28(%rsp),%r8
  movslq %edx,%r9
  movslq %ebp,%rbp
  movslq %edi,%rdx
  mov    -0x54(%rsp),%r10d
  mov    %r9,%rdi
  xor    %eax,%eax
  sub    %r11,%r8
  lea    0x0(,%r11,8),%rcx
  movsd  D4(%rip),%xmm4
  movsd  D5(%rip),%xmm3
  add    %r9,%r8
  mov    -0x50(%rsp),%r9
  add    %rcx,%r12
  add    %rcx,%rbx
  lea    0x0(,%rbp,8),%rsi
  sub    %r11,%rdi
  sub    %r11,%rdx
  nopl   0x0(%rax,%rax,1)
L23:
  movsd  (%r12,%rdx,8),%xmm2
  movsd  (%r12,%rdi,8),%xmm0
  add    $0x1,%eax
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm0
  addsd  %xmm2,%xmm1
  movsd  -0x8(%r12),%xmm2
  mulsd  %xmm3,%xmm0
  mulsd  %xmm4,%xmm1
  addsd  %xmm0,%xmm2
  movsd  %xmm2,-0x8(%rbx)
  movsd  -0x8(%r12),%xmm2
  subsd  %xmm0,%xmm2
  movapd %xmm1,%xmm0
  movsd  %xmm2,-0x8(%rbx,%r9,8)
  subsd  (%r12,%r8,8),%xmm0
  movsd  %xmm0,(%rbx)
  addsd  (%r12,%r8,8),%xmm1
  add    %rcx,%r12
  movsd  %xmm1,(%rbx,%r9,8)
  add    %rsi,%rbx
  cmp    %eax,%r10d
  jg     L23
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L33:
  mov    -0x54(%rsp),%edx
  test   %edx,%edx
  jle    L0
  movslq -0x2c(%rsp),%rax
  mov    -0x18(%rsp),%edi
  movq   $0x2,-0x20(%rsp)
  mov    $0x8,%ebp
  movq   $0x4,-0x50(%rsp)
  lea    0x1(%rax),%edx
  mov    %rax,-0x28(%rsp)
  add    %edx,%edi
  jmp    L24
```

tool_calls: name: disassemble_data
arguments: label: D4
type_guessed: byte[8]
name: disassemble_data
arguments: label: D5
type_guessed: byte[8]

tool: {"D4": [0xcd,0x3b,0x7f,0x66,0x9e,0xa0,0xe6,0xbf]}

tool: {"D5": [0xcd,0x3b,0x7f,0x66,0x9e,0xa0,0xe6,0x3f]}

assistant: ```c
void dradf4(int ido, int l1, double *cc, double *ch, double *wa1, double *wa2, double *wa3) {
  static double hsqt2 = .70710678118654752440084436210485;
  int i, k, t0, t1, t2, t3, t4, t5, t6;
  double ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4;
  t0 = l1 * ido;
  t1 = t0;
  t4 = t1 << 1;
  t2 = t1 + (t1 << 1);
  t3 = 0;
  for (k = 0; k < l1; k++) {
    tr1 = cc[t1] + cc[t2];
    tr2 = cc[t3] + cc[t4];
    ch[t5 = t3 << 2] = tr1 + tr2;
    ch[(ido << 2) + t5 - 1] = tr2 - tr1;
    ch[(t5 += (ido << 1)) - 1] = cc[t3] - cc[t4];
    ch[t5] = cc[t2] - cc[t1];
    t1 += ido;
    t2 += ido;
    t3 += ido;
    t4 += ido;
  }
  if (ido < 2)
    return;
  if (ido == 2)
    goto L105;
  t1 = 0;
  for (k = 0; k < l1; k++) {
    t2 = t1;
    t4 = t1 << 2;
    t5 = (t6 = ido << 1) + t4;
    for (i = 2; i < ido; i += 2) {
      t3 = (t2 += 2);
      t4 += 2;
      t5 -= 2;
      t3 += t0;
      cr2 = wa1[i - 2] * cc[t3 - 1] + wa1[i - 1] * cc[t3];
      ci2 = wa1[i - 2] * cc[t3] - wa1[i - 1] * cc[t3 - 1];
      t3 += t0;
      cr3 = wa2[i - 2] * cc[t3 - 1] + wa2[i - 1] * cc[t3];
      ci3 = wa2[i - 2] * cc[t3] - wa2[i - 1] * cc[t3 - 1];
      t3 += t0;
      cr4 = wa3[i - 2] * cc[t3 - 1] + wa3[i - 1] * cc[t3];
      ci4 = wa3[i - 2] * cc[t3] - wa3[i - 1] * cc[t3 - 1];
      tr1 = cr2 + cr4;
      tr4 = cr4 - cr2;
      ti1 = ci2 + ci4;
      ti4 = ci2 - ci4;
      ti2 = cc[t2] + ci3;
      ti3 = cc[t2] - ci3;
      tr2 = cc[t2 - 1] + cr3;
      tr3 = cc[t2 - 1] - cr3;
      ch[t4 - 1] = tr1 + tr2;
      ch[t4] = ti1 + ti2;
      ch[t5 - 1] = tr3 - ti4;
      ch[t5] = tr4 - ti3;
      ch[t4 + t6 - 1] = ti4 + tr3;
      ch[t4 + t6] = tr4 + ti3;
      ch[t5 + t6 - 1] = tr2 - tr1;
      ch[t5 + t6] = ti1 - ti2;
    }
    t1 += ido;
  }
  if (ido % 2 == 1)
    return;
L105:
  t2 = (t1 = t0 + ido - 1) + (t0 << 1);
  t3 = ido << 2;
  t4 = ido;
  t5 = ido << 1;
  t6 = ido;
  for (k = 0; k < l1; k++) {
    ti1 = -hsqt2 * (cc[t1] + cc[t2]);
    tr1 = hsqt2 * (cc[t1] - cc[t2]);
    ch[t4 - 1] = tr1 + cc[t6 - 1];
    ch[t4 + t5 - 1] = cc[t6 - 1] - tr1;
    ch[t4] = ti1 - cc[t1 + t0];
    ch[t4 + t5] = ti1 + cc[t1 + t0];
    t1 += ido;
    t2 += ido;
    t4 += t3;
    t6 += ido;
  }
}
```