user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<xxswap8>:
  endbr64
  mov    %rdi,%rax
  lea    0x0(,%rsi,4),%r8d
  lea    0x0(,%rdx,4),%edi
  cmp    %edx,%esi
  jg     L54
  mov    %edi,%edx
  sub    %r8d,%edx
  mov    %edx,%r10d
  shr    $0x3,%r10d
  add    $0x1,%r10d
  cmp    $0x77,%edx
  jbe    L22
  mov    %r10d,%edx
  movslq %esi,%rsi
  movdqa D0(%rip),%xmm6
  shr    $0x4,%edx
  lea    -0x4(%rax,%rsi,4),%rcx
  lea    -0x1(%rdx),%r9d
  lea    0x80(%rcx),%rsi
  mov    %rcx,%rdx
  shl    $0x7,%r9
  add    %rsi,%r9
  jmp    L44
  nopl   0x0(%rax)
L34:
  sub    $0xffffffffffffff80,%rsi
L44:
  movdqu (%rcx),%xmm0
  movdqu 0x10(%rcx),%xmm8
  movdqa %xmm6,%xmm7
  movdqa %xmm6,%xmm10
  movdqu 0x20(%rcx),%xmm5
  movdqu 0x30(%rcx),%xmm3
  movdqa %xmm6,%xmm11
  sub    $0xffffffffffffff80,%rdx
  pand   %xmm8,%xmm10
  pand   %xmm0,%xmm7
  movdqu 0x40(%rcx),%xmm1
  movdqu 0x50(%rcx),%xmm2
  psrlw  $0x8,%xmm8
  psrlw  $0x8,%xmm0
  packuswb %xmm10,%xmm7
  movdqu 0x60(%rcx),%xmm4
  packuswb %xmm8,%xmm0
  movdqa %xmm6,%xmm10
  movdqa %xmm6,%xmm8
  movdqu 0x70(%rcx),%xmm9
  pand   %xmm3,%xmm10
  pand   %xmm5,%xmm8
  mov    %rsi,%rcx
  psrlw  $0x8,%xmm3
  psrlw  $0x8,%xmm5
  packuswb %xmm10,%xmm8
  packuswb %xmm3,%xmm5
  movdqa %xmm6,%xmm10
  movdqa %xmm6,%xmm3
  pand   %xmm2,%xmm10
  psrlw  $0x8,%xmm2
  pand   %xmm1,%xmm3
  psrlw  $0x8,%xmm1
  packuswb %xmm10,%xmm3
  movdqa %xmm6,%xmm10
  packuswb %xmm2,%xmm1
  movdqa %xmm6,%xmm2
  pand   %xmm9,%xmm10
  pand   %xmm4,%xmm2
  psrlw  $0x8,%xmm9
  pand   %xmm3,%xmm11
  psrlw  $0x8,%xmm4
  psrlw  $0x8,%xmm3
  packuswb %xmm10,%xmm2
  packuswb %xmm9,%xmm4
  movdqa %xmm6,%xmm10
  movdqa %xmm6,%xmm9
  pand   %xmm8,%xmm9
  psrlw  $0x8,%xmm8
  pand   %xmm7,%xmm10
  psrlw  $0x8,%xmm7
  packuswb %xmm9,%xmm10
  movdqa %xmm6,%xmm9
  packuswb %xmm8,%xmm7
  movdqa %xmm6,%xmm8
  pand   %xmm10,%xmm9
  pand   %xmm2,%xmm8
  psrlw  $0x8,%xmm2
  packuswb %xmm8,%xmm11
  packuswb %xmm2,%xmm3
  movdqa %xmm6,%xmm8
  movdqa %xmm6,%xmm2
  pand   %xmm5,%xmm8
  pand   %xmm0,%xmm2
  psrlw  $0x8,%xmm5
  psrlw  $0x8,%xmm0
  packuswb %xmm8,%xmm2
  movdqa %xmm6,%xmm8
  packuswb %xmm5,%xmm0
  movdqa %xmm6,%xmm5
  pand   %xmm4,%xmm8
  pand   %xmm1,%xmm5
  psrlw  $0x8,%xmm4
  psrlw  $0x8,%xmm1
  packuswb %xmm8,%xmm5
  movdqa %xmm10,%xmm8
  packuswb %xmm4,%xmm1
  movdqa %xmm6,%xmm4
  movdqa %xmm6,%xmm10
  pand   %xmm11,%xmm4
  psrlw  $0x8,%xmm8
  pand   %xmm2,%xmm10
  psrlw  $0x8,%xmm11
  psrlw  $0x8,%xmm2
  packuswb %xmm4,%xmm9
  movdqa %xmm6,%xmm4
  packuswb %xmm11,%xmm8
  movdqa %xmm6,%xmm11
  pand   %xmm5,%xmm4
  psrlw  $0x8,%xmm5
  pand   %xmm7,%xmm11
  packuswb %xmm4,%xmm10
  movdqa %xmm6,%xmm4
  packuswb %xmm5,%xmm2
  pand   %xmm3,%xmm4
  psrlw  $0x8,%xmm3
  movdqa %xmm6,%xmm5
  packuswb %xmm4,%xmm11
  movdqa %xmm7,%xmm4
  pand   %xmm1,%xmm5
  psrlw  $0x8,%xmm4
  psrlw  $0x8,%xmm1
  packuswb %xmm3,%xmm4
  movdqa %xmm6,%xmm3
  pand   %xmm0,%xmm3
  psrlw  $0x8,%xmm0
  packuswb %xmm1,%xmm0
  packuswb %xmm5,%xmm3
  movdqa %xmm4,%xmm1
  movdqa %xmm0,%xmm5
  punpckhbw %xmm3,%xmm0
  punpcklbw %xmm11,%xmm1
  punpcklbw %xmm3,%xmm5
  movdqa %xmm2,%xmm3
  punpckhbw %xmm10,%xmm2
  punpcklbw %xmm10,%xmm3
  movdqa %xmm5,%xmm7
  movdqa %xmm8,%xmm10
  punpcklbw %xmm9,%xmm10
  punpckhbw %xmm9,%xmm8
  punpcklbw %xmm3,%xmm7
  punpckhbw %xmm3,%xmm5
  punpckhbw %xmm11,%xmm4
  movdqa %xmm0,%xmm3
  movdqa %xmm1,%xmm9
  punpcklbw %xmm2,%xmm3
  punpckhbw %xmm2,%xmm0
  punpcklbw %xmm10,%xmm9
  movdqa %xmm4,%xmm2
  punpckhbw %xmm8,%xmm4
  punpcklbw %xmm8,%xmm2
  movdqa %xmm7,%xmm8
  punpckhbw %xmm9,%xmm7
  punpckhbw %xmm10,%xmm1
  movups %xmm7,-0x70(%rdx)
  movdqa %xmm5,%xmm7
  punpcklbw %xmm9,%xmm8
  punpcklbw %xmm1,%xmm7
  punpckhbw %xmm1,%xmm5
  movdqa %xmm3,%xmm1
  movups %xmm8,-0x80(%rdx)
  punpcklbw %xmm2,%xmm1
  punpckhbw %xmm2,%xmm3
  movups %xmm7,-0x60(%rdx)
  movups %xmm1,-0x40(%rdx)
  movdqa %xmm0,%xmm1
  punpckhbw %xmm4,%xmm0
  punpcklbw %xmm4,%xmm1
  movups %xmm5,-0x50(%rdx)
  movups %xmm3,-0x30(%rdx)
  movups %xmm1,-0x20(%rdx)
  movups %xmm0,-0x10(%rdx)
  cmp    %r9,%rsi
  jne    L34
  mov    %r10d,%edx
  and    $0xfffffff0,%edx
  lea    (%r8,%rdx,8),%r8d
  cmp    %edx,%r10d
  je     L54
L22:
  movslq %r8d,%rdx
  mov    %r8d,%esi
  add    %rdx,%rax
  sub    %eax,%esi
  nopl   0x0(%rax)
L3:
  movzbl -0x4(%rax),%edx
  movzbl 0x3(%rax),%ecx
  add    $0x8,%rax
  mov    %cl,-0xc(%rax)
  movzbl -0x6(%rax),%ecx
  mov    %dl,-0x5(%rax)
  movzbl -0xb(%rax),%edx
  mov    %cl,-0xb(%rax)
  movzbl -0x7(%rax),%ecx
  mov    %dl,-0x6(%rax)
  movzbl -0xa(%rax),%edx
  mov    %cl,-0xa(%rax)
  movzbl -0x8(%rax),%ecx
  mov    %dl,-0x7(%rax)
  movzbl -0x9(%rax),%edx
  mov    %cl,-0x9(%rax)
  mov    %dl,-0x8(%rax)
  lea    (%rsi,%rax,1),%edx
  cmp    %edx,%edi
  jge    L3
L54:
  ret
```

tool_calls: name: unpack_data
arguments: label: D0
type: byte[16]

tool: {"D0": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

assistant: ```c
void xxswap8(float *x, int n1, int n2) {
  int i, j;
  unsigned char *p, tmp;
  p = (unsigned char *)(x - 1);
  n1 *= 4;
  n2 *= 4;
  for (i = n1; i <= n2; i += 8) {
    for (j = 0; j < 4; j++) {
      tmp = p[i + j];
      p[i + j] = p[i + 7 - j];
      p[i + 7 - j] = tmp;
    }
  }
}
```