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

```asm
<dwt_decode_53>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %edx,-0x20(%rbp)
  mov    %ecx,-0x24(%rbp)
  cmpl   $0x0,-0x24(%rbp)
  jne    L296
  cmpl   $0x0,-0x1c(%rbp)
  jg     L240
  cmpl   $0x1,-0x20(%rbp)
  jle    L228
L240:
  movl   $0x0,-0x4(%rbp)
  jmp    L258
L35:
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  cmpl   $0x0,-0x4(%rbp)
  jg     L280
  mov    -0x18(%rbp),%rax
  mov    0x4(%rax),%edx
  jmp    L442
L280:
  mov    -0x4(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jle    L260
  mov    -0x1c(%rbp),%eax
  sub    $0x1,%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  jmp    L442
L260:
  mov    -0x4(%rbp),%eax
  sub    $0x1,%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
L442:
  cmpl   $0x0,-0x4(%rbp)
  jns    L337
  mov    -0x18(%rbp),%rax
  mov    0x4(%rax),%eax
  jmp    L135
L337:
  mov    -0x4(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L307
  mov    -0x1c(%rbp),%eax
  sub    $0x1,%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%eax
  jmp    L135
L307:
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%eax
L135:
  add    %edx,%eax
  add    $0x2,%eax
  sar    $0x2,%eax
  mov    %eax,%esi
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  sub    %esi,%ecx
  mov    %ecx,%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x4(%rbp)
L258:
  mov    -0x4(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jl     L35
  movl   $0x0,-0x4(%rbp)
  jmp    L154
L66:
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  cmpl   $0x0,-0x4(%rbp)
  jns    L459
  mov    -0x18(%rbp),%rax
  mov    (%rax),%edx
  jmp    L401
L459:
  mov    -0x4(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jl     L399
  mov    -0x20(%rbp),%eax
  sub    $0x1,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  jmp    L401
L399:
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
L401:
  cmpl   $0xffffffff,-0x4(%rbp)
  jge    L421
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  jmp    L124
L421:
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x20(%rbp)
  jg     L326
  mov    -0x20(%rbp),%eax
  sub    $0x1,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%eax
  jmp    L124
L326:
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%eax
L124:
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x4(%rbp)
L154:
  mov    -0x4(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L66
  jmp    L228
L296:
  cmpl   $0x0,-0x20(%rbp)
  jne    L317
  cmpl   $0x1,-0x1c(%rbp)
  jne    L317
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L228
L317:
  movl   $0x0,-0x4(%rbp)
  jmp    L170
L342:
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  cmpl   $0x0,-0x4(%rbp)
  jns    L171
  mov    -0x18(%rbp),%rax
  mov    (%rax),%edx
  jmp    L75
L171:
  mov    -0x4(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L184
  mov    -0x1c(%rbp),%eax
  sub    $0x1,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  jmp    L75
L184:
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
L75:
  cmpl   $0xffffffff,-0x4(%rbp)
  jge    L193
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  jmp    L409
L193:
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x1c(%rbp)
  jg     L211
  mov    -0x1c(%rbp),%eax
  sub    $0x1,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%eax
  jmp    L409
L211:
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%eax
L409:
  add    %edx,%eax
  add    $0x2,%eax
  sar    $0x2,%eax
  mov    %eax,%esi
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  sub    %esi,%ecx
  mov    %ecx,%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x4(%rbp)
L170:
  mov    -0x4(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jl     L342
  movl   $0x0,-0x4(%rbp)
  jmp    L117
L316:
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  cmpl   $0x0,-0x4(%rbp)
  jns    L285
  mov    -0x18(%rbp),%rax
  mov    0x4(%rax),%edx
  jmp    L299
L285:
  mov    -0x4(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jl     L445
  mov    -0x20(%rbp),%eax
  sub    $0x1,%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  jmp    L299
L445:
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
L299:
  cmpl   $0x0,-0x4(%rbp)
  jg     L111
  mov    -0x18(%rbp),%rax
  mov    0x4(%rax),%eax
  jmp    L141
L111:
  mov    -0x4(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jle    L104
  mov    -0x20(%rbp),%eax
  sub    $0x1,%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%eax
  jmp    L141
L104:
  mov    -0x4(%rbp),%eax
  sub    $0x1,%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%eax
L141:
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x4(%rbp)
L117:
  mov    -0x4(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L316
L228:
  nop
  pop    %rbp
  ret
```

assistant: ```c
void dwt_decode_53(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] -= (((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)])) + 2) >> 2;
      for (i = 0; i < dn; i++)
        a[(1 + (i)*2)] += (((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]))) >> 1;
    }
  } else {
    if (!sn && dn == 1)
      a[(0) * 2] /= 2;
    else {
      for (i = 0; i < sn; i++)
        a[(1 + (i)*2)] -= (((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])) + 2) >> 2;
      for (i = 0; i < dn; i++)
        a[(i)*2] += (((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)]))) >> 1;
    }
  }
}
```