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

```asm
<conv_direct>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %esi,%r11d
  mov    %rdx,%r9
  mov    %ecx,%r10d
  lea    -0x1(%rsi,%rcx,1),%r14d
  cmp    %ecx,%esi
  jge    L73
  test   %esi,%esi
  jle    L107
  mov    %r8,%rbp
  mov    %rdi,%r12
  lea    -0x1(%rsi),%r13d
  mov    $0x0,%ebx
  jmp    L53
L73:
  test   %ecx,%ecx
  jle    L160
  mov    %r8,%rbp
  mov    %rdx,%r12
  lea    -0x1(%rcx),%r13d
  mov    $0x0,%ebx
  jmp    L102
L217:
  mov    %rax,%rbx
L102:
  mov    %rbp,%rcx
  movq   $0x0,0x0(%rbp)
  test   %ebx,%ebx
  js     L173
  mov    %rdi,%rdx
  lea    -0x8(%r12),%rsi
  lea    0x0(,%rbx,8),%rax
  sub    %rax,%rsi
  mov    %r12,%rax
L191:
  movsd  (%rdx),%xmm0
  mulsd  (%rax),%xmm0
  addsd  (%rcx),%xmm0
  movsd  %xmm0,(%rcx)
  add    $0x8,%rdx
  sub    $0x8,%rax
  cmp    %rsi,%rax
  jne    L191
L173:
  lea    0x1(%rbx),%rax
  add    $0x8,%rbp
  add    $0x8,%r12
  cmp    %r13,%rbx
  jne    L217
L160:
  cmp    %r14d,%r10d
  jge    L43
  lea    0x1(%r10),%ebx
  movslq %ebx,%rbx
  movslq %r10d,%r10
  lea    (%r8,%r10,8),%r8
  lea    -0x1(%r11),%ebp
  mov    $0x0,%esi
  jmp    L63
L37:
  pxor   %xmm1,%xmm1
  cvtsi2sd %r11d,%xmm1
L231:
  pxor   %xmm0,%xmm0
  cvtsi2sd %esi,%xmm0
  comisd %xmm0,%xmm1
  jbe    L216
  add    $0x2,%eax
  cltq
  movslq %esi,%r12
  mov    %r10,%rdx
  sub    %r12,%rdx
  lea    (%r9,%rdx,8),%rdx
L181:
  movsd  -0x8(%rdi,%rax,8),%xmm0
  mulsd  (%rdx),%xmm0
  addsd  (%rcx),%xmm0
  movsd  %xmm0,(%rcx)
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  add    $0x1,%rax
  sub    $0x8,%rdx
  comisd %xmm0,%xmm1
  ja     L181
L216:
  add    $0x1,%rbx
  add    $0x1,%r10
  add    $0x8,%r8
  cmp    %ebp,%esi
  je     L43
L63:
  mov    %r8,%rcx
  movq   $0x0,(%r8)
  mov    %esi,%eax
  add    $0x1,%esi
  cmp    %ebx,%r11d
  jle    L37
  pxor   %xmm1,%xmm1
  cvtsi2sd %ebx,%xmm1
  jmp    L231
L236:
  mov    %rax,%rbx
L53:
  mov    %rbp,%rcx
  movq   $0x0,0x0(%rbp)
  test   %ebx,%ebx
  js     L133
  mov    %r9,%rdx
  lea    -0x8(%r12),%rsi
  lea    0x0(,%rbx,8),%rax
  sub    %rax,%rsi
  mov    %r12,%rax
L78:
  movsd  (%rdx),%xmm0
  mulsd  (%rax),%xmm0
  addsd  (%rcx),%xmm0
  movsd  %xmm0,(%rcx)
  add    $0x8,%rdx
  sub    $0x8,%rax
  cmp    %rsi,%rax
  jne    L78
L133:
  lea    0x1(%rbx),%rax
  add    $0x8,%rbp
  add    $0x8,%r12
  cmp    %r13,%rbx
  jne    L236
L107:
  cmp    %r14d,%r11d
  jge    L43
  lea    0x1(%r11),%ebx
  movslq %ebx,%rbx
  movslq %r11d,%r11
  lea    (%r8,%r11,8),%r8
  lea    -0x1(%r10),%ebp
  mov    $0x0,%esi
  jmp    L161
L228:
  pxor   %xmm1,%xmm1
  cvtsi2sd %r10d,%xmm1
L164:
  pxor   %xmm0,%xmm0
  cvtsi2sd %esi,%xmm0
  comisd %xmm0,%xmm1
  jbe    L56
  add    $0x2,%eax
  cltq
  movslq %esi,%r12
  mov    %r11,%rdx
  sub    %r12,%rdx
  lea    (%rdi,%rdx,8),%rdx
L225:
  movsd  -0x8(%r9,%rax,8),%xmm0
  mulsd  (%rdx),%xmm0
  addsd  (%rcx),%xmm0
  movsd  %xmm0,(%rcx)
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  add    $0x1,%rax
  sub    $0x8,%rdx
  comisd %xmm0,%xmm1
  ja     L225
L56:
  add    $0x1,%rbx
  add    $0x1,%r11
  add    $0x8,%r8
  cmp    %ebp,%esi
  je     L43
L161:
  mov    %r8,%rcx
  movq   $0x0,(%r8)
  mov    %esi,%eax
  add    $0x1,%esi
  cmp    %ebx,%r10d
  jle    L228
  pxor   %xmm1,%xmm1
  cvtsi2sd %ebx,%xmm1
  jmp    L164
L43:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
```

assistant: ```c
void conv_direct(double *inp1, int N, double *inp2, int L, double *oup) {
  int M, k, m, i;
  double t1, tmin;
  M = N + L - 1;
  i = 0;
  if (N >= L) {
    for (k = 0; k < L; k++) {
      oup[k] = 0.0;
      for (m = 0; m <= k; m++) {
        oup[k] += inp1[m] * inp2[k - m];
      }
    }
    for (k = L; k < M; k++) {
      oup[k] = 0.0;
      i++;
      t1 = L + i;
      tmin = (((t1) < (N)) ? (t1) : (N));
      for (m = i; m < tmin; m++) {
        oup[k] += inp1[m] * inp2[k - m];
      }
    }
  } else {
    for (k = 0; k < N; k++) {
      oup[k] = 0.0;
      for (m = 0; m <= k; m++) {
        oup[k] += inp2[m] * inp1[k - m];
      }
    }
    for (k = N; k < M; k++) {
      oup[k] = 0.0;
      i++;
      t1 = N + i;
      tmin = (((t1) < (L)) ? (t1) : (L));
      for (m = i; m < tmin; m++) {
        oup[k] += inp2[m] * inp1[k - m];
      }
    }
  }
}
```