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

```asm
<intrlv>:
  endbr64
  mov    %rdi,%rax
  mov    %rdx,%rdi
  cmp    $0x1,%r8d
  je     L168
  cmp    $0xffffffff,%r8d
  je     L41
L106:
  ret
  nopl   0x0(%rax,%rax,1)
L41:
  mov    %ecx,%r8d
  shr    $0x1f,%r8d
  add    %ecx,%r8d
  sar    %r8d
  cmp    $0x1,%ecx
  jle    L106
  lea    0x4(%rdi),%r10
  push   %rbp
  lea    0x8(%rsi),%rbp
  mov    %r8d,%edx
  mov    %r10,%r9
  lea    0x4(%rax,%rdx,8),%r11
  lea    0x4(,%rdx,4),%rdx
  push   %rbx
  sub    %rbp,%r9
  lea    0x4(%rax),%rbx
  lea    (%rsi,%rdx,1),%rbp
  cmp    $0x8,%r9
  seta   %r9b
  cmp    $0x7,%ecx
  setg   %cl
  and    %ecx,%r9d
  lea    0x4(%rsi),%rcx
  cmp    %rcx,%r11
  setbe  %cl
  cmp    %rbp,%rbx
  setae  %bpl
  or     %ebp,%ecx
  test   %cl,%r9b
  je     L148
  add    %rdi,%rdx
  cmp    %rdx,%rbx
  setae  %dl
  cmp    %r10,%r11
  setbe  %cl
  or     %cl,%dl
  je     L148
  mov    %r8d,%edx
  shr    $0x2,%edx
  lea    -0x1(%rdx),%ecx
  mov    $0x4,%edx
  shl    $0x4,%rcx
  add    $0x14,%rcx
  nopl   0x0(%rax)
L35:
  movups -0x4(%rax,%rdx,2),%xmm0
  movups 0xc(%rax,%rdx,2),%xmm1
  movaps %xmm0,%xmm2
  shufps $0xdd,%xmm1,%xmm0
  shufps $0x88,%xmm1,%xmm2
  movups %xmm2,(%rsi,%rdx,1)
  movups %xmm0,(%rdi,%rdx,1)
  add    $0x10,%rdx
  cmp    %rdx,%rcx
  jne    L35
  mov    %r8d,%edx
  and    $0xfffffffc,%edx
  lea    0x1(%rdx),%ecx
  cmp    %edx,%r8d
  je     L107
  lea    (%rcx,%rcx,1),%r10d
  movslq %ecx,%rcx
  movslq %r10d,%r10
  lea    0x0(,%rcx,4),%r11
  lea    0x0(,%r10,4),%r9
  movss  -0x4(%rax,%r9,1),%xmm0
  movss  %xmm0,(%rsi,%rcx,4)
  movss  (%rax,%r10,4),%xmm0
  movss  %xmm0,(%rdi,%rcx,4)
  lea    0x2(%rdx),%ecx
  cmp    %ecx,%r8d
  jl     L107
  movss  0x4(%rax,%r9,1),%xmm0
  add    $0x3,%edx
  movss  %xmm0,0x4(%rsi,%r11,1)
  movss  0x8(%rax,%r9,1),%xmm0
  movss  %xmm0,0x4(%rdi,%r11,1)
  cmp    %edx,%r8d
  jl     L107
  movss  0xc(%rax,%r9,1),%xmm0
  movss  %xmm0,0x8(%rsi,%r11,1)
  movss  0x10(%rax,%r9,1),%xmm0
  movss  %xmm0,0x8(%rdi,%r11,1)
L107:
  pop    %rbx
  pop    %rbp
  ret
  nopl   0x0(%rax,%rax,1)
L168:
  test   %ecx,%ecx
  jle    L106
  movslq %ecx,%r8
  lea    0x4(%rsi),%r9
  lea    0x4(%rax),%r10
  lea    0x4(,%r8,4),%rdx
  lea    0x4(%rax,%r8,8),%r8
  cmp    %r9,%r8
  lea    (%rsi,%rdx,1),%r11
  setbe  %r9b
  cmp    %r11,%r10
  setae  %r11b
  or     %r11d,%r9d
  lea    0x4(%rdi),%r11
  cmp    %r11,%r8
  setbe  %r8b
  add    %rdi,%rdx
  cmp    %rdx,%r10
  setae  %dl
  or     %r8d,%edx
  test   %dl,%r9b
  je     L9
  lea    -0x1(%rcx),%edx
  cmp    $0x2,%edx
  jbe    L9
  mov    %ecx,%edx
  shr    $0x2,%edx
  lea    -0x1(%rdx),%r8d
  mov    $0x4,%edx
  shl    $0x4,%r8
  add    $0x14,%r8
  nopw   0x0(%rax,%rax,1)
L47:
  movups (%rsi,%rdx,1),%xmm0
  movups (%rdi,%rdx,1),%xmm1
  movaps %xmm0,%xmm2
  unpckhps %xmm1,%xmm0
  unpcklps %xmm1,%xmm2
  movups %xmm0,0xc(%rax,%rdx,2)
  movups %xmm2,-0x4(%rax,%rdx,2)
  add    $0x10,%rdx
  cmp    %rdx,%r8
  jne    L47
  mov    %ecx,%r8d
  and    $0xfffffffc,%r8d
  lea    0x1(%r8),%edx
  cmp    %r8d,%ecx
  je     L106
  movslq %edx,%r11
  add    %edx,%edx
  movss  (%rsi,%r11,4),%xmm0
  movslq %edx,%rdx
  lea    0x0(,%r11,4),%r10
  lea    0x0(,%rdx,4),%r9
  movss  %xmm0,-0x4(%rax,%r9,1)
  movss  (%rdi,%r11,4),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  lea    0x2(%r8),%edx
  cmp    %ecx,%edx
  jg     L106
  movss  0x4(%rsi,%r10,1),%xmm0
  add    $0x3,%r8d
  movss  %xmm0,0x4(%rax,%r9,1)
  movss  0x4(%rdi,%r10,1),%xmm0
  movss  %xmm0,0x8(%rax,%r9,1)
  cmp    %r8d,%ecx
  jl     L106
  movss  0x8(%rsi,%r10,1),%xmm0
  movss  %xmm0,0xc(%rax,%r9,1)
  movss  0x8(%rdi,%r10,1),%xmm0
  movss  %xmm0,0x10(%rax,%r9,1)
  ret
  nopw   0x0(%rax,%rax,1)
L9:
  add    $0x1,%ecx
  mov    $0x1,%edx
  nopl   0x0(%rax,%rax,1)
L141:
  movss  (%rsi,%rdx,4),%xmm0
  movss  %xmm0,-0x4(%rax,%rdx,8)
  movss  (%rdi,%rdx,4),%xmm0
  movss  %xmm0,(%rax,%rdx,8)
  add    $0x1,%rdx
  cmp    %rdx,%rcx
  jne    L141
  ret
  nop
L148:
  mov    $0x1,%edx
  nopl   (%rax)
L116:
  movss  -0x4(%rax,%rdx,8),%xmm0
  movss  %xmm0,(%rsi,%rdx,4)
  movss  (%rax,%rdx,8),%xmm0
  movss  %xmm0,(%rdi,%rdx,4)
  add    $0x1,%rdx
  cmp    %edx,%r8d
  jge    L116
  jmp    L107
```

assistant: ```c
void intrlv(float *ri, float *r, float *i, int n, int iopt) {
  int n2, i1, i2;
  if (iopt == 1) {
    for (i1 = 1; i1 <= n; i1++) {
      i2 = i1 * 2;
      ri[i2 - 1] = r[i1];
      ri[i2] = i[i1];
    }
  } else if (iopt == -1) {
    n2 = n / 2;
    for (i1 = 1; i1 <= n2; i1++) {
      i2 = i1 * 2;
      r[i1] = ri[i2 - 1];
      i[i1] = ri[i2];
    }
  }
}
```