// File: 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
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movb %sil, %al
movq %rdi, -0x8(%rbp)
andb $0x1, %al
movb %al, -0x9(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xa0(%rbp)
leaq -0x28(%rbp), %rdi
movq %rdi, -0x98(%rbp)
callq 0x422a70
movq -0xa0(%rbp), %rax
movq -0x98(%rbp), %rdi
movq 0x30(%rax), %rsi
callq 0x422a90
jmp 0x42268b
movq $0x0, -0x40(%rbp)
movq -0xa0(%rbp), %rcx
movq -0x40(%rbp), %rax
cmpq 0x28(%rcx), %rax
je 0x42270d
movq -0xa0(%rbp), %rdi
addq $0x88, %rdi
movq -0x40(%rbp), %rax
shlq $0x4, %rax
addq %rax, %rdi
callq 0x41dff0
testb $0x1, %al
jne 0x4226c8
jmp 0x4226fd
movq -0xa0(%rbp), %rax
movq -0x40(%rbp), %rcx
shlq $0x4, %rcx
leaq 0x88(%rax,%rcx), %rsi
leaq -0x28(%rbp), %rdi
callq 0x422b90
jmp 0x4226ea
jmp 0x4226fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x422a56
jmp 0x4226ff
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x422693
movq -0xa0(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0xa8(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x422c00
movq %rax, %rcx
movq -0xa8(%rbp), %rax
addq $0x2, %rcx
cmpq %rcx, %rax
ja 0x42273d
jmp 0x42275c
leaq 0x1daeb9(%rip), %rdi    # 0x5fd5fd
leaq 0x1d9d9c(%rip), %rsi    # 0x5fc4e7
movl $0x11f, %edx            # imm = 0x11F
leaq 0x1daec0(%rip), %rcx    # 0x5fd617
callq 0x53d020
movq -0xa0(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0xb0(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x422c00
movq %rax, %rcx
movq -0xb0(%rbp), %rax
cmpq %rcx, %rax
jb 0x422788
jmp 0x4227a7
leaq 0x1daed2(%rip), %rdi    # 0x5fd661
leaq 0x1d9d51(%rip), %rsi    # 0x5fc4e7
movl $0x120, %edx            # imm = 0x120
leaq 0x1dae75(%rip), %rcx    # 0x5fd617
callq 0x53d020
movq -0xa0(%rbp), %rdi
movl 0x38(%rdi), %eax
movl %eax, %ecx
incl %ecx
movl %ecx, 0x38(%rdi)
movl 0x3c(%rdi,%rax,4), %ecx
incl %ecx
movl %ecx, 0x3c(%rdi,%rax,4)
movl 0x38(%rdi), %eax
andl $0x1, %eax
movl %eax, 0x38(%rdi)
movq (%rdi), %rax
movq 0x48(%rax), %rax
movl $0x2, %esi
callq *%rax
movq %rax, -0xb8(%rbp)
jmp 0x4227e2
movq -0xa0(%rbp), %rax
movq -0xb8(%rbp), %rcx
movq %rcx, 0x28(%rax)
movl $0x0, -0x44(%rbp)
cmpl $0x2, -0x44(%rbp)
je 0x42283f
movq -0xa0(%rbp), %rdi
movl -0x44(%rbp), %esi
movq (%rdi), %rax
movq 0x48(%rax), %rax
callq *%rax
movq %rax, -0xc0(%rbp)
jmp 0x42281d
movq -0xa0(%rbp), %rax
movq -0xc0(%rbp), %rcx
imulq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x4227fb
movq -0xa0(%rbp), %rax
cmpq $0x5f5e100, 0x28(%rax)  # imm = 0x5F5E100
jb 0x4228b5
leaq -0x69(%rbp), %rdi
movq %rdi, -0xc8(%rbp)
callq 0x4771f0
movq -0xc8(%rbp), %rdx
leaq 0x1dae0a(%rip), %rsi    # 0x5fd678
leaq -0x68(%rbp), %rdi
callq 0x407bd0
jmp 0x422879
leaq -0x68(%rbp), %rdi
callq 0x46d330
jmp 0x422884
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x4228a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x4f1e40
leaq -0x69(%rbp), %rdi
callq 0x477210
jmp 0x422a56
movq -0xa0(%rbp), %rax
movq %rax, %rdi
addq $0x88, %rdi
movq 0x28(%rax), %rdx
shlq $0x4, %rdx
xorl %esi, %esi
callq 0x401080
movq -0xa0(%rbp), %rax
movl $0x0, 0x48(%rax)
movq $0x0, -0x78(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0xd0(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x422c00
movq %rax, %rcx
movq -0xd0(%rbp), %rax
cmpq %rcx, %rax
je 0x42293c
movq -0x78(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x422c20
movq -0xa0(%rbp), %rdi
movq %rax, %rsi
callq 0x4225b0
jmp 0x42292c
jmp 0x42292e
movq -0x78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
jmp 0x4228eb
testb $0x1, -0x9(%rbp)
je 0x42294e
movl $0x1, -0x7c(%rbp)
jmp 0x422a44
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1dad54(%rip), %rsi    # 0x5fd6b0
callq 0x4e1b60
movq %rax, -0xd8(%rbp)
jmp 0x42296a
movq -0xa0(%rbp), %rdi
callq 0x422c40
movsd %xmm1, -0xe8(%rbp)
movsd %xmm0, -0xe0(%rbp)
jmp 0x422988
movq -0xd8(%rbp), %rdi
movsd -0xe8(%rbp), %xmm0
movsd -0xe0(%rbp), %xmm1
movsd %xmm1, -0x90(%rbp)
movsd %xmm0, -0x88(%rbp)
leaq -0x90(%rbp), %rsi
callq 0x4187f0
movq %rax, -0xf0(%rbp)
jmp 0x4229c4
movq -0xf0(%rbp), %rdi
leaq 0x1eba38(%rip), %rsi    # 0x60e40a
callq 0x4e1b60
jmp 0x4229d9
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1dacd6(%rip), %rsi    # 0x5fd6bd
callq 0x4e1b60
movq %rax, -0xf8(%rbp)
jmp 0x4229f5
movq -0xa0(%rbp), %rdi
callq 0x41f0f0
movsd %xmm0, -0x100(%rbp)
jmp 0x422a0b
movsd -0x100(%rbp), %xmm0
movq -0xf8(%rbp), %rdi
callq 0x4e2ad0
movq %rax, -0x108(%rbp)
jmp 0x422a28
movq -0x108(%rbp), %rdi
leaq 0x1eb9d4(%rip), %rsi    # 0x60e40a
callq 0x4e1b60
jmp 0x422a3d
movl $0x0, -0x7c(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x422c90
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
leaq -0x28(%rbp), %rdi
callq 0x422c90
movq -0x30(%rbp), %rdi
callq 0x5283c0
nopl (%rax,%rax)