user: 请将以下的汇编代码转换成C语言代码:

```asm
<dwt_decode_97>:
  endbr64
  push   %r15
  push   %r14
  mov    %rdi,%r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %edx,%ebp
  push   %rbx
  mov    %esi,%ebx
  sub    $0x18,%rsp
  test   %ecx,%ecx
  jne    L144
  test   %esi,%esi
  jg     L230
  cmp    $0x1,%edx
  jle    L419
L230:
  test   %ebp,%ebp
  jle    L716
  lea    -0x1(%rbp),%eax
  mov    %r14,%r12
  lea    0x8(%r14,%rax,8),%r13
  nopl   0x0(%rax)
L223:
  mov    (%r12),%edi
  mov    $0x275e,%esi
  xor    %eax,%eax
  add    $0x8,%r12
  call   <fix_mul@plt>
  mov    %eax,-0x8(%r12)
  cmp    %r12,%r13
  jne    L223
  test   %ebx,%ebx
  jle    L385
L351:
  lea    -0x1(%rbx),%eax
  lea    0x4(%r14),%r13
  mov    %eax,0x4(%rsp)
  lea    0xc(%r14,%rax,8),%r12
  xchg   %ax,%ax
L643:
  mov    0x0(%r13),%edi
  mov    $0x3406,%esi
  xor    %eax,%eax
  add    $0x8,%r13
  call   <fix_mul@plt>
  mov    %eax,-0x8(%r13)
  cmp    %r13,%r12
  jne    L643
  test   %ebp,%ebp
  jle    L320
L559:
  mov    0x4(%rsp),%eax
  mov    %ebp,%r13d
  xor    %r15d,%r15d
  lea    0x1(%rax,%rax,1),%eax
  cltq
  lea    (%r14,%rax,4),%r12
  jmp    L62
  nopl   0x0(%rax,%rax,1)
L92:
  cmp    %r15d,%ebx
  jge    L605
  mov    (%r12),%edi
  mov    %edi,%eax
L305:
  add    %eax,%edi
  mov    $0xe31,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  sub    %eax,(%r14,%r15,8)
  add    $0x1,%r15
  cmp    %r15,%r13
  je     L279
L62:
  mov    %r15d,%edx
  test   %r15,%r15
  jne    L92
  mov    0x4(%r14),%eax
  cmp    %edx,%ebx
  jle    L180
L359:
  lea    0x1(%r15,%r15,1),%edx
  mov    (%r14,%rdx,4),%edi
  jmp    L305
  nopl   (%rax)
L144:
  test   %edx,%edx
  jg     L576
  cmp    $0x1,%esi
  jg     L595
L419:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L595:
  test   %edx,%edx
  jle    L434
L576:
  lea    -0x1(%rbp),%eax
  lea    0x4(%r14),%r12
  lea    0xc(%r14,%rax,8),%r13
  nopl   0x0(%rax)
L475:
  mov    (%r12),%edi
  mov    $0x275e,%esi
  xor    %eax,%eax
  add    $0x8,%r12
  call   <fix_mul@plt>
  mov    %eax,-0x8(%r12)
  cmp    %r13,%r12
  jne    L475
  test   %ebx,%ebx
  jle    L19
L650:
  lea    -0x1(%rbx),%eax
  mov    %r14,%r13
  mov    %eax,0x4(%rsp)
  lea    0x8(%r14,%rax,8),%r12
  nopl   (%rax)
L804:
  mov    0x0(%r13),%edi
  mov    $0x3406,%esi
  xor    %eax,%eax
  add    $0x8,%r13
  call   <fix_mul@plt>
  mov    %eax,-0x8(%r13)
  cmp    %r12,%r13
  jne    L804
  test   %ebp,%ebp
  jle    L418
L731:
  mov    0x4(%rsp),%eax
  lea    0x1(%rbp),%r13d
  mov    $0x1,%r15d
  add    %eax,%eax
  cltq
  lea    (%r14,%rax,4),%r12
  jmp    L846
  nopl   0x0(%rax)
L400:
  mov    (%r12),%edi
  cmp    %r15d,%ebx
  jg     L178
L638:
  mov    (%r12),%eax
L157:
  add    %eax,%edi
  mov    $0xe31,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  sub    %eax,-0x4(%r14,%r15,8)
  add    $0x1,%r15
  cmp    %r13,%r15
  je     L418
L846:
  lea    -0x1(%r15),%edx
  mov    %r15d,%eax
  cmp    %ebx,%edx
  jge    L400
  mov    -0x8(%r14,%r15,8),%edi
  cmp    %r15d,%ebx
  jle    L638
L178:
  add    %eax,%eax
  cltq
  mov    (%r14,%rax,4),%eax
  jmp    L157
  nopl   0x0(%rax,%rax,1)
L418:
  test   %ebx,%ebx
  jle    L52
  lea    -0x1(%rbp),%eax
  movslq %ebx,%r13
  xor    %r15d,%r15d
  mov    %eax,0x8(%rsp)
  lea    -0x1(%rbp,%rbp,1),%eax
  cltq
  lea    (%r14,%rax,4),%r12
  jmp    L612
  nopl   0x0(%rax)
L529:
  mov    (%r12),%eax
  test   %r15d,%r15d
  je     L148
  cmp    %ebp,%r15d
  jle    L283
  mov    %eax,%edi
L849:
  add    %eax,%edi
  mov    $0x1c41,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  sub    %eax,(%r14,%r15,8)
  add    $0x1,%r15
  cmp    %r13,%r15
  je     L362
L612:
  cmp    %ebp,%r15d
  jge    L529
  lea    0x1(%r15,%r15,1),%eax
  mov    (%r14,%rax,4),%eax
  test   %r15d,%r15d
  je     L148
L283:
  mov    -0x4(%r14,%r15,8),%edi
  jmp    L849
  nopl   0x0(%rax)
L279:
  test   %ebx,%ebx
  jle    L558
L320:
  lea    -0x1(%rbp),%eax
  lea    0x1(%rbx),%r13d
  mov    $0x1,%r12d
  mov    %eax,0x8(%rsp)
  add    %eax,%eax
  cltq
  mov    %r13d,0xc(%rsp)
  lea    (%r14,%rax,4),%r15
  jmp    L431
  nopl   0x0(%rax,%rax,1)
L623:
  mov    (%r15),%edi
  cmp    %r12d,%ebp
  jg     L799
L88:
  mov    (%r15),%eax
L696:
  add    %eax,%edi
  mov    $0x1c41,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  sub    %eax,-0x4(%r14,%r12,8)
  add    $0x1,%r12
  cmp    %r12,%r13
  je     L260
L431:
  lea    -0x1(%r12),%ecx
  mov    %r12d,%eax
  cmp    %ecx,%ebp
  jle    L623
  mov    -0x8(%r14,%r12,8),%edi
  cmp    %r12d,%ebp
  jle    L88
L799:
  add    %eax,%eax
  cltq
  mov    (%r14,%rax,4),%eax
  jmp    L696
  nopw   0x0(%rax,%rax,1)
L148:
  mov    0x4(%r14),%edi
  jmp    L849
  nopl   0x0(%rax)
L605:
  mov    -0x4(%r14,%r15,8),%eax
  cmp    %edx,%ebx
  jg     L359
L180:
  mov    (%r12),%edi
  jmp    L305
  cs nopw 0x0(%rax,%rax,1)
L260:
  test   %ebp,%ebp
  jle    L327
L606:
  mov    0x4(%rsp),%eax
  movslq %ebp,%r13
  xor    %r12d,%r12d
  lea    0x1(%rax,%rax,1),%eax
  cltq
  lea    (%r14,%rax,4),%r15
  jmp    L721
  xchg   %ax,%ax
L520:
  cmp    %r12d,%ebx
  jge    L534
  mov    (%r15),%eax
  mov    %eax,%edi
L837:
  add    %eax,%edi
  mov    $0x1b2,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  add    %eax,(%r14,%r12,8)
  add    $0x1,%r12
  cmp    %r13,%r12
  je     L249
L721:
  mov    %r12d,%eax
  test   %r12,%r12
  jne    L520
  mov    0x4(%r14),%edi
  cmp    %eax,%ebx
  jle    L705
L438:
  lea    0x1(%r12,%r12,1),%eax
  mov    (%r14,%rax,4),%eax
  jmp    L837
  nopl   0x0(%rax,%rax,1)
L249:
  lea    -0x1(%rbp),%eax
  mov    %eax,0x8(%rsp)
  lea    0x1(%rbx),%eax
  mov    %eax,0xc(%rsp)
  test   %ebx,%ebx
  jle    L419
L327:
  mov    0x8(%rsp),%r13d
  mov    $0x1,%ebx
  add    %r13d,%r13d
  movslq %r13d,%r13
  lea    (%r14,%r13,4),%r12
  mov    0xc(%rsp),%r13d
  jmp    L433
  nopl   0x0(%rax)
L758:
  mov    (%r12),%edi
  cmp    %ebx,%ebp
  jg     L204
L265:
  mov    (%r12),%eax
L498:
  add    %eax,%edi
  mov    $0x32c2,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  add    %eax,-0x4(%r14,%rbx,8)
  add    $0x1,%rbx
  cmp    %r13,%rbx
  je     L419
L433:
  lea    -0x1(%rbx),%edx
  mov    %ebx,%eax
  cmp    %ebp,%edx
  jge    L758
  mov    -0x8(%r14,%rbx,8),%edi
  cmp    %ebx,%ebp
  jle    L265
L204:
  add    %eax,%eax
  cltq
  mov    (%r14,%rax,4),%eax
  jmp    L498
L534:
  mov    -0x4(%r14,%r12,8),%edi
  cmp    %eax,%ebx
  jg     L438
L705:
  mov    (%r15),%eax
  jmp    L837
  nopl   (%rax)
L362:
  test   %ebp,%ebp
  jle    L352
L796:
  mov    0x4(%rsp),%r12d
  lea    0x1(%rbp),%r13d
  add    %r12d,%r12d
  movslq %r12d,%r12
  lea    (%r14,%r12,4),%r15
  mov    $0x1,%r12d
  jmp    L794
  nopl   0x0(%rax,%rax,1)
L51:
  mov    (%r15),%edi
  cmp    %r12d,%ebx
  jg     L720
L710:
  mov    (%r15),%eax
L146:
  add    %eax,%edi
  mov    $0x1b2,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  add    %eax,-0x4(%r14,%r12,8)
  add    $0x1,%r12
  cmp    %r13,%r12
  je     L33
L794:
  lea    -0x1(%r12),%edx
  mov    %r12d,%eax
  cmp    %ebx,%edx
  jge    L51
  mov    -0x8(%r14,%r12,8),%edi
  cmp    %r12d,%ebx
  jle    L710
L720:
  add    %eax,%eax
  cltq
  mov    (%r14,%rax,4),%eax
  jmp    L146
  nopw   0x0(%rax,%rax,1)
L33:
  lea    -0x1(%rbp),%eax
  mov    %eax,0x8(%rsp)
  test   %ebx,%ebx
  jle    L419
L352:
  mov    0x8(%rsp),%eax
  mov    %ebx,%ebx
  xor    %r12d,%r12d
  lea    0x1(%rax,%rax,1),%eax
  cltq
  lea    (%r14,%rax,4),%r13
  jmp    L484
  nopl   0x0(%rax)
L291:
  mov    0x0(%r13),%eax
  test   %r12d,%r12d
  je     L560
  cmp    %ebp,%r12d
  jle    L428
  mov    %eax,%edi
L234:
  add    %eax,%edi
  mov    $0x32c2,%esi
  xor    %eax,%eax
  call   <fix_mul@plt>
  add    %eax,(%r14,%r12,8)
  add    $0x1,%r12
  cmp    %rbx,%r12
  je     L419
L484:
  cmp    %ebp,%r12d
  jge    L291
  lea    0x1(%r12,%r12,1),%eax
  mov    (%r14,%rax,4),%eax
  test   %r12d,%r12d
  je     L560
L428:
  mov    -0x4(%r14,%r12,8),%edi
  jmp    L234
  nopl   0x0(%rax)
L560:
  mov    0x4(%r14),%edi
  jmp    L234
  xchg   %ax,%ax
L434:
  test   %esi,%esi
  jg     L650
  nopl   0x0(%rax,%rax,1)
L52:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x4(%rsp)
  test   %ebp,%ebp
  jg     L796
  jmp    L419
  nopl   0x0(%rax)
L716:
  test   %ebx,%ebx
  jg     L351
L558:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x4(%rsp)
  test   %ebp,%ebp
  jg     L606
  jmp    L419
  nopl   0x0(%rax)
L385:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x4(%rsp)
  jmp    L559
  nopl   0x0(%rax)
L19:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x4(%rsp)
  jmp    L731
```

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);
    }
  }
}
```