user: Please show me the C implementation that matches the assembly code listed below:

```asm
<xxstr>:
  endbr64
  test   %edx,%edx
  jle    L78
  lea    0x1(%rsi),%r8
  mov    %rdi,%rax
  mov    %ecx,%r9d
  sub    %r8,%rax
  cmp    $0xe,%rax
  jbe    L74
  lea    -0x1(%rdx),%eax
  cmp    $0xe,%eax
  jbe    L74
  movd   %ecx,%xmm6
  mov    %edx,%r8d
  movdqa D66(%rip),%xmm5
  xor    %eax,%eax
  punpcklbw %xmm6,%xmm6
  shr    $0x4,%r8d
  pxor   %xmm3,%xmm3
  movdqa D34(%rip),%xmm11
  punpcklwd %xmm6,%xmm6
  shl    $0x4,%r8
  movdqa D23(%rip),%xmm4
  movdqa D46(%rip),%xmm10
  movdqa D51(%rip),%xmm9
  movdqa D29(%rip),%xmm7
  pshufd $0x0,%xmm6,%xmm6
  movdqa D35(%rip),%xmm8
  nopl   (%rax)
L71:
  movdqa %xmm5,%xmm2
  movdqu (%rsi,%rax,1),%xmm12
  paddd  %xmm11,%xmm5
  movdqa %xmm2,%xmm1
  movdqa %xmm2,%xmm0
  paddd  %xmm10,%xmm1
  pand   %xmm4,%xmm0
  pxor   %xmm6,%xmm12
  pand   %xmm4,%xmm1
  pcmpeqd %xmm3,%xmm0
  pcmpeqd %xmm3,%xmm1
  pcmpeqd %xmm3,%xmm0
  pcmpeqd %xmm3,%xmm1
  movdqa %xmm0,%xmm13
  punpcklwd %xmm1,%xmm0
  punpckhwd %xmm1,%xmm13
  movdqa %xmm0,%xmm1
  punpcklwd %xmm13,%xmm0
  punpckhwd %xmm13,%xmm1
  punpcklwd %xmm1,%xmm0
  movdqa %xmm2,%xmm1
  paddd  %xmm8,%xmm2
  paddd  %xmm9,%xmm1
  pand   %xmm4,%xmm2
  pand   %xmm7,%xmm0
  pand   %xmm4,%xmm1
  pcmpeqd %xmm3,%xmm2
  pcmpeqd %xmm3,%xmm1
  pcmpeqd %xmm3,%xmm2
  pcmpeqd %xmm3,%xmm1
  movdqa %xmm1,%xmm13
  punpcklwd %xmm2,%xmm1
  punpckhwd %xmm2,%xmm13
  movdqa %xmm1,%xmm2
  punpckhwd %xmm13,%xmm2
  punpcklwd %xmm13,%xmm1
  punpcklwd %xmm2,%xmm1
  pand   %xmm7,%xmm1
  packuswb %xmm1,%xmm0
  movdqa %xmm12,%xmm1
  pandn  %xmm0,%xmm1
  pandn  %xmm12,%xmm0
  por    %xmm1,%xmm0
  movups %xmm0,(%rdi,%rax,1)
  add    $0x10,%rax
  cmp    %r8,%rax
  jne    L71
  mov    %edx,%eax
  and    $0xfffffff0,%eax
  test   $0xf,%dl
  je     L78
  mov    %eax,%r8d
  movzbl (%rsi,%r8,1),%r9d
  xor    %ecx,%r9d
  mov    %r9b,(%rdi,%r8,1)
  lea    0x1(%rax),%r9d
  cmp    %r9d,%edx
  jle    L78
  movslq %r9d,%r10
  movzbl (%rsi,%r10,1),%r8d
  xor    %ecx,%r8d
  and    $0x1,%r9d
  mov    %r8d,%r11d
  not    %r11d
  cmovne %r11d,%r8d
  mov    %r8b,(%rdi,%r10,1)
  lea    0x2(%rax),%r8d
  cmp    %r8d,%edx
  jle    L78
  movslq %r8d,%r8
  movzbl (%rsi,%r8,1),%r9d
  xor    %ecx,%r9d
  mov    %r9b,(%rdi,%r8,1)
  lea    0x3(%rax),%r9d
  cmp    %r9d,%edx
  jle    L78
  movslq %r9d,%r10
  movzbl (%rsi,%r10,1),%r8d
  xor    %ecx,%r8d
  and    $0x1,%r9d
  mov    %r8d,%r11d
  not    %r11d
  cmovne %r11d,%r8d
  mov    %r8b,(%rdi,%r10,1)
  lea    0x4(%rax),%r8d
  cmp    %r8d,%edx
  jle    L78
  movslq %r8d,%r8
  movzbl (%rsi,%r8,1),%r9d
  xor    %ecx,%r9d
  mov    %r9b,(%rdi,%r8,1)
  lea    0x5(%rax),%r9d
  cmp    %r9d,%edx
  jle    L78
  movslq %r9d,%r10
  movzbl (%rsi,%r10,1),%r8d
  xor    %ecx,%r8d
  and    $0x1,%r9d
  mov    %r8d,%r11d
  not    %r11d
  cmovne %r11d,%r8d
  mov    %r8b,(%rdi,%r10,1)
  lea    0x6(%rax),%r8d
  cmp    %r8d,%edx
  jle    L78
  movslq %r8d,%r8
  movzbl (%rsi,%r8,1),%r9d
  xor    %ecx,%r9d
  mov    %r9b,(%rdi,%r8,1)
  lea    0x7(%rax),%r9d
  cmp    %r9d,%edx
  jle    L78
  movslq %r9d,%r10
  movzbl (%rsi,%r10,1),%r8d
  xor    %ecx,%r8d
  and    $0x1,%r9d
  mov    %r8d,%r11d
  not    %r11d
  cmovne %r11d,%r8d
  mov    %r8b,(%rdi,%r10,1)
  lea    0x8(%rax),%r8d
  cmp    %r8d,%edx
  jle    L78
  movslq %r8d,%r8
  movzbl (%rsi,%r8,1),%r9d
  xor    %ecx,%r9d
  mov    %r9b,(%rdi,%r8,1)
  lea    0x9(%rax),%r9d
  cmp    %r9d,%edx
  jle    L78
  movslq %r9d,%r10
  movzbl (%rsi,%r10,1),%r8d
  xor    %ecx,%r8d
  and    $0x1,%r9d
  mov    %r8d,%r11d
  not    %r11d
  cmovne %r11d,%r8d
  mov    %r8b,(%rdi,%r10,1)
  lea    0xa(%rax),%r8d
  cmp    %r8d,%edx
  jle    L78
  movslq %r8d,%r8
  movzbl (%rsi,%r8,1),%r9d
  xor    %ecx,%r9d
  mov    %r9b,(%rdi,%r8,1)
  lea    0xb(%rax),%r9d
  cmp    %r9d,%edx
  jle    L78
  movslq %r9d,%r10
  movzbl (%rsi,%r10,1),%r8d
  xor    %ecx,%r8d
  and    $0x1,%r9d
  mov    %r8d,%r11d
  not    %r11d
  cmovne %r11d,%r8d
  mov    %r8b,(%rdi,%r10,1)
  lea    0xc(%rax),%r8d
  cmp    %r8d,%edx
  jle    L78
  movslq %r8d,%r8
  movzbl (%rsi,%r8,1),%r9d
  xor    %ecx,%r9d
  mov    %r9b,(%rdi,%r8,1)
  lea    0xd(%rax),%r9d
  cmp    %r9d,%edx
  jle    L78
  movslq %r9d,%r10
  movzbl (%rsi,%r10,1),%r8d
  xor    %ecx,%r8d
  and    $0x1,%r9d
  mov    %r8d,%r11d
  not    %r11d
  cmovne %r11d,%r8d
  add    $0xe,%eax
  mov    %r8b,(%rdi,%r10,1)
  cmp    %eax,%edx
  jle    L78
  cltq
  xor    (%rsi,%rax,1),%cl
  mov    %cl,(%rdi,%rax,1)
  ret
  nopl   0x0(%rax)
L74:
  mov    %edx,%edx
  xor    %eax,%eax
L30:
  movzbl (%rsi,%rax,1),%ecx
  xor    %r9d,%ecx
  test   $0x1,%al
  mov    %ecx,%r8d
  not    %r8d
  cmovne %r8d,%ecx
  mov    %cl,(%rdi,%rax,1)
  add    $0x1,%rax
  cmp    %rax,%rdx
  jne    L30
L78:
  ret
```

tool_calls: name: read_data
arguments: label: D66
datatype: byte[16]
name: read_data
arguments: label: D34
datatype: byte[16]
name: read_data
arguments: label: D23
datatype: byte[16]
name: read_data
arguments: label: D46
datatype: byte[16]
name: read_data
arguments: label: D51
datatype: byte[16]
name: read_data
arguments: label: D29
datatype: byte[16]
name: read_data
arguments: label: D35
datatype: byte[16]

tool: {"D66": [0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00]}

tool: {"D34": [0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00]}

tool: {"D23": [0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00]}

tool: {"D46": [0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

tool: {"D51": [0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00]}

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

tool: {"D35": [0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00]}

assistant: ```c
void xxstr(unsigned char *b, unsigned char *a, int n, int z) {
  int i;
  for (i = 0; i < n; i++) {
    if (i & 1) {
      b[i] = (~a[i]) ^ z;
    } else {
      b[i] = a[i] ^ z;
    }
  }
}
```