// File: ef-gy[P]libefgy/include/ef.gy/big-integers.h
// Function: efgy::math::numeric::bigIntegers<long long, unsigned long long, unsigned int, 32u>::doDivide(efgy::math::numeric::bigIntegers<long long, unsigned long long, unsigned int, 32u> const&, efgy::math::numeric::bigIntegers<long long, unsigned long long, unsigned int, 32u> const&, bool)
void doDivide(const bigIntegers &a, const bigIntegers &b,
                bool allocate = true) {
    if (a == zero()) {
      cell.resize(0);
      return;
    }

    if (b == zero()) {
      /* ebil */
      cell.resize(0);
      return;
    }

    if (b == one()) {
      *this = a;
      return;
    }

    if (b > a) {
      cell.resize(0);
      return;
    }

    cell.resize(0);

    bigIntegers r = bigIntegers();

    for (cellType i = a.cell.size(); i > 0; i--) {
      cellType ir = i - 1;
      cellType c = a.cell[ir];

      for (cellType j = cellBitCount; j > 0; j--) {
        cellType jr = j - 1;
        r <<= 1;

        if (c & (1 << jr)) {
          if (r.cell.size() == 0) {
            r.cell.resize(1);
            r.cell[0] = cellType(1);
          } else {
            r.cell[0] |= 1;
          }
        }

        if (r >= b) {
          r -= b;

          *this += (bigIntegers(1) << cellType(ir * cellBitCount + jr));
        }
      }
    }
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movb %cl, %al
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
andb $0x1, %al
movb %al, -0x19(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x10(%rbp), %rdi
leaq -0x1a(%rbp), %rsi
callq 0x3d1a0
testb $0x1, %al
jne 0x4041c
jmp 0x40435
movq -0xb8(%rbp), %rdi
addq $0x8, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3c360
jmp 0x406b7
movq -0x18(%rbp), %rdi
leaq -0x1b(%rbp), %rsi
callq 0x3d1a0
testb $0x1, %al
jne 0x40448
jmp 0x40461
movq -0xb8(%rbp), %rdi
addq $0x8, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3c360
jmp 0x406b7
movq -0x18(%rbp), %rdi
leaq -0x1c(%rbp), %rsi
callq 0x3f230
testb $0x1, %al
jne 0x40474
jmp 0x40489
movq -0xb8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x3d420
jmp 0x406b7
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x3ef30
testb $0x1, %al
jne 0x4049c
jmp 0x404b5
movq -0xb8(%rbp), %rdi
addq $0x8, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3c360
jmp 0x406b7
movq -0xb8(%rbp), %rdi
addq $0x8, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3c360
leaq -0x40(%rbp), %rdi
callq 0x3e410
movq -0x10(%rbp), %rdi
addq $0x8, %rdi
callq 0x3c9c0
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
jbe 0x406ae
movl -0x44(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x48(%rbp)
movq -0x10(%rbp), %rdi
addq $0x8, %rdi
movl -0x48(%rbp), %eax
movl %eax, %esi
callq 0x3d8a0
movl (%rax), %eax
movl %eax, -0x4c(%rbp)
movl $0x20, -0x50(%rbp)
cmpl $0x0, -0x50(%rbp)
jbe 0x4069e
movl -0x50(%rbp), %eax
decl %eax
movl %eax, -0x54(%rbp)
movl $0x1, -0x58(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0xfb10
jmp 0x4053b
movl -0x4c(%rbp), %eax
movl -0x54(%rbp), %ecx
movl $0x1, %edx
shll %cl, %edx
movl %edx, %ecx
andl %ecx, %eax
cmpl $0x0, %eax
je 0x405b8
leaq -0x40(%rbp), %rdi
addq $0x8, %rdi
callq 0x3c9c0
cmpq $0x0, %rax
jne 0x4059e
leaq -0x38(%rbp), %rdi
movl $0x1, %esi
callq 0x3c360
jmp 0x40574
leaq -0x40(%rbp), %rdi
addq $0x8, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3c3f0
movl $0x1, (%rax)
jmp 0x405b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x406c0
leaq -0x40(%rbp), %rdi
addq $0x8, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3c3f0
movl (%rax), %ecx
orl $0x1, %ecx
movl %ecx, (%rax)
jmp 0x405b8
movq -0x18(%rbp), %rsi
leaq -0x40(%rbp), %rdi
callq 0x3f500
movb %al, -0xb9(%rbp)
jmp 0x405cd
movb -0xb9(%rbp), %al
testb $0x1, %al
jne 0x405dc
jmp 0x4068e
movq -0x18(%rbp), %rsi
leaq -0x40(%rbp), %rdi
callq 0x3f550
jmp 0x405eb
leaq -0xa8(%rbp), %rdi
movl $0x1, %esi
callq 0xf930
jmp 0x405fe
movl -0x48(%rbp), %eax
shll $0x5, %eax
movl -0x54(%rbp), %ecx
addl %ecx, %eax
movl %eax, -0xac(%rbp)
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
leaq -0xac(%rbp), %rdx
callq 0x3d470
jmp 0x4062b
movq -0xb8(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x406e0
jmp 0x40640
leaq -0x88(%rbp), %rdi
callq 0x10260
leaq -0xa8(%rbp), %rdi
callq 0x10260
jmp 0x4068e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x40680
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x10260
leaq -0xa8(%rbp), %rdi
callq 0x10260
jmp 0x406c0
jmp 0x40690
movl -0x50(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x50(%rbp)
jmp 0x40513
jmp 0x406a0
movl -0x44(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x404e2
leaq -0x40(%rbp), %rdi
callq 0x10260
addq $0xc0, %rsp
popq %rbp
retq
leaq -0x40(%rbp), %rdi
callq 0x10260
movq -0x60(%rbp), %rdi
callq 0x55e0
nopw %cs:(%rax,%rax)
nopl (%rax)