user: 请从给定的汇编指令推导出C源代码:

```asm
<byteswap>:
  endbr64
  mov    %rdi,%rcx
  mov    %edx,%edi
  cmp    %edx,%esi
  jg     L32
  mov    %edx,%eax
  sub    %esi,%eax
  mov    %eax,%r9d
  shr    %r9d
  add    $0x1,%r9d
  cmp    $0x1d,%eax
  jbe    L50
  mov    %r9d,%edx
  movslq %esi,%rax
  movdqa D3(%rip),%xmm3
  shr    $0x4,%edx
  add    %rcx,%rax
  lea    -0x1(%rdx),%r8d
  lea    0x20(%rax),%rdx
  shl    $0x5,%r8
  add    %rdx,%r8
  jmp    L30
  nopl   (%rax)
L184:
  add    $0x20,%rdx
L30:
  movdqu (%rax),%xmm1
  movdqu 0x10(%rax),%xmm0
  movdqu 0x10(%rax),%xmm2
  pand   %xmm3,%xmm0
  pand   %xmm3,%xmm1
  packuswb %xmm0,%xmm1
  movdqu (%rax),%xmm0
  psrlw  $0x8,%xmm2
  psrlw  $0x8,%xmm0
  packuswb %xmm2,%xmm0
  movdqa %xmm0,%xmm2
  punpckhbw %xmm1,%xmm0
  punpcklbw %xmm1,%xmm2
  movups %xmm0,0x10(%rax)
  movups %xmm2,(%rax)
  mov    %rdx,%rax
  cmp    %rdx,%r8
  jne    L184
  mov    %r9d,%eax
  and    $0xfffffff0,%eax
  lea    (%rsi,%rax,2),%esi
  cmp    %eax,%r9d
  je     L32
L50:
  movslq %esi,%rax
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0x2(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0x4(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0x6(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0x8(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0xa(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0xc(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0xe(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0x10(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0x12(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0x14(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0x16(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0x18(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rax),%r9d
  movzbl (%rdx),%r8d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  lea    0x1a(%rsi),%eax
  cmp    %eax,%edi
  jl     L32
  cltq
  add    $0x1c,%esi
  lea    (%rcx,%rax,1),%rdx
  lea    0x1(%rcx,%rax,1),%rax
  movzbl (%rdx),%r8d
  movzbl (%rax),%r9d
  mov    %r9b,(%rdx)
  mov    %r8b,(%rax)
  cmp    %esi,%edi
  jl     L32
  movslq %esi,%rsi
  lea    (%rcx,%rsi,1),%rdx
  lea    0x1(%rcx,%rsi,1),%rax
  movzbl (%rdx),%edi
  movzbl (%rax),%ecx
  mov    %cl,(%rdx)
  mov    %dil,(%rax)
L32:
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D3
type_guessed: byte[16]

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

assistant: ```c
void byteswap(char *buf, int from, int to) {
  int i;
  for (i = from; i <= to; i += 2) {
    char b1 = buf[i];
    buf[i] = buf[i + 1];
    buf[i + 1] = b1;
  }
}
```