user: 请从给定的汇编指令推导出C源代码：

```asm
<fn_dirFDaubechiesWT2p2>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rsi,%rax
  mov    %edx,%r10d
  mov    %ecx,%r11d
  mov    %fs:0x28,%rdx
  mov    %rdx,-0x18(%rbp)
  xor    %edx,%edx
  mov    %r10d,%r8d
  shr    %r8d
  mov    %r8d,%edx
  lea    0xf(,%rdx,4),%rdx
  shr    $0x4,%rdx
  shl    $0x4,%rdx
  mov    %rdx,%rsi
  and    $0xfffffffffffff000,%rsi
  mov    %rsp,%rcx
  sub    %rsi,%rcx
L93:
  cmp    %rcx,%rsp
  je     L171
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L93
L171:
  mov    %rdx,%rcx
  and    $0xfff,%ecx
  sub    %rcx,%rsp
  test   %rcx,%rcx
  je     L2
  orq    $0x0,-0x8(%rsp,%rcx,1)
L2:
  mov    %rsp,%rsi
  test   %r11d,%r11d
  je     L11
  cmp    $0x1,%r11d
  jne    L39
  mov    $0x0,%edx
  movsd  D2(%rip),%xmm1
  test   %r10d,%r10d
  je     L11
L46:
  mov    %edx,%ecx
  lea    (%rax,%rcx,4),%rsi
  lea    0x1(%rdx),%ecx
  lea    (%rax,%rcx,4),%rcx
  mov    %edx,%r9d
  shr    %r9d
  mov    %r9d,%r11d
  movss  (%rsi),%xmm0
  subss  (%rcx),%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rdi,%r11,4)
  lea    (%r8,%r9,1),%r9d
  movss  (%rsi),%xmm0
  addss  (%rcx),%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rdi,%r9,4)
  add    $0x2,%edx
  cmp    %edx,%r10d
  ja     L46
L11:
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  jne    L209
  mov    -0x8(%rbp),%rbx
  leave
  ret
L39:
  mov    $0x0,%edx
  movsd  D2(%rip),%xmm1
  test   %r10d,%r10d
  je     L186
L138:
  mov    %edx,%ecx
  lea    (%rax,%rcx,4),%r9
  lea    0x1(%rdx),%ecx
  lea    (%rax,%rcx,4),%r8
  mov    %edx,%ecx
  shr    %ecx
  mov    %ecx,%ecx
  movss  (%r9),%xmm0
  subss  (%r8),%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rdi,%rcx,4)
  movss  (%r9),%xmm0
  addss  (%r8),%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rsi,%rcx,4)
  add    $0x2,%edx
  cmp    %edx,%r10d
  ja     L138
  sub    $0x1,%r11d
  cmp    $0x1,%r11d
  jbe    L201
L164:
  mov    %r10d,%r8d
  mov    $0x0,%r9d
  mov    $0x1,%ecx
  movsd  D2(%rip),%xmm3
L62:
  mov    %r10d,%eax
  shr    %cl,%eax
  add    %eax,%r9d
  shr    %r8d
  je     L88
  mov    $0x0,%eax
L200:
  movss  (%rsi,%rax,4),%xmm0
  movss  0x4(%rsi,%rax,4),%xmm2
  mov    %eax,%edx
  shr    %edx
  lea    (%rdx,%r9,1),%ebx
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  cvtss2sd %xmm1,%xmm1
  mulsd  %xmm3,%xmm1
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,(%rdi,%rbx,4)
  mov    %edx,%edx
  addss  %xmm2,%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm3,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rsi,%rdx,4)
  add    $0x2,%rax
  cmp    %eax,%r8d
  ja     L200
L88:
  add    $0x1,%ecx
  cmp    %r11d,%ecx
  jne    L62
L63:
  mov    %r10d,%eax
  mov    %r11d,%ecx
  shr    %cl,%eax
  add    %eax,%r9d
  shr    %r8d
  je     L11
  mov    $0x0,%eax
  movsd  D2(%rip),%xmm1
L15:
  mov    %eax,%edx
  shr    %edx
  lea    (%rdx,%r9,1),%edx
  movss  (%rsi,%rax,4),%xmm0
  subss  0x4(%rsi,%rax,4),%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rdi,%rdx,4)
  add    $0x2,%rax
  cmp    %eax,%r8d
  ja     L15
  lea    0x1(%r11),%ecx
  shr    %cl,%r10d
  lea    (%r10,%r9,1),%ecx
  mov    $0x0,%eax
  movsd  D2(%rip),%xmm1
L106:
  mov    %eax,%edx
  shr    %edx
  lea    (%rdx,%rcx,1),%edx
  movss  (%rsi,%rax,4),%xmm0
  addss  0x4(%rsi,%rax,4),%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rdi,%rdx,4)
  add    $0x2,%rax
  cmp    %eax,%r8d
  ja     L106
  jmp    L11
L201:
  mov    %r10d,%r8d
  mov    $0x0,%r9d
  mov    $0x1,%r11d
  jmp    L63
L186:
  sub    $0x1,%r11d
  cmp    $0x1,%r11d
  ja     L164
  jmp    L11
L209:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D2
data_type: f64

tool: D2: 0.707106781

assistant: ```c
void fn_dirFDaubechiesWT2p2(float *a_ka, float *a_da, const unsigned int const cuci_N, unsigned int cuic_w) {
  float a_buff[cuci_N >> 1];
  unsigned int ui_j;
  unsigned int ui_i;
  unsigned int ui_step = 0;
  unsigned int ui_ord = cuci_N;
  switch (cuic_w) {
  case 0:
    break;
  case 1:
    for (ui_j = 0; ui_j < cuci_N; ui_j = ui_j + 2) {
      a_ka[(ui_j >> 1)] = (a_da[ui_j] - a_da[ui_j + 1]) * 0.707106781;
      a_ka[(ui_j >> 1) + (cuci_N >> 1)] = (a_da[ui_j] + a_da[ui_j + 1]) * 0.707106781;
    }
    break;
  default:
    for (ui_j = 0; ui_j < cuci_N; ui_j = ui_j + 2) {
      a_ka[ui_j >> 1] = (a_da[ui_j] - a_da[ui_j + 1]) * 0.707106781;
      a_buff[ui_j >> 1] = (a_da[ui_j] + a_da[ui_j + 1]) * 0.707106781;
    }
    for (ui_i = 1; ui_i < (cuic_w - 1); ui_i++) {
      ui_step = ui_step + (cuci_N >> ui_i);
      ui_ord = (ui_ord >> 1);
      for (ui_j = 0; ui_j < ui_ord; ui_j = ui_j + 2) {
        a_ka[ui_step + (ui_j >> 1)] = (a_buff[ui_j] - a_buff[ui_j + 1]) * 0.707106781;
        a_buff[ui_j >> 1] = (a_buff[ui_j] + a_buff[ui_j + 1]) * 0.707106781;
      }
    }
    ui_ord = (ui_ord >> 1);
    ui_step = ui_step + (cuci_N >> ui_i);
    for (ui_j = 0; ui_j < ui_ord; ui_j = ui_j + 2) {
      a_ka[ui_step + (ui_j >> 1)] = (a_buff[ui_j] - a_buff[ui_j + 1]) * 0.707106781;
    }
    ui_i++;
    ui_step = ui_step + (cuci_N >> ui_i);
    for (ui_j = 0; ui_j < ui_ord; ui_j = ui_j + 2) {
      a_ka[ui_step + (ui_j >> 1)] = (a_buff[ui_j] + a_buff[ui_j + 1]) * 0.707106781;
    }
    break;
  }
  return;
}
```