user: 这段汇编代码用C语言表示是什么样的?

```asm
<horizontalAccumulate16>:
  endbr64
  mov    %esi,%r8d
  mov    %edx,%esi
  mov    %r8d,%edx
  shr    $0x1f,%edx
  lea    (%rdx,%r8,1),%ecx
  sar    %ecx
  cmp    %esi,%ecx
  jle    L128
  push   %r15
  mov    %rdi,%rax
  lea    -0x5(%rsi),%r15d
  sub    %esi,%ecx
  push   %r14
  movslq %esi,%r14
  push   %r13
  lea    (%r14,%r14,1),%rdx
  push   %r12
  lea    -0x2(%rdx),%rdi
  push   %rbp
  push   %rbx
  lea    -0x4(%rsi),%ebx
  mov    %r15d,-0x20(%rsp)
  cmp    $0xc,%rdi
  jbe    L183
  cmp    $0x2,%r15d
  jbe    L183
  mov    %ebx,%edi
  mov    %ebx,%r12d
  and    $0xfffffff8,%r12d
  shr    $0x3,%edi
  lea    -0x1(%rdi),%r9d
  mov    %r12d,%edi
  add    %rdi,%rdi
  add    $0x1,%r9
  mov    %rdi,-0x28(%rsp)
  mov    %ebx,%edi
  shl    $0x4,%r9
  sub    %r12d,%edi
  mov    %edi,-0x1c(%rsp)
  mov    %r15d,%edi
  lea    0x2(%rdi,%rdi,1),%rdi
  mov    %rdi,-0x30(%rsp)
  lea    0x2(%rdx),%rdi
  mov    %rdi,-0x10(%rsp)
  mov    %esi,%edi
  sub    %r12d,%edi
  lea    -0x4(%rdi),%r10d
  sub    $0x5,%edi
  mov    %r10d,-0x18(%rsp)
  mov    %esi,%r10d
  mov    %edi,-0x14(%rsp)
  lea    D6(%rip),%rdi
  nopl   0x0(%rax,%rax,1)
L127:
  cmp    $0x4,%esi
  ja     L114
  movslq (%rdi,%r10,4),%r8
  add    %rdi,%r8
  notrack jmp *%r8
L114:
  test   %ebx,%ebx
  jle    L142
  cmpl   $0x6,-0x20(%rsp)
  jbe    L61
  lea    (%rax,%rdx,1),%r11
  xor    %r8d,%r8d
  nopw   0x0(%rax,%rax,1)
L131:
  movdqu (%r11,%r8,1),%xmm0
  movdqu (%rax,%r8,1),%xmm2
  paddw  %xmm2,%xmm0
  movups %xmm0,(%r11,%r8,1)
  add    $0x10,%r8
  cmp    %r9,%r8
  jne    L131
  mov    -0x28(%rsp),%r15
  lea    (%rax,%r15,1),%r8
  cmp    %r12d,%ebx
  je     L28
  cmpl   $0x2,-0x14(%rsp)
  mov    -0x18(%rsp),%r13d
  jbe    L42
  mov    -0x1c(%rsp),%ebp
  mov    %r12d,%r11d
L196:
  lea    (%r14,%r11,1),%r15
  movq   (%rax,%r11,2),%xmm0
  mov    %r13d,%r11d
  lea    (%rax,%r15,2),%r15
  and    $0xfffffffc,%r11d
  movq   (%r15),%xmm1
  sub    %r11d,%ebp
  paddw  %xmm1,%xmm0
  movq   %xmm0,(%r15)
  mov    %r11d,%r15d
  lea    (%r8,%r15,2),%r8
  cmp    %r11d,%r13d
  je     L28
L154:
  movzwl (%r8),%r11d
  add    %r11w,(%r8,%rdx,1)
  cmp    $0x1,%ebp
  je     L28
  mov    -0x10(%rsp),%r15
  movzwl 0x2(%r8),%r11d
  add    %r11w,(%r8,%r15,1)
  lea    0x4(%r8),%r11
  cmp    $0x2,%ebp
  je     L28
  movzwl 0x4(%r8),%r8d
  add    %r8w,(%r11,%rdx,1)
L28:
  add    -0x30(%rsp),%rax
L142:
  movzwl (%rax),%r8d
  add    %r8w,(%rax,%rdx,1)
  add    $0x2,%rax
  movzwl (%rax),%r8d
  add    %r8w,(%rax,%rdx,1)
  add    $0x2,%rax
  movzwl (%rax),%r8d
  add    %r8w,(%rax,%rdx,1)
  add    $0x2,%rax
  movzwl (%rax),%r8d
  add    %r8w,(%rax,%rdx,1)
  add    $0x2,%rax
  sub    %esi,%ecx
  test   %ecx,%ecx
  jg     L127
L69:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L128:
  ret
  nopl   0x0(%rax)
L183:
  mov    -0x20(%rsp),%edi
  mov    %esi,%r10d
  lea    D2(%rip),%r8
  lea    0x2(%rdi,%rdi,1),%r11
  nopl   0x0(%rax,%rax,1)
L110:
  cmp    $0x4,%esi
  ja     L70
  movslq (%r8,%r10,4),%rdi
  add    %r8,%rdi
  notrack jmp *%rdi
L70:
  test   %ebx,%ebx
  jle    L167
  lea    (%rax,%r11,1),%r9
  nop
L146:
  movzwl (%rax),%edi
  add    %di,(%rax,%rdx,1)
  add    $0x2,%rax
  cmp    %r9,%rax
  jne    L146
L167:
  movzwl (%rax),%edi
  add    %di,(%rax,%rdx,1)
  add    $0x2,%rax
  movzwl (%rax),%edi
  add    %di,(%rax,%rdx,1)
  add    $0x2,%rax
  movzwl (%rax),%edi
  add    %di,(%rax,%rdx,1)
  add    $0x2,%rax
  movzwl (%rax),%edi
  add    %di,(%rax,%rdx,1)
  add    $0x2,%rax
  sub    %esi,%ecx
  test   %ecx,%ecx
  jg     L110
  jmp    L69
L61:
  mov    %ebx,%r13d
  mov    %ebx,%ebp
  mov    %rax,%r8
  xor    %r11d,%r11d
  jmp    L196
L42:
  mov    -0x1c(%rsp),%ebp
  jmp    L154
```

assistant: ```c
void horizontalAccumulate16(char *cp, int cc, register int stride) {
  register short *wp = (short *)cp;
  register int wc = cc / 2;
  if (wc > stride) {
    wc -= stride;
    do {
      switch (stride) {
      default: {
        int i;
        for (i = stride - 4; i > 0; i--) {
          wp[stride] += wp[0];
          wp++;
        }
      }
      case 4:
        wp[stride] += wp[0];
        wp++;
      case 3:
        wp[stride] += wp[0];
        wp++;
      case 2:
        wp[stride] += wp[0];
        wp++;
      case 1:
        wp[stride] += wp[0];
        wp++;
      case 0:;
      }
      wc -= stride;
    } while (wc > 0);
  }
}
```