// File: /workspace/github_cpp_makefile_star2_O2/Cell-veto[P]postlhc/./storage.hpp
// Function: Storage<Monodisperse2D>::subdivide(bool)
void subdivide (bool silent = false)
    {
        // back up data
        std::vector <CellData> backup;
        backup.reserve (num_);
        for (size_t k = 0; k != num_cells_; ++k)
            if (data_[k].in_use ())
                backup.push_back (data_[k]);
        // at most two particles might be in hiatus in displace()
        assert (num_ <= backup.size ()+2u);
        assert (num_ >= backup.size ());

        // subdivide one spatial direction
        ++bc_[nextsub_++];
        nextsub_ %= DIM;

        // compute new number of cells
        num_cells_ = cell_count (DIM);
        for (unsigned n = 0; n != DIM; ++n)
            num_cells_ *= cell_count (n);
        if (num_cells_ >= MAX_KEY)
            rt_error ("excessive subdivision - particles seem to be clustering");

        // init new cells
        std::memset (data_, 0, num_cells_ * sizeof (CellData));
        planes_in_use_ = 0;
        // restore particles
        for (size_t n = 0; n != backup.size (); ++n)
            put_encoded (backup[n]); // cannot throw

        // emit updated parameters to logfile
        if (silent) return;
        std::cerr << "cell_widths " << cell_widths () << "\n";
        std::cerr << "cell_max_density " << cell_max_density () << "\n";
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movl %esi, %ebp
movq %rdi, %rbx
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %rdi
movaps %xmm0, (%rdi)
andq $0x0, 0x10(%rdi)
movq 0x30(%rbx), %rsi
callq 0x410044
leaq 0x88(%rbx), %r14
xorl %r13d, %r13d
leaq 0x10(%rsp), %r15
movq %r14, %r12
cmpq 0x28(%rbx), %r13
je 0x40fe66
testb $0x1, 0x8(%r12)
je 0x40fe5d
movq %r15, %rdi
movq %r12, %rsi
callq 0x4100de
incq %r13
addq $0x10, %r12
jmp 0x40fe44
movq 0x18(%rsp), %rax
subq 0x10(%rsp), %rax
movq 0x30(%rbx), %rcx
sarq $0x4, %rax
leaq 0x2(%rax), %rdx
cmpq %rdx, %rcx
ja 0x40ffb7
cmpq %rax, %rcx
jb 0x40ffd6
movl 0x38(%rbx), %eax
incl 0x3c(%rbx,%rax,4)
notl %eax
andl $0x1, %eax
movl %eax, 0x38(%rbx)
movq (%rbx), %rax
pushq $0x2
popq %rsi
movq %rbx, %rdi
callq *0x48(%rax)
movq %rax, 0x28(%rbx)
xorl %r15d, %r15d
cmpl $0x2, %r15d
je 0x40fed0
movq (%rbx), %rax
movq %rbx, %rdi
movl %r15d, %esi
callq *0x48(%rax)
imulq 0x28(%rbx), %rax
movq %rax, 0x28(%rbx)
incl %r15d
jmp 0x40feb0
cmpq $0x5f5e0ff, %rax        # imm = 0x5F5E0FF
ja 0x40fff5
shlq $0x4, %rax
xorl %r15d, %r15d
movq %r14, %rdi
xorl %esi, %esi
movq %rax, %rdx
callq 0x401088
andl $0x0, 0x48(%rbx)
xorl %r14d, %r14d
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rax
subq %rsi, %rax
sarq $0x4, %rax
cmpq %rax, %r14
je 0x40ff21
addq %r15, %rsi
movq %rbx, %rdi
callq 0x40fdd0
incq %r14
addq $0x10, %r15
jmp 0x40fef7
testb %bpl, %bpl
jne 0x40ff9e
movq $0x64eaa0, %rdi         # imm = 0x64EAA0
leaq 0x1b0431(%rip), %rsi    # 0x5c0365
callq 0x4a4910
movq %rax, %r14
movq %rbx, %rdi
callq 0x4100fc
leaq 0x28(%rsp), %rsi
movsd %xmm0, (%rsi)
movsd %xmm1, 0x8(%rsi)
movq %r14, %rdi
callq 0x40b917
leaq 0x1c04a9(%rip), %rsi    # 0x5d040a
movq %rax, %rdi
callq 0x4a4910
movq $0x64eaa0, %rdi         # imm = 0x64EAA0
leaq 0x1b03fb(%rip), %rsi    # 0x5c0372
callq 0x4a4910
movq %rax, %r14
movq %rbx, %rdi
callq 0x40eb9c
movq %r14, %rdi
callq 0x4a5640
leaq 0x1c0474(%rip), %rsi    # 0x5d040a
movq %rax, %rdi
callq 0x4a4910
leaq 0x10(%rsp), %rdi
callq 0x4102bc
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1b02f4(%rip), %rdi    # 0x5c02b2
leaq 0x1af34a(%rip), %rsi    # 0x5bf30f
leaq 0x1b0300(%rip), %rcx    # 0x5c02cc
movl $0x11f, %edx            # imm = 0x11F
callq 0x4ffe80
leaq 0x1b0339(%rip), %rdi    # 0x5c0316
leaq 0x1af32b(%rip), %rsi    # 0x5bf30f
leaq 0x1b02e1(%rip), %rcx    # 0x5c02cc
movl $0x120, %edx            # imm = 0x120
callq 0x4ffe80
leaq 0x1b0331(%rip), %rsi    # 0x5c032d
leaq 0x28(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x406046
leaq 0x28(%rsp), %rdi
callq 0x434d5b
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x4b4bf0
jmp 0x410031
jmp 0x41002e
jmp 0x41002e
jmp 0x41002e
jmp 0x41002e
jmp 0x41002e
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x4102bc
movq %rbx, %rdi
callq 0x4eb220
nop