user: What is the c source code of the assembly code below?

```asm
<DWSwap>:
  endbr64
  test   %esi,%esi
  lea    0x3(%rsi),%ecx
  mov    %rdi,%rax
  cmovns %esi,%ecx
  sar    $0x2,%ecx
  cmp    $0x3,%esi
  jle    L157
  cmp    $0x3f,%esi
  jle    L129
  mov    %ecx,%esi
  movdqa D5(%rip),%xmm3
  mov    %rdi,%rdx
  shr    $0x4,%esi
  sub    $0x1,%esi
  shl    $0x6,%rsi
  lea    0x40(%rdi,%rsi,1),%rsi
L125:
  movdqu (%rdx),%xmm0
  movdqu 0x10(%rdx),%xmm1
  movdqa %xmm3,%xmm6
  add    $0x40,%rdx
  movdqu -0x30(%rdx),%xmm2
  movdqu -0x20(%rdx),%xmm4
  pand   %xmm3,%xmm1
  pand   %xmm3,%xmm0
  movdqu -0x10(%rdx),%xmm5
  packuswb %xmm1,%xmm0
  movdqu -0x40(%rdx),%xmm1
  psrlw  $0x8,%xmm2
  pand   %xmm3,%xmm4
  psrlw  $0x8,%xmm5
  psrlw  $0x8,%xmm1
  packuswb %xmm2,%xmm1
  movdqu -0x10(%rdx),%xmm2
  pand   %xmm3,%xmm2
  packuswb %xmm2,%xmm4
  movdqu -0x20(%rdx),%xmm2
  pand   %xmm4,%xmm6
  psrlw  $0x8,%xmm4
  psrlw  $0x8,%xmm2
  packuswb %xmm5,%xmm2
  movdqa %xmm3,%xmm5
  pand   %xmm0,%xmm5
  psrlw  $0x8,%xmm0
  packuswb %xmm6,%xmm5
  packuswb %xmm4,%xmm0
  movdqa %xmm3,%xmm6
  movdqa %xmm3,%xmm4
  pand   %xmm2,%xmm6
  pand   %xmm1,%xmm4
  psrlw  $0x8,%xmm2
  psrlw  $0x8,%xmm1
  packuswb %xmm6,%xmm4
  packuswb %xmm2,%xmm1
  movdqa %xmm0,%xmm2
  punpckhbw %xmm5,%xmm0
  punpcklbw %xmm5,%xmm2
  movdqa %xmm1,%xmm5
  punpckhbw %xmm4,%xmm1
  punpcklbw %xmm4,%xmm5
  movdqa %xmm2,%xmm4
  punpckhbw %xmm5,%xmm2
  punpcklbw %xmm5,%xmm4
  movups %xmm2,-0x30(%rdx)
  movdqa %xmm0,%xmm2
  punpckhbw %xmm1,%xmm0
  punpcklbw %xmm1,%xmm2
  movups %xmm4,-0x40(%rdx)
  movups %xmm2,-0x20(%rdx)
  movups %xmm0,-0x10(%rdx)
  cmp    %rsi,%rdx
  jne    L125
  mov    %ecx,%edx
  and    $0xfffffff0,%edx
  mov    %edx,%esi
  lea    (%rax,%rsi,4),%rax
  cmp    %edx,%ecx
  je     L44
L0:
  movzbl (%rax),%esi
  movzbl 0x2(%rax),%edi
  mov    %sil,0x2(%rax)
  movzbl 0x1(%rax),%esi
  mov    %dil,(%rax)
  movzbl 0x3(%rax),%edi
  mov    %sil,0x3(%rax)
  lea    0x1(%rdx),%esi
  mov    %dil,0x1(%rax)
  cmp    %ecx,%esi
  jge    L157
  movzbl 0x4(%rax),%esi
  movzbl 0x6(%rax),%edi
  mov    %sil,0x6(%rax)
  movzbl 0x5(%rax),%esi
  mov    %dil,0x4(%rax)
  movzbl 0x7(%rax),%edi
  mov    %sil,0x7(%rax)
  lea    0x2(%rdx),%esi
  mov    %dil,0x5(%rax)
  cmp    %esi,%ecx
  jle    L157
  movzbl 0x8(%rax),%esi
  movzbl 0xa(%rax),%edi
  mov    %sil,0xa(%rax)
  movzbl 0x9(%rax),%esi
  mov    %dil,0x8(%rax)
  movzbl 0xb(%rax),%edi
  mov    %sil,0xb(%rax)
  lea    0x3(%rdx),%esi
  mov    %dil,0x9(%rax)
  cmp    %esi,%ecx
  jle    L157
  movzbl 0xc(%rax),%esi
  movzbl 0xe(%rax),%edi
  mov    %sil,0xe(%rax)
  movzbl 0xd(%rax),%esi
  mov    %dil,0xc(%rax)
  movzbl 0xf(%rax),%edi
  mov    %sil,0xf(%rax)
  lea    0x4(%rdx),%esi
  mov    %dil,0xd(%rax)
  cmp    %esi,%ecx
  jle    L157
  movzbl 0x10(%rax),%esi
  movzbl 0x12(%rax),%edi
  mov    %sil,0x12(%rax)
  movzbl 0x11(%rax),%esi
  mov    %dil,0x10(%rax)
  movzbl 0x13(%rax),%edi
  mov    %sil,0x13(%rax)
  lea    0x5(%rdx),%esi
  mov    %dil,0x11(%rax)
  cmp    %esi,%ecx
  jle    L157
  movzbl 0x14(%rax),%esi
  movzbl 0x16(%rax),%edi
  mov    %sil,0x16(%rax)
  movzbl 0x15(%rax),%esi
  mov    %dil,0x14(%rax)
  movzbl 0x17(%rax),%edi
  mov    %sil,0x17(%rax)
  lea    0x6(%rdx),%esi
  mov    %dil,0x15(%rax)
  cmp    %esi,%ecx
  jle    L157
  movzbl 0x18(%rax),%esi
  movzbl 0x1a(%rax),%edi
  mov    %sil,0x1a(%rax)
  movzbl 0x19(%rax),%esi
  mov    %dil,0x18(%rax)
  movzbl 0x1b(%rax),%edi
  mov    %sil,0x1b(%rax)
  lea    0x7(%rdx),%esi
  mov    %dil,0x19(%rax)
  cmp    %esi,%ecx
  jle    L157
  movzbl 0x1c(%rax),%esi
  movzbl 0x1e(%rax),%edi
  mov    %sil,0x1e(%rax)
  movzbl 0x1d(%rax),%esi
  mov    %dil,0x1c(%rax)
  movzbl 0x1f(%rax),%edi
  mov    %sil,0x1f(%rax)
  lea    0x8(%rdx),%esi
  mov    %dil,0x1d(%rax)
  cmp    %esi,%ecx
  jle    L157
  movzbl 0x20(%rax),%esi
  movzbl 0x22(%rax),%edi
  mov    %sil,0x22(%rax)
  movzbl 0x21(%rax),%esi
  mov    %dil,0x20(%rax)
  movzbl 0x23(%rax),%edi
  mov    %sil,0x23(%rax)
  lea    0x9(%rdx),%esi
  mov    %dil,0x21(%rax)
  cmp    %esi,%ecx
  jle    L157
  movzbl 0x24(%rax),%esi
  movzbl 0x26(%rax),%edi
  mov    %sil,0x26(%rax)
  movzbl 0x25(%rax),%esi
  mov    %dil,0x24(%rax)
  movzbl 0x27(%rax),%edi
  mov    %sil,0x27(%rax)
  lea    0xa(%rdx),%esi
  mov    %dil,0x25(%rax)
  cmp    %esi,%ecx
  jle    L157
  movzbl 0x28(%rax),%esi
  movzbl 0x2a(%rax),%edi
  mov    %sil,0x2a(%rax)
  movzbl 0x29(%rax),%esi
  mov    %dil,0x28(%rax)
  movzbl 0x2b(%rax),%edi
  mov    %sil,0x2b(%rax)
  lea    0xb(%rdx),%esi
  mov    %dil,0x29(%rax)
  cmp    %esi,%ecx
  jle    L157
  movzbl 0x2c(%rax),%esi
  movzbl 0x2e(%rax),%edi
  mov    %sil,0x2e(%rax)
  movzbl 0x2d(%rax),%esi
  mov    %dil,0x2c(%rax)
  movzbl 0x2f(%rax),%edi
  mov    %sil,0x2f(%rax)
  lea    0xc(%rdx),%esi
  mov    %dil,0x2d(%rax)
  cmp    %esi,%ecx
  jle    L157
  movzbl 0x30(%rax),%esi
  movzbl 0x32(%rax),%edi
  mov    %sil,0x32(%rax)
  movzbl 0x31(%rax),%esi
  mov    %dil,0x30(%rax)
  movzbl 0x33(%rax),%edi
  mov    %sil,0x33(%rax)
  lea    0xd(%rdx),%esi
  mov    %dil,0x31(%rax)
  cmp    %esi,%ecx
  jle    L157
  movzbl 0x34(%rax),%esi
  movzbl 0x36(%rax),%edi
  add    $0xe,%edx
  mov    %dil,0x34(%rax)
  movzbl 0x37(%rax),%edi
  mov    %sil,0x36(%rax)
  movzbl 0x35(%rax),%esi
  mov    %dil,0x35(%rax)
  mov    %sil,0x37(%rax)
  cmp    %edx,%ecx
  jle    L157
  movzbl 0x38(%rax),%edx
  movzbl 0x3a(%rax),%ecx
  mov    %dl,0x3a(%rax)
  movzbl 0x39(%rax),%edx
  mov    %cl,0x38(%rax)
  movzbl 0x3b(%rax),%ecx
  mov    %dl,0x3b(%rax)
  mov    %cl,0x39(%rax)
L157:
  ret
L129:
  xor    %edx,%edx
  jmp    L0
L44:
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D5
data_type: byte[16]

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

assistant: ```c
void DWSwap(void *Field, int Cnt) {
  register unsigned char *Run = (unsigned char *)Field, Swap;
  register int z;
  for (z = 0; z < Cnt / 4; z++, Run += 4) {
    Swap = Run[0];
    Run[0] = Run[2];
    Run[2] = Swap;
    Swap = Run[1];
    Run[1] = Run[3];
    Run[3] = Swap;
  }
}
```