user: Please show me the C implementation that matches the assembly code listed below:

```asm
<carried_add_9>:
  endbr64
  mov    %rdx,%r8
  push   %rbx
  mov    %rcx,%rdx
  mov    %rsi,%rbx
  mov    %rdi,%rax
  mov    %r8,%rcx
  mov    %rax,%r8
  xor    %rax,%rax
  adc    (%rcx),%r8
  setb   %al
  mov    %rax,%r9
  adc    (%rdx),%r8
  mov    %r8,(%rbx)
  setb   %al
  or     %r9,%rax
  sub    $0x8,%rbx
  sub    $0x8,%rcx
  sub    $0x8,%rdx
  mov    %rax,%r8
  xor    %rax,%rax
  adc    (%rcx),%r8
  setb   %al
  mov    %rax,%r9
  adc    (%rdx),%r8
  mov    %r8,(%rbx)
  setb   %al
  or     %r9,%rax
  sub    $0x8,%rbx
  sub    $0x8,%rcx
  sub    $0x8,%rdx
  mov    %rax,%r8
  xor    %rax,%rax
  adc    (%rcx),%r8
  setb   %al
  mov    %rax,%r9
  adc    (%rdx),%r8
  mov    %r8,(%rbx)
  setb   %al
  or     %r9,%rax
  sub    $0x8,%rbx
  sub    $0x8,%rcx
  sub    $0x8,%rdx
  mov    %rax,%r8
  xor    %rax,%rax
  adc    (%rcx),%r8
  setb   %al
  mov    %rax,%r9
  adc    (%rdx),%r8
  mov    %r8,(%rbx)
  setb   %al
  or     %r9,%rax
  sub    $0x8,%rbx
  sub    $0x8,%rcx
  sub    $0x8,%rdx
  mov    %rax,%r8
  xor    %rax,%rax
  adc    (%rcx),%r8
  setb   %al
  mov    %rax,%r9
  adc    (%rdx),%r8
  mov    %r8,(%rbx)
  setb   %al
  or     %r9,%rax
  sub    $0x8,%rbx
  sub    $0x8,%rcx
  sub    $0x8,%rdx
  mov    %rax,%r8
  xor    %rax,%rax
  adc    (%rcx),%r8
  setb   %al
  mov    %rax,%r9
  adc    (%rdx),%r8
  mov    %r8,(%rbx)
  setb   %al
  or     %r9,%rax
  sub    $0x8,%rbx
  sub    $0x8,%rcx
  sub    $0x8,%rdx
  mov    %rax,%r8
  xor    %rax,%rax
  adc    (%rcx),%r8
  setb   %al
  mov    %rax,%r9
  adc    (%rdx),%r8
  mov    %r8,(%rbx)
  setb   %al
  or     %r9,%rax
  sub    $0x8,%rbx
  sub    $0x8,%rcx
  sub    $0x8,%rdx
  mov    %rax,%r8
  xor    %rax,%rax
  adc    (%rcx),%r8
  setb   %al
  mov    %rax,%r9
  adc    (%rdx),%r8
  mov    %r8,(%rbx)
  setb   %al
  or     %r9,%rax
  pop    %rbx
  ret
```

assistant: ```c
unsigned long long carried_add_9(unsigned long long carry, unsigned long long *res, unsigned long long *a1, unsigned long long *a2) {
  asm("mov  %%rax,   %%r8;"
      "xor  %%rax,   %%rax;"
      "adc  (%%rcx), %%r8;"
      "setc %%al;"
      "mov  %%rax,    %%r9;"
      "adc  (%%rdx), %%r8;"
      "mov  %%r8,    (%%rbx);"
      "setc %%al;"
      "or   %%r9,    %%rax;"
      "sub  $0x0008,  %%rbx;"
      "sub  $0x0008,  %%rcx;"
      "sub  $0x0008,  %%rdx;"
      "mov  %%rax,   %%r8;"
      "xor  %%rax,   %%rax;"
      "adc  (%%rcx), %%r8;"
      "setc %%al;"
      "mov  %%rax,    %%r9;"
      "adc  (%%rdx), %%r8;"
      "mov  %%r8,    (%%rbx);"
      "setc %%al;"
      "or   %%r9,    %%rax;"
      "sub  $0x0008,  %%rbx;"
      "sub  $0x0008,  %%rcx;"
      "sub  $0x0008,  %%rdx;"
      "mov  %%rax,   %%r8;"
      "xor  %%rax,   %%rax;"
      "adc  (%%rcx), %%r8;"
      "setc %%al;"
      "mov  %%rax,    %%r9;"
      "adc  (%%rdx), %%r8;"
      "mov  %%r8,    (%%rbx);"
      "setc %%al;"
      "or   %%r9,    %%rax;"
      "sub  $0x0008,  %%rbx;"
      "sub  $0x0008,  %%rcx;"
      "sub  $0x0008,  %%rdx;"
      "mov  %%rax,   %%r8;"
      "xor  %%rax,   %%rax;"
      "adc  (%%rcx), %%r8;"
      "setc %%al;"
      "mov  %%rax,    %%r9;"
      "adc  (%%rdx), %%r8;"
      "mov  %%r8,    (%%rbx);"
      "setc %%al;"
      "or   %%r9,    %%rax;"
      "sub  $0x0008,  %%rbx;"
      "sub  $0x0008,  %%rcx;"
      "sub  $0x0008,  %%rdx;"
      "mov  %%rax,   %%r8;"
      "xor  %%rax,   %%rax;"
      "adc  (%%rcx), %%r8;"
      "setc %%al;"
      "mov  %%rax,    %%r9;"
      "adc  (%%rdx), %%r8;"
      "mov  %%r8,    (%%rbx);"
      "setc %%al;"
      "or   %%r9,    %%rax;"
      "sub  $0x0008,  %%rbx;"
      "sub  $0x0008,  %%rcx;"
      "sub  $0x0008,  %%rdx;"
      "mov  %%rax,   %%r8;"
      "xor  %%rax,   %%rax;"
      "adc  (%%rcx), %%r8;"
      "setc %%al;"
      "mov  %%rax,    %%r9;"
      "adc  (%%rdx), %%r8;"
      "mov  %%r8,    (%%rbx);"
      "setc %%al;"
      "or   %%r9,    %%rax;"
      "sub  $0x0008,  %%rbx;"
      "sub  $0x0008,  %%rcx;"
      "sub  $0x0008,  %%rdx;"
      "mov  %%rax,   %%r8;"
      "xor  %%rax,   %%rax;"
      "adc  (%%rcx), %%r8;"
      "setc %%al;"
      "mov  %%rax,    %%r9;"
      "adc  (%%rdx), %%r8;"
      "mov  %%r8,    (%%rbx);"
      "setc %%al;"
      "or   %%r9,    %%rax;"
      "sub  $0x0008,  %%rbx;"
      "sub  $0x0008,  %%rcx;"
      "sub  $0x0008,  %%rdx;"
      "mov  %%rax,   %%r8;"
      "xor  %%rax,   %%rax;"
      "adc  (%%rcx), %%r8;"
      "setc %%al;"
      "mov  %%rax,    %%r9;"
      "adc  (%%rdx), %%r8;"
      "mov  %%r8,    (%%rbx);"
      "setc %%al;"
      "or   %%r9,    %%rax;"
      : "=a"(carry)
      : "a"(carry), "b"(res), "c"(a1), "d"(a2));
  return carry;
}
```