user: 请从给定的汇编指令推导出C源代码:

```asm
<internal_fiat_p256_add>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x160,%rsp
  mov    %rdi,-0x148(%rbp)
  mov    %rsi,-0x150(%rbp)
  mov    %rdx,-0x158(%rbp)
  mov    -0x150(%rbp),%rax
  mov    $0x8,%esi
  mov    %eax,%edi
  call   <_br2_load@plt>
  mov    %rax,-0x138(%rbp)
  mov    -0x150(%rbp),%rax
  add    $0x8,%eax
  mov    $0x8,%esi
  mov    %eax,%edi
  call   <_br2_load@plt>
  mov    %rax,-0x130(%rbp)
  mov    -0x150(%rbp),%rax
  add    $0x10,%eax
  mov    $0x8,%esi
  mov    %eax,%edi
  call   <_br2_load@plt>
  mov    %rax,-0x128(%rbp)
  mov    -0x150(%rbp),%rax
  add    $0x18,%eax
  mov    $0x8,%esi
  mov    %eax,%edi
  call   <_br2_load@plt>
  mov    %rax,-0x120(%rbp)
  mov    -0x158(%rbp),%rax
  mov    $0x8,%esi
  mov    %eax,%edi
  call   <_br2_load@plt>
  mov    %rax,-0x118(%rbp)
  mov    -0x158(%rbp),%rax
  add    $0x8,%eax
  mov    $0x8,%esi
  mov    %eax,%edi
  call   <_br2_load@plt>
  mov    %rax,-0x110(%rbp)
  mov    -0x158(%rbp),%rax
  add    $0x10,%eax
  mov    $0x8,%esi
  mov    %eax,%edi
  call   <_br2_load@plt>
  mov    %rax,-0x108(%rbp)
  mov    -0x158(%rbp),%rax
  add    $0x18,%eax
  mov    $0x8,%esi
  mov    %eax,%edi
  call   <_br2_load@plt>
  mov    %rax,-0x100(%rbp)
  mov    -0x138(%rbp),%rdx
  mov    -0x118(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xf8(%rbp)
  mov    -0xf8(%rbp),%rax
  cmp    -0x138(%rbp),%rax
  setb   %al
  movzbl %al,%edx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xf0(%rbp)
  mov    -0xf0(%rbp),%rdx
  mov    -0x110(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xe8(%rbp)
  mov    -0xf0(%rbp),%rax
  cmp    -0x130(%rbp),%rax
  setb   %al
  movzbl %al,%edx
  mov    -0xe8(%rbp),%rax
  cmp    -0x110(%rbp),%rax
  setb   %al
  movzbl %al,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x128(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xe0(%rbp)
  mov    -0xe0(%rbp),%rdx
  mov    -0x108(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xd8(%rbp)
  mov    -0xe0(%rbp),%rax
  cmp    -0x128(%rbp),%rax
  setb   %al
  movzbl %al,%edx
  mov    -0xd8(%rbp),%rax
  cmp    -0x108(%rbp),%rax
  setb   %al
  movzbl %al,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x120(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xd0(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x100(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xc8(%rbp)
  mov    -0xd0(%rbp),%rax
  cmp    -0x120(%rbp),%rax
  setb   %al
  movzbl %al,%edx
  mov    -0xc8(%rbp),%rax
  cmp    -0x100(%rbp),%rax
  setb   %al
  movzbl %al,%eax
  add    %edx,%eax
  cltq
  mov    %rax,-0xc0(%rbp)
  mov    -0xf8(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0xb8(%rbp)
  movabs $0xffffffff00000001,%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xb0(%rbp)
  mov    -0xf8(%rbp),%rax
  cmp    -0xb8(%rbp),%rax
  setb   %al
  movzbl %al,%edx
  mov    -0xb0(%rbp),%rax
  sub    %rdx,%rax
  mov    %rax,-0xa8(%rbp)
  mov    -0xe8(%rbp),%rax
  cmp    -0xb0(%rbp),%rax
  setb   %al
  movzbl %al,%edx
  mov    -0xb0(%rbp),%rax
  cmp    -0xa8(%rbp),%rax
  setb   %al
  movzbl %al,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xd8(%rbp),%rax
  sub    %rdx,%rax
  mov    %rax,-0xa0(%rbp)
  mov    $0xffffffff,%edx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x98(%rbp)
  mov    -0xd8(%rbp),%rax
  cmp    -0xa0(%rbp),%rax
  setb   %al
  movzbl %al,%edx
  mov    -0x98(%rbp),%rax
  sub    %rdx,%rax
  mov    %rax,-0x90(%rbp)
  mov    -0xc8(%rbp),%rax
  cmp    -0x98(%rbp),%rax
  setb   %al
  movzbl %al,%edx
  mov    -0x98(%rbp),%rax
  cmp    -0x90(%rbp),%rax
  setb   %al
  movzbl %al,%eax
  add    %edx,%eax
  cltq
  cmp    %rax,-0xc0(%rbp)
  setb   %al
  movzbl %al,%eax
  mov    %rax,-0x88(%rbp)
  cmpq   $0x0,-0x88(%rbp)
  jne    L69
  mov    $0x0,%eax
  jmp    L28
L69:
  mov    $0xffffffffffffffff,%rax
L28:
  mov    %rax,-0x80(%rbp)
  mov    -0x80(%rbp),%rax
  not    %rax
  mov    %rax,-0x78(%rbp)
  mov    -0xf8(%rbp),%rax
  and    -0x80(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xb8(%rbp),%rax
  and    -0x78(%rbp),%rax
  or     %rdx,%rax
  mov    %rax,-0x70(%rbp)
  cmpq   $0x0,-0x88(%rbp)
  jne    L27
  mov    $0x0,%eax
  jmp    L26
L27:
  mov    $0xffffffffffffffff,%rax
L26:
  mov    %rax,-0x68(%rbp)
  mov    -0x68(%rbp),%rax
  not    %rax
  mov    %rax,-0x60(%rbp)
  mov    -0xe8(%rbp),%rax
  and    -0x68(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xa8(%rbp),%rax
  and    -0x60(%rbp),%rax
  or     %rdx,%rax
  mov    %rax,-0x58(%rbp)
  cmpq   $0x0,-0x88(%rbp)
  jne    L31
  mov    $0x0,%eax
  jmp    L79
L31:
  mov    $0xffffffffffffffff,%rax
L79:
  mov    %rax,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  not    %rax
  mov    %rax,-0x48(%rbp)
  mov    -0xd8(%rbp),%rax
  and    -0x50(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xa0(%rbp),%rax
  and    -0x48(%rbp),%rax
  or     %rdx,%rax
  mov    %rax,-0x40(%rbp)
  cmpq   $0x0,-0x88(%rbp)
  jne    L70
  mov    $0x0,%eax
  jmp    L11
L70:
  mov    $0xffffffffffffffff,%rax
L11:
  mov    %rax,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  not    %rax
  mov    %rax,-0x30(%rbp)
  mov    -0xc8(%rbp),%rax
  and    -0x38(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x90(%rbp),%rax
  and    -0x30(%rbp),%rax
  or     %rdx,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x70(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x148(%rbp),%rax
  mov    %eax,%ecx
  mov    -0x20(%rbp),%rax
  mov    $0x8,%edx
  mov    %rax,%rsi
  mov    %ecx,%edi
  call   <_br2_store@plt>
  mov    -0x148(%rbp),%rax
  add    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x18(%rbp),%rax
  mov    $0x8,%edx
  mov    %rax,%rsi
  mov    %ecx,%edi
  call   <_br2_store@plt>
  mov    -0x148(%rbp),%rax
  add    $0x10,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  mov    $0x8,%edx
  mov    %rax,%rsi
  mov    %ecx,%edi
  call   <_br2_store@plt>
  mov    -0x148(%rbp),%rax
  add    $0x18,%eax
  mov    %eax,%ecx
  mov    -0x8(%rbp),%rax
  mov    $0x8,%edx
  mov    %rax,%rsi
  mov    %ecx,%edi
  call   <_br2_store@plt>
  nop
  leave
  ret
```

assistant: ```c
void internal_fiat_p256_add(uintptr_t out0, uintptr_t in0, uintptr_t in1) {
  uintptr_t x4, x0, x9, x1, x5, x11, x2, x6, x13, x3, x7, x17, x15, x20, x8, x23, x16, x24, x10, x26, x18, x27, x12, x29, x19, x30, x22, x14, x32, x21, x33, x25, x28, x31, x34, x35, x36, x37, x38;
  x0 = _br2_load((in0) + ((uintptr_t)0ULL), sizeof(uintptr_t));
  x1 = _br2_load((in0) + ((uintptr_t)8ULL), sizeof(uintptr_t));
  x2 = _br2_load((in0) + ((uintptr_t)16ULL), sizeof(uintptr_t));
  x3 = _br2_load((in0) + ((uintptr_t)24ULL), sizeof(uintptr_t));
  x4 = _br2_load((in1) + ((uintptr_t)0ULL), sizeof(uintptr_t));
  x5 = _br2_load((in1) + ((uintptr_t)8ULL), sizeof(uintptr_t));
  x6 = _br2_load((in1) + ((uintptr_t)16ULL), sizeof(uintptr_t));
  x7 = _br2_load((in1) + ((uintptr_t)24ULL), sizeof(uintptr_t));
  x8 = (x0) + (x4);
  x9 = ((x8) < (x0)) + (x1);
  x10 = (x9) + (x5);
  x11 = (((x9) < (x1)) + ((x10) < (x5))) + (x2);
  x12 = (x11) + (x6);
  x13 = (((x11) < (x2)) + ((x12) < (x6))) + (x3);
  x14 = (x13) + (x7);
  x15 = ((x13) < (x3)) + ((x14) < (x7));
  x16 = (x8) - ((uintptr_t)18446744073709551615ULL);
  x17 = (x10) - ((uintptr_t)4294967295ULL);
  x18 = (x17) - ((x8) < (x16));
  x19 = (x12) - (((x10) < (x17)) + ((x17) < (x18)));
  x20 = (x14) - ((uintptr_t)18446744069414584321ULL);
  x21 = (x20) - ((x12) < (x19));
  x22 = (x15) < ((x15) - (((x14) < (x20)) + ((x20) < (x21))));
  x23 = ((uintptr_t)-1ULL) + ((x22) == ((uintptr_t)0ULL));
  x24 = (x23) ^ ((uintptr_t)18446744073709551615ULL);
  x25 = ((x8) & (x23)) | ((x16) & (x24));
  x26 = ((uintptr_t)-1ULL) + ((x22) == ((uintptr_t)0ULL));
  x27 = (x26) ^ ((uintptr_t)18446744073709551615ULL);
  x28 = ((x10) & (x26)) | ((x18) & (x27));
  x29 = ((uintptr_t)-1ULL) + ((x22) == ((uintptr_t)0ULL));
  x30 = (x29) ^ ((uintptr_t)18446744073709551615ULL);
  x31 = ((x12) & (x29)) | ((x19) & (x30));
  x32 = ((uintptr_t)-1ULL) + ((x22) == ((uintptr_t)0ULL));
  x33 = (x32) ^ ((uintptr_t)18446744073709551615ULL);
  x34 = ((x14) & (x32)) | ((x21) & (x33));
  x35 = x25;
  x36 = x28;
  x37 = x31;
  x38 = x34;
  _br2_store((out0) + ((uintptr_t)0ULL), x35, sizeof(uintptr_t));
  _br2_store((out0) + ((uintptr_t)8ULL), x36, sizeof(uintptr_t));
  _br2_store((out0) + ((uintptr_t)16ULL), x37, sizeof(uintptr_t));
  _br2_store((out0) + ((uintptr_t)24ULL), x38, sizeof(uintptr_t));
  return;
}
```