user: What would the C source look like for the assembly code provided here:

```asm
<satsub64be>:
  endbr64
  mov    %rdi,%r8
  push   %rbp
  mov    %rsi,%rdi
  push   %rbx
  movzbl 0x7(%r8),%ecx
  movzbl 0x7(%rsi),%eax
  movzbl 0x6(%rsi),%esi
  sub    %eax,%ecx
  movzbl 0x6(%r8),%eax
  mov    %ecx,%edx
  sar    $0x8,%edx
  sub    %esi,%eax
  test   $0x80,%cl
  je     L7
  movzbl 0x5(%rdi),%r9d
  add    %eax,%edx
  movzbl 0x5(%r8),%eax
  mov    %edx,%esi
  movzbl 0x4(%r8),%ebx
  movzbl 0x3(%r8),%r11d
  sar    $0x8,%esi
  sub    %r9d,%eax
  movzbl 0x4(%rdi),%r9d
  movzbl 0x2(%r8),%r10d
  add    %esi,%eax
  movzbl 0x1(%rdi),%ebp
  mov    %eax,%esi
  sub    %r9d,%ebx
  movzbl 0x3(%rdi),%r9d
  and    %eax,%edx
  sar    $0x8,%esi
  add    %esi,%ebx
  sub    %r9d,%r11d
  movzbl 0x2(%rdi),%r9d
  movzbl (%rdi),%edi
  mov    %ebx,%esi
  and    %ebx,%edx
  sar    $0x8,%esi
  sub    %r9d,%r10d
  movzbl 0x1(%r8),%r9d
  add    %esi,%r11d
  mov    %r11d,%esi
  sub    %ebp,%r9d
  and    %r11d,%edx
  sar    $0x8,%esi
  add    %esi,%r10d
  mov    %r10d,%esi
  and    %r10d,%edx
  sar    $0x8,%esi
  add    %esi,%r9d
  movzbl (%r8),%esi
  mov    %r9d,%ebp
  and    %r9d,%edx
  sar    $0x8,%ebp
  sub    %edi,%esi
  add    %ebp,%esi
  and    %esi,%edx
  sar    $0x8,%esi
  not    %edx
L15:
  shl    $0x8,%esi
  movzbl %cl,%eax
  pop    %rbx
  pop    %rbp
  mov    %esi,%edi
  add    %esi,%eax
  or     $0x80,%dil
  test   %dl,%dl
  cmovne %edi,%eax
  ret
  nopl   (%rax)
L7:
  movzbl 0x5(%rdi),%r9d
  add    %edx,%eax
  movzbl 0x5(%r8),%esi
  mov    %eax,%edx
  sar    $0x8,%edx
  sub    %r9d,%esi
  movzbl 0x4(%rdi),%r9d
  add    %edx,%esi
  or     %esi,%eax
  sar    $0x8,%esi
  mov    %eax,%edx
  movzbl 0x4(%r8),%eax
  sub    %r9d,%eax
  movzbl 0x3(%rdi),%r9d
  add    %esi,%eax
  or     %eax,%edx
  sar    $0x8,%eax
  mov    %eax,%esi
  movzbl 0x3(%r8),%eax
  sub    %r9d,%eax
  movzbl 0x2(%rdi),%r9d
  add    %esi,%eax
  or     %eax,%edx
  sar    $0x8,%eax
  mov    %eax,%esi
  movzbl 0x2(%r8),%eax
  sub    %r9d,%eax
  movzbl 0x1(%rdi),%r9d
  movzbl (%rdi),%edi
  add    %esi,%eax
  or     %eax,%edx
  sar    $0x8,%eax
  mov    %eax,%esi
  movzbl 0x1(%r8),%eax
  sub    %r9d,%eax
  add    %esi,%eax
  movzbl (%r8),%esi
  or     %eax,%edx
  sar    $0x8,%eax
  sub    %edi,%esi
  add    %eax,%esi
  or     %esi,%edx
  sar    $0x8,%esi
  jmp    L15
```

assistant: ```c
int satsub64be(const unsigned char *v1, const unsigned char *v2) {
  int ret, sat, brw, i;
  if (sizeof(long) == 8)
    do {
      const union {
        long one;
        char little;
      } is_endian = {1};
      long l;
      if (is_endian.little)
        break;
      if (((size_t)v1 | (size_t)v2) & 0x7)
        break;
      l = *((long *)v1);
      l -= *((long *)v2);
      if (l > 128)
        return 128;
      else if (l < -128)
        return -128;
      else
        return (int)l;
    } while (0);
  ret = (int)v1[7] - (int)v2[7];
  sat = 0;
  brw = ret >> 8;
  if (ret & 0x80) {
    for (i = 6; i >= 0; i--) {
      brw += (int)v1[i] - (int)v2[i];
      sat |= ~brw;
      brw >>= 8;
    }
  } else {
    for (i = 6; i >= 0; i--) {
      brw += (int)v1[i] - (int)v2[i];
      sat |= brw;
      brw >>= 8;
    }
  }
  brw <<= 8;
  if (sat & 0xff)
    return brw | 0x80;
  else
    return brw + (ret & 0xFF);
}
```