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

```asm
<dwt_decode_97>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,%rbx
  mov    %esi,%r12d
  mov    %edx,%ebp
  test   %ecx,%ecx
  jne    L773
  test   %esi,%esi
  jg     L228
  cmp    $0x1,%edx
  jg     L228
L262:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L228:
  test   %ebp,%ebp
  jle    L104
  mov    %rbx,%r13
  lea    -0x1(%rbp),%eax
  lea    0x8(%rbx,%rax,8),%r14
L759:
  mov    $0x275e,%esi
  mov    0x0(%r13),%edi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,0x0(%r13)
  add    $0x8,%r13
  cmp    %r14,%r13
  jne    L759
  test   %r12d,%r12d
  jle    L684
L467:
  lea    0x4(%rbx),%r13
  lea    -0x1(%r12),%eax
  lea    0xc(%rbx,%rax,8),%r14
L175:
  mov    $0x3406,%esi
  mov    0x0(%r13),%edi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,0x0(%r13)
  add    $0x8,%r13
  cmp    %r14,%r13
  jne    L175
L579:
  test   %ebp,%ebp
  jle    L667
L684:
  lea    -0x1(%r12,%r12,1),%eax
  cltq
  lea    (%rbx,%rax,4),%r15
  mov    $0x0,%r14d
  mov    $0x0,%r13d
  jmp    L406
L104:
  test   %r12d,%r12d
  jg     L467
  jmp    L579
L743:
  mov    0x4(%rbx),%edi
  jns    L119
  add    %edi,%edi
  mov    $0xe31,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,%edx
  movslq %r14d,%rax
  sub    %edx,(%rbx,%rax,4)
  jmp    L870
L455:
  lea    -0x1(%r14),%eax
  cltq
  mov    (%rbx,%rax,4),%edi
L119:
  cmp    %edx,%r12d
  jle    L772
  lea    0x1(%r14),%eax
  cltq
  mov    (%rbx,%rax,4),%eax
L973:
  add    %eax,%edi
  mov    $0xe31,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,%edx
  movslq %r14d,%rax
  sub    %edx,(%rbx,%rax,4)
  lea    0x1(%r13),%eax
  cmp    %eax,%ebp
  jle    L309
L870:
  add    $0x1,%r13d
  add    $0x2,%r14d
L406:
  mov    %r13d,%edx
  test   %r13d,%r13d
  jle    L743
  cmp    %r13d,%r12d
  jge    L455
  mov    (%r15),%edi
L772:
  mov    (%r15),%eax
  jmp    L973
L130:
  mov    (%rbx),%eax
  cmp    $0xffffffff,%edx
  jge    L322
  lea    (%rax,%rax,1),%edi
  mov    $0x1c41,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,%edx
  movslq %r14d,%rax
  sub    %edx,(%rbx,%rax,4)
  jmp    L129
L871:
  lea    -0x1(%r14),%eax
  cltq
  mov    (%rbx,%rax,4),%eax
  jmp    L322
L219:
  lea    0x0(%r13,%r13,1),%edx
  movslq %edx,%rdx
  mov    (%rbx,%rdx,4),%edi
L744:
  add    %eax,%edi
  mov    $0x1c41,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,%edx
  movslq %r14d,%rax
  sub    %edx,(%rbx,%rax,4)
  cmp    0xc(%rsp),%r12d
  jle    L925
L129:
  add    $0x1,%r13d
  add    $0x2,%r14d
L577:
  mov    %r13d,%edx
  sub    $0x1,%edx
  js     L130
  cmp    %edx,%ebp
  jg     L871
  mov    (%r15),%eax
L322:
  mov    %r13d,0xc(%rsp)
  cmp    %r13d,%ebp
  jg     L219
  mov    (%r15),%edi
  jmp    L744
L925:
  test   %ebp,%ebp
  jle    L612
L62:
  lea    -0x1(%r12,%r12,1),%eax
  cltq
  lea    (%rbx,%rax,4),%r15
  mov    $0x0,%r14d
  mov    $0x0,%r13d
  jmp    L586
L25:
  mov    0x4(%rbx),%edi
  jns    L439
  add    %edi,%edi
  mov    $0x1b2,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,%edx
  movslq %r14d,%rax
  add    %edx,(%rbx,%rax,4)
  jmp    L706
L803:
  lea    -0x1(%r14),%eax
  cltq
  mov    (%rbx,%rax,4),%edi
L439:
  cmp    %r12d,%edx
  jge    L479
  lea    0x1(%r14),%eax
  cltq
  mov    (%rbx,%rax,4),%eax
L821:
  add    %eax,%edi
  mov    $0x1b2,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,%edx
  movslq %r14d,%rax
  add    %edx,(%rbx,%rax,4)
  lea    0x1(%r13),%eax
  cmp    %ebp,%eax
  jge    L612
L706:
  add    $0x1,%r13d
  add    $0x2,%r14d
L586:
  mov    %r13d,%edx
  test   %r13d,%r13d
  jle    L25
  cmp    %r12d,%r13d
  jle    L803
  mov    (%r15),%edi
L479:
  mov    (%r15),%eax
  jmp    L821
L458:
  mov    (%rbx),%eax
  cmp    $0xffffffff,%edx
  jge    L469
  lea    (%rax,%rax,1),%edi
  mov    $0x32c2,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,%edx
  movslq %r14d,%rax
  add    %edx,(%rbx,%rax,4)
  jmp    L857
L327:
  lea    -0x1(%r14),%eax
  cltq
  mov    (%rbx,%rax,4),%eax
  jmp    L469
L650:
  lea    0x0(%r13,%r13,1),%edx
  movslq %edx,%rdx
  mov    (%rbx,%rdx,4),%edi
L966:
  add    %eax,%edi
  mov    $0x32c2,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,%edx
  movslq %r14d,%rax
  add    %edx,(%rbx,%rax,4)
  cmp    %r12d,0xc(%rsp)
  jge    L262
L857:
  add    $0x1,%r13d
  add    $0x2,%r14d
L768:
  mov    %r13d,%edx
  sub    $0x1,%edx
  js     L458
  cmp    %ebp,%edx
  jl     L327
  mov    (%r15),%eax
L469:
  mov    %r13d,0xc(%rsp)
  cmp    %ebp,%r13d
  jl     L650
  mov    (%r15),%edi
  jmp    L966
L773:
  test   %edx,%edx
  jg     L887
  cmp    $0x1,%esi
  jle    L262
L887:
  test   %ebp,%ebp
  jle    L276
  lea    0x4(%rbx),%r13
  lea    -0x1(%rbp),%eax
  lea    0xc(%rbx,%rax,8),%r14
L91:
  mov    $0x275e,%esi
  mov    0x0(%r13),%edi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,0x0(%r13)
  add    $0x8,%r13
  cmp    %r14,%r13
  jne    L91
  test   %r12d,%r12d
  jle    L375
L428:
  mov    %rbx,%r13
  lea    -0x1(%r12),%eax
  lea    0x8(%rbx,%rax,8),%r14
L27:
  mov    $0x3406,%esi
  mov    0x0(%r13),%edi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,0x0(%r13)
  add    $0x8,%r13
  cmp    %r14,%r13
  jne    L27
  test   %ebp,%ebp
  jle    L723
L819:
  lea    -0x2(%r12,%r12,1),%eax
  cltq
  lea    (%rbx,%rax,4),%r15
  mov    $0x1,%r14d
  mov    $0x1,%r13d
  jmp    L399
L375:
  test   %ebp,%ebp
  jg     L819
  jmp    L526
L267:
  mov    (%rbx),%eax
  cmp    $0xffffffff,%edx
  jge    L55
  lea    (%rax,%rax,1),%edi
  mov    $0xe31,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,%edx
  movslq %r14d,%rax
  sub    %edx,(%rbx,%rax,4)
  jmp    L447
L846:
  lea    -0x1(%r14),%eax
  cltq
  mov    (%rbx,%rax,4),%eax
  jmp    L55
L275:
  lea    0x0(%r13,%r13,1),%edx
  movslq %edx,%rdx
  mov    (%rbx,%rdx,4),%edi
L908:
  add    %eax,%edi
  mov    $0xe31,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,%edx
  movslq %r14d,%rax
  sub    %edx,(%rbx,%rax,4)
  cmp    0xc(%rsp),%ebp
  jle    L526
L447:
  add    $0x1,%r13d
  add    $0x2,%r14d
L399:
  mov    %r13d,%edx
  sub    $0x1,%edx
  js     L267
  cmp    %edx,%r12d
  jg     L846
  mov    (%r15),%eax
L55:
  mov    %r13d,0xc(%rsp)
  cmp    %r13d,%r12d
  jg     L275
  mov    (%r15),%edi
  jmp    L908
L338:
  mov    0x4(%rbx),%edx
L37:
  mov    0x4(%rbx),%edi
  jmp    L572
L441:
  lea    0x1(%r13,%r13,1),%edx
  movslq %edx,%rdx
  mov    (%rbx,%rdx,4),%edx
  jmp    L350
L713:
  lea    -0x1(%r13,%r13,1),%eax
  cltq
  mov    (%rbx,%rax,4),%edi
L572:
  add    %edx,%edi
  mov    $0x1c41,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  sub    %eax,(%rbx,%r13,8)
  add    $0x1,%r13
  cmp    %r14,%r13
  je     L419
L50:
  mov    %r13d,%eax
  test   %r13d,%r13d
  js     L338
  cmp    %r13d,%ebp
  jg     L441
  mov    (%r15),%edx
L350:
  test   %eax,%eax
  je     L37
  cmp    %eax,%ebp
  jge    L713
  mov    (%r15),%edi
  jmp    L572
L740:
  mov    (%rbx),%eax
  cmp    $0xffffffff,%edx
  jge    L159
  lea    (%rax,%rax,1),%edi
  mov    $0x1b2,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,%edx
  movslq %r14d,%rax
  add    %edx,(%rbx,%rax,4)
  jmp    L209
L184:
  lea    -0x1(%r14),%eax
  cltq
  mov    (%rbx,%rax,4),%eax
  jmp    L159
L383:
  lea    0x0(%r13,%r13,1),%edx
  movslq %edx,%rdx
  mov    (%rbx,%rdx,4),%edi
L608:
  add    %eax,%edi
  mov    $0x1b2,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  mov    %eax,%edx
  movslq %r14d,%rax
  add    %edx,(%rbx,%rax,4)
  cmp    0xc(%rsp),%ebp
  jle    L224
L209:
  add    $0x1,%r13d
  add    $0x2,%r14d
L304:
  mov    %r13d,%edx
  sub    $0x1,%edx
  js     L740
  cmp    %edx,%r12d
  jg     L184
  mov    (%r15),%eax
L159:
  mov    %r13d,0xc(%rsp)
  cmp    %r13d,%r12d
  jg     L383
  mov    (%r15),%edi
  jmp    L608
L224:
  test   %r12d,%r12d
  jle    L262
L263:
  lea    -0x1(%rbp,%rbp,1),%eax
  cltq
  lea    (%rbx,%rax,4),%r14
  mov    %r12d,%r12d
  mov    $0x0,%r13d
  jmp    L672
L4:
  mov    0x4(%rbx),%edx
L359:
  mov    0x4(%rbx),%edi
  jmp    L165
L413:
  lea    0x1(%r13,%r13,1),%edx
  movslq %edx,%rdx
  mov    (%rbx,%rdx,4),%edx
  jmp    L905
L831:
  lea    -0x1(%r13,%r13,1),%eax
  cltq
  mov    (%rbx,%rax,4),%edi
L165:
  add    %edx,%edi
  mov    $0x32c2,%esi
  mov    $0x0,%eax
  call   <fix_mul@plt>
  add    %eax,(%rbx,%r13,8)
  add    $0x1,%r13
  cmp    %r12,%r13
  je     L262
L672:
  mov    %r13d,%eax
  test   %r13d,%r13d
  js     L4
  cmp    %r13d,%ebp
  jg     L413
  mov    (%r14),%edx
L905:
  test   %eax,%eax
  je     L359
  cmp    %eax,%ebp
  jge    L831
  mov    (%r14),%edi
  jmp    L165
L667:
  test   %r12d,%r12d
  jg     L813
L612:
  test   %r12d,%r12d
  jle    L262
  lea    -0x2(%rbp,%rbp,1),%eax
  cltq
  lea    (%rbx,%rax,4),%r15
  mov    $0x1,%r14d
  mov    $0x1,%r13d
  jmp    L768
L309:
  test   %r12d,%r12d
  jle    L62
L813:
  lea    -0x2(%rbp,%rbp,1),%eax
  cltq
  lea    (%rbx,%rax,4),%r15
  mov    $0x1,%r14d
  mov    $0x1,%r13d
  jmp    L577
L243:
  test   %ebp,%ebp
  jg     L690
  jmp    L262
L419:
  test   %ebp,%ebp
  jle    L263
L690:
  lea    -0x2(%r12,%r12,1),%eax
  cltq
  lea    (%rbx,%rax,4),%r15
  mov    $0x1,%r14d
  mov    $0x1,%r13d
  jmp    L304
L276:
  test   %r12d,%r12d
  jg     L428
L526:
  test   %r12d,%r12d
  jle    L243
L723:
  lea    -0x1(%rbp,%rbp,1),%eax
  cltq
  lea    (%rbx,%rax,4),%r15
  mov    %r12d,%r14d
  mov    $0x0,%r13d
  jmp    L50
```

assistant: ```c
void dwt_decode_97(int *a, int dn, int sn, int cas) {
  int i;
  if (!cas) {
    if ((dn > 0) || (sn > 1)) {
      for (i = 0; i < sn; i++)
        a[(i)*2] = fix_mul(a[(i)*2], 10078);
      for (i = 0; i < dn; i++)
        a[(1 + (i)*2)] = fix_mul(a[(1 + (i)*2)], 13318);
      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(((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)])), 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])), 12994);
    }
  } else {
    if ((sn > 0) || (dn > 1)) {
      for (i = 0; i < sn; i++)
        a[(1 + (i)*2)] = fix_mul(a[(1 + (i)*2)], 10078);
      for (i = 0; i < dn; i++)
        a[(i)*2] = fix_mul(a[(i)*2], 13318);
      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(((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])), 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)])), 12994);
    }
  }
}
```