// File: attractivechaos[P]udb2/libcuckoo/./cuckoohash_map.hh
// Function: cuckoohash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>, 4ul>::lock_three(unsigned long, unsigned long, unsigned long, unsigned long, std::integral_constant<bool, false>) const
std::pair<TwoBuckets, LockManager> lock_three(size_type hp, size_type i1,
                                                size_type i2, size_type i3,
                                                normal_mode) const {
    std::array<size_type, 3> l{{lock_ind(i1), lock_ind(i2), lock_ind(i3)}};
    // Lock in order.
    if (l[2] < l[1])
      std::swap(l[2], l[1]);
    if (l[2] < l[0])
      std::swap(l[2], l[0]);
    if (l[1] < l[0])
      std::swap(l[1], l[0]);
    locks_t &locks = get_current_locks();
    locks[l[0]].lock();
    check_hashpower(hp, locks[l[0]]);
    if (l[1] != l[0]) {
      locks[l[1]].lock();
    }
    if (l[2] != l[1]) {
      locks[l[2]].lock();
    }
    return std::make_pair(TwoBuckets(locks, i1, i2, normal_mode()),
                          LockManager((lock_ind(i3) == lock_ind(i1) ||
                                       lock_ind(i3) == lock_ind(i2))
                                          ? nullptr
                                          : &locks[lock_ind(i3)]));
  }

// Assembly:
subq $0x148, %rsp            # imm = 0x148
movq %rdi, 0x90(%rsp)
movq %rdi, %rax
movq %rax, 0x98(%rsp)
movq %rdi, 0x140(%rsp)
movq %rsi, 0x130(%rsp)
movq %rdx, 0x128(%rsp)
movq %rcx, 0x120(%rsp)
movq %r8, 0x118(%rsp)
movq %r9, 0x110(%rsp)
movq 0x130(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq 0x120(%rsp), %rdi
callq 0x5110
movq %rax, 0xf8(%rsp)
movq 0x118(%rsp), %rdi
callq 0x5110
movq %rax, 0x100(%rsp)
movq 0x110(%rsp), %rdi
callq 0x5110
movq %rax, 0x108(%rsp)
leaq 0xf8(%rsp), %rdi
movl $0x2, %esi
callq 0x8070
movq (%rax), %rax
movq %rax, 0xa8(%rsp)
leaq 0xf8(%rsp), %rdi
movl $0x1, %esi
callq 0x8070
movq %rax, %rcx
movq 0xa8(%rsp), %rax
cmpq (%rcx), %rax
jae 0x7a74
leaq 0xf8(%rsp), %rdi
movl $0x2, %esi
callq 0x8070
movq %rax, 0x88(%rsp)
leaq 0xf8(%rsp), %rdi
movl $0x1, %esi
callq 0x8070
movq 0x88(%rsp), %rdi
movq %rax, %rsi
callq 0x5130
leaq 0xf8(%rsp), %rdi
movl $0x2, %esi
callq 0x8070
movq (%rax), %rax
movq %rax, 0x80(%rsp)
leaq 0xf8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x8070
movq %rax, %rcx
movq 0x80(%rsp), %rax
cmpq (%rcx), %rax
jae 0x7ae7
leaq 0xf8(%rsp), %rdi
movl $0x2, %esi
callq 0x8070
movq %rax, 0x78(%rsp)
leaq 0xf8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x8070
movq 0x78(%rsp), %rdi
movq %rax, %rsi
callq 0x5130
leaq 0xf8(%rsp), %rdi
movl $0x1, %esi
callq 0x8070
movq (%rax), %rax
movq %rax, 0x70(%rsp)
leaq 0xf8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x8070
movq %rax, %rcx
movq 0x70(%rsp), %rax
cmpq (%rcx), %rax
jae 0x7b54
leaq 0xf8(%rsp), %rdi
movl $0x1, %esi
callq 0x8070
movq %rax, 0x68(%rsp)
leaq 0xf8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x8070
movq 0x68(%rsp), %rdi
movq %rax, %rsi
callq 0x5130
movq 0xa0(%rsp), %rdi
callq 0x5170
movq %rax, 0xf0(%rsp)
movq 0xf0(%rsp), %rax
movq %rax, 0x48(%rsp)
leaq 0xf8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x8070
movq 0x48(%rsp), %rdi
movq (%rax), %rsi
callq 0x5190
movq %rax, %rdi
callq 0x51b0
movq 0x128(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0xf0(%rsp), %rax
movq %rax, 0x50(%rsp)
leaq 0xf8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x8070
movq 0x50(%rsp), %rdi
movq (%rax), %rsi
callq 0x5190
movq 0xa0(%rsp), %rdi
movq 0x58(%rsp), %rsi
movq %rax, %rdx
callq 0x5260
leaq 0xf8(%rsp), %rdi
movl $0x1, %esi
callq 0x8070
movq (%rax), %rax
movq %rax, 0x60(%rsp)
leaq 0xf8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x8070
movq %rax, %rcx
movq 0x60(%rsp), %rax
cmpq (%rcx), %rax
je 0x7c55
movq 0xf0(%rsp), %rax
movq %rax, 0x40(%rsp)
leaq 0xf8(%rsp), %rdi
movl $0x1, %esi
callq 0x8070
movq 0x40(%rsp), %rdi
movq (%rax), %rsi
callq 0x5190
movq %rax, %rdi
callq 0x51b0
leaq 0xf8(%rsp), %rdi
movl $0x2, %esi
callq 0x8070
movq (%rax), %rax
movq %rax, 0x38(%rsp)
leaq 0xf8(%rsp), %rdi
movl $0x1, %esi
callq 0x8070
movq %rax, %rcx
movq 0x38(%rsp), %rax
cmpq (%rcx), %rax
je 0x7cc2
movq 0xf0(%rsp), %rax
movq %rax, 0x30(%rsp)
leaq 0xf8(%rsp), %rdi
movl $0x2, %esi
callq 0x8070
movq 0x30(%rsp), %rdi
movq (%rax), %rsi
callq 0x5190
movq %rax, %rdi
callq 0x51b0
movq 0xf0(%rsp), %rsi
movq 0x120(%rsp), %rdx
movq 0x118(%rsp), %rcx
leaq 0xd0(%rsp), %rdi
callq 0x52b0
movq 0x110(%rsp), %rdi
callq 0x5110
movq %rax, 0x28(%rsp)
movq 0x120(%rsp), %rdi
callq 0x5110
movq %rax, %rcx
movq 0x28(%rsp), %rax
cmpq %rcx, %rax
je 0x7d3f
movq 0x110(%rsp), %rdi
callq 0x5110
movq %rax, 0x20(%rsp)
movq 0x118(%rsp), %rdi
callq 0x5110
movq %rax, %rcx
movq 0x20(%rsp), %rax
cmpq %rcx, %rax
jne 0x7d48
xorl %eax, %eax
movq %rax, 0x18(%rsp)
jmp 0x7d74
movq 0xf0(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x110(%rsp), %rdi
callq 0x5110
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x5190
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rsi
leaq 0xc0(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x5490
movq 0x90(%rsp), %rdi
movq 0x8(%rsp), %rdx
leaq 0xd0(%rsp), %rsi
callq 0x80a0
jmp 0x7da7
leaq 0xc0(%rsp), %rdi
callq 0x7580
leaq 0xd0(%rsp), %rdi
callq 0x4e70
movq 0x98(%rsp), %rax
addq $0x148, %rsp            # imm = 0x148
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xb8(%rsp)
movl %eax, 0xb4(%rsp)
leaq 0xc0(%rsp), %rdi
callq 0x7580
leaq 0xd0(%rsp), %rdi
callq 0x4e70
movq 0xb8(%rsp), %rdi
callq 0x2240
nopl (%rax)