user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<IMB_double_fast_x>:
  endbr64
  test   %edx,%edx
  jle    L72
  movslq %edx,%rax
  push   %rbp
  mov    %edx,%r9d
  mov    %edx,%r11d
  mov    %rax,%r8
  mov    %rax,%r10
  lea    (%rsi,%rax,4),%rbp
  push   %rbx
  shl    $0x5,%r8
  shl    $0x4,%r10
  add    %rdi,%r8
  add    %rcx,%r10
  cmp    %rbp,%rdi
  setae  %dl
  cmp    %r8,%rsi
  setae  %bl
  or     %ebx,%edx
  cmp    %r10,%rdi
  setae  %bl
  cmp    %r8,%rcx
  setae  %r8b
  or     %ebx,%r8d
  and    %r8d,%edx
  cmp    $0x1,%r9d
  setne  %r8b
  test   %r8b,%dl
  je     L71
  cmp    %rbp,%rcx
  setae  %dl
  cmp    %r10,%rsi
  setae  %r8b
  or     %r8b,%dl
  je     L71
  mov    %rcx,%rdx
  cmp    $0x3,%r9d
  jle    L38
  mov    %r9d,%r10d
  mov    %rdi,%rax
  pxor   %xmm4,%xmm4
  mov    %rsi,%r8
  shr    $0x2,%r10d
  sub    $0x1,%r10d
  shl    $0x6,%r10
  lea    0x40(%rcx,%r10,1),%r10
  nopw   0x0(%rax,%rax,1)
L95:
  movups %xmm4,(%r8)
  movdqu (%rdx),%xmm3
  add    $0x40,%rdx
  sub    $0xffffffffffffff80,%rax
  movdqu -0x30(%rdx),%xmm2
  movdqu -0x20(%rdx),%xmm1
  add    $0x10,%r8
  movdqu -0x10(%rdx),%xmm0
  movups %xmm3,-0x80(%rax)
  movups %xmm3,-0x70(%rax)
  movups %xmm2,-0x60(%rax)
  movups %xmm2,-0x50(%rax)
  movups %xmm1,-0x40(%rax)
  movups %xmm1,-0x30(%rax)
  movups %xmm0,-0x20(%rax)
  movups %xmm0,-0x10(%rax)
  cmp    %r10,%rdx
  jne    L95
  mov    %r9d,%r8d
  and    $0xfffffffc,%r8d
  mov    %r8d,%ebx
  mov    %rbx,%rax
  mov    %rbx,%rdx
  lea    (%rsi,%rbx,4),%r10
  shl    $0x5,%rax
  shl    $0x4,%rdx
  add    %rdi,%rax
  add    %rcx,%rdx
  cmp    %r8d,%r9d
  je     L84
  mov    %r9d,%r11d
  sub    %r8d,%r11d
  cmp    $0x1,%r11d
  je     L27
L25:
  mov    %rbx,%r8
  movq   $0x0,(%rsi,%rbx,4)
  shl    $0x4,%r8
  add    %rcx,%r8
  mov    %rbx,%rcx
  mov    0x18(%r8),%rsi
  shl    $0x5,%rcx
  mov    (%r8),%rbx
  add    %rdi,%rcx
  mov    0x8(%r8),%r9
  mov    0x10(%r8),%rdi
  mov    %rsi,0x28(%rcx)
  mov    %rsi,0x38(%rcx)
  mov    %r11d,%esi
  and    $0xfffffffe,%esi
  mov    %rdi,0x20(%rcx)
  mov    %rdi,0x30(%rcx)
  mov    %rbx,(%rcx)
  mov    %r9,0x8(%rcx)
  mov    %rbx,0x10(%rcx)
  mov    %r9,0x18(%rcx)
  mov    %esi,%ecx
  mov    %rcx,%rdi
  lea    (%r10,%rcx,4),%r10
  shl    $0x4,%rcx
  shl    $0x5,%rdi
  add    %rcx,%rdx
  add    %rdi,%rax
  cmp    %esi,%r11d
  je     L84
L27:
  movl   $0x0,(%r10)
  mov    (%rdx),%ecx
  mov    %ecx,0x10(%rax)
  mov    %ecx,(%rax)
  mov    0x4(%rdx),%ecx
  mov    %ecx,0x14(%rax)
  mov    %ecx,0x4(%rax)
  mov    0x8(%rdx),%ecx
  mov    %ecx,0x18(%rax)
  mov    %ecx,0x8(%rax)
  mov    0xc(%rdx),%edx
  mov    %edx,0x1c(%rax)
  mov    %edx,0xc(%rax)
L84:
  pop    %rbx
  pop    %rbp
  ret
  nop
L71:
  shl    $0x5,%rax
  add    %rdi,%rax
  nopw   0x0(%rax,%rax,1)
L0:
  movl   $0x0,(%rsi)
  mov    (%rcx),%edx
  add    $0x20,%rdi
  add    $0x4,%rsi
  add    $0x10,%rcx
  mov    %edx,-0x10(%rdi)
  mov    %edx,-0x20(%rdi)
  mov    -0xc(%rcx),%edx
  mov    %edx,-0xc(%rdi)
  mov    %edx,-0x1c(%rdi)
  mov    -0x8(%rcx),%edx
  mov    %edx,-0x8(%rdi)
  mov    %edx,-0x18(%rdi)
  mov    -0x4(%rcx),%edx
  mov    %edx,-0x4(%rdi)
  mov    %edx,-0x14(%rdi)
  cmp    %rdi,%rax
  jne    L0
  pop    %rbx
  pop    %rbp
  ret
  nopl   (%rax)
L72:
  ret
L38:
  mov    %rsi,%r10
  mov    %rdi,%rax
  xor    %ebx,%ebx
  jmp    L25
```

assistant: ```c
void IMB_double_fast_x(int *destf, int *dest, int y, int *p1f) {
  int i;
  for (i = y; i > 0; i--) {
    *dest++ = 0;
    destf[0] = destf[4] = p1f[0];
    destf[1] = destf[5] = p1f[1];
    destf[2] = destf[6] = p1f[2];
    destf[3] = destf[7] = p1f[3];
    destf += 8;
    p1f += 4;
  }
}
```