user: 下面的汇编指令对应的C源代码是什么：

```asm
<qmf_decomp>:
  endbr64
  push   %r15
  mov    %rsi,%rax
  mov    %rdx,%rsi
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %r8d,%ebp
  push   %rbx
  mov    0x40(%rsp),%rdx
  mov    %rdi,%rbx
  mov    %rcx,%rdi
  movslq %r9d,%rcx
  mov    %rdx,%r8
  mov    %rcx,%r15
  shl    $0x2,%rcx
  neg    %r8
  mov    %r15d,%r12d
  and    $0x3,%r8d
  sar    %r12d
  lea    (%rdx,%r8,1),%r14
  add    %rcx,%r8
  lea    (%rdx,%r8,1),%r11
  mov    %r11,%rdx
  neg    %rdx
  and    $0x3,%edx
  add    %rdx,%r11
  lea    -0x4(%rcx),%rdx
  lea    (%r11,%rdx,1),%r8
  test   %r15d,%r15d
  jle    L111
  lea    -0x1(%r15),%r9d
  add    %r14,%rdx
  mov    %r9d,-0x4(%rsp)
  lea    0x4(%rax,%r9,4),%r9
  nopl   (%rax)
L90:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  sub    $0x4,%rdx
  movss  %xmm0,0x4(%rdx)
  cmp    %r9,%rax
  jne    L90
  mov    -0x4(%rsp),%edx
  test   %edx,%edx
  jle    L20
L39:
  mov    0x38(%rsp),%rax
  lea    -0x2(%r15),%r10d
  mov    %r10,%r9
  lea    0x4(%r11,%r10,4),%r10
  lea    -0x8(%rax,%rcx,1),%rdx
  mov    %r11,%rax
  nopl   0x0(%rax,%rax,1)
L82:
  movss  (%rdx),%xmm0
  add    $0x4,%rax
  sub    $0x4,%rdx
  movss  %xmm0,-0x4(%rax)
  cmp    %r10,%rax
  jne    L82
  movslq %ebp,%r13
  test   %ebp,%ebp
  jle    L101
L119:
  movslq %ebp,%r13
  add    %r11,%rcx
  xor    %eax,%eax
  nopl   0x0(%rax)
L79:
  movss  (%rbx,%rax,4),%xmm0
  movss  %xmm0,-0x4(%rcx,%rax,4)
  add    $0x1,%rax
  cmp    %r13,%rax
  jne    L79
  lea    -0x1(%r12),%eax
  xor    %r9d,%r9d
  shr    %eax
  lea    0xc(%r14,%rax,8),%r10
  nopl   0x0(%rax,%rax,1)
L74:
  movl   $0x0,(%rsi)
  movl   $0x0,(%rdi)
  test   %r12d,%r12d
  jle    L44
  lea    0x4(%r14),%rax
  mov    %r8,%rcx
  mov    %r11,%rdx
  nopl   0x0(%rax,%rax,1)
L1:
  movss  (%rdx),%xmm0
  addss  (%rcx),%xmm0
  add    $0x8,%rax
  add    $0x8,%rdx
  mulss  -0xc(%rax),%xmm0
  sub    $0x8,%rcx
  addss  (%rsi),%xmm0
  movss  %xmm0,(%rsi)
  movss  -0x8(%rdx),%xmm0
  subss  0x8(%rcx),%xmm0
  mulss  -0xc(%rax),%xmm0
  movss  (%rdi),%xmm1
  subss  %xmm0,%xmm1
  movss  %xmm1,(%rdi)
  movss  -0x4(%rdx),%xmm0
  addss  0x4(%rcx),%xmm0
  mulss  -0x8(%rax),%xmm0
  addss  (%rsi),%xmm0
  movss  %xmm0,(%rsi)
  movss  -0x4(%rdx),%xmm0
  subss  0x4(%rcx),%xmm0
  mulss  -0x8(%rax),%xmm0
  addss  (%rdi),%xmm0
  movss  %xmm0,(%rdi)
  cmp    %rax,%r10
  jne    L1
L44:
  add    $0x2,%r9d
  add    $0x4,%rsi
  add    $0x4,%rdi
  add    $0x8,%r11
  add    $0x8,%r8
  cmp    %r9d,%ebp
  jg     L74
  mov    -0x4(%rsp),%eax
  test   %eax,%eax
  jle    L63
  lea    -0x2(%r15),%r9d
L101:
  mov    0x38(%rsp),%rax
  lea    -0x4(%rbx,%r13,4),%rdx
  lea    0x4(%rax,%r9,4),%rcx
  nopw   0x0(%rax,%rax,1)
L112:
  movss  (%rdx),%xmm0
  add    $0x4,%rax
  sub    $0x4,%rdx
  movss  %xmm0,-0x4(%rax)
  cmp    %rax,%rcx
  jne    L112
L63:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L111:
  lea    -0x1(%r15),%eax
  mov    %eax,-0x4(%rsp)
  mov    -0x4(%rsp),%edx
  test   %edx,%edx
  jg     L39
L20:
  test   %ebp,%ebp
  jg     L119
  jmp    L63
```

assistant: ```c
void qmf_decomp(float *xx, float *aa, float *y1, float *y2, int N, int M, float *mem, char *stack) {
  int i, j, k, M2;
  float *a;
  float *x;
  float *x2;
  a = ((((stack)) += ((sizeof(float)) - (int)((stack))) & ((sizeof(float)) - 1)), (stack) += ((M) * sizeof(float)), (float *)((stack) - ((M) * sizeof(float))));
  x = ((((stack)) += ((sizeof(float)) - (int)((stack))) & ((sizeof(float)) - 1)), (stack) += ((N + M - 1) * sizeof(float)), (float *)((stack) - ((N + M - 1) * sizeof(float))));
  x2 = x + M - 1;
  M2 = M >> 1;
  for (i = 0; i < M; i++)
    a[M - i - 1] = aa[i];
  for (i = 0; i < M - 1; i++)
    x[i] = mem[M - i - 2];
  for (i = 0; i < N; i++)
    x[i + M - 1] = xx[i];
  for (i = 0, k = 0; i < N; i += 2, k++) {
    y1[k] = 0;
    y2[k] = 0;
    for (j = 0; j < M2; j++) {
      y1[k] += a[j] * (x[i + j] + x2[i - j]);
      y2[k] -= a[j] * (x[i + j] - x2[i - j]);
      j++;
      y1[k] += a[j] * (x[i + j] + x2[i - j]);
      y2[k] += a[j] * (x[i + j] - x2[i - j]);
    }
  }
  for (i = 0; i < M - 1; i++)
    mem[i] = xx[N - i - 1];
}
```