// File: /workspace/github_cpp_makefile_star2_O1/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 0x41332e
cmpq $0x0, 0x28(%rbx)
je 0x4130d5
leaq 0x88(%rbx), %r14
xorl %r12d, %r12d
movq %rsp, %r15
testb $0x1, 0x8(%r14)
je 0x4130c8
movq 0x8(%rsp), %rsi
cmpq 0x10(%rsp), %rsi
je 0x4130bd
movups (%r14), %xmm0
movups %xmm0, (%rsi)
addq $0x10, 0x8(%rsp)
jmp 0x4130c8
movq %r15, %rdi
movq %r14, %rdx
callq 0x41341e
incq %r12
addq $0x10, %r14
cmpq 0x28(%rbx), %r12
jne 0x41309b
movq 0x8(%rsp), %rax
subq (%rsp), %rax
movq 0x30(%rbx), %rcx
sarq $0x4, %rax
leaq 0x2(%rax), %rdx
cmpq %rdx, %rcx
ja 0x41327e
cmpq %rax, %rcx
jb 0x41329d
movl 0x38(%rbx), %eax
leal 0x1(%rax), %ecx
movl %ecx, 0x38(%rbx)
incl 0x3c(%rbx,%rax,4)
andl $0x1, %ecx
movl %ecx, 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 0x413124
movq 0x28(%rbx), %rdx
cmpq $0x5f5e0ff, %rdx        # imm = 0x5F5E0FF
ja 0x4132bc
leaq 0x88(%rbx), %r14
shlq $0x4, %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x401088
movl $0x0, 0x48(%rbx)
movq (%rsp), %r15
cmpq %r15, 0x8(%rsp)
je 0x4131c2
xorl %r12d, %r12d
xorl %r13d, %r13d
addq %r12, %r15
movq %rbx, %rdi
movq %r15, %rsi
callq 0x411b92
movq %rbx, %rdi
movq %rax, %rsi
callq 0x413542
shlq $0x4, %rax
movups (%r15), %xmm0
movups %xmm0, (%r14,%rax)
incq %r13
movq (%rsp), %r15
movq 0x8(%rsp), %rax
subq %r15, %rax
sarq $0x4, %rax
addq $0x10, %r12
cmpq %rax, %r13
jne 0x413180
testb %bpl, %bpl
jne 0x413259
movq $0x656aa0, %rdi         # imm = 0x656AA0
leaq 0x1b8fbd(%rip), %rsi    # 0x5cc196
movl $0xc, %edx
callq 0x4b14d0
movq %rbx, %rdi
callq 0x4133c6
leaq 0x18(%rsp), %rsi
movsd %xmm0, (%rsi)
movsd %xmm1, 0x8(%rsi)
movq $0x656aa0, %rdi         # imm = 0x656AA0
callq 0x40e5ab
leaq 0x1c89de(%rip), %rsi    # 0x5dbbea
movl $0x1, %edx
movq %rax, %rdi
callq 0x4b14d0
movq $0x656aa0, %rdi         # imm = 0x656AA0
leaq 0x1b8f7c(%rip), %rsi    # 0x5cc1a3
movl $0x11, %edx
callq 0x4b14d0
movq %rbx, %rdi
callq 0x411d8e
movq $0x656aa0, %rdi         # imm = 0x656AA0
callq 0x4b2730
leaq 0x1c899e(%rip), %rsi    # 0x5dbbea
movl $0x1, %edx
movq %rax, %rdi
callq 0x4b14d0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x41326f
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x4440d0
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1b8e5e(%rip), %rdi    # 0x5cc0e3
leaq 0x1b7f7d(%rip), %rsi    # 0x5cb209
leaq 0x1b8e6a(%rip), %rcx    # 0x5cc0fd
movl $0x11f, %edx            # imm = 0x11F
callq 0x50c400
leaq 0x1b8ea3(%rip), %rdi    # 0x5cc147
leaq 0x1b7f5e(%rip), %rsi    # 0x5cb209
leaq 0x1b8e4b(%rip), %rcx    # 0x5cc0fd
movl $0x120, %edx            # imm = 0x120
callq 0x50c400
leaq 0x28(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1b8e92(%rip), %rsi    # 0x5cc15e
leaq 0x1b8ec2(%rip), %rdx    # 0x5cc195
leaq 0x18(%rsp), %rdi
callq 0x40843e
leaq 0x18(%rsp), %rdi
callq 0x440975
movq %rax, %rbx
movq 0x18(%rsp), %rdi
cmpq %r14, %rdi
je 0x413310
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x4440d0
jmp 0x413310
jmp 0x41330d
jmp 0x41330d
jmp 0x41330d
jmp 0x41330d
jmp 0x41330d
movq %rax, %rbx
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x413326
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x4440d0
movq %rbx, %rdi
callq 0x4f77a0