// File: /workspace/github_cpp_makefile_star2_O3/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 $0x38, %rsp
movl %esi, %ebp
movq %rdi, %rbx
xorps %xmm0, %xmm0
movq %rsp, %rdi
movaps %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
movq 0x30(%rbx), %rsi
callq 0x4131a2
cmpq $0x0, 0x28(%rbx)
je 0x412f4b
leaq 0x88(%rbx), %r14
xorl %r12d, %r12d
movq %rsp, %r15
testb $0x1, 0x8(%r14)
je 0x412f3e
movq 0x8(%rsp), %rsi
cmpq 0x10(%rsp), %rsi
je 0x412f33
movups (%r14), %xmm0
movups %xmm0, (%rsi)
addq $0x10, 0x8(%rsp)
jmp 0x412f3e
movq %r15, %rdi
movq %r14, %rdx
callq 0x41329c
incq %r12
addq $0x10, %r14
cmpq 0x28(%rbx), %r12
jne 0x412f11
movq 0x8(%rsp), %rax
subq (%rsp), %rax
movq 0x30(%rbx), %rcx
sarq $0x4, %rax
leaq 0x2(%rax), %rdx
cmpq %rdx, %rcx
ja 0x4130f1
cmpq %rax, %rcx
jb 0x413110
movl 0x38(%rbx), %eax
incl 0x3c(%rbx,%rax,4)
notl %eax
andl $0x1, %eax
movl %eax, 0x38(%rbx)
movq (%rbx), %rax
movq %rbx, %rdi
movl $0x2, %esi
callq *0x48(%rax)
movq %rax, 0x28(%rbx)
xorl %r14d, %r14d
movq (%rbx), %rax
movq %rbx, %rdi
movl %r14d, %esi
callq *0x48(%rax)
imulq 0x28(%rbx), %rax
movq %rax, 0x28(%rbx)
incl %r14d
cmpl $0x2, %r14d
jne 0x412f96
cmpq $0x5f5e0ff, %rax        # imm = 0x5F5E0FF
ja 0x41312f
leaq 0x88(%rbx), %r15
shlq $0x4, %rax
movq %r15, %rdi
xorl %esi, %esi
movq %rax, %rdx
callq 0x401088
movl $0x0, 0x48(%rbx)
movq (%rsp), %r14
cmpq %r14, 0x8(%rsp)
je 0x413032
xorl %r12d, %r12d
xorl %r13d, %r13d
addq %r12, %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x411aa6
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4133c0
shlq $0x4, %rax
movups (%r14), %xmm0
movups %xmm0, (%r15,%rax)
incq %r13
movq (%rsp), %r14
movq 0x8(%rsp), %rax
subq %r14, %rax
sarq $0x4, %rax
addq $0x10, %r12
cmpq %rax, %r13
jne 0x412ff0
testb %bpl, %bpl
jne 0x4130cd
movq $0x655aa0, %rdi         # imm = 0x655AA0
leaq 0x1b823d(%rip), %rsi    # 0x5cb286
movl $0xc, %edx
callq 0x4b0120
movq %rbx, %rdi
callq 0x413244
leaq 0x18(%rsp), %rsi
movsd %xmm0, (%rsi)
movsd %xmm1, 0x8(%rsi)
movq $0x655aa0, %rdi         # imm = 0x655AA0
callq 0x40e5df
leaq 0x1c7cee(%rip), %rsi    # 0x5dad6a
movl $0x1, %edx
movq %rax, %rdi
callq 0x4b0120
movq $0x655aa0, %rdi         # imm = 0x655AA0
leaq 0x1b81fc(%rip), %rsi    # 0x5cb293
movl $0x11, %edx
callq 0x4b0120
movq %rbx, %rdi
callq 0x411ca0
movq $0x655aa0, %rdi         # imm = 0x655AA0
callq 0x4b1380
leaq 0x1c7cae(%rip), %rsi    # 0x5dad6a
movl $0x1, %edx
movq %rax, %rdi
callq 0x4b0120
movq (%rsp), %r14
testq %r14, %r14
je 0x4130e2
movq 0x10(%rsp), %rsi
subq %r14, %rsi
movq %r14, %rdi
callq 0x442d20
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1b80db(%rip), %rdi    # 0x5cb1d3
leaq 0x1b71fa(%rip), %rsi    # 0x5ca2f9
leaq 0x1b80e7(%rip), %rcx    # 0x5cb1ed
movl $0x11f, %edx            # imm = 0x11F
callq 0x50b050
leaq 0x1b8120(%rip), %rdi    # 0x5cb237
leaq 0x1b71db(%rip), %rsi    # 0x5ca2f9
leaq 0x1b80c8(%rip), %rcx    # 0x5cb1ed
movl $0x120, %edx            # imm = 0x120
callq 0x50b050
leaq 0x28(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1b810f(%rip), %rsi    # 0x5cb24e
leaq 0x1b813f(%rip), %rdx    # 0x5cb285
leaq 0x18(%rsp), %rdi
callq 0x4083fe
leaq 0x18(%rsp), %rdi
callq 0x43f581
movq %rax, %rbx
movq 0x18(%rsp), %rdi
cmpq %r14, %rdi
je 0x413183
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x442d20
jmp 0x413183
jmp 0x413180
jmp 0x413180
jmp 0x413180
jmp 0x413180
jmp 0x413180
movq %rax, %rbx
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x413199
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x442d20
movq %rbx, %rdi
callq 0x4f63f0
nop