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

```asm
<ComputeSum_obsolete>:
  endbr64
  mov    %rdx,%r9
  mov    %esi,%edx
  xor    %r10d,%r10d
  push   %r12
  shr    $0x1f,%edx
  push   %rbp
  lea    (%rsi,%rdx,1),%eax
  push   %rbx
  and    $0x1,%eax
  sub    %edx,%eax
  mov    %eax,%r8d
  je     L182
  test   %rcx,%rcx
  je     L182
  addl   $0x1,(%rcx)
L182:
  cmp    $0x1,%esi
  jle    L137
  lea    -0x2(%rsi),%ebx
  mov    %ebx,%r11d
  shr    %r11d
  lea    0x1(%r11),%edx
  cmp    $0xd,%ebx
  jbe    L109
  mov    %edx,%ecx
  pxor   %xmm0,%xmm0
  pxor   %xmm4,%xmm4
  mov    %rdi,%rax
  shr    $0x3,%ecx
  pxor   %xmm3,%xmm3
  sub    $0x1,%ecx
  shl    $0x4,%rcx
  lea    0x10(%rdi,%rcx,1),%rcx
  nopw   0x0(%rax,%rax,1)
L74:
  movdqu (%rax),%xmm1
  add    $0x10,%rax
  movdqa %xmm1,%xmm2
  punpckhwd %xmm4,%xmm1
  punpcklwd %xmm4,%xmm2
  movdqa %xmm2,%xmm5
  punpckhdq %xmm3,%xmm2
  punpckldq %xmm3,%xmm5
  paddq  %xmm5,%xmm0
  paddq  %xmm2,%xmm0
  movdqa %xmm1,%xmm2
  punpckhdq %xmm3,%xmm1
  punpckldq %xmm3,%xmm2
  paddq  %xmm2,%xmm0
  paddq  %xmm1,%xmm0
  cmp    %rcx,%rax
  jne    L74
  mov    %edx,%ebp
  movdqa %xmm0,%xmm1
  and    $0xfffffff8,%ebp
  psrldq $0x8,%xmm1
  mov    %ebp,%r12d
  paddq  %xmm1,%xmm0
  mov    %ebp,%ecx
  neg    %r12d
  movq   %xmm0,%rax
  lea    (%rdi,%rcx,2),%rcx
  lea    (%rsi,%r12,2),%esi
  cmp    %ebp,%edx
  je     L92
L19:
  movzwl (%rcx),%ebp
  add    %rbp,%rax
  lea    -0x2(%rsi),%ebp
  cmp    $0x1,%ebp
  jle    L92
  movzwl 0x2(%rcx),%ebp
  add    %rbp,%rax
  lea    -0x4(%rsi),%ebp
  cmp    $0x1,%ebp
  jle    L92
  movzwl 0x4(%rcx),%ebp
  add    %rbp,%rax
  lea    -0x6(%rsi),%ebp
  cmp    $0x1,%ebp
  jle    L92
  movzwl 0x6(%rcx),%ebp
  add    %rbp,%rax
  lea    -0x8(%rsi),%ebp
  cmp    $0x1,%ebp
  jle    L92
  movzwl 0x8(%rcx),%ebp
  add    %rbp,%rax
  lea    -0xa(%rsi),%ebp
  cmp    $0x1,%ebp
  jle    L92
  movzwl 0xa(%rcx),%ebp
  add    %rbp,%rax
  cmp    $0xd,%esi
  jle    L92
  movzwl 0xc(%rcx),%ecx
  add    %rcx,%rax
L92:
  neg    %r11d
  lea    (%rdi,%rdx,2),%rdi
  lea    (%rbx,%r11,2),%edx
  cmp    $0x1,%edx
  jne    L160
  jmp    L54
  nopl   0x0(%rax,%rax,1)
L152:
  movzwl %ax,%eax
  add    %rdx,%rax
L160:
  mov    %rax,%rdx
  sar    $0x10,%rdx
  jne    L152
L202:
  test   %r9,%r9
  je     L50
  cmpb   $0x0,(%r9)
  jne    L80
L157:
  mov    %r8b,(%r9)
L50:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopw   0x0(%rax,%rax,1)
L80:
  mov    %rax,%rdx
  shl    $0x8,%rax
  sar    $0x8,%rdx
  movzwl %ax,%eax
  add    %rdx,%rax
  jmp    L157
  nopl   0x0(%rax,%rax,1)
L137:
  mov    $0x0,%eax
  jne    L202
  nopw   0x0(%rax,%rax,1)
L54:
  mov    (%rdi),%r10b
  movzwl %r10w,%r10d
  add    %r10,%rax
  jmp    L160
L109:
  mov    %rdi,%rcx
  xor    %eax,%eax
  jmp    L19
```

assistant: ```c
unsigned short ComputeSum_obsolete(unsigned short *Buffer, int count, char *odd_boundary, int *nb_odd) {
  register long sum = 0;
  unsigned short not_checksum = 0;
  unsigned short oddbyte = 0;
  char is_odd = (char)(count % 2);
  if (is_odd && nb_odd != NULL)
    (*nb_odd) = (*nb_odd) + 1;
  while (count > 1) {
    sum += *Buffer++;
    count -= 2;
  }
  if (count > 0) {
    *((unsigned char *)&oddbyte) = *(unsigned char *)Buffer;
    sum += oddbyte;
  }
  while (sum >> 16) {
    sum = (sum & 0xFFFF) + (sum >> 16);
  }
  if (odd_boundary && *odd_boundary) {
    sum = ((sum & 0xFF00) >> 8) + ((sum & 0x00FF) << 8);
  }
  if (odd_boundary)
    *odd_boundary = is_odd;
  not_checksum = (unsigned short)sum;
  return not_checksum;
}
```