user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<daub4>:
  endbr64
  lea    -0x4000(%rsp),%r11
L1:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L1
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x4008(%rsp)
  xor    %eax,%eax
  cmp    $0x3,%rsi
  jbe    L0
  pxor   %xmm7,%xmm7
  pxor   %xmm2,%xmm2
  mov    %rsi,%r9
  mov    %rdi,%rcx
  movsd  D14(%rip),%xmm4
  cvtss2sd (%rdi),%xmm2
  cvtss2sd -0x4(%rdi,%rsi,4),%xmm7
  movapd %xmm2,%xmm8
  movapd %xmm7,%xmm9
  lea    -0x4(%rdi),%r10
  shr    %r9
  lea    0x0(,%rsi,4),%r11
  mulsd  %xmm4,%xmm9
  movapd %xmm2,%xmm12
  mulsd  %xmm4,%xmm8
  test   %edx,%edx
  js     L48
  mov    %rsp,%rdx
  movsd  D64(%rip),%xmm5
  lea    -0x3(%rsi),%r8
  movsd  D39(%rip),%xmm3
  movsd  D68(%rip),%xmm6
  lea    (%rdx,%r9,4),%rdi
  mov    $0x1,%eax
  cs nopw 0x0(%rax,%rax,1)
L78:
  movapd %xmm2,%xmm0
  pxor   %xmm11,%xmm11
  pxor   %xmm2,%xmm2
  cvtss2sd (%rcx,%rax,4),%xmm11
  movapd %xmm0,%xmm1
  movapd %xmm11,%xmm13
  add    $0x2,%rax
  mulsd  %xmm4,%xmm13
  cvtss2sd -0x4(%rcx,%rax,4),%xmm2
  pxor   %xmm10,%xmm10
  mulsd  %xmm5,%xmm1
  cvtss2sd (%rcx,%rax,4),%xmm10
  mulsd  %xmm6,%xmm0
  mulsd  %xmm3,%xmm11
  addsd  %xmm13,%xmm1
  movapd %xmm2,%xmm13
  mulsd  %xmm3,%xmm13
  subsd  %xmm11,%xmm0
  addsd  %xmm13,%xmm1
  movapd %xmm10,%xmm13
  mulsd  %xmm6,%xmm13
  mulsd  %xmm5,%xmm10
  addsd  %xmm13,%xmm1
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,-0x2(%rdx,%rax,2)
  movapd %xmm2,%xmm1
  mulsd  %xmm4,%xmm1
  addsd  %xmm1,%xmm0
  subsd  %xmm10,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x2(%rdi,%rax,2)
  cmp    %r8,%rax
  jbe    L78
  pxor   %xmm0,%xmm0
  pxor   %xmm2,%xmm2
  lea    -0x4(%rsi),%rax
  cvtss2sd -0x4(%r10,%r11,1),%xmm0
  movapd %xmm0,%xmm1
  cvtss2sd 0x4(%rcx),%xmm2
  shr    %rax
  mulsd  %xmm5,%xmm1
  add    $0x2,%rax
  mulsd  %xmm3,%xmm12
  mulsd  %xmm6,%xmm0
  mulsd  %xmm7,%xmm3
  addsd  %xmm9,%xmm1
  movss  0x4(%rsp),%xmm9
  addsd  %xmm1,%xmm12
  movapd %xmm2,%xmm1
  subsd  %xmm3,%xmm0
  mulsd  %xmm6,%xmm1
  mulsd  %xmm5,%xmm2
  addsd  %xmm8,%xmm0
  addsd  %xmm1,%xmm12
  subsd  %xmm2,%xmm0
  cvtsd2ss %xmm12,%xmm12
  movss  %xmm12,(%rsp,%rax,4)
  add    %r9,%rax
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rsp,%rax,4)
L22:
  mov    $0x1,%eax
  jmp    L43
  nop
L56:
  movss  (%rsp,%rdx,4),%xmm9
  mov    %rdx,%rax
L43:
  movss  %xmm9,-0x4(%rcx,%rax,4)
  lea    0x1(%rax),%rdx
  cmp    %rax,%rsi
  jne    L56
L0:
  mov    0x4008(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  add    $0x4018,%rsp
  ret
  nopl   0x0(%rax,%rax,1)
L48:
  pxor   %xmm0,%xmm0
  movsd  D39(%rip),%xmm3
  movsd  D64(%rip),%xmm5
  pxor   %xmm10,%xmm10
  cvtss2sd (%r10,%r9,4),%xmm0
  movapd %xmm0,%xmm1
  movsd  D68(%rip),%xmm6
  cvtss2sd (%rcx,%r9,4),%xmm10
  mulsd  %xmm3,%xmm1
  lea    0x10(%rsp),%rdx
  lea    -0x4(%rcx,%r9,8),%r8
  mulsd  %xmm6,%xmm0
  lea    0x0(,%r9,4),%rdi
  mulsd  %xmm5,%xmm7
  lea    (%rcx,%rdi,1),%rax
  neg    %rdi
  addsd  %xmm1,%xmm9
  movapd %xmm2,%xmm1
  mulsd  %xmm5,%xmm1
  subsd  %xmm7,%xmm0
  addsd  %xmm8,%xmm0
  addsd  %xmm1,%xmm9
  movapd %xmm10,%xmm1
  mulsd  %xmm6,%xmm1
  addsd  %xmm1,%xmm9
  movapd %xmm10,%xmm1
  mulsd  %xmm3,%xmm1
  cvtsd2ss %xmm9,%xmm9
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x8(%rsp)
  jmp    L4
  nopl   (%rax)
L16:
  pxor   %xmm10,%xmm10
  cvtss2sd (%rax),%xmm10
L4:
  movapd %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  pxor   %xmm7,%xmm7
  add    $0x4,%rax
  movapd %xmm0,%xmm1
  movapd %xmm10,%xmm8
  cvtss2sd (%rax),%xmm7
  add    $0x8,%rdx
  mulsd  %xmm4,%xmm8
  cvtss2sd (%rax,%rdi,1),%xmm2
  mulsd  %xmm3,%xmm1
  mulsd  %xmm6,%xmm0
  mulsd  %xmm5,%xmm10
  addsd  %xmm8,%xmm1
  movapd %xmm2,%xmm8
  mulsd  %xmm5,%xmm8
  subsd  %xmm10,%xmm0
  addsd  %xmm8,%xmm1
  movapd %xmm7,%xmm8
  mulsd  %xmm6,%xmm8
  mulsd  %xmm3,%xmm7
  addsd  %xmm8,%xmm1
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,-0xc(%rdx)
  movapd %xmm2,%xmm1
  mulsd  %xmm4,%xmm1
  addsd  %xmm1,%xmm0
  subsd  %xmm7,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x8(%rdx)
  cmp    %r8,%rax
  jne    L16
  jmp    L22
L7:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D14
datatype: f64
name: unpack_data
arguments: data_label: D64
datatype: f64
name: unpack_data
arguments: data_label: D39
datatype: f64
name: unpack_data
arguments: data_label: D68
datatype: byte[8]

tool: D14: 0.8365163037378079

tool: D64: 0.4829629131445341

tool: D39: 0.2241438680420134

tool: {"D68": [0x91,0x06,0x93,0xc1,0x7d,0x90,0xc0,0xbf]}

assistant: ```c
void daub4(float b[], unsigned long n, int isign) {
  float wksp[4097];
  float *a = b - 1;
  unsigned long nh, nh1, i, j;
  if (n < 4)
    return;
  nh1 = (nh = n >> 1) + 1;
  if (isign >= 0) {
    for (i = 1, j = 1; j <= n - 3; j += 2, i++) {
      wksp[i] = 0.4829629131445341 * a[j] + 0.8365163037378079 * a[j + 1] + 0.2241438680420134 * a[j + 2] + -0.1294095225512604 * a[j + 3];
      wksp[i + nh] = -0.1294095225512604 * a[j] - 0.2241438680420134 * a[j + 1] + 0.8365163037378079 * a[j + 2] - 0.4829629131445341 * a[j + 3];
    }
    wksp[i] = 0.4829629131445341 * a[n - 1] + 0.8365163037378079 * a[n] + 0.2241438680420134 * a[1] + -0.1294095225512604 * a[2];
    wksp[i + nh] = -0.1294095225512604 * a[n - 1] - 0.2241438680420134 * a[n] + 0.8365163037378079 * a[1] - 0.4829629131445341 * a[2];
  } else {
    wksp[1] = 0.2241438680420134 * a[nh] + 0.8365163037378079 * a[n] + 0.4829629131445341 * a[1] + -0.1294095225512604 * a[nh1];
    wksp[2] = -0.1294095225512604 * a[nh] - 0.4829629131445341 * a[n] + 0.8365163037378079 * a[1] - 0.2241438680420134 * a[nh1];
    for (i = 1, j = 3; i < nh; i++) {
      wksp[j++] = 0.2241438680420134 * a[i] + 0.8365163037378079 * a[i + nh] + 0.4829629131445341 * a[i + 1] + -0.1294095225512604 * a[i + nh1];
      wksp[j++] = -0.1294095225512604 * a[i] - 0.4829629131445341 * a[i + nh] + 0.8365163037378079 * a[i + 1] - 0.2241438680420134 * a[i + nh1];
    }
  }
  for (i = 1; i <= n; i++) {
    a[i] = wksp[i];
  }
}
```