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

```asm
<dwt_encode_97>:
  endbr64
  push   %r15
  push   %r14
  mov    %rdi,%r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %esi,%ebp
  push   %rbx
  mov    %edx,%ebx
  sub    $0x18,%rsp
  test   %ecx,%ecx
  jne    L682
  test   %esi,%esi
  jg     L560
  cmp    $0x1,%edx
  jle    L789
  test   %esi,%esi
  jle    L164
L560:
  lea    -0x1(%rbx),%eax
  lea    0x1(%rbp),%r12d
  mov    $0x1,%r13d
  mov    %eax,0x4(%rsp)
  add    %eax,%eax
  cltq
  mov    %r12d,0xc(%rsp)
  lea    (%r14,%rax,4),%r15
  jmp    L436
  cs nopw 0x0(%rax,%rax,1)
L209:
  mov    (%r15),%edi
  cmp    %r13d,%ebx
  jg     L757
L639:
  mov    (%r15),%eax
L484:
  add    %eax,%edi
  mov    $0x32c1,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  sub    %eax,-0x4(%r14,%r13,8)
  add    $0x1,%r13
  cmp    %r12,%r13
  je     L21
L436:
  lea    -0x1(%r13),%ecx
  mov    %r13d,%eax
  cmp    %ecx,%ebx
  jle    L209
  mov    -0x8(%r14,%r13,8),%edi
  cmp    %r13d,%ebx
  jle    L639
L757:
  add    %eax,%eax
  cltq
  mov    (%r14,%rax,4),%eax
  jmp    L484
  nopw   0x0(%rax,%rax,1)
L682:
  test   %edx,%edx
  jg     L399
  cmp    $0x1,%esi
  jg     L399
L789:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L399:
  test   %ebp,%ebp
  jle    L642
  lea    -0x1(%rbx),%eax
  movslq %ebp,%r13
  xor    %r15d,%r15d
  mov    %eax,0x4(%rsp)
  lea    -0x1(%rbx,%rbx,1),%eax
  cltq
  lea    (%r14,%rax,4),%r12
  jmp    L447
  nopl   0x0(%rax)
L286:
  mov    (%r12),%eax
  test   %r15d,%r15d
  je     L193
  cmp    %r15d,%ebx
  jge    L389
  mov    %eax,%edi
L677:
  add    %eax,%edi
  mov    $0x32c1,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  sub    %eax,(%r14,%r15,8)
  add    $0x1,%r15
  cmp    %r13,%r15
  je     L82
L447:
  cmp    %r15d,%ebx
  jle    L286
  lea    0x1(%r15,%r15,1),%eax
  mov    (%r14,%rax,4),%eax
  test   %r15d,%r15d
  je     L193
L389:
  mov    -0x4(%r14,%r15,8),%edi
  jmp    L677
  nopl   0x0(%rax)
L193:
  mov    0x4(%r14),%edi
  jmp    L677
  xchg   %ax,%ax
L21:
  test   %ebx,%ebx
  jle    L32
L133:
  lea    -0x1(%rbp),%eax
  movslq %ebx,%r12
  xor    %r15d,%r15d
  mov    %eax,0x8(%rsp)
  lea    -0x1(%rbp,%rbp,1),%eax
  cltq
  lea    (%r14,%rax,4),%r13
  jmp    L728
  nopl   0x0(%rax)
L174:
  cmp    %r15d,%ebp
  jge    L362
  mov    0x0(%r13),%edi
  mov    %edi,%eax
L498:
  add    %eax,%edi
  mov    $0x1b2,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  sub    %eax,(%r14,%r15,8)
  add    $0x1,%r15
  cmp    %r15,%r12
  je     L525
L728:
  mov    %r15d,%edx
  test   %r15,%r15
  jne    L174
  mov    0x4(%r14),%eax
  cmp    %edx,%ebp
  jle    L278
L190:
  lea    0x1(%r15,%r15,1),%edx
  mov    (%r14,%rdx,4),%edi
  jmp    L498
  nopl   0x0(%rax)
L525:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x4(%rsp)
  lea    0x1(%rbp),%eax
  mov    %eax,0xc(%rsp)
  test   %ebp,%ebp
  jle    L437
L32:
  mov    0x4(%rsp),%r13d
  mov    0xc(%rsp),%r12d
  add    %r13d,%r13d
  movslq %r13d,%r13
  lea    (%r14,%r13,4),%r15
  mov    $0x1,%r13d
  jmp    L456
  nopw   0x0(%rax,%rax,1)
L408:
  mov    (%r15),%edi
  cmp    %r13d,%ebx
  jg     L551
L355:
  mov    (%r15),%eax
L435:
  add    %eax,%edi
  mov    $0x1c41,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  add    %eax,-0x4(%r14,%r13,8)
  add    $0x1,%r13
  cmp    %r13,%r12
  je     L329
L456:
  lea    -0x1(%r13),%edx
  mov    %r13d,%eax
  cmp    %edx,%ebx
  jle    L408
  mov    -0x8(%r14,%r13,8),%edi
  cmp    %r13d,%ebx
  jle    L355
L551:
  add    %eax,%eax
  cltq
  mov    (%r14,%rax,4),%eax
  jmp    L435
  nopw   0x0(%rax,%rax,1)
L362:
  mov    -0x4(%r14,%r15,8),%eax
  cmp    %edx,%ebp
  jg     L190
L278:
  mov    0x0(%r13),%edi
  jmp    L498
  cs nopw 0x0(%rax,%rax,1)
L82:
  test   %ebx,%ebx
  jle    L244
L292:
  lea    -0x2(%rbp,%rbp,1),%eax
  lea    0x1(%rbx),%r13d
  mov    $0x1,%r12d
  cltq
  lea    (%r14,%rax,4),%r15
  jmp    L298
  nopw   0x0(%rax,%rax,1)
L790:
  mov    (%r15),%edi
  cmp    %r12d,%ebp
  jg     L500
L516:
  mov    (%r15),%eax
L196:
  add    %eax,%edi
  mov    $0x1b2,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  sub    %eax,-0x4(%r14,%r12,8)
  add    $0x1,%r12
  cmp    %r13,%r12
  je     L42
L298:
  lea    -0x1(%r12),%edx
  mov    %r12d,%eax
  cmp    %edx,%ebp
  jle    L790
  mov    -0x8(%r14,%r12,8),%edi
  cmp    %r12d,%ebp
  jle    L516
L500:
  add    %eax,%eax
  cltq
  mov    (%r14,%rax,4),%eax
  jmp    L196
  nopw   0x0(%rax,%rax,1)
L42:
  lea    -0x1(%rbx),%eax
  movslq %ebp,%r13
  mov    %eax,0x4(%rsp)
  test   %ebp,%ebp
  jle    L548
L244:
  mov    0x4(%rsp),%eax
  xor    %r12d,%r12d
  lea    0x1(%rax,%rax,1),%eax
  cltq
  lea    (%r14,%rax,4),%r15
  jmp    L413
  nopl   0x0(%rax)
L96:
  mov    (%r15),%eax
  test   %r12d,%r12d
  je     L731
  cmp    %r12d,%ebx
  jge    L698
  mov    %eax,%edi
L166:
  add    %eax,%edi
  mov    $0x1c41,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  add    %eax,(%r14,%r12,8)
  add    $0x1,%r12
  cmp    %r12,%r13
  je     L548
L413:
  cmp    %r12d,%ebx
  jle    L96
  lea    0x1(%r12,%r12,1),%eax
  mov    (%r14,%rax,4),%eax
  test   %r12d,%r12d
  je     L731
L698:
  mov    -0x4(%r14,%r12,8),%edi
  jmp    L166
  nopl   0x0(%rax)
L731:
  mov    0x4(%r14),%edi
  jmp    L166
  cs nopw 0x0(%rax,%rax,1)
L548:
  test   %ebx,%ebx
  jle    L323
  lea    -0x2(%rbp,%rbp,1),%eax
  lea    0x1(%rbx),%r13d
  mov    $0x1,%r12d
  cltq
  lea    (%r14,%rax,4),%r15
  jmp    L816
  xchg   %ax,%ax
L330:
  mov    (%r15),%edi
  cmp    %r12d,%ebp
  jg     L135
L290:
  mov    (%r15),%eax
L527:
  add    %eax,%edi
  mov    $0xe31,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  add    %eax,-0x4(%r14,%r12,8)
  add    $0x1,%r12
  cmp    %r12,%r13
  je     L44
L816:
  lea    -0x1(%r12),%edx
  mov    %r12d,%eax
  cmp    %edx,%ebp
  jle    L330
  mov    -0x8(%r14,%r12,8),%edi
  cmp    %r12d,%ebp
  jle    L290
L135:
  add    %eax,%eax
  cltq
  mov    (%r14,%rax,4),%eax
  jmp    L527
  nopw   0x0(%rax,%rax,1)
L44:
  test   %ebp,%ebp
  jle    L770
L450:
  xor    %r12d,%r12d
  nopw   0x0(%rax,%rax,1)
L594:
  mov    (%r14,%r12,8),%edi
  mov    $0x13ae,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  mov    %eax,(%r14,%r12,8)
  add    $0x1,%r12
  cmp    %r12d,%ebp
  jg     L594
  test   %ebx,%ebx
  jle    L789
L770:
  xor    %ebp,%ebp
  nopw   0x0(%rax,%rax,1)
L505:
  mov    0x4(%r14,%rbp,8),%edi
  mov    $0x1a03,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  mov    %eax,0x4(%r14,%rbp,8)
  add    $0x1,%rbp
  cmp    %ebp,%ebx
  jg     L505
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L329:
  lea    -0x1(%rbp),%eax
  mov    %eax,0x8(%rsp)
  test   %ebx,%ebx
  jle    L766
L437:
  mov    0x8(%rsp),%eax
  mov    %ebx,%r12d
  xor    %r15d,%r15d
  lea    0x1(%rax,%rax,1),%eax
  cltq
  lea    (%r14,%rax,4),%r13
  jmp    L619
  nopl   (%rax)
L515:
  cmp    %r15d,%ebp
  jge    L232
  mov    0x0(%r13),%eax
  mov    %eax,%edi
L120:
  add    %eax,%edi
  mov    $0xe31,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  add    %eax,(%r14,%r15,8)
  add    $0x1,%r15
  cmp    %r15,%r12
  je     L142
L619:
  mov    %r15d,%eax
  test   %r15,%r15
  jne    L515
  mov    0x4(%r14),%edi
  cmp    %eax,%ebp
  jle    L130
L550:
  lea    0x1(%r15,%r15,1),%eax
  mov    (%r14,%rax,4),%eax
  jmp    L120
  nopl   0x0(%rax)
L232:
  mov    -0x4(%r14,%r15,8),%edi
  cmp    %eax,%ebp
  jg     L550
L130:
  mov    0x0(%r13),%eax
  jmp    L120
  nop
L142:
  test   %ebp,%ebp
  jle    L222
L30:
  mov    0x8(%rsp),%eax
  lea    0x4(%r14),%rbp
  lea    0xc(%r14,%rax,8),%r12
  nopl   0x0(%rax)
L727:
  mov    0x0(%rbp),%edi
  mov    $0x13ae,%esi
  xor    %eax,%eax
  add    $0x8,%rbp
  call   <fix_mul@plt>
  mov    %eax,-0x8(%rbp)
  cmp    %r12,%rbp
  jne    L727
  test   %ebx,%ebx
  jle    L789
L222:
  lea    -0x1(%rbx),%eax
  lea    0x8(%r14,%rax,8),%rbx
  nopl   0x0(%rax,%rax,1)
L649:
  mov    (%r14),%edi
  mov    $0x1a03,%esi
  xor    %eax,%eax
  add    $0x8,%r14
  call   <fix_mul@plt>
  mov    %eax,-0x8(%r14)
  cmp    %rbx,%r14
  jne    L649
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L164:
  test   %edx,%edx
  jg     L133
L766:
  lea    -0x1(%rbp),%eax
  mov    %eax,0x8(%rsp)
  test   %ebp,%ebp
  jg     L30
  jmp    L789
  nopl   0x0(%rax)
L642:
  test   %ebx,%ebx
  jg     L292
L323:
  test   %ebp,%ebp
  jg     L450
  jmp    L789
```

assistant: ```c
void dwt_encode_97(int *a, int dn, int sn, int cas) {
  int i;
  if (!cas) {
    if ((dn > 0) || (sn > 1)) {
      for (i = 0; i < dn; i++)
        a[(1 + (i)*2)] -= fix_mul(((i) < 0 ? a[(0) * 2] : ((i) >= sn ? a[(sn - 1) * 2] : a[(i)*2])) + ((i + 1) < 0 ? a[(0) * 2] : ((i + 1) >= sn ? a[(sn - 1) * 2] : a[(i + 1) * 2])), 12993);
      for (i = 0; i < sn; i++)
        a[(i)*2] -= fix_mul(((i - 1) < 0 ? a[(1 + (0) * 2)] : ((i - 1) >= dn ? a[(1 + (dn - 1) * 2)] : a[(1 + (i - 1) * 2)])) + ((i) < 0 ? a[(1 + (0) * 2)] : ((i) >= dn ? a[(1 + (dn - 1) * 2)] : a[(1 + (i)*2)])), 434);
      for (i = 0; i < dn; i++)
        a[(1 + (i)*2)] += fix_mul(((i) < 0 ? a[(0) * 2] : ((i) >= sn ? a[(sn - 1) * 2] : a[(i)*2])) + ((i + 1) < 0 ? a[(0) * 2] : ((i + 1) >= sn ? a[(sn - 1) * 2] : a[(i + 1) * 2])), 7233);
      for (i = 0; i < sn; i++)
        a[(i)*2] += fix_mul(((i - 1) < 0 ? a[(1 + (0) * 2)] : ((i - 1) >= dn ? a[(1 + (dn - 1) * 2)] : a[(1 + (i - 1) * 2)])) + ((i) < 0 ? a[(1 + (0) * 2)] : ((i) >= dn ? a[(1 + (dn - 1) * 2)] : a[(1 + (i)*2)])), 3633);
      for (i = 0; i < dn; i++)
        a[(1 + (i)*2)] = fix_mul(a[(1 + (i)*2)], 5038);
      for (i = 0; i < sn; i++)
        a[(i)*2] = fix_mul(a[(i)*2], 6659);
    }
  } else {
    if ((sn > 0) || (dn > 1)) {
      for (i = 0; i < dn; i++)
        a[(i)*2] -= fix_mul(((i) < 0 ? a[(1 + (0) * 2)] : ((i) >= sn ? a[(1 + (sn - 1) * 2)] : a[(1 + (i)*2)])) + ((i - 1) < 0 ? a[(1 + (0) * 2)] : ((i - 1) >= sn ? a[(1 + (sn - 1) * 2)] : a[(1 + (i - 1) * 2)])), 12993);
      for (i = 0; i < sn; i++)
        a[(1 + (i)*2)] -= fix_mul(((i) < 0 ? a[(0) * 2] : ((i) >= dn ? a[(dn - 1) * 2] : a[(i)*2])) + ((i + 1) < 0 ? a[(0) * 2] : ((i + 1) >= dn ? a[(dn - 1) * 2] : a[(i + 1) * 2])), 434);
      for (i = 0; i < dn; i++)
        a[(i)*2] += fix_mul(((i) < 0 ? a[(1 + (0) * 2)] : ((i) >= sn ? a[(1 + (sn - 1) * 2)] : a[(1 + (i)*2)])) + ((i - 1) < 0 ? a[(1 + (0) * 2)] : ((i - 1) >= sn ? a[(1 + (sn - 1) * 2)] : a[(1 + (i - 1) * 2)])), 7233);
      for (i = 0; i < sn; i++)
        a[(1 + (i)*2)] += fix_mul(((i) < 0 ? a[(0) * 2] : ((i) >= dn ? a[(dn - 1) * 2] : a[(i)*2])) + ((i + 1) < 0 ? a[(0) * 2] : ((i + 1) >= dn ? a[(dn - 1) * 2] : a[(i + 1) * 2])), 3633);
      for (i = 0; i < dn; i++)
        a[(i)*2] = fix_mul(a[(i)*2], 5038);
      for (i = 0; i < sn; i++)
        a[(1 + (i)*2)] = fix_mul(a[(1 + (i)*2)], 6659);
    }
  }
}
```