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

```asm
<dwt_interleave>:
  endbr64
  push   %r14
  mov    %edx,%r14d
  push   %r13
  push   %r12
  push   %rbp
  mov    %esi,%ebp
  lea    0x1(%rbp),%eax
  push   %rbx
  mov    %ebp,%r13d
  mov    %rdi,%rbx
  mov    %eax,%r12d
  lea    0x0(,%rbp,4),%edi
  shr    $0x1f,%r13d
  shr    $0x1f,%r12d
  add    %ebp,%r13d
  add    %eax,%r12d
  sar    %r13d
  call   <malloc@plt>
  sar    %r12d
  mov    %rax,%rdi
  test   %ebp,%ebp
  jle    L253
  cmp    $0x1,%r14d
  jne    L134
  mov    %r12d,%eax
  mov    %rdi,%rdx
  lea    -0x4(%rdi,%rax,8),%rcx
  lea    (%rbx,%rax,4),%rax
  cmp    %rcx,%rbx
  setae  %cl
  cmp    %rax,%rdi
  setae  %al
  or     %al,%cl
  je     L75
  cmp    $0xe,%ebp
  jle    L75
  mov    %r12d,%eax
  mov    %rbx,%rdx
  shr    $0x2,%eax
  sub    $0x1,%eax
  shl    $0x4,%rax
  lea    0x10(%rbx,%rax,1),%rcx
  mov    %rdi,%rax
  cs nopw 0x0(%rax,%rax,1)
L223:
  movdqu (%rdx),%xmm0
  add    $0x10,%rdx
  add    $0x20,%rax
  pshufd $0x55,%xmm0,%xmm1
  movd   %xmm0,-0x20(%rax)
  movd   %xmm1,-0x18(%rax)
  movdqa %xmm0,%xmm1
  punpckhdq %xmm0,%xmm1
  pshufd $0xff,%xmm0,%xmm0
  movd   %xmm1,-0x10(%rax)
  movd   %xmm0,-0x8(%rax)
  cmp    %rcx,%rdx
  jne    L223
  mov    %r12d,%eax
  and    $0xfffffffc,%eax
  test   $0x3,%r12b
  je     L222
  movslq %eax,%rcx
  lea    (%rax,%rax,1),%edx
  lea    0x0(,%rcx,4),%r8
  mov    (%rbx,%rcx,4),%ecx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rsi
  mov    %ecx,(%rdi,%rdx,4)
  lea    0x1(%rax),%edx
  cmp    %edx,%r12d
  jle    L222
  mov    0x4(%rbx,%r8,1),%edx
  add    $0x2,%eax
  mov    %edx,0x8(%rdi,%rsi,1)
  cmp    %eax,%r12d
  jle    L222
  mov    0x8(%rbx,%r8,1),%eax
  mov    %eax,0x10(%rdi,%rsi,1)
L222:
  cmp    $0x1,%ebp
  je     L193
  mov    %r13d,%ecx
  movslq %r12d,%r9
  lea    0x4(%rdi),%rsi
  mov    $0x4,%r11d
  shl    $0x2,%r9
  cmp    $0x1,%ebp
  mov    %rsi,%r8
  mov    %rsi,%rax
  lea    -0x4(,%rcx,8),%r10
  lea    (%rbx,%r9,1),%rdx
  cmovle %r11,%r10
  lea    0x4(%rdi,%r10,1),%r10
  cmp    %r10,%rdx
  setae  %r10b
  shl    $0x2,%rcx
  cmp    $0x1,%ebp
  cmovle %r11,%rcx
  add    %r9,%rcx
  add    %rbx,%rcx
  cmp    %rcx,%rsi
  setae  %cl
  or     %r10b,%cl
  je     L264
  cmp    $0xf,%ebp
  jle    L264
  cmp    $0x1,%ebp
  mov    $0x1,%r8d
  cmovg  %r13d,%r8d
  mov    %r8d,%ecx
  shr    $0x2,%ecx
  sub    $0x1,%ecx
  shl    $0x4,%rcx
  lea    0x10(%rdx,%rcx,1),%rcx
  xchg   %ax,%ax
L141:
  movdqu (%rdx),%xmm0
  add    $0x10,%rdx
  add    $0x20,%rax
  pshufd $0x55,%xmm0,%xmm1
  movd   %xmm0,-0x20(%rax)
  movd   %xmm1,-0x18(%rax)
  movdqa %xmm0,%xmm1
  punpckhdq %xmm0,%xmm1
  pshufd $0xff,%xmm0,%xmm0
  movd   %xmm1,-0x10(%rax)
  movd   %xmm0,-0x8(%rax)
  cmp    %rcx,%rdx
  jne    L141
  mov    %r8d,%eax
  and    $0xfffffffc,%eax
  and    $0x3,%r8d
  je     L35
  lea    (%r12,%rax,1),%ecx
  lea    (%rax,%rax,1),%edx
  movslq %ecx,%rcx
  mov    (%rbx,%rcx,4),%r8d
  lea    0x1(%rdx),%ecx
  movslq %ecx,%rcx
  mov    %r8d,(%rdi,%rcx,4)
  lea    0x1(%rax),%ecx
  cmp    %ecx,%r13d
  jle    L35
  add    %r12d,%ecx
  add    $0x2,%eax
  movslq %ecx,%rcx
  mov    (%rbx,%rcx,4),%r8d
  lea    0x3(%rdx),%ecx
  movslq %ecx,%rcx
  mov    %r8d,(%rdi,%rcx,4)
  cmp    %eax,%r13d
  jle    L35
  add    %r12d,%eax
  add    $0x5,%edx
  cltq
  movslq %edx,%rdx
  mov    (%rbx,%rax,4),%eax
  mov    %eax,(%rdi,%rdx,4)
L35:
  mov    %rbx,%rax
  sub    %rsi,%rax
  cmp    $0x8,%rax
  jbe    L116
  lea    -0x1(%rbp),%eax
  cmp    $0x2,%eax
  jbe    L116
  mov    %ebp,%edx
  mov    %rbx,%rcx
  mov    %rdi,%rax
  shr    $0x2,%edx
  sub    %rdi,%rcx
  shl    $0x4,%rdx
  add    %rdi,%rdx
  nopl   0x0(%rax)
L22:
  movdqu (%rax),%xmm2
  movups %xmm2,(%rcx,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L22
  mov    %ebp,%eax
  and    $0xfffffffc,%eax
  test   $0x3,%bpl
  je     L253
  mov    %eax,%ecx
  mov    (%rdi,%rcx,4),%esi
  lea    0x0(,%rcx,4),%rdx
  mov    %esi,(%rbx,%rcx,4)
  lea    0x1(%rax),%ecx
  cmp    %ecx,%ebp
  jle    L253
  mov    0x4(%rdi,%rdx,1),%ecx
  add    $0x2,%eax
  mov    %ecx,0x4(%rbx,%rdx,1)
  cmp    %eax,%ebp
  jle    L253
  mov    0x8(%rdi,%rdx,1),%eax
  mov    %eax,0x8(%rbx,%rdx,1)
L253:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  jmp    1060 <free@plt>
  nop
L134:
  movslq %r14d,%r8
  mov    %rax,%rdx
  mov    %rbx,%rcx
  xor    %eax,%eax
  lea    0x0(,%r8,4),%r9
  nopl   0x0(%rax,%rax,1)
L19:
  mov    (%rcx),%esi
  add    $0x1,%eax
  add    %r9,%rcx
  add    $0x8,%rdx
  mov    %esi,-0x8(%rdx)
  cmp    %eax,%r12d
  jg     L19
  cmp    $0x1,%ebp
  je     L210
  imul   %r12d,%r14d
  lea    0x0(,%r8,4),%r9
  xor    %eax,%eax
  lea    0x4(%rdi),%rdx
  movslq %r14d,%r14
  lea    (%rbx,%r14,4),%rcx
  xchg   %ax,%ax
L180:
  mov    (%rcx),%esi
  add    $0x1,%eax
  add    %r9,%rcx
  add    $0x8,%rdx
  mov    %esi,-0x8(%rdx)
  cmp    %eax,%r13d
  jg     L180
L250:
  mov    %rdi,%rax
  shl    $0x2,%r8
  lea    (%rdi,%rbp,4),%rcx
  nop
L0:
  mov    (%rax),%edx
  add    $0x4,%rax
  mov    %edx,(%rbx)
  add    %r8,%rbx
  cmp    %rcx,%rax
  jne    L0
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  jmp    1060 <free@plt>
  nopl   (%rax)
L264:
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L110:
  mov    (%rdx,%rax,4),%ecx
  add    $0x1,%rax
  add    $0x8,%r8
  mov    %ecx,-0x8(%r8)
  cmp    %eax,%r13d
  jg     L110
  jmp    L35
  nopl   0x0(%rax)
L116:
  mov    %ebp,%ebp
  mov    %rdi,%rax
  sub    %rdi,%rbx
  lea    (%rdi,%rbp,4),%rcx
  nopl   0x0(%rax)
L276:
  mov    (%rax),%edx
  mov    %edx,(%rbx,%rax,1)
  add    $0x4,%rax
  cmp    %rax,%rcx
  jne    L276
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  jmp    1060 <free@plt>
  nopl   0x0(%rax,%rax,1)
L75:
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L73:
  mov    (%rbx,%rax,4),%ecx
  add    $0x1,%rax
  add    $0x8,%rdx
  mov    %ecx,-0x8(%rdx)
  cmp    %eax,%r12d
  jg     L73
  jmp    L222
L210:
  sub    $0x1,%r14d
  jne    L250
L193:
  lea    0x4(%rdi),%rsi
  jmp    L35
```

assistant: ```c
void dwt_interleave(int *a, int n, int x) {
  int dn, sn, i;
  int *b;
  dn = n / 2;
  sn = (n + 1) / 2;
  b = (int *)malloc(n * sizeof(int));
  for (i = 0; i < sn; i++)
    b[2 * i] = a[i * x];
  for (i = 0; i < dn; i++)
    b[2 * i + 1] = a[(sn + i) * x];
  for (i = 0; i < n; i++)
    a[i * x] = b[i];
  free(b);
}
```