#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef uintptr_t x7;
typedef uintptr_t x6;
typedef uintptr_t x5;
typedef uintptr_t x40;
typedef uintptr_t x4;
typedef uintptr_t x35;
typedef uintptr_t x33;
typedef uintptr_t x31;
typedef uintptr_t x3;
typedef uintptr_t x29;
typedef uintptr_t x27;
typedef uintptr_t x25;
typedef uintptr_t x23;
typedef uintptr_t x21;
typedef uintptr_t x2;
typedef uintptr_t x19;
typedef uintptr_t x17;
typedef uintptr_t x16;
typedef uintptr_t x1;
typedef uintptr_t x0;
typedef int /*<<< orphan*/ out0;
typedef int /*<<< orphan*/ in1;
typedef int /*<<< orphan*/ in0;

/* Variables and functions */
uintptr_t _br2_load(int /*<<< orphan*/, int);
int /*<<< orphan*/ _br2_store(int /*<<< orphan*/, uintptr_t, int);
void internal_fiat_p256_sub(uintptr_t out0, uintptr_t in0, uintptr_t in1) {
  uintptr_t x8, x9, x0, x10, x1, x17, x11, x2, x19, x12, x3, x21, x13, x4, x23,
      x14, x5, x25, x15, x6, x27, x7, x29, x16, x33, x18, x35, x20, x22, x24,
      x26, x40, x28, x30, x31, x32, x34, x36, x37, x38, x39, x41, x42, x43, x44,
      x45, x46, x47, x48, x49, x50;
  x0 = _br2_load((in0) + ((uintptr_t)0ULL), sizeof(uintptr_t));
  x1 = _br2_load((in0) + ((uintptr_t)4ULL), sizeof(uintptr_t));
  x2 = _br2_load((in0) + ((uintptr_t)8ULL), sizeof(uintptr_t));
  x3 = _br2_load((in0) + ((uintptr_t)12ULL), sizeof(uintptr_t));
  x4 = _br2_load((in0) + ((uintptr_t)16ULL), sizeof(uintptr_t));
  x5 = _br2_load((in0) + ((uintptr_t)20ULL), sizeof(uintptr_t));
  x6 = _br2_load((in0) + ((uintptr_t)24ULL), sizeof(uintptr_t));
  x7 = _br2_load((in0) + ((uintptr_t)28ULL), sizeof(uintptr_t));
  x8 = _br2_load((in1) + ((uintptr_t)0ULL), sizeof(uintptr_t));
  x9 = _br2_load((in1) + ((uintptr_t)4ULL), sizeof(uintptr_t));
  x10 = _br2_load((in1) + ((uintptr_t)8ULL), sizeof(uintptr_t));
  x11 = _br2_load((in1) + ((uintptr_t)12ULL), sizeof(uintptr_t));
  x12 = _br2_load((in1) + ((uintptr_t)16ULL), sizeof(uintptr_t));
  x13 = _br2_load((in1) + ((uintptr_t)20ULL), sizeof(uintptr_t));
  x14 = _br2_load((in1) + ((uintptr_t)24ULL), sizeof(uintptr_t));
  x15 = _br2_load((in1) + ((uintptr_t)28ULL), sizeof(uintptr_t));
  x16 = (x0) - (x8);
  x17 = (x1) - (x9);
  x18 = (x17) - ((x0) < (x16));
  x19 = (x2) - (x10);
  x20 = (x19) - (((x1) < (x17)) + ((x17) < (x18)));
  x21 = (x3) - (x11);
  x22 = (x21) - (((x2) < (x19)) + ((x19) < (x20)));
  x23 = (x4) - (x12);
  x24 = (x23) - (((x3) < (x21)) + ((x21) < (x22)));
  x25 = (x5) - (x13);
  x26 = (x25) - (((x4) < (x23)) + ((x23) < (x24)));
  x27 = (x6) - (x14);
  x28 = (x27) - (((x5) < (x25)) + ((x25) < (x26)));
  x29 = (x7) - (x15);
  x30 = (x29) - (((x6) < (x27)) + ((x27) < (x28)));
  x31 = ((uintptr_t)-1ULL) +
        ((((x7) < (x29)) + ((x29) < (x30))) == ((uintptr_t)0ULL));
  x32 = (x16) + (x31);
  x33 = ((x32) < (x16)) + (x18);
  x34 = (x33) + (x31);
  x35 = (((x33) < (x18)) + ((x34) < (x31))) + (x20);
  x36 = (x35) + (x31);
  x37 = (((x35) < (x20)) + ((x36) < (x31))) + (x22);
  x38 = ((x37) < (x22)) + (x24);
  x39 = ((x38) < (x24)) + (x26);
  x40 = ((x39) < (x26)) + (x28);
  x41 = (x40) + ((x31) & ((uintptr_t)1ULL));
  x42 = ((((x40) < (x28)) + ((x41) < ((x31) & ((uintptr_t)1ULL)))) + (x30)) +
        (x31);
  x43 = x32;
  x44 = x34;
  x45 = x36;
  x46 = x37;
  x47 = x38;
  x48 = x39;
  x49 = x41;
  x50 = x42;
  _br2_store((out0) + ((uintptr_t)0ULL), x43, sizeof(uintptr_t));
  _br2_store((out0) + ((uintptr_t)4ULL), x44, sizeof(uintptr_t));
  _br2_store((out0) + ((uintptr_t)8ULL), x45, sizeof(uintptr_t));
  _br2_store((out0) + ((uintptr_t)12ULL), x46, sizeof(uintptr_t));
  _br2_store((out0) + ((uintptr_t)16ULL), x47, sizeof(uintptr_t));
  _br2_store((out0) + ((uintptr_t)20ULL), x48, sizeof(uintptr_t));
  _br2_store((out0) + ((uintptr_t)24ULL), x49, sizeof(uintptr_t));
  _br2_store((out0) + ((uintptr_t)28ULL), x50, sizeof(uintptr_t));
  return;
}


x86 assembly (clang, -O0):
<internal_fiat_p256_sub>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1b0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x10(%rbp),%rax
add    $0x0,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
add    $0x4,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0x58(%rbp)
mov    -0x10(%rbp),%rax
add    $0xc,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0x70(%rbp)
mov    -0x10(%rbp),%rax
add    $0x10,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0x88(%rbp)
mov    -0x10(%rbp),%rax
add    $0x14,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0xa0(%rbp)
mov    -0x10(%rbp),%rax
add    $0x18,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0xb8(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1c,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0xc8(%rbp)
mov    -0x18(%rbp),%rax
add    $0x0,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
add    $0x4,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
add    $0x8,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%rax
add    $0xc,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0x50(%rbp)
mov    -0x18(%rbp),%rax
add    $0x10,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0x68(%rbp)
mov    -0x18(%rbp),%rax
add    $0x14,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0x80(%rbp)
mov    -0x18(%rbp),%rax
add    $0x18,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0x98(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1c,%rax
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,-0xb0(%rbp)
mov    -0x30(%rbp),%rax
sub    -0x20(%rbp),%rax
mov    %rax,-0xd8(%rbp)
mov    -0x40(%rbp),%rax
sub    -0x28(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
mov    -0x30(%rbp),%rcx
cmp    -0xd8(%rbp),%rcx
setb   %cl
and    $0x1,%cl
movzbl %cl,%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
mov    %rax,-0xe8(%rbp)
mov    -0x58(%rbp),%rax
sub    -0x38(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x60(%rbp),%rax
mov    -0x40(%rbp),%rcx
cmp    -0x48(%rbp),%rcx
setb   %cl
and    $0x1,%cl
movzbl %cl,%ecx
mov    -0x48(%rbp),%rdx
cmp    -0xe8(%rbp),%rdx
setb   %dl
and    $0x1,%dl
movzbl %dl,%edx
add    %edx,%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
mov    %rax,-0xf8(%rbp)
mov    -0x70(%rbp),%rax
sub    -0x50(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x78(%rbp),%rax
mov    -0x58(%rbp),%rcx
cmp    -0x60(%rbp),%rcx
setb   %cl
and    $0x1,%cl
movzbl %cl,%ecx
mov    -0x60(%rbp),%rdx
cmp    -0xf8(%rbp),%rdx
setb   %dl
and    $0x1,%dl
movzbl %dl,%edx
add    %edx,%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
mov    %rax,-0x100(%rbp)
mov    -0x88(%rbp),%rax
sub    -0x68(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    -0x90(%rbp),%rax
mov    -0x70(%rbp),%rcx
cmp    -0x78(%rbp),%rcx
setb   %cl
and    $0x1,%cl
movzbl %cl,%ecx
mov    -0x78(%rbp),%rdx
cmp    -0x100(%rbp),%rdx
setb   %dl
and    $0x1,%dl
movzbl %dl,%edx
add    %edx,%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
mov    %rax,-0x108(%rbp)
mov    -0xa0(%rbp),%rax
sub    -0x80(%rbp),%rax
mov    %rax,-0xa8(%rbp)
mov    -0xa8(%rbp),%rax
mov    -0x88(%rbp),%rcx
cmp    -0x90(%rbp),%rcx
setb   %cl
and    $0x1,%cl
movzbl %cl,%ecx
mov    -0x90(%rbp),%rdx
cmp    -0x108(%rbp),%rdx
setb   %dl
and    $0x1,%dl
movzbl %dl,%edx
add    %edx,%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
mov    %rax,-0x110(%rbp)
mov    -0xb8(%rbp),%rax
sub    -0x98(%rbp),%rax
mov    %rax,-0xc0(%rbp)
mov    -0xc0(%rbp),%rax
mov    -0xa0(%rbp),%rcx
cmp    -0xa8(%rbp),%rcx
setb   %cl
and    $0x1,%cl
movzbl %cl,%ecx
mov    -0xa8(%rbp),%rdx
cmp    -0x110(%rbp),%rdx
setb   %dl
and    $0x1,%dl
movzbl %dl,%edx
add    %edx,%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
mov    %rax,-0x120(%rbp)
mov    -0xc8(%rbp),%rax
sub    -0xb0(%rbp),%rax
mov    %rax,-0xd0(%rbp)
mov    -0xd0(%rbp),%rax
mov    -0xb8(%rbp),%rcx
cmp    -0xc0(%rbp),%rcx
setb   %cl
and    $0x1,%cl
movzbl %cl,%ecx
mov    -0xc0(%rbp),%rdx
cmp    -0x120(%rbp),%rdx
setb   %dl
and    $0x1,%dl
movzbl %dl,%edx
add    %edx,%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
mov    %rax,-0x128(%rbp)
mov    -0xc8(%rbp),%rax
cmp    -0xd0(%rbp),%rax
setb   %al
and    $0x1,%al
movzbl %al,%eax
mov    -0xd0(%rbp),%rcx
cmp    -0x128(%rbp),%rcx
setb   %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
cltq
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%eax
cltq
add    $0xffffffffffffffff,%rax
mov    %rax,-0x130(%rbp)
mov    -0xd8(%rbp),%rax
add    -0x130(%rbp),%rax
mov    %rax,-0x138(%rbp)
mov    -0x138(%rbp),%rax
cmp    -0xd8(%rbp),%rax
setb   %al
and    $0x1,%al
movzbl %al,%eax
cltq
add    -0xe8(%rbp),%rax
mov    %rax,-0xe0(%rbp)
mov    -0xe0(%rbp),%rax
add    -0x130(%rbp),%rax
mov    %rax,-0x140(%rbp)
mov    -0xe0(%rbp),%rax
cmp    -0xe8(%rbp),%rax
setb   %al
and    $0x1,%al
movzbl %al,%eax
mov    -0x140(%rbp),%rcx
cmp    -0x130(%rbp),%rcx
setb   %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
cltq
add    -0xf8(%rbp),%rax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rax
add    -0x130(%rbp),%rax
mov    %rax,-0x148(%rbp)
mov    -0xf0(%rbp),%rax
cmp    -0xf8(%rbp),%rax
setb   %al
and    $0x1,%al
movzbl %al,%eax
mov    -0x148(%rbp),%rcx
cmp    -0x130(%rbp),%rcx
setb   %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
cltq
add    -0x100(%rbp),%rax
mov    %rax,-0x150(%rbp)
mov    -0x150(%rbp),%rax
cmp    -0x100(%rbp),%rax
setb   %al
and    $0x1,%al
movzbl %al,%eax
cltq
add    -0x108(%rbp),%rax
mov    %rax,-0x158(%rbp)
mov    -0x158(%rbp),%rax
cmp    -0x108(%rbp),%rax
setb   %al
and    $0x1,%al
movzbl %al,%eax
cltq
add    -0x110(%rbp),%rax
mov    %rax,-0x160(%rbp)
mov    -0x160(%rbp),%rax
cmp    -0x110(%rbp),%rax
setb   %al
and    $0x1,%al
movzbl %al,%eax
cltq
add    -0x120(%rbp),%rax
mov    %rax,-0x118(%rbp)
mov    -0x118(%rbp),%rax
mov    -0x130(%rbp),%rcx
and    $0x1,%rcx
add    %rcx,%rax
mov    %rax,-0x168(%rbp)
mov    -0x118(%rbp),%rax
cmp    -0x120(%rbp),%rax
setb   %al
and    $0x1,%al
movzbl %al,%eax
mov    -0x168(%rbp),%rcx
mov    -0x130(%rbp),%rdx
and    $0x1,%rdx
cmp    %rdx,%rcx
setb   %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
cltq
add    -0x128(%rbp),%rax
add    -0x130(%rbp),%rax
mov    %rax,-0x170(%rbp)
mov    -0x138(%rbp),%rax
mov    %rax,-0x178(%rbp)
mov    -0x140(%rbp),%rax
mov    %rax,-0x180(%rbp)
mov    -0x148(%rbp),%rax
mov    %rax,-0x188(%rbp)
mov    -0x150(%rbp),%rax
mov    %rax,-0x190(%rbp)
mov    -0x158(%rbp),%rax
mov    %rax,-0x198(%rbp)
mov    -0x160(%rbp),%rax
mov    %rax,-0x1a0(%rbp)
mov    -0x168(%rbp),%rax
mov    %rax,-0x1a8(%rbp)
mov    -0x170(%rbp),%rax
mov    %rax,-0x1b0(%rbp)
mov    -0x8(%rbp),%rax
add    $0x0,%rax
mov    %eax,%edi
mov    -0x178(%rbp),%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
mov    -0x8(%rbp),%rax
add    $0x4,%rax
mov    %eax,%edi
mov    -0x180(%rbp),%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
mov    -0x8(%rbp),%rax
add    $0x8,%rax
mov    %eax,%edi
mov    -0x188(%rbp),%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
mov    -0x8(%rbp),%rax
add    $0xc,%rax
mov    %eax,%edi
mov    -0x190(%rbp),%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
mov    -0x8(%rbp),%rax
add    $0x10,%rax
mov    %eax,%edi
mov    -0x198(%rbp),%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
mov    -0x8(%rbp),%rax
add    $0x14,%rax
mov    %eax,%edi
mov    -0x1a0(%rbp),%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
mov    -0x8(%rbp),%rax
add    $0x18,%rax
mov    %eax,%edi
mov    -0x1a8(%rbp),%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
mov    -0x8(%rbp),%rax
add    $0x1c,%rax
mov    %eax,%edi
mov    -0x1b0(%rbp),%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
add    $0x1b0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<internal_fiat_p256_sub>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %rdx,%rbx
mov    %rsi,%r14
mov    %rdi,0x50(%rsp)
mov    %r14d,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,0x40(%rsp)
lea    0x4(%r14),%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,0x38(%rsp)
lea    0x8(%r14),%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,%r12
lea    0xc(%r14),%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,%r13
lea    0x10(%r14),%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,%r15
lea    0x14(%r14),%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,(%rsp)
lea    0x18(%r14),%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,0x48(%rsp)
add    $0x1c,%r14d
mov    %r14d,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,0x8(%rsp)
mov    %ebx,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,0x10(%rsp)
lea    0x4(%rbx),%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,%rbp
lea    0x8(%rbx),%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,%r14
lea    0xc(%rbx),%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,0x18(%rsp)
lea    0x10(%rbx),%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,0x20(%rsp)
lea    0x14(%rbx),%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,0x28(%rsp)
lea    0x18(%rbx),%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
mov    %rax,0x30(%rsp)
add    $0x1c,%ebx
mov    %ebx,%edi
mov    $0x8,%esi
call   1030 <_br2_load@plt>
xor    %ebx,%ebx
mov    0x40(%rsp),%r11
sub    0x10(%rsp),%r11
setb   %bl
xor    %esi,%esi
mov    0x38(%rsp),%rcx
sub    %rbp,%rcx
setb   %sil
mov    %rcx,%r9
sub    %rbx,%r9
neg    %rbx
xor    %edi,%edi
sub    %r14,%r12
setb   %dil
cmp    %r9,%rcx
mov    %rcx,%r14
mov    %r12,%rdx
sbb    %rsi,%rdx
xor    %ebp,%ebp
sub    0x18(%rsp),%r13
setb   %bpl
cmp    %rdx,%r12
mov    %r13,%r10
sbb    %rdi,%r10
xor    %edi,%edi
sub    0x20(%rsp),%r15
setb   %dil
cmp    %r10,%r13
mov    %r15,%r8
sbb    %rbp,%r8
xor    %ebp,%ebp
mov    (%rsp),%rsi
sub    0x28(%rsp),%rsi
setb   %bpl
cmp    %r8,%r15
mov    %rsi,%rcx
mov    %rsi,%r15
sbb    %rdi,%rcx
mov    %rcx,(%rsp)
xor    %r12d,%r12d
mov    0x48(%rsp),%rsi
sub    0x30(%rsp),%rsi
setb   %r12b
cmp    %rcx,%r15
mov    %rsi,%rdi
mov    %rsi,%r15
sbb    %rbp,%rdi
xor    %ebp,%ebp
mov    0x8(%rsp),%rsi
sub    %rax,%rsi
setb   %bpl
cmp    %rdi,%r15
mov    %rsi,%r13
sbb    %r12,%r13
cmp    %r13,%rsi
sbb    %rcx,%rcx
xor    %eax,%eax
cmp    %rcx,%rbp
setne  %al
mov    %rax,%rcx
neg    %rcx
mov    %r11,%rsi
mov    %r11,%rbp
add    %rcx,%rbp
adc    %r14,%rbx
add    %rcx,%rsi
adc    %rcx,%r9
mov    %rdx,%r14
adc    $0x0,%r14
xor    %ebp,%ebp
cmp    %rdx,%r14
setb   %bpl
add    %rcx,%r14
adc    %r10,%rbp
xor    %r12d,%r12d
cmp    %r10,%rbp
setb   %r12b
add    %r8,%r12
adcq   $0x0,(%rsp)
setb   %cl
mov    %rax,%rdx
adc    %rdi,%rdx
mov    %rdx,0x8(%rsp)
sub    %rax,%r13
add    $0xff,%cl
adc    %rax,%rdi
adc    $0x0,%r13
sub    %rax,%rbx
mov    0x50(%rsp),%r15
mov    %r15d,%edi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
lea    0x4(%r15),%edi
mov    %rbx,%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
lea    0x8(%r15),%edi
mov    %r14,%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
lea    0xc(%r15),%edi
mov    %rbp,%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
lea    0x10(%r15),%edi
mov    %r12,%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
lea    0x14(%r15),%edi
mov    (%rsp),%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
lea    0x18(%r15),%edi
mov    0x8(%rsp),%rsi
mov    $0x8,%edx
call   1040 <_br2_store@plt>
add    $0x1c,%r15d
mov    %r15d,%edi
mov    %r13,%rsi
mov    $0x8,%edx
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1040 <_br2_store@plt>

LLVM IR (-O0):
define void @internal_fiat_p256_sub(i64 %0, i64 %1, i64 %2) {
%4 = alloca i64
%5 = alloca i64
%6 = alloca i64
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
%11 = alloca i64
%12 = alloca i64
%13 = alloca i64
%14 = alloca i64
%15 = alloca i64
%16 = alloca i64
%17 = alloca i64
%18 = alloca i64
%19 = alloca i64
%20 = alloca i64
%21 = alloca i64
%22 = alloca i64
%23 = alloca i64
%24 = alloca i64
%25 = alloca i64
%26 = alloca i64
%27 = alloca i64
%28 = alloca i64
%29 = alloca i64
%30 = alloca i64
%31 = alloca i64
%32 = alloca i64
%33 = alloca i64
%34 = alloca i64
%35 = alloca i64
%36 = alloca i64
%37 = alloca i64
%38 = alloca i64
%39 = alloca i64
%40 = alloca i64
%41 = alloca i64
%42 = alloca i64
%43 = alloca i64
%44 = alloca i64
%45 = alloca i64
%46 = alloca i64
%47 = alloca i64
%48 = alloca i64
%49 = alloca i64
%50 = alloca i64
%51 = alloca i64
%52 = alloca i64
%53 = alloca i64
%54 = alloca i64
%55 = alloca i64
%56 = alloca i64
%57 = alloca i64
store i64 %0, i64* %4
store i64 %1, i64* %5
store i64 %2, i64* %6
%58 = load i64, i64* %5
%59 = add i64 %58, 0
%60 = trunc i64 %59 to i32
%61 = call i64 @_br2_load(i32 %60, i32 8)
store i64 %61, i64* %9
%62 = load i64, i64* %5
%63 = add i64 %62, 4
%64 = trunc i64 %63 to i32
%65 = call i64 @_br2_load(i32 %64, i32 8)
store i64 %65, i64* %11
%66 = load i64, i64* %5
%67 = add i64 %66, 8
%68 = trunc i64 %67 to i32
%69 = call i64 @_br2_load(i32 %68, i32 8)
store i64 %69, i64* %14
%70 = load i64, i64* %5
%71 = add i64 %70, 12
%72 = trunc i64 %71 to i32
%73 = call i64 @_br2_load(i32 %72, i32 8)
store i64 %73, i64* %17
%74 = load i64, i64* %5
%75 = add i64 %74, 16
%76 = trunc i64 %75 to i32
%77 = call i64 @_br2_load(i32 %76, i32 8)
store i64 %77, i64* %20
%78 = load i64, i64* %5
%79 = add i64 %78, 20
%80 = trunc i64 %79 to i32
%81 = call i64 @_br2_load(i32 %80, i32 8)
store i64 %81, i64* %23
%82 = load i64, i64* %5
%83 = add i64 %82, 24
%84 = trunc i64 %83 to i32
%85 = call i64 @_br2_load(i32 %84, i32 8)
store i64 %85, i64* %26
%86 = load i64, i64* %5
%87 = add i64 %86, 28
%88 = trunc i64 %87 to i32
%89 = call i64 @_br2_load(i32 %88, i32 8)
store i64 %89, i64* %28
%90 = load i64, i64* %6
%91 = add i64 %90, 0
%92 = trunc i64 %91 to i32
%93 = call i64 @_br2_load(i32 %92, i32 8)
store i64 %93, i64* %7
%94 = load i64, i64* %6
%95 = add i64 %94, 4
%96 = trunc i64 %95 to i32
%97 = call i64 @_br2_load(i32 %96, i32 8)
store i64 %97, i64* %8
%98 = load i64, i64* %6
%99 = add i64 %98, 8
%100 = trunc i64 %99 to i32
%101 = call i64 @_br2_load(i32 %100, i32 8)
store i64 %101, i64* %10
%102 = load i64, i64* %6
%103 = add i64 %102, 12
%104 = trunc i64 %103 to i32
%105 = call i64 @_br2_load(i32 %104, i32 8)
store i64 %105, i64* %13
%106 = load i64, i64* %6
%107 = add i64 %106, 16
%108 = trunc i64 %107 to i32
%109 = call i64 @_br2_load(i32 %108, i32 8)
store i64 %109, i64* %16
%110 = load i64, i64* %6
%111 = add i64 %110, 20
%112 = trunc i64 %111 to i32
%113 = call i64 @_br2_load(i32 %112, i32 8)
store i64 %113, i64* %19
%114 = load i64, i64* %6
%115 = add i64 %114, 24
%116 = trunc i64 %115 to i32
%117 = call i64 @_br2_load(i32 %116, i32 8)
store i64 %117, i64* %22
%118 = load i64, i64* %6
%119 = add i64 %118, 28
%120 = trunc i64 %119 to i32
%121 = call i64 @_br2_load(i32 %120, i32 8)
store i64 %121, i64* %25
%122 = load i64, i64* %9
%123 = load i64, i64* %7
%124 = sub i64 %122, %123
store i64 %124, i64* %30
%125 = load i64, i64* %11
%126 = load i64, i64* %8
%127 = sub i64 %125, %126
store i64 %127, i64* %12
%128 = load i64, i64* %12
%129 = load i64, i64* %9
%130 = load i64, i64* %30
%131 = icmp ult i64 %129, %130
%132 = zext i1 %131 to i32
%133 = sext i32 %132 to i64
%134 = sub i64 %128, %133
store i64 %134, i64* %32
%135 = load i64, i64* %14
%136 = load i64, i64* %10
%137 = sub i64 %135, %136
store i64 %137, i64* %15
%138 = load i64, i64* %15
%139 = load i64, i64* %11
%140 = load i64, i64* %12
%141 = icmp ult i64 %139, %140
%142 = zext i1 %141 to i32
%143 = load i64, i64* %12
%144 = load i64, i64* %32
%145 = icmp ult i64 %143, %144
%146 = zext i1 %145 to i32
%147 = add nsw i32 %142, %146
%148 = sext i32 %147 to i64
%149 = sub i64 %138, %148
store i64 %149, i64* %34
%150 = load i64, i64* %17
%151 = load i64, i64* %13
%152 = sub i64 %150, %151
store i64 %152, i64* %18
%153 = load i64, i64* %18
%154 = load i64, i64* %14
%155 = load i64, i64* %15
%156 = icmp ult i64 %154, %155
%157 = zext i1 %156 to i32
%158 = load i64, i64* %15
%159 = load i64, i64* %34
%160 = icmp ult i64 %158, %159
%161 = zext i1 %160 to i32
%162 = add nsw i32 %157, %161
%163 = sext i32 %162 to i64
%164 = sub i64 %153, %163
store i64 %164, i64* %35
%165 = load i64, i64* %20
%166 = load i64, i64* %16
%167 = sub i64 %165, %166
store i64 %167, i64* %21
%168 = load i64, i64* %21
%169 = load i64, i64* %17
%170 = load i64, i64* %18
%171 = icmp ult i64 %169, %170
%172 = zext i1 %171 to i32
%173 = load i64, i64* %18
%174 = load i64, i64* %35
%175 = icmp ult i64 %173, %174
%176 = zext i1 %175 to i32
%177 = add nsw i32 %172, %176
%178 = sext i32 %177 to i64
%179 = sub i64 %168, %178
store i64 %179, i64* %36
%180 = load i64, i64* %23
%181 = load i64, i64* %19
%182 = sub i64 %180, %181
store i64 %182, i64* %24
%183 = load i64, i64* %24
%184 = load i64, i64* %20
%185 = load i64, i64* %21
%186 = icmp ult i64 %184, %185
%187 = zext i1 %186 to i32
%188 = load i64, i64* %21
%189 = load i64, i64* %36
%190 = icmp ult i64 %188, %189
%191 = zext i1 %190 to i32
%192 = add nsw i32 %187, %191
%193 = sext i32 %192 to i64
%194 = sub i64 %183, %193
store i64 %194, i64* %37
%195 = load i64, i64* %26
%196 = load i64, i64* %22
%197 = sub i64 %195, %196
store i64 %197, i64* %27
%198 = load i64, i64* %27
%199 = load i64, i64* %23
%200 = load i64, i64* %24
%201 = icmp ult i64 %199, %200
%202 = zext i1 %201 to i32
%203 = load i64, i64* %24
%204 = load i64, i64* %37
%205 = icmp ult i64 %203, %204
%206 = zext i1 %205 to i32
%207 = add nsw i32 %202, %206
%208 = sext i32 %207 to i64
%209 = sub i64 %198, %208
store i64 %209, i64* %39
%210 = load i64, i64* %28
%211 = load i64, i64* %25
%212 = sub i64 %210, %211
store i64 %212, i64* %29
%213 = load i64, i64* %29
%214 = load i64, i64* %26
%215 = load i64, i64* %27
%216 = icmp ult i64 %214, %215
%217 = zext i1 %216 to i32
%218 = load i64, i64* %27
%219 = load i64, i64* %39
%220 = icmp ult i64 %218, %219
%221 = zext i1 %220 to i32
%222 = add nsw i32 %217, %221
%223 = sext i32 %222 to i64
%224 = sub i64 %213, %223
store i64 %224, i64* %40
%225 = load i64, i64* %28
%226 = load i64, i64* %29
%227 = icmp ult i64 %225, %226
%228 = zext i1 %227 to i32
%229 = load i64, i64* %29
%230 = load i64, i64* %40
%231 = icmp ult i64 %229, %230
%232 = zext i1 %231 to i32
%233 = add nsw i32 %228, %232
%234 = sext i32 %233 to i64
%235 = icmp eq i64 %234, 0
%236 = zext i1 %235 to i32
%237 = sext i32 %236 to i64
%238 = add i64 -1, %237
store i64 %238, i64* %41
%239 = load i64, i64* %30
%240 = load i64, i64* %41
%241 = add i64 %239, %240
store i64 %241, i64* %42
%242 = load i64, i64* %42
%243 = load i64, i64* %30
%244 = icmp ult i64 %242, %243
%245 = zext i1 %244 to i32
%246 = sext i32 %245 to i64
%247 = load i64, i64* %32
%248 = add i64 %246, %247
store i64 %248, i64* %31
%249 = load i64, i64* %31
%250 = load i64, i64* %41
%251 = add i64 %249, %250
store i64 %251, i64* %43
%252 = load i64, i64* %31
%253 = load i64, i64* %32
%254 = icmp ult i64 %252, %253
%255 = zext i1 %254 to i32
%256 = load i64, i64* %43
%257 = load i64, i64* %41
%258 = icmp ult i64 %256, %257
%259 = zext i1 %258 to i32
%260 = add nsw i32 %255, %259
%261 = sext i32 %260 to i64
%262 = load i64, i64* %34
%263 = add i64 %261, %262
store i64 %263, i64* %33
%264 = load i64, i64* %33
%265 = load i64, i64* %41
%266 = add i64 %264, %265
store i64 %266, i64* %44
%267 = load i64, i64* %33
%268 = load i64, i64* %34
%269 = icmp ult i64 %267, %268
%270 = zext i1 %269 to i32
%271 = load i64, i64* %44
%272 = load i64, i64* %41
%273 = icmp ult i64 %271, %272
%274 = zext i1 %273 to i32
%275 = add nsw i32 %270, %274
%276 = sext i32 %275 to i64
%277 = load i64, i64* %35
%278 = add i64 %276, %277
store i64 %278, i64* %45
%279 = load i64, i64* %45
%280 = load i64, i64* %35
%281 = icmp ult i64 %279, %280
%282 = zext i1 %281 to i32
%283 = sext i32 %282 to i64
%284 = load i64, i64* %36
%285 = add i64 %283, %284
store i64 %285, i64* %46
%286 = load i64, i64* %46
%287 = load i64, i64* %36
%288 = icmp ult i64 %286, %287
%289 = zext i1 %288 to i32
%290 = sext i32 %289 to i64
%291 = load i64, i64* %37
%292 = add i64 %290, %291
store i64 %292, i64* %47
%293 = load i64, i64* %47
%294 = load i64, i64* %37
%295 = icmp ult i64 %293, %294
%296 = zext i1 %295 to i32
%297 = sext i32 %296 to i64
%298 = load i64, i64* %39
%299 = add i64 %297, %298
store i64 %299, i64* %38
%300 = load i64, i64* %38
%301 = load i64, i64* %41
%302 = and i64 %301, 1
%303 = add i64 %300, %302
store i64 %303, i64* %48
%304 = load i64, i64* %38
%305 = load i64, i64* %39
%306 = icmp ult i64 %304, %305
%307 = zext i1 %306 to i32
%308 = load i64, i64* %48
%309 = load i64, i64* %41
%310 = and i64 %309, 1
%311 = icmp ult i64 %308, %310
%312 = zext i1 %311 to i32
%313 = add nsw i32 %307, %312
%314 = sext i32 %313 to i64
%315 = load i64, i64* %40
%316 = add i64 %314, %315
%317 = load i64, i64* %41
%318 = add i64 %316, %317
store i64 %318, i64* %49
%319 = load i64, i64* %42
store i64 %319, i64* %50
%320 = load i64, i64* %43
store i64 %320, i64* %51
%321 = load i64, i64* %44
store i64 %321, i64* %52
%322 = load i64, i64* %45
store i64 %322, i64* %53
%323 = load i64, i64* %46
store i64 %323, i64* %54
%324 = load i64, i64* %47
store i64 %324, i64* %55
%325 = load i64, i64* %48
store i64 %325, i64* %56
%326 = load i64, i64* %49
store i64 %326, i64* %57
%327 = load i64, i64* %4
%328 = add i64 %327, 0
%329 = trunc i64 %328 to i32
%330 = load i64, i64* %50
%331 = call i32 @_br2_store(i32 %329, i64 %330, i32 8)
%332 = load i64, i64* %4
%333 = add i64 %332, 4
%334 = trunc i64 %333 to i32
%335 = load i64, i64* %51
%336 = call i32 @_br2_store(i32 %334, i64 %335, i32 8)
%337 = load i64, i64* %4
%338 = add i64 %337, 8
%339 = trunc i64 %338 to i32
%340 = load i64, i64* %52
%341 = call i32 @_br2_store(i32 %339, i64 %340, i32 8)
%342 = load i64, i64* %4
%343 = add i64 %342, 12
%344 = trunc i64 %343 to i32
%345 = load i64, i64* %53
%346 = call i32 @_br2_store(i32 %344, i64 %345, i32 8)
%347 = load i64, i64* %4
%348 = add i64 %347, 16
%349 = trunc i64 %348 to i32
%350 = load i64, i64* %54
%351 = call i32 @_br2_store(i32 %349, i64 %350, i32 8)
%352 = load i64, i64* %4
%353 = add i64 %352, 20
%354 = trunc i64 %353 to i32
%355 = load i64, i64* %55
%356 = call i32 @_br2_store(i32 %354, i64 %355, i32 8)
%357 = load i64, i64* %4
%358 = add i64 %357, 24
%359 = trunc i64 %358 to i32
%360 = load i64, i64* %56
%361 = call i32 @_br2_store(i32 %359, i64 %360, i32 8)
%362 = load i64, i64* %4
%363 = add i64 %362, 28
%364 = trunc i64 %363 to i32
%365 = load i64, i64* %57
%366 = call i32 @_br2_store(i32 %364, i64 %365, i32 8)
ret void
}

LLVM IR (-O2):
define void @internal_fiat_p256_sub(i64 %0, i64 %1, i64 %2) {
%4 = trunc i64 %1 to i32
%5 = tail call i64 @_br2_load(i32 %4, i32 8)
%6 = add i32 %4, 4
%7 = tail call i64 @_br2_load(i32 %6, i32 8)
%8 = add i32 %4, 8
%9 = tail call i64 @_br2_load(i32 %8, i32 8)
%10 = add i32 %4, 12
%11 = tail call i64 @_br2_load(i32 %10, i32 8)
%12 = add i32 %4, 16
%13 = tail call i64 @_br2_load(i32 %12, i32 8)
%14 = add i32 %4, 20
%15 = tail call i64 @_br2_load(i32 %14, i32 8)
%16 = add i32 %4, 24
%17 = tail call i64 @_br2_load(i32 %16, i32 8)
%18 = add i32 %4, 28
%19 = tail call i64 @_br2_load(i32 %18, i32 8)
%20 = trunc i64 %2 to i32
%21 = tail call i64 @_br2_load(i32 %20, i32 8)
%22 = add i32 %20, 4
%23 = tail call i64 @_br2_load(i32 %22, i32 8)
%24 = add i32 %20, 8
%25 = tail call i64 @_br2_load(i32 %24, i32 8)
%26 = add i32 %20, 12
%27 = tail call i64 @_br2_load(i32 %26, i32 8)
%28 = add i32 %20, 16
%29 = tail call i64 @_br2_load(i32 %28, i32 8)
%30 = add i32 %20, 20
%31 = tail call i64 @_br2_load(i32 %30, i32 8)
%32 = add i32 %20, 24
%33 = tail call i64 @_br2_load(i32 %32, i32 8)
%34 = add i32 %20, 28
%35 = tail call i64 @_br2_load(i32 %34, i32 8)
%36 = sub i64 %5, %21
%37 = sub i64 %7, %23
%38 = icmp ult i64 %5, %21
%39 = sext i1 %38 to i64
%40 = add i64 %37, %39
%41 = sub i64 %9, %25
%42 = icmp ult i64 %7, %23
%43 = sext i1 %42 to i64
%44 = icmp ult i64 %37, %40
%45 = sext i1 %44 to i64
%46 = add i64 %41, %43
%47 = add i64 %46, %45
%48 = sub i64 %11, %27
%49 = icmp ult i64 %9, %25
%50 = sext i1 %49 to i64
%51 = icmp ult i64 %41, %47
%52 = sext i1 %51 to i64
%53 = add i64 %48, %50
%54 = add i64 %53, %52
%55 = sub i64 %13, %29
%56 = icmp ult i64 %11, %27
%57 = sext i1 %56 to i64
%58 = icmp ult i64 %48, %54
%59 = sext i1 %58 to i64
%60 = add i64 %55, %57
%61 = add i64 %60, %59
%62 = sub i64 %15, %31
%63 = icmp ult i64 %13, %29
%64 = sext i1 %63 to i64
%65 = icmp ult i64 %55, %61
%66 = sext i1 %65 to i64
%67 = add i64 %62, %64
%68 = add i64 %67, %66
%69 = sub i64 %17, %33
%70 = icmp ult i64 %15, %31
%71 = sext i1 %70 to i64
%72 = icmp ult i64 %62, %68
%73 = sext i1 %72 to i64
%74 = add i64 %69, %71
%75 = add i64 %74, %73
%76 = sub i64 %19, %35
%77 = icmp ult i64 %17, %33
%78 = sext i1 %77 to i64
%79 = icmp ult i64 %69, %75
%80 = sext i1 %79 to i64
%81 = add i64 %76, %78
%82 = add i64 %81, %80
%83 = icmp ult i64 %19, %35
%84 = zext i1 %83 to i64
%85 = icmp ult i64 %76, %82
%86 = sext i1 %85 to i64
%87 = icmp ne i64 %84, %86
%88 = sext i1 %87 to i64
%89 = add i64 %36, %88
%90 = icmp ult i64 %89, %36
%91 = zext i1 %90 to i64
%92 = add i64 %40, %91
%93 = add i64 %92, %88
%94 = icmp ult i64 %92, %40
%95 = zext i1 %94 to i64
%96 = icmp ult i64 %93, %88
%97 = zext i1 %96 to i64
%98 = add i64 %47, %95
%99 = add i64 %98, %97
%100 = add i64 %99, %88
%101 = icmp ult i64 %99, %47
%102 = zext i1 %101 to i64
%103 = icmp ult i64 %100, %88
%104 = zext i1 %103 to i64
%105 = add i64 %54, %102
%106 = add i64 %105, %104
%107 = icmp ult i64 %106, %54
%108 = zext i1 %107 to i64
%109 = add i64 %61, %108
%110 = icmp ult i64 %109, %61
%111 = zext i1 %110 to i64
%112 = add i64 %68, %111
%113 = icmp ult i64 %112, %68
%114 = zext i1 %113 to i64
%115 = add i64 %75, %114
%116 = zext i1 %87 to i64
%117 = add i64 %115, %116
%118 = icmp ult i64 %115, %75
%119 = zext i1 %118 to i64
%120 = icmp ult i64 %117, %116
%121 = zext i1 %120 to i64
%122 = add i64 %82, %88
%123 = add i64 %122, %119
%124 = add i64 %123, %121
%125 = trunc i64 %0 to i32
%126 = tail call i32 @_br2_store(i32 %125, i64 %89, i32 8)
%127 = add i32 %125, 4
%128 = tail call i32 @_br2_store(i32 %127, i64 %93, i32 8)
%129 = add i32 %125, 8
%130 = tail call i32 @_br2_store(i32 %129, i64 %100, i32 8)
%131 = add i32 %125, 12
%132 = tail call i32 @_br2_store(i32 %131, i64 %106, i32 8)
%133 = add i32 %125, 16
%134 = tail call i32 @_br2_store(i32 %133, i64 %109, i32 8)
%135 = add i32 %125, 20
%136 = tail call i32 @_br2_store(i32 %135, i64 %112, i32 8)
%137 = add i32 %125, 24
%138 = tail call i32 @_br2_store(i32 %137, i64 %117, i32 8)
%139 = add i32 %125, 28
%140 = tail call i32 @_br2_store(i32 %139, i64 %124, i32 8)
ret void
}