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

```asm
<ComputeSimpleChecksum>:
  endbr64
  mov    %rdi,%rcx
  mov    %esi,%edx
  test   %esi,%esi
  jle    L64
  lea    -0x1(%rsi),%eax
  cmp    $0xe,%eax
  jbe    L61
  shr    $0x4,%esi
  pxor   %xmm3,%xmm3
  pxor   %xmm6,%xmm6
  mov    %rdi,%rax
  sub    $0x1,%esi
  pxor   %xmm4,%xmm4
  movdqa D22(%rip),%xmm5
  movdqa D47(%rip),%xmm10
  shl    $0x4,%rsi
  movdqa D33(%rip),%xmm7
  movdqa D48(%rip),%xmm9
  movdqa D1(%rip),%xmm8
  lea    0x10(%rdi,%rsi,1),%rsi
  cs nopw 0x0(%rax,%rax,1)
L137:
  movdqu (%rax),%xmm1
  movdqa %xmm5,%xmm12
  add    $0x10,%rax
  paddd  %xmm10,%xmm5
  movdqa %xmm12,%xmm2
  movdqa %xmm1,%xmm0
  punpckhbw %xmm6,%xmm1
  paddd  %xmm9,%xmm2
  movdqa %xmm1,%xmm13
  movdqa %xmm2,%xmm11
  punpckhwd %xmm4,%xmm1
  punpcklwd %xmm4,%xmm13
  psrlq  $0x20,%xmm2
  punpcklbw %xmm6,%xmm0
  pmuludq %xmm13,%xmm11
  psrlq  $0x20,%xmm13
  pmuludq %xmm13,%xmm2
  pshufd $0x8,%xmm11,%xmm11
  pshufd $0x8,%xmm2,%xmm2
  punpckldq %xmm2,%xmm11
  movdqa %xmm12,%xmm2
  paddd  %xmm8,%xmm2
  movdqa %xmm2,%xmm13
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm13
  psrlq  $0x20,%xmm1
  pmuludq %xmm1,%xmm2
  movdqa %xmm11,%xmm1
  pshufd $0x8,%xmm13,%xmm13
  pshufd $0x8,%xmm2,%xmm2
  punpckldq %xmm2,%xmm13
  movdqa %xmm12,%xmm2
  paddd  %xmm13,%xmm1
  paddd  %xmm7,%xmm2
  movdqa %xmm0,%xmm13
  punpckhwd %xmm4,%xmm13
  movdqa %xmm2,%xmm11
  punpcklwd %xmm4,%xmm0
  pmuludq %xmm13,%xmm11
  psrlq  $0x20,%xmm2
  psrlq  $0x20,%xmm13
  pmuludq %xmm13,%xmm2
  pshufd $0x8,%xmm11,%xmm11
  pshufd $0x8,%xmm2,%xmm2
  punpckldq %xmm2,%xmm11
  movdqa %xmm0,%xmm2
  pmuludq %xmm12,%xmm2
  psrlq  $0x20,%xmm0
  psrlq  $0x20,%xmm12
  pmuludq %xmm12,%xmm0
  pshufd $0x8,%xmm2,%xmm2
  pshufd $0x8,%xmm0,%xmm0
  punpckldq %xmm0,%xmm2
  paddd  %xmm2,%xmm11
  paddd  %xmm11,%xmm1
  paddd  %xmm1,%xmm3
  cmp    %rsi,%rax
  jne    L137
  movdqa %xmm3,%xmm0
  mov    %edx,%edi
  psrldq $0x8,%xmm0
  and    $0xfffffff0,%edi
  paddd  %xmm0,%xmm3
  mov    %edi,%esi
  movdqa %xmm3,%xmm0
  add    %rsi,%rcx
  lea    0x1(%rdi),%esi
  psrldq $0x4,%xmm0
  paddd  %xmm0,%xmm3
  movd   %xmm3,%eax
  cmp    %edi,%edx
  je     L15
L132:
  movzbl (%rcx),%edi
  lea    0x1(%rsi),%r8d
  imul   %esi,%edi
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0x1(%rcx),%edi
  imul   %r8d,%edi
  lea    0x2(%rsi),%r8d
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0x2(%rcx),%edi
  imul   %r8d,%edi
  lea    0x3(%rsi),%r8d
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0x3(%rcx),%edi
  imul   %r8d,%edi
  lea    0x4(%rsi),%r8d
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0x4(%rcx),%edi
  imul   %r8d,%edi
  lea    0x5(%rsi),%r8d
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0x5(%rcx),%edi
  imul   %r8d,%edi
  lea    0x6(%rsi),%r8d
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0x6(%rcx),%edi
  imul   %r8d,%edi
  lea    0x7(%rsi),%r8d
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0x7(%rcx),%edi
  imul   %r8d,%edi
  lea    0x8(%rsi),%r8d
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0x8(%rcx),%edi
  imul   %r8d,%edi
  lea    0x9(%rsi),%r8d
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0x9(%rcx),%edi
  imul   %r8d,%edi
  lea    0xa(%rsi),%r8d
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0xa(%rcx),%edi
  imul   %r8d,%edi
  lea    0xb(%rsi),%r8d
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0xb(%rcx),%edi
  imul   %r8d,%edi
  lea    0xc(%rsi),%r8d
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0xc(%rcx),%edi
  imul   %r8d,%edi
  lea    0xd(%rsi),%r8d
  add    %edi,%eax
  cmp    %r8d,%edx
  jl     L170
  movzbl 0xd(%rcx),%edi
  add    $0xe,%esi
  imul   %r8d,%edi
  add    %edi,%eax
  cmp    %esi,%edx
  jl     L170
  movzbl 0xe(%rcx),%edx
  imul   %esi,%edx
  add    %edx,%eax
  ret
  xchg   %ax,%ax
L64:
  xor    %eax,%eax
L170:
  ret
L61:
  mov    $0x1,%esi
  xor    %eax,%eax
  jmp    L132
L15:
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D22
datatype: byte[16]
name: extract_symbolic_data
arguments: label: D47
datatype: byte[16]
name: extract_symbolic_data
arguments: label: D33
datatype: byte[16]
name: extract_symbolic_data
arguments: label: D48
datatype: byte[16]
name: extract_symbolic_data
arguments: label: D1
datatype: byte[16]

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

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

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

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

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

assistant: ```c
unsigned int ComputeSimpleChecksum(const unsigned char *dataPointer, int dataLength) {
  unsigned int checksum = 0;
  for (int i = 1; i <= dataLength; i++) {
    checksum += (*dataPointer) * i;
    ++dataPointer;
  }
  return checksum;
}
```