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

```asm
<blur_cusp2>:
  endbr64
  imul   %edx,%ecx
  mov    $0x100,%r9d
  push   %r15
  mov    (%rdi),%eax
  push   %r14
  sub    %r8d,%r9d
  push   %r13
  movslq %ecx,%r11
  push   %r12
  mov    %r11,%r10
  push   %rbp
  lea    -0x4(%rsi,%r11,4),%r14
  lea    -0x1(%r11),%ebp
  push   %rbx
  mov    %edx,%ebx
  test   %r11d,%r11d
  jle    L127
  xor    %edx,%edx
  nopl   0x0(%rax,%rax,1)
L156:
  mov    (%rdi,%rdx,4),%ecx
  imul   %r8d,%eax
  imul   %r9d,%ecx
  add    %ecx,%eax
  sar    $0x8,%eax
  mov    %eax,(%rsi,%rdx,4)
  add    $0x1,%rdx
  cmp    %rdx,%r11
  jne    L156
L164:
  mov    (%r14),%eax
  movslq %ebp,%rdx
  nopw   0x0(%rax,%rax,1)
L167:
  mov    (%rsi,%rdx,4),%ecx
  imul   %r8d,%eax
  imul   %r9d,%ecx
  add    %ecx,%eax
  sar    $0x8,%eax
  mov    %eax,(%rdi,%rdx,4)
  sub    $0x1,%rdx
  test   %edx,%edx
  jns    L167
  mov    (%rdi),%edx
  lea    -0x1(%rbx),%r11d
  test   %ebx,%ebx
  jle    L60
  test   %r10d,%r10d
  jg     L43
L11:
  sub    %ebx,%r10d
  movslq %r11d,%rax
  neg    %ebx
  mov    (%r14),%edx
  movslq %r10d,%r12
  movslq %ebx,%r10
  add    %rax,%r12
  nopw   0x0(%rax,%rax,1)
L16:
  test   %ebp,%ebp
  js     L175
  mov    %r12,%rax
  nopw   0x0(%rax,%rax,1)
L95:
  mov    (%rsi,%rax,4),%ecx
  imul   %r8d,%edx
  imul   %r9d,%ecx
  add    %ecx,%edx
  sar    $0x8,%edx
  mov    %edx,(%rdi,%rax,4)
  add    %r10,%rax
  test   %eax,%eax
  jns    L95
L175:
  sub    $0x1,%r11d
  sub    $0x1,%ebp
  sub    $0x1,%r12
  cmp    $0xffffffff,%r11d
  jne    L16
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L43:
  cmp    %r10d,%ebx
  mov    %r10d,%r13d
  cmovle %ebx,%r13d
  xor    %r12d,%r12d
  cmp    $0x1,%ebx
  jne    L27
  nopw   0x0(%rax,%rax,1)
L68:
  mov    %r12,%rcx
  nopl   0x0(%rax,%rax,1)
L69:
  mov    (%rdi,%rcx,4),%eax
  imul   %r8d,%edx
  imul   %r9d,%eax
  add    %edx,%eax
  sar    $0x8,%eax
  mov    %eax,(%rsi,%rcx,4)
  add    $0x1,%rcx
  mov    %eax,%edx
  cmp    %ecx,%r10d
  jg     L69
  add    $0x1,%r12
  cmp    %r12d,%r13d
  jg     L68
  jmp    L11
L27:
  movslq %ebx,%rcx
  nop
L73:
  mov    %r12,%rax
  nopl   0x0(%rax,%rax,1)
L168:
  mov    (%rdi,%rax,4),%r15d
  imul   %r8d,%edx
  imul   %r9d,%r15d
  add    %r15d,%edx
  sar    $0x8,%edx
  mov    %edx,(%rsi,%rax,4)
  add    %rcx,%rax
  cmp    %eax,%r10d
  jg     L168
  add    $0x1,%r12
  cmp    %r12d,%r13d
  jg     L73
  jmp    L11
L127:
  test   %ebp,%ebp
  jns    L164
  lea    -0x1(%rdx),%r11d
  test   %edx,%edx
  jg     L11
L60:
  test   %r11d,%r11d
  jns    L11
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void blur_cusp2(int *in, int *tmp, int w, int h, int amount) {
  int ramount;
  int sum;
  int i, j;
  ramount = 256 - amount;
  sum = in[0];
  for (i = 0; i < w * h; i++) {
    sum = (sum * amount + in[i] * ramount) >> 8;
    tmp[i] = sum;
  }
  sum = tmp[w * h - 1];
  for (i = w * h - 1; i >= 0; i--) {
    sum = (sum * amount + tmp[i] * ramount) >> 8;
    in[i] = sum;
  }
  sum = in[0];
  for (j = 0; j < w; j++) {
    for (i = j; i < w * h; i += w) {
      sum = (sum * amount + in[i] * ramount) >> 8;
      tmp[i] = sum;
    }
  }
  sum = tmp[w * h - 1];
  for (j = w - 1; j >= 0; j--) {
    for (i = w * (h - 1) + j; i >= 0; i -= w) {
      sum = (sum * amount + tmp[i] * ramount) >> 8;
      in[i] = sum;
    }
  }
}
```