// File: /workspace/github_cpp_makefile_star2_O3/ef-gy[P]libefgy/include/ef.gy/big-integers.h
// Function: efgy::math::numeric::bigIntegers<long long, unsigned long long, unsigned int, 32u>::operator+(efgy::math::numeric::bigIntegers<long long, unsigned long long, unsigned int, 32u> const&) const
bigIntegers operator+(const bigIntegers &b) const {
    if (*this == zero()) {
      return b;
    } else if (b == zero()) {
      return *this;
    }

    bigIntegers r;

    if (negative == b.negative) {
      r.negative = negative;

      r.doAdd(*this, b);
    } else {
      const bigIntegers &p = negative ? -*this : *this;
      const bigIntegers &q = b.negative ? -b : b;

      if (p > q) {
        r.doSubtract(p, q);
        r.negative = negative && (r.cell.size() > 0);
      } else {
        r.doSubtract(q, p);
        r.negative = !negative && (r.cell.size() > 0);
      }
    }

    return r;
  }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x40, %rsp
movq %rdx, %r15
movq %rdi, %rbx
movq 0x10(%rsi), %rax
cmpq 0x8(%rsi), %rax
je 0x19616
movq %rsi, %r14
addq $0x8, %rsi
movq 0x10(%r15), %rax
cmpq 0x8(%r15), %rax
je 0x19628
movb $0x0, (%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%rbx)
movq $0x0, 0x18(%rbx)
movb (%r14), %al
cmpb (%r15), %al
jne 0x1964c
movb %al, (%rbx)
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movl $0x1, %ecx
callq 0x197d8
jmp 0x1976e
movb (%r15), %al
movb %al, (%rbx)
leaq 0x8(%rbx), %rdi
addq $0x8, %r15
movq %r15, %rsi
jmp 0x19631
movb (%r14), %al
movb %al, (%rbx)
leaq 0x8(%rbx), %rdi
callq 0x18bb6
movq 0x10(%rbx), %rax
cmpq 0x8(%rbx), %rax
jne 0x1976e
movb $0x0, (%rbx)
jmp 0x1976e
leaq 0x28(%rsp), %rdi
movb %al, -0x8(%rdi)
testb %al, %al
je 0x1967f
callq 0x18bb6
movq 0x30(%rsp), %rax
movb 0x20(%rsp), %cl
xorb $0x1, %cl
cmpq 0x28(%rsp), %rax
movzbl %cl, %eax
movl $0x1, %ecx
cmovnel %eax, %ecx
movb %cl, 0x20(%rsp)
jmp 0x19695
callq 0x18bb6
movq 0x30(%rsp), %rax
cmpq 0x28(%rsp), %rax
jne 0x19695
movb $0x0, 0x20(%rsp)
movb (%r15), %al
addq $0x8, %r15
leaq 0x8(%rsp), %rdi
movb %al, -0x8(%rdi)
cmpb $0x1, %al
jne 0x196d0
movq %r15, %rsi
callq 0x18bb6
movq 0x10(%rsp), %rax
movb (%rsp), %cl
xorb $0x1, %cl
cmpq 0x8(%rsp), %rax
movzbl %cl, %eax
movl $0x1, %ecx
cmovnel %eax, %ecx
movb %cl, (%rsp)
jmp 0x196e8
movq %r15, %rsi
callq 0x18bb6
movq 0x10(%rsp), %rax
cmpq 0x8(%rsp), %rax
jne 0x196e8
movb $0x0, (%rsp)
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0x1924c
testb %al, %al
je 0x19721
leaq 0x20(%rsp), %rsi
movq %rsp, %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x1991a
cmpb $0x1, (%r14)
jne 0x1973c
movq 0x10(%rbx), %rax
cmpq 0x8(%rbx), %rax
setne %al
jmp 0x1973e
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x1991a
cmpb $0x0, (%r14)
je 0x19714
xorl %eax, %eax
movb %al, (%rbx)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x19757
movq 0x18(%rsp), %rsi
subq %rdi, %rsi
callq 0x4260
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x1976e
movq 0x38(%rsp), %rsi
subq %rdi, %rsi
callq 0x4260
movq %rbx, %rax
addq $0x40, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %r14
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x1979a
movq 0x18(%rsp), %rsi
subq %rdi, %rsi
callq 0x4260
jmp 0x1979a
movq %rax, %r14
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x197b8
movq 0x38(%rsp), %rsi
subq %rdi, %rsi
callq 0x4260
jmp 0x197b8
jmp 0x197b5
movq %rax, %r14
leaq 0x8(%rbx), %rax
movq (%rax), %rdi
testq %rdi, %rdi
je 0x197d0
movq 0x18(%rbx), %rsi
subq %rdi, %rsi
callq 0x4260
movq %r14, %rdi
callq 0x43f0