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

```asm
<vertex_degree>:
  endbr64
  push   %r15
  mov    %ecx,%eax
  mov    %rdx,%r15
  push   %r14
  mov    %esi,%r14d
  push   %r13
  mov    %r9d,%r13d
  push   %r12
  mov    %r8d,%r12d
  push   %rbp
  mov    %ecx,%ebp
  push   %rbx
  mov    %edi,%ebx
  sub    $0x8,%rsp
  or     %r8d,%eax
  js     L91
  cmp    %edi,%ecx
  jg     L91
  xor    %edi,%edi
  cmp    %esi,%r8d
  setle  %dil
L146:
  call   <assert@plt>
  test   %ebp,%ebp
  setg   %dl
  test   %r12d,%r12d
  setg   %dil
  test   %dl,%dl
  je     L20
  test   %dil,%dil
  je     L20
  lea    -0x1(%r12),%ecx
  lea    -0x1(%rbp),%r10d
  mov    $0x1,%r8d
  mov    %ecx,%eax
  imul   %ebx,%eax
  add    %r10d,%eax
  cltq
  movsbl (%r15,%rax,1),%r11d
  xor    %eax,%eax
  cmp    %r13d,%r11d
  jl     L63
L9:
  cmp    %r14d,%r12d
  setl   %cl
  test   %dl,%dl
  je     L189
  test   %cl,%cl
  je     L189
  mov    %ebx,%edx
  lea    -0x1(%rbp),%esi
  imul   %r12d,%edx
  add    %esi,%edx
  movslq %edx,%rdx
  movsbl (%r15,%rdx,1),%edx
  add    %r13d,%edx
  test   %edx,%edx
  jle    L189
  cmpq   $0x0,0x40(%rsp)
  je     L196
  mov    0x40(%rsp),%rax
  mov    %esi,(%rax)
L196:
  cmpq   $0x0,0x48(%rsp)
  je     L142
  mov    0x48(%rsp),%rax
  mov    %r12d,(%rax)
L142:
  mov    %r8d,%eax
L189:
  cmp    %ebx,%ebp
  setl   %sil
  test   %dil,%dil
  je     L96
  test   %sil,%sil
  je     L96
  lea    -0x1(%r12),%edi
  mov    %edi,%edx
  imul   %ebx,%edx
  add    %ebp,%edx
  movslq %edx,%rdx
  movsbl (%r15,%rdx,1),%edx
  add    %r13d,%edx
  test   %edx,%edx
  jle    L96
  cmpq   $0x0,0x40(%rsp)
  je     L207
  mov    0x40(%rsp),%rdx
  mov    %ebp,(%rdx)
L207:
  cmpq   $0x0,0x48(%rsp)
  je     L102
  mov    0x48(%rsp),%rdx
  mov    %edi,(%rdx)
L102:
  add    $0x1,%eax
L96:
  test   %cl,%cl
  je     L156
  test   %sil,%sil
  je     L156
  imul   %r12d,%ebx
  add    %ebp,%ebx
  movslq %ebx,%rbx
  movsbl (%r15,%rbx,1),%edx
  cmp    %r13d,%edx
  jl     L212
L156:
  mov    $0x4,%edx
  sub    %eax,%edx
  test   %r13d,%r13d
  cmovne %edx,%eax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L20:
  mov    $0x1,%r8d
  xor    %eax,%eax
  jmp    L9
  nopl   (%rax)
L91:
  xor    %edi,%edi
  jmp    L146
  nopw   0x0(%rax,%rax,1)
L63:
  cmpq   $0x0,0x40(%rsp)
  je     L217
  mov    0x40(%rsp),%rax
  mov    %r10d,(%rax)
L217:
  cmpq   $0x0,0x48(%rsp)
  je     L119
  mov    0x48(%rsp),%rax
  mov    $0x2,%r8d
  mov    %ecx,(%rax)
  mov    $0x1,%eax
  jmp    L9
  nop
L212:
  cmpq   $0x0,0x40(%rsp)
  je     L52
  mov    0x40(%rsp),%rsi
  mov    %ebp,(%rsi)
L52:
  cmpq   $0x0,0x48(%rsp)
  je     L154
  mov    0x48(%rsp),%rcx
  mov    %r12d,(%rcx)
L154:
  add    $0x1,%eax
  jmp    L156
  nopw   0x0(%rax,%rax,1)
L119:
  mov    $0x2,%r8d
  mov    $0x1,%eax
  jmp    L9
```

assistant: ```c
int vertex_degree(int w, int h, signed char *soln, int x, int y, int anti, int *sx, int *sy) {
  int ret = 0;
  assert(x >= 0 && x <= w && y >= 0 && y <= h);
  if (x > 0 && y > 0 && soln[(y - 1) * w + (x - 1)] - anti < 0) {
    if (sx)
      *sx = x - 1;
    if (sy)
      *sy = y - 1;
    ret++;
  }
  if (x > 0 && y < h && soln[y * w + (x - 1)] + anti > 0) {
    if (sx)
      *sx = x - 1;
    if (sy)
      *sy = y;
    ret++;
  }
  if (x < w && y > 0 && soln[(y - 1) * w + x] + anti > 0) {
    if (sx)
      *sx = x;
    if (sy)
      *sy = y - 1;
    ret++;
  }
  if (x < w && y < h && soln[y * w + x] - anti < 0) {
    if (sx)
      *sx = x;
    if (sy)
      *sy = y;
    ret++;
  }
  return anti ? 4 - ret : ret;
}
```