user: What would the C source look like for the assembly code provided here?

```asm
<GetSetPixXor>:
  endbr64
  push   %r15
  push   %r14
  movswl %cx,%r14d
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x158,%rsp
  test   %r14d,%r14d
  jle    L121
  mov    %edx,%r15d
  mov    %r9,%rax
  lea    0x8(%r8),%rdx
  mov    %edi,%ebx
  sub    %rdx,%rax
  mov    %esi,%r13d
  mov    %r8,%r12
  mov    %r9,%rbp
  cmp    $0x70,%rax
  jbe    L28
  lea    -0x1(%r14),%eax
  cmp    $0xe,%eax
  jbe    L28
  lea    (%rsi,%r14,1),%eax
  mov    %r14d,%edi
  movd   %r15d,%xmm6
  mov    %r15d,%ebp
  mov    %eax,0x24(%rsp)
  mov    %r14d,%eax
  and    $0xfffffff0,%edi
  punpcklbw %xmm6,%xmm6
  shr    $0x4,%eax
  mov    %edi,0x20(%rsp)
  punpcklwd %xmm6,%xmm6
  mov    %r13d,%r15d
  sub    $0x1,%eax
  pshufd $0x0,%xmm6,%xmm6
  mov    %r14d,%r13d
  shl    $0x7,%rax
  lea    0x80(%r8,%rax,1),%r11
  mov    %edi,%eax
  shl    $0x3,%rax
  mov    %r11,%r14
  lea    (%r8,%rax,1),%rcx
  add    %r9,%rax
  mov    %rax,0x30(%rsp)
  lea    0x1(%rdi),%eax
  mov    %eax,0x38(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rsi
  add    %r9,%rax
  mov    %rcx,0x28(%rsp)
  mov    %rax,0x48(%rsp)
  lea    0x2(%rdi),%eax
  mov    %eax,0x3c(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rcx
  add    %r9,%rax
  mov    %rsi,0x40(%rsp)
  mov    %rax,0x58(%rsp)
  lea    0x3(%rdi),%eax
  mov    %eax,0x60(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rsi
  add    %r9,%rax
  mov    %rcx,0x50(%rsp)
  mov    %rax,0x70(%rsp)
  lea    0x4(%rdi),%eax
  mov    %eax,0x64(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rcx
  add    %r9,%rax
  mov    %rsi,0x68(%rsp)
  mov    %rax,0x80(%rsp)
  lea    0x5(%rdi),%eax
  mov    %eax,0x88(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rsi
  add    %r9,%rax
  mov    %rcx,0x78(%rsp)
  mov    %rax,0x98(%rsp)
  lea    0x6(%rdi),%eax
  mov    %eax,0x8c(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rcx
  add    %r9,%rax
  mov    %rsi,0x90(%rsp)
  mov    %rax,0xa8(%rsp)
  lea    0x7(%rdi),%eax
  mov    %eax,0xb0(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rsi
  add    %r9,%rax
  mov    %rcx,0xa0(%rsp)
  mov    %rax,0xc0(%rsp)
  lea    0x8(%rdi),%eax
  mov    %eax,0xb4(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rcx
  add    %r9,%rax
  mov    %rsi,0xb8(%rsp)
  mov    %rax,0xd0(%rsp)
  lea    0x9(%rdi),%eax
  mov    %eax,0xd8(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rsi
  add    %r9,%rax
  mov    %rcx,0xc8(%rsp)
  mov    %rax,0xe8(%rsp)
  lea    0xa(%rdi),%eax
  mov    %eax,0xdc(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rcx
  add    %r9,%rax
  mov    %rsi,0xe0(%rsp)
  mov    %rcx,0xf0(%rsp)
  mov    %rax,0xf8(%rsp)
  lea    0xb(%rdi),%eax
  mov    %eax,0x100(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rsi
  add    %r9,%rax
  mov    %r9,0x8(%rsp)
  mov    %rax,0x110(%rsp)
  lea    0xc(%rdi),%eax
  mov    %eax,0x104(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rcx
  add    %r9,%rax
  movaps %xmm6,0x10(%rsp)
  mov    %rax,0x120(%rsp)
  lea    0xd(%rdi),%eax
  mov    %eax,0x128(%rsp)
  shl    $0x3,%rax
  mov    %rsi,0x108(%rsp)
  lea    (%r8,%rax,1),%rsi
  add    %r9,%rax
  mov    %rax,0x138(%rsp)
  lea    0xe(%rdi),%eax
  mov    %eax,0x12c(%rsp)
  shl    $0x3,%rax
  lea    (%r8,%rax,1),%rdi
  add    %r9,%rax
  mov    %rcx,0x118(%rsp)
  mov    %rsi,0x130(%rsp)
  mov    %rdi,0x140(%rsp)
  mov    %rax,0x148(%rsp)
  nopl   0x0(%rax)
L220:
  mov    %r12,%rdx
  mov    %r13d,%ecx
  mov    %r15d,%esi
  mov    %ebx,%edi
  call   <GetPixelsQuickly@plt>
  mov    %r12,%rax
  pxor   %xmm3,%xmm3
  pxor   %xmm2,%xmm2
  mov    0x8(%rsp),%rdx
  movdqa 0x10(%rsp),%xmm6
  pxor   %xmm4,%xmm4
  movdqa D3(%rip),%xmm5
  nopw   0x0(%rax,%rax,1)
L70:
  movdqu 0x10(%rax),%xmm7
  movdqu (%rax),%xmm0
  sub    $0xffffffffffffff80,%rax
  sub    $0xffffffffffffff80,%rdx
  movdqu -0x60(%rax),%xmm1
  movdqu -0x10(%rax),%xmm10
  shufps $0x88,%xmm7,%xmm0
  movdqu -0x50(%rax),%xmm7
  shufps $0x88,%xmm7,%xmm1
  movdqa %xmm0,%xmm7
  punpcklwd %xmm1,%xmm0
  punpckhwd %xmm1,%xmm7
  movdqa %xmm0,%xmm1
  punpckhwd %xmm7,%xmm1
  punpcklwd %xmm7,%xmm0
  movdqu -0x30(%rax),%xmm7
  punpcklwd %xmm1,%xmm0
  movdqu -0x40(%rax),%xmm1
  pand   %xmm5,%xmm0
  shufps $0x88,%xmm7,%xmm1
  movdqu -0x20(%rax),%xmm7
  movdqa %xmm1,%xmm8
  shufps $0x88,%xmm10,%xmm7
  punpcklwd %xmm7,%xmm1
  punpckhwd %xmm7,%xmm8
  movdqa %xmm1,%xmm7
  punpcklwd %xmm8,%xmm1
  punpckhwd %xmm8,%xmm7
  punpcklwd %xmm7,%xmm1
  pand   %xmm5,%xmm1
  packuswb %xmm1,%xmm0
  pxor   %xmm6,%xmm0
  movdqa %xmm0,%xmm1
  punpckhbw %xmm4,%xmm0
  punpcklbw %xmm4,%xmm1
  movdqa %xmm0,%xmm7
  punpckhwd %xmm3,%xmm0
  movdqa %xmm1,%xmm8
  punpckhwd %xmm3,%xmm1
  punpcklwd %xmm3,%xmm7
  punpcklwd %xmm3,%xmm8
  movdqa %xmm8,%xmm9
  punpckhdq %xmm2,%xmm8
  movups %xmm8,-0x70(%rdx)
  movdqa %xmm1,%xmm8
  punpckhdq %xmm2,%xmm1
  punpckldq %xmm2,%xmm9
  movups %xmm1,-0x50(%rdx)
  movdqa %xmm7,%xmm1
  punpckldq %xmm2,%xmm8
  punpckhdq %xmm2,%xmm7
  punpckldq %xmm2,%xmm1
  movups %xmm9,-0x80(%rdx)
  movups %xmm1,-0x40(%rdx)
  movdqa %xmm0,%xmm1
  punpckhdq %xmm2,%xmm0
  punpckldq %xmm2,%xmm1
  movups %xmm8,-0x60(%rdx)
  movups %xmm7,-0x30(%rdx)
  movups %xmm1,-0x20(%rdx)
  movups %xmm0,-0x10(%rdx)
  cmp    %r14,%rax
  jne    L70
  cmp    0x20(%rsp),%r13d
  je     L195
  mov    0x28(%rsp),%rcx
  mov    0x30(%rsp),%rsi
  movzbl (%rcx),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rsi)
  cmp    0x38(%rsp),%r13d
  jle    L195
  mov    0x40(%rsp),%rcx
  mov    0x48(%rsp),%rsi
  movzbl (%rcx),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rsi)
  cmp    0x3c(%rsp),%r13d
  jle    L195
  mov    0x50(%rsp),%rcx
  mov    0x58(%rsp),%rsi
  movzbl (%rcx),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rsi)
  cmp    0x60(%rsp),%r13d
  jle    L195
  mov    0x68(%rsp),%rcx
  mov    0x70(%rsp),%rsi
  movzbl (%rcx),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rsi)
  cmp    0x64(%rsp),%r13d
  jle    L195
  mov    0x78(%rsp),%rcx
  mov    0x80(%rsp),%rsi
  movzbl (%rcx),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rsi)
  cmp    0x88(%rsp),%r13d
  jle    L195
  mov    0x90(%rsp),%rcx
  mov    0x98(%rsp),%rsi
  movzbl (%rcx),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rsi)
  cmp    0x8c(%rsp),%r13d
  jle    L195
  mov    0xa0(%rsp),%rdi
  mov    0xa8(%rsp),%rcx
  movzbl (%rdi),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rcx)
  cmp    0xb0(%rsp),%r13d
  jle    L195
  mov    0xb8(%rsp),%rsi
  mov    0xc0(%rsp),%rdi
  movzbl (%rsi),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rdi)
  cmp    0xb4(%rsp),%r13d
  jle    L195
  mov    0xc8(%rsp),%rsi
  mov    0xd0(%rsp),%rcx
  movzbl (%rsi),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rcx)
  cmp    0xd8(%rsp),%r13d
  jle    L195
  mov    0xe0(%rsp),%rdi
  mov    0xe8(%rsp),%rsi
  movzbl (%rdi),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rsi)
  cmp    0xdc(%rsp),%r13d
  jle    L195
  mov    0xf0(%rsp),%rcx
  mov    0xf8(%rsp),%rdi
  movzbl (%rcx),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rdi)
  cmp    0x100(%rsp),%r13d
  jle    L195
  mov    0x108(%rsp),%rsi
  mov    0x110(%rsp),%rcx
  movzbl (%rsi),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rcx)
  cmp    0x104(%rsp),%r13d
  jle    L195
  mov    0x118(%rsp),%rdi
  mov    0x120(%rsp),%rsi
  movzbl (%rdi),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rsi)
  cmp    0x128(%rsp),%r13d
  jle    L195
  mov    0x130(%rsp),%rcx
  mov    0x138(%rsp),%rdi
  movzbl (%rcx),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rdi)
  cmp    0x12c(%rsp),%r13d
  jle    L195
  mov    0x140(%rsp),%rcx
  mov    0x148(%rsp),%rsi
  movzbl (%rcx),%eax
  xor    %ebp,%eax
  movzbl %al,%eax
  mov    %rax,(%rsi)
  nopl   (%rax)
L195:
  mov    0x8(%rsp),%rdx
  mov    %r15d,%esi
  mov    %r13d,%ecx
  mov    %ebx,%edi
  add    $0x1,%r15d
  call   <SetPixelsQuickly@plt>
  cmp    0x24(%rsp),%r15d
  jne    L220
L121:
  add    $0x158,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L28:
  lea    0x0(%r13,%r14,1),%eax
  mov    %eax,0x8(%rsp)
  mov    %rbp,%rax
  mov    %r13d,%ebp
  mov    %rax,%r13
  nopl   (%rax)
L118:
  mov    %r14d,%ecx
  mov    %r12,%rdx
  mov    %ebp,%esi
  mov    %ebx,%edi
  call   <GetPixelsQuickly@plt>
  xor    %eax,%eax
  nopl   0x0(%rax)
L151:
  movzbl (%r12,%rax,8),%edx
  xor    %r15d,%edx
  movzbl %dl,%edx
  mov    %rdx,0x0(%r13,%rax,8)
  add    $0x1,%rax
  cmp    %eax,%r14d
  jg     L151
  mov    %ebp,%esi
  mov    %r14d,%ecx
  mov    %r13,%rdx
  mov    %ebx,%edi
  call   <SetPixelsQuickly@plt>
  add    $0x1,%ebp
  cmp    0x8(%rsp),%ebp
  jne    L118
  jmp    L121
```

tool_calls: name: disassemble_data
arguments: 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 GetSetPixXor(int x0, int y0, unsigned char bmval, short sz, unsigned long theCurrentValue[], unsigned long theNewValue[]) {
  register int row, j;
  for (row = sz; row > 0; row--, y0++) {
    GetPixelsQuickly(x0, y0, theCurrentValue, sz);
    for (j = 0; j < sz; j++)
      theNewValue[j] = (unsigned long)(bmval ^ (unsigned char)theCurrentValue[j]);
    SetPixelsQuickly(x0, y0, theNewValue, sz);
  }
}
```