// File: /workspace/github_cpp_makefile_star2_O1/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 0x194cc
movq %rsi, %r14
addq $0x8, %rsi
movq 0x10(%r15), %rax
cmpq 0x8(%r15), %rax
je 0x194de
movb $0x0, (%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%rbx)
movq $0x0, 0x18(%rbx)
movb (%r14), %al
cmpb (%r15), %al
jne 0x19502
movb %al, (%rbx)
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movl $0x1, %ecx
callq 0x1965c
jmp 0x195f1
movb (%r15), %al
movb %al, (%rbx)
leaq 0x8(%rbx), %rdi
addq $0x8, %r15
movq %r15, %rsi
jmp 0x194e7
movb (%r14), %al
movb %al, (%rbx)
leaq 0x8(%rbx), %rdi
callq 0x18aae
movq 0x10(%rbx), %rax
cmpq 0x8(%rbx), %rax
jne 0x195f1
movb $0x0, (%rbx)
jmp 0x195f1
testb %al, %al
je 0x19515
leaq 0x20(%rsp), %rdi
movq %r14, %rsi
callq 0x18b2e
jmp 0x19533
leaq 0x28(%rsp), %rdi
movb %al, -0x8(%rdi)
callq 0x18aae
movq 0x30(%rsp), %rax
cmpq 0x28(%rsp), %rax
jne 0x19533
movb $0x0, 0x20(%rsp)
movb (%r15), %al
cmpb $0x1, %al
jne 0x19547
movq %rsp, %rdi
movq %r15, %rsi
callq 0x18b2e
jmp 0x1956b
addq $0x8, %r15
leaq 0x8(%rsp), %rdi
movb %al, -0x8(%rdi)
movq %r15, %rsi
callq 0x18aae
movq 0x10(%rsp), %rax
cmpq 0x8(%rsp), %rax
jne 0x1956b
movb $0x0, (%rsp)
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0x190f6
testb %al, %al
je 0x195a4
leaq 0x20(%rsp), %rsi
movq %rsp, %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x1979a
cmpb $0x1, (%r14)
jne 0x195bf
movq 0x10(%rbx), %rax
cmpq 0x8(%rbx), %rax
setne %al
jmp 0x195c1
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x1979a
cmpb $0x0, (%r14)
je 0x19597
xorl %eax, %eax
movb %al, (%rbx)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x195da
movq 0x18(%rsp), %rsi
subq %rdi, %rsi
callq 0x4260
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x195f1
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 0x1961d
movq 0x18(%rsp), %rsi
subq %rdi, %rsi
callq 0x4260
jmp 0x1961d
movq %rax, %r14
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x1963b
movq 0x38(%rsp), %rsi
subq %rdi, %rsi
callq 0x4260
jmp 0x1963b
jmp 0x19638
movq %rax, %r14
leaq 0x8(%rbx), %rax
movq (%rax), %rdi
testq %rdi, %rdi
je 0x19653
movq 0x18(%rbx), %rsi
subq %rdi, %rsi
callq 0x4260
movq %r14, %rdi
callq 0x43f0
nop