user: 下面的汇编指令对应的C源代码是什么:

```asm
<vp8_short_walsh4x4_c>:
  endbr64
  mov    %rsi,%rax
  mov    %edx,%esi
  mov    %rdi,%rcx
  push   %r15
  shr    $0x1f,%esi
  push   %r14
  add    %edx,%esi
  push   %r13
  push   %r12
  sar    %esi
  push   %rbp
  movslq %esi,%rsi
  push   %rbx
  movswl 0x4(%rcx),%ebx
  add    %rsi,%rsi
  movswl 0x6(%rcx),%r10d
  movswl 0x2(%rcx),%edx
  movswl (%rdi),%edi
  lea    (%rdx,%r10,1),%r11d
  lea    (%rdi,%rbx,1),%r9d
  shl    $0x2,%r11d
  shl    $0x2,%r9d
  cmp    $0x1,%r9d
  lea    (%r11,%r9,1),%r8d
  sbb    $0xffff,%r8w
  sub    %ebx,%edi
  sub    %r10d,%edx
  add    %rsi,%rcx
  shl    $0x2,%edi
  shl    $0x2,%edx
  mov    %r8w,(%rax)
  movswl %r8w,%r8d
  lea    (%rdx,%rdi,1),%r10d
  mov    %edi,%ebx
  mov    %r9d,%edi
  sub    %edx,%ebx
  sub    %r11d,%edi
  mov    %r10w,0x2(%rax)
  movswl %r10w,%r10d
  mov    %bx,0x4(%rax)
  mov    %di,0x6(%rax)
  movswl 0x4(%rcx),%r12d
  movswl 0x6(%rcx),%r9d
  movswl (%rcx),%ebp
  mov    %bx,-0x4c(%rsp)
  movswl 0x2(%rcx),%edx
  mov    %di,-0x34(%rsp)
  lea    0x0(%rbp,%r12,1),%ebx
  lea    (%rdx,%r9,1),%r11d
  shl    $0x2,%ebx
  shl    $0x2,%r11d
  cmp    $0x1,%ebx
  lea    (%r11,%rbx,1),%edi
  sbb    $0xffff,%di
  sub    %r12d,%ebp
  sub    %r9d,%edx
  add    %rsi,%rcx
  shl    $0x2,%ebp
  shl    $0x2,%edx
  mov    %di,0x8(%rax)
  movswl %di,%edi
  mov    %ebp,%r15d
  lea    (%rdx,%rbp,1),%r9d
  sub    %edx,%r15d
  mov    %ebx,%edx
  mov    %r9w,0xa(%rax)
  movswl %r9w,%r9d
  sub    %r11d,%edx
  mov    %r15w,0xc(%rax)
  mov    %dx,0xe(%rax)
  movswl 0x4(%rcx),%r14d
  movswl 0x6(%rcx),%r12d
  movswl 0x2(%rcx),%r11d
  mov    %dx,-0x2c(%rsp)
  movswl (%rcx),%edx
  mov    %r15w,-0x30(%rsp)
  lea    (%r11,%r12,1),%r13d
  lea    (%rdx,%r14,1),%ebp
  shl    $0x2,%r13d
  shl    $0x2,%ebp
  cmp    $0x1,%ebp
  lea    0x0(%r13,%rbp,1),%ebx
  sbb    $0xffff,%bx
  sub    %r14d,%edx
  sub    %r12d,%r11d
  sub    %r13d,%ebp
  shl    $0x2,%r11d
  shl    $0x2,%edx
  mov    %bx,0x10(%rax)
  movswl %bx,%ebx
  lea    (%r11,%rdx,1),%r12d
  sub    %r11d,%edx
  lea    (%r8,%rbx,1),%r15d
  mov    %r12w,0x12(%rax)
  movswl %r12w,%r12d
  mov    %dx,0x14(%rax)
  movswl %dx,%edx
  mov    %bp,0x16(%rax)
  mov    %bp,-0x28(%rsp)
  lea    (%rcx,%rsi,1),%rbp
  movswl 0x4(%rbp),%r14d
  movswl 0x0(%rbp),%ecx
  movswl 0x2(%rbp),%r11d
  movswl 0x6(%rbp),%ebp
  lea    (%rcx,%r14,1),%esi
  sub    %r14d,%ecx
  lea    (%r11,%rbp,1),%r13d
  shl    $0x2,%esi
  sub    %ebp,%r11d
  shl    $0x2,%ecx
  shl    $0x2,%r13d
  shl    $0x2,%r11d
  cmp    $0x1,%esi
  lea    0x0(%r13,%rsi,1),%ebp
  sbb    $0xffff,%bp
  sub    %ebx,%r8d
  sub    %r13d,%esi
  movswl %bp,%ebp
  movswl %si,%esi
  lea    (%rdi,%rbp,1),%r14d
  sub    %ebp,%edi
  lea    (%rdi,%r8,1),%ebp
  lea    (%r15,%r14,1),%ebx
  sub    %edi,%r8d
  sub    %r14d,%r15d
  mov    %r8d,%edi
  mov    %ebx,%r8d
  mov    %r15d,%r14d
  mov    %ebp,-0x40(%rsp)
  shr    $0x1f,%r8d
  mov    %edi,-0x3c(%rsp)
  mov    %edi,%r15d
  lea    (%r11,%rcx,1),%edi
  mov    %r8d,-0x24(%rsp)
  mov    %ebp,%r8d
  movswl %di,%edi
  sub    %r11d,%ecx
  shr    $0x1f,%r8d
  lea    (%rdi,%r9,1),%ebp
  sub    %edi,%r9d
  movswl %cx,%ecx
  mov    %r8d,-0x20(%rsp)
  mov    %r14d,%r8d
  shr    $0x1f,%r15d
  shr    $0x1f,%r8d
  mov    %r14d,-0x38(%rsp)
  mov    %r8d,-0x18(%rsp)
  lea    (%r10,%r12,1),%r8d
  sub    %r12d,%r10d
  lea    (%r10,%r9,1),%edi
  sub    %r9d,%r10d
  mov    %r8d,%r9d
  mov    %r15d,-0x1c(%rsp)
  lea    0x0(%rbp,%r8,1),%r12d
  sub    %ebp,%r9d
  mov    %r10d,-0x44(%rsp)
  movswl -0x28(%rsp),%r15d
  mov    %r9d,%ebp
  mov    %r12d,%r9d
  shr    $0x1f,%r9d
  mov    %ebp,-0x48(%rsp)
  shr    $0x1f,%ebp
  mov    %r9d,%r8d
  mov    %edi,%r9d
  mov    %ebp,-0xc(%rsp)
  shr    $0x1f,%r9d
  lea    0x3(%r12,%r8,1),%r8d
  mov    %r9d,-0x14(%rsp)
  mov    %r10d,%r9d
  movswl -0x30(%rsp),%r10d
  shr    $0x1f,%r9d
  mov    %r9d,-0x10(%rsp)
  movswl -0x4c(%rsp),%r9d
  mov    %r10d,%r11d
  lea    (%rcx,%r10,1),%r14d
  sub    %ecx,%r11d
  lea    (%rdx,%r9,1),%ebp
  mov    %r9d,%ecx
  sub    %edx,%ecx
  lea    (%r14,%rbp,1),%r10d
  sub    %r14d,%ebp
  lea    (%rcx,%r11,1),%r9d
  mov    %ecx,%edx
  mov    %r10d,%ecx
  shr    $0x1f,%ecx
  sub    %r11d,%edx
  mov    %ecx,%r14d
  mov    %r9d,%ecx
  mov    %edx,-0x4c(%rsp)
  shr    $0x1f,%ecx
  lea    0x3(%r10,%r14,1),%r10d
  mov    %ecx,-0x30(%rsp)
  mov    %edx,%ecx
  movswl -0x2c(%rsp),%edx
  shr    $0x1f,%ecx
  mov    %ecx,-0x8(%rsp)
  mov    %ebp,%ecx
  lea    (%rdx,%rsi,1),%r13d
  sub    %esi,%edx
  shr    $0x1f,%ecx
  mov    %ecx,-0x4(%rsp)
  movswl -0x34(%rsp),%ecx
  lea    (%rcx,%r15,1),%r11d
  sub    %r15d,%ecx
  lea    (%r11,%r13,1),%r15d
  lea    (%rdx,%rcx,1),%esi
  sub    %edx,%ecx
  sub    %r13d,%r11d
  mov    %r15d,%edx
  shr    $0x1f,%edx
  mov    %edx,%r13d
  mov    %esi,%edx
  shr    $0x1f,%edx
  lea    0x3(%r15,%r13,1),%r12d
  sar    $0x3,%r10d
  mov    %edx,-0x34(%rsp)
  mov    %ecx,%edx
  sar    $0x3,%r12d
  movzwl %r10w,%r10d
  shr    $0x1f,%edx
  movzwl %r12w,%r12d
  sar    $0x3,%r8d
  mov    %edx,-0x2c(%rsp)
  mov    %r11d,%edx
  shl    $0x10,%r12
  movzwl %r8w,%r8d
  shr    $0x1f,%edx
  or     %r10,%r12
  mov    %edx,-0x28(%rsp)
  mov    -0x24(%rsp),%edx
  shl    $0x10,%r12
  or     %r8,%r12
  lea    0x3(%rbx,%rdx,1),%ebx
  shl    $0x10,%r12
  sar    $0x3,%ebx
  movzwl %bx,%ebx
  or     %rbx,%r12
  mov    %r12,(%rax)
  mov    -0x40(%rsp),%r13d
  mov    -0x20(%rsp),%r12d
  mov    -0x1c(%rsp),%r15d
  mov    -0x44(%rsp),%r10d
  mov    -0x2c(%rsp),%edx
  lea    0x3(%r13,%r12,1),%r8d
  mov    -0x14(%rsp),%r13d
  mov    -0x48(%rsp),%ebx
  sar    $0x3,%r8d
  lea    0x3(%rcx,%rdx,1),%ecx
  mov    -0x38(%rsp),%r14d
  lea    0x3(%rdi,%r13,1),%edi
  mov    -0x30(%rsp),%r13d
  movzwl %r8w,%r8d
  sar    $0x3,%ecx
  sar    $0x3,%edi
  movzwl %cx,%ecx
  lea    0x3(%r9,%r13,1),%r9d
  mov    -0x34(%rsp),%r13d
  movzwl %di,%edi
  shl    $0x10,%rcx
  sar    $0x3,%r9d
  lea    0x3(%rsi,%r13,1),%esi
  movzwl %r9w,%r9d
  sar    $0x3,%esi
  movzwl %si,%esi
  shl    $0x10,%rsi
  or     %r9,%rsi
  mov    -0x10(%rsp),%r9d
  shl    $0x10,%rsi
  or     %rdi,%rsi
  mov    -0x3c(%rsp),%edi
  shl    $0x10,%rsi
  or     %r8,%rsi
  mov    %rsi,0x8(%rax)
  lea    0x3(%rdi,%r15,1),%esi
  mov    -0x4c(%rsp),%r15d
  lea    0x3(%r10,%r9,1),%edi
  mov    -0x8(%rsp),%r10d
  sar    $0x3,%edi
  sar    $0x3,%esi
  movzwl %di,%edi
  lea    0x3(%r15,%r10,1),%r8d
  sar    $0x3,%r8d
  movzwl %r8w,%r8d
  or     %r8,%rcx
  mov    -0x18(%rsp),%r8d
  shl    $0x10,%rcx
  or     %rdi,%rcx
  movzwl %si,%edi
  mov    %rcx,%rsi
  lea    0x3(%r14,%r8,1),%ecx
  shl    $0x10,%rsi
  or     %rdi,%rsi
  mov    -0xc(%rsp),%edi
  sar    $0x3,%ecx
  mov    %rsi,0x10(%rax)
  movzwl %cx,%ecx
  lea    0x3(%rbx,%rdi,1),%esi
  mov    -0x4(%rsp),%ebx
  sar    $0x3,%esi
  lea    0x3(%rbp,%rbx,1),%edi
  mov    -0x28(%rsp),%ebx
  movzwl %si,%esi
  sar    $0x3,%edi
  lea    0x3(%r11,%rbx,1),%edx
  movzwl %di,%edi
  pop    %rbx
  pop    %rbp
  sar    $0x3,%edx
  pop    %r12
  pop    %r13
  movzwl %dx,%edx
  pop    %r14
  pop    %r15
  shl    $0x10,%rdx
  or     %rdi,%rdx
  shl    $0x10,%rdx
  or     %rsi,%rdx
  shl    $0x10,%rdx
  or     %rcx,%rdx
  mov    %rdx,0x18(%rax)
  ret
```

assistant: ```c
void vp8_short_walsh4x4_c(short *input, short *output, int pitch) {
  int i;
  int a1, b1, c1, d1;
  int a2, b2, c2, d2;
  short *ip = input;
  short *op = output;
  for (i = 0; i < 4; i++) {
    a1 = ((ip[0] + ip[2]) << 2);
    d1 = ((ip[1] + ip[3]) << 2);
    c1 = ((ip[1] - ip[3]) << 2);
    b1 = ((ip[0] - ip[2]) << 2);
    op[0] = a1 + d1 + (a1 != 0);
    op[1] = b1 + c1;
    op[2] = b1 - c1;
    op[3] = a1 - d1;
    ip += pitch / 2;
    op += 4;
  }
  ip = output;
  op = output;
  for (i = 0; i < 4; i++) {
    a1 = ip[0] + ip[8];
    d1 = ip[4] + ip[12];
    c1 = ip[4] - ip[12];
    b1 = ip[0] - ip[8];
    a2 = a1 + d1;
    b2 = b1 + c1;
    c2 = b1 - c1;
    d2 = a1 - d1;
    a2 += a2 < 0;
    b2 += b2 < 0;
    c2 += c2 < 0;
    d2 += d2 < 0;
    op[0] = (a2 + 3) >> 3;
    op[4] = (b2 + 3) >> 3;
    op[8] = (c2 + 3) >> 3;
    op[12] = (d2 + 3) >> 3;
    ip++;
    op++;
  }
}
```