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

```asm
<xor_bufs_and_store>:
  endbr64
  mov    %rsi,%rax
  mov    %edx,%esi
  mov    %rdi,%rcx
  mov    %edx,%edi
  sar    $0x1f,%esi
  shr    $0x1c,%esi
  add    %esi,%edx
  and    $0xf,%edx
  sub    %esi,%edx
  xor    %esi,%esi
  cmp    %edx,%edi
  jle    L45
  mov    %edi,%esi
  sub    %edx,%esi
  movslq %esi,%r9
  shr    $0x3,%r9
  test   %r9d,%r9d
  jle    L45
  lea    0x8(%rcx),%r8
  lea    -0x1(%r9),%edx
  cmp    %r8,%rax
  je     L102
  cmp    $0x1,%edx
  jbe    L102
  mov    %r9d,%r8d
  xor    %edx,%edx
  shr    %r8d
  shl    $0x4,%r8
  nopw   0x0(%rax,%rax,1)
L40:
  movdqu (%rcx,%rdx,1),%xmm0
  movdqu (%rax,%rdx,1),%xmm2
  pxor   %xmm2,%xmm0
  movups %xmm0,(%rax,%rdx,1)
  add    $0x10,%rdx
  cmp    %r8,%rdx
  jne    L40
  mov    %r9d,%edx
  and    $0xfffffffe,%edx
  and    $0x1,%r9d
  je     L45
  movslq %edx,%rdx
  mov    (%rcx,%rdx,8),%r8
  xor    %r8,(%rax,%rdx,8)
L45:
  cmp    %edi,%esi
  jge    L179
L76:
  movslq %esi,%r8
  push   %rbp
  mov    %edi,%r10d
  lea    (%rax,%r8,1),%r9
  lea    0x1(%r8),%rdx
  push   %rbx
  sub    %esi,%r10d
  lea    (%rcx,%rdx,1),%rbp
  mov    %r9,%rbx
  lea    -0x1(%r10),%r11d
  sub    %rbp,%rbx
  cmp    $0xe,%rbx
  jbe    L163
  cmp    $0x6,%r11d
  jbe    L163
  cmp    $0xe,%r11d
  jbe    L107
  mov    %r10d,%r11d
  lea    (%rcx,%r8,1),%rbx
  xor    %edx,%edx
  shr    $0x4,%r11d
  shl    $0x4,%r11
  nopw   0x0(%rax,%rax,1)
L37:
  movdqu (%r9,%rdx,1),%xmm0
  movdqu (%rbx,%rdx,1),%xmm3
  pxor   %xmm3,%xmm0
  movups %xmm0,(%r9,%rdx,1)
  add    $0x10,%rdx
  cmp    %r11,%rdx
  jne    L37
  mov    %r10d,%edx
  and    $0xfffffff0,%edx
  add    %edx,%esi
  cmp    %edx,%r10d
  je     L10
  sub    %edx,%r10d
  lea    -0x1(%r10),%r9d
  cmp    $0x6,%r9d
  jbe    L201
L104:
  add    %r8,%rdx
  lea    (%rax,%rdx,1),%r8
  movq   (%rcx,%rdx,1),%xmm0
  mov    %r10d,%edx
  movq   (%r8),%xmm1
  and    $0xfffffff8,%edx
  add    %edx,%esi
  pxor   %xmm1,%xmm0
  movq   %xmm0,(%r8)
  cmp    %edx,%r10d
  je     L10
L201:
  movslq %esi,%rdx
  movzbl (%rcx,%rdx,1),%r8d
  xor    %r8b,(%rax,%rdx,1)
  lea    0x1(%rsi),%edx
  cmp    %edx,%edi
  jle    L10
  movslq %edx,%rdx
  movzbl (%rcx,%rdx,1),%r8d
  xor    %r8b,(%rax,%rdx,1)
  lea    0x2(%rsi),%edx
  cmp    %edx,%edi
  jle    L10
  movslq %edx,%rdx
  movzbl (%rcx,%rdx,1),%r8d
  xor    %r8b,(%rax,%rdx,1)
  lea    0x3(%rsi),%edx
  cmp    %edx,%edi
  jle    L10
  movslq %edx,%rdx
  movzbl (%rcx,%rdx,1),%r8d
  xor    %r8b,(%rax,%rdx,1)
  lea    0x4(%rsi),%edx
  cmp    %edx,%edi
  jle    L10
  movslq %edx,%rdx
  movzbl (%rcx,%rdx,1),%r8d
  xor    %r8b,(%rax,%rdx,1)
  lea    0x5(%rsi),%edx
  cmp    %edx,%edi
  jle    L10
  movslq %edx,%rdx
  add    $0x6,%esi
  movzbl (%rcx,%rdx,1),%r8d
  xor    %r8b,(%rax,%rdx,1)
  cmp    %esi,%edi
  jle    L10
  movslq %esi,%rsi
  movzbl (%rcx,%rsi,1),%edx
  xor    %dl,(%rax,%rsi,1)
L10:
  pop    %rbx
  pop    %rbp
  ret
  nopl   0x0(%rax)
L15:
  add    $0x1,%rdx
L163:
  movzbl (%rcx,%r8,1),%esi
  xor    %sil,(%rax,%r8,1)
  mov    %rdx,%r8
  cmp    %edx,%edi
  jg     L15
  pop    %rbx
  pop    %rbp
  ret
  nop
L102:
  mov    %edx,%r8d
  xor    %edx,%edx
  nopl   (%rax)
L159:
  mov    (%rcx,%rdx,8),%r9
  xor    %r9,(%rax,%rdx,8)
  mov    %rdx,%r9
  add    $0x1,%rdx
  cmp    %r8,%r9
  jne    L159
  cmp    %edi,%esi
  jl     L76
L179:
  ret
L107:
  xor    %edx,%edx
  jmp    L104
```

assistant: ```c
void xor_bufs_and_store(char *buf1, char *buf2, int blocksize) {
  int residual_bytes = (blocksize % 16);
  int fast_blocksize = blocksize > residual_bytes ? (blocksize - residual_bytes) : 0;
  int fast_int_blocksize = fast_blocksize / sizeof(unsigned long);
  int i;
  unsigned long *_buf1 = (unsigned long *)buf1;
  unsigned long *_buf2 = (unsigned long *)buf2;
  for (i = 0; i < fast_int_blocksize; i++) {
    _buf2[i] = _buf1[i] ^ _buf2[i];
  }
  for (i = fast_blocksize; i < blocksize; i++) {
    buf2[i] ^= buf1[i];
  }
}
```