// File: /workspace/github_cpp_makefile_star2_O3/dsharlet[P]array/test/array_lifetime.cpp
// Function: void nda::test_swap_lifetime<nda::auto_allocator<nda::lifetime_counter, 256ul, 1ul, std::allocator<nda::lifetime_counter>>>(bool)
void test_swap_lifetime(bool alloc_movable = true) {
  lifetime_array<Alloc> a(lifetime_shape);
  lifetime_array<Alloc> b({static_cast<index_t>(lifetime_shape.size()), 1});
  lifetime_counter::reset();
  swap(a, b);
  if (alloc_movable) {
    ASSERT_EQ(lifetime_counter::constructs(), 0);
    ASSERT_EQ(lifetime_counter::assigns(), 0);
    ASSERT_EQ(lifetime_counter::copies(), 0);
    ASSERT_EQ(lifetime_counter::moves(), 0);
  } else {
    ASSERT_EQ(lifetime_counter::default_constructs, 0);
    ASSERT_EQ(lifetime_counter::copy_constructs, 0);
    ASSERT_EQ(lifetime_counter::moves(), lifetime_shape.size() * 3);
  }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x458, %rsp            # imm = 0x458
movl %edi, %ebx
xorl %r15d, %r15d
leaq 0x308(%rsp), %r14
movb %r15b, 0x100(%r14)
xorps %xmm0, %xmm0
movups %xmm0, 0x108(%r14)
movq %r15, 0x118(%r14)
movups 0xabb2d(%rip), %xmm0    # 0xe71e8
movups %xmm0, 0x120(%r14)
movups 0xabb2e(%rip), %xmm0    # 0xe71f8
movups %xmm0, 0x130(%r14)
movups 0xabb2f(%rip), %xmm0    # 0xe7208
movups %xmm0, 0x140(%r14)
movq %r14, %rdi
callq 0x4008a
movq %r14, %rdi
callq 0x401b0
movq 0xabaf8(%rip), %rax     # 0xe71f0
imulq 0xabb08(%rip), %rax     # 0xe7208
testq %rax, %rax
cmovleq %r15, %rax
leaq 0x1b8(%rsp), %rdi
movb %r15b, 0x100(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, 0x108(%rdi)
movups %xmm0, 0x118(%rdi)
movq $0x1, 0x128(%rdi)
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
movq %rcx, 0x130(%rdi)
movq %r15, 0x138(%rdi)
movq %rax, 0x140(%rdi)
movq %rcx, 0x148(%rdi)
callq 0x4008a
leaq 0x1b8(%rsp), %rdi
callq 0x401b0
leaq 0xabb4f(%rip), %r15     # 0xe72c0
xorl %eax, %eax
movq %rax, (%r15)
leaq 0xabb4b(%rip), %r13     # 0xe72c8
movq %rax, (%r13)
leaq 0xabb48(%rip), %rcx     # 0xe72d0
movq %rax, (%rcx)
leaq 0xabb46(%rip), %rbp     # 0xe72d8
movq %rax, (%rbp)
leaq 0xabb43(%rip), %rcx     # 0xe72e0
movq %rax, (%rcx)
leaq 0xabb41(%rip), %rcx     # 0xe72e8
movq %rax, (%rcx)
leaq 0x308(%rsp), %rdi
leaq 0x1b8(%rsp), %rsi
callq 0x468fc
testb %bl, %bl
je 0x3bc18
movq (%r15), %r12
movq (%r13), %rbx
leaq 0xabafb(%rip), %rax     # 0xe72d0
movq (%rax), %r14
leaq 0x18(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x6c811(%rip), %rsi     # 0xa7ff9
leaq 0x6c82d(%rip), %rdx     # 0xa801c
leaq 0x8(%rsp), %rdi
callq 0xd14c
addq %r12, %rbx
xorl %esi, %esi
addq %r14, %rbx
sete %sil
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0xabac5(%rip), %r12     # 0xe72e0
leaq 0x67e62(%rip), %rsi     # 0xa3684
leaq 0x28(%rsp), %rdi
callq 0x18fba
leaq 0x72147(%rip), %rsi     # 0xad97a
movq %rax, %rdi
callq 0x3f5a4
leaq 0x6ba14(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3b873
movq (%r15), %rsi
addq (%r13), %rsi
leaq 0xaba6c(%rip), %rax     # 0xe72d0
addq (%rax), %rsi
movq %rbx, %rdi
addq $0x10, %rdi
callq 0x2110
leaq 0x67e0a(%rip), %rsi     # 0xa3684
movq %rbx, %rdi
callq 0x18fba
leaq 0x69696(%rip), %rsi     # 0xa4f1f
movq %rax, %rdi
callq 0x18fba
leaq 0x6b9be(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3b8ba
movq %rbx, %rdi
addq $0x10, %rdi
xorl %esi, %esi
callq 0x22f0
leaq 0x7e9d8(%rip), %rsi     # 0xba299
movq %rbx, %rdi
callq 0x18fba
leaq 0x28(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x3b8ef
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
movq (%rbp), %rbx
movq (%r12), %r14
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x71f50(%rip), %rsi     # 0xad85b
leaq 0x71f69(%rip), %rdx     # 0xad87b
callq 0xd14c
xorl %esi, %esi
addq %rbx, %r14
sete %sil
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0x67d4e(%rip), %rsi     # 0xa3684
leaq 0x28(%rsp), %rdi
callq 0x18fba
leaq 0x71f35(%rip), %rsi     # 0xad87c
movq %rax, %rdi
callq 0x3f614
leaq 0x6b900(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3b97e
movq (%rbp), %rsi
addq (%r12), %rsi
movq %rbx, %rdi
addq $0x10, %rdi
callq 0x2110
leaq 0x67cff(%rip), %rsi     # 0xa3684
movq %rbx, %rdi
callq 0x18fba
leaq 0x6958b(%rip), %rsi     # 0xa4f1f
movq %rax, %rdi
callq 0x18fba
leaq 0x6b8b3(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3b9c5
movq %rbx, %rdi
addq $0x10, %rdi
xorl %esi, %esi
callq 0x22f0
leaq 0x7e8cd(%rip), %rsi     # 0xba299
movq %rbx, %rdi
callq 0x18fba
leaq 0x28(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x3b9fa
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
movq (%r13), %rbx
movq (%rbp), %r14
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x71e82(%rip), %rsi     # 0xad898
leaq 0x71e9a(%rip), %rdx     # 0xad8b7
callq 0xd14c
xorl %esi, %esi
addq %rbx, %r14
sete %sil
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0x67c43(%rip), %rsi     # 0xa3684
leaq 0x28(%rsp), %rdi
callq 0x18fba
leaq 0x71e66(%rip), %rsi     # 0xad8b8
movq %rax, %rdi
callq 0x19944
leaq 0x6b7f5(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3ba89
movq (%r13), %rsi
addq (%rbp), %rsi
movq %rbx, %rdi
addq $0x10, %rdi
callq 0x2110
leaq 0x67bf4(%rip), %rsi     # 0xa3684
movq %rbx, %rdi
callq 0x18fba
leaq 0x69480(%rip), %rsi     # 0xa4f1f
movq %rax, %rdi
callq 0x18fba
leaq 0x6b7a8(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3bad0
movq %rbx, %rdi
addq $0x10, %rdi
xorl %esi, %esi
callq 0x22f0
leaq 0x7e7c2(%rip), %rsi     # 0xba299
movq %rbx, %rdi
callq 0x18fba
leaq 0x28(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x3bb05
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
leaq 0xab7c4(%rip), %rax     # 0xe72d0
movq (%rax), %rbx
movq (%r12), %r14
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x701ee(%rip), %rsi     # 0xabd15
leaq 0x70205(%rip), %rdx     # 0xabd33
callq 0xd14c
xorl %esi, %esi
addq %rbx, %r14
sete %sil
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0x67b32(%rip), %rsi     # 0xa3684
leaq 0x28(%rsp), %rdi
callq 0x18fba
leaq 0x701d1(%rip), %rsi     # 0xabd34
movq %rax, %rdi
callq 0x421f8
leaq 0x6b6e4(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3bba0
leaq 0xab743(%rip), %rax     # 0xe72d0
movq (%rax), %rsi
addq (%r12), %rsi
movq %rbx, %rdi
addq $0x10, %rdi
callq 0x2110
leaq 0x67add(%rip), %rsi     # 0xa3684
movq %rbx, %rdi
callq 0x18fba
leaq 0x69369(%rip), %rsi     # 0xa4f1f
movq %rax, %rdi
callq 0x18fba
leaq 0x6b691(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3bbe7
movq %rbx, %rdi
addq $0x10, %rdi
xorl %esi, %esi
callq 0x22f0
leaq 0x7e6ab(%rip), %rsi     # 0xba299
movq %rbx, %rdi
callq 0x18fba
leaq 0x28(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
jne 0x3bf57
jmp 0x3bf64
movq (%r15), %rbx
leaq 0x18(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x71ca7(%rip), %rsi     # 0xad8d3
leaq 0x71cc9(%rip), %rdx     # 0xad8fc
leaq 0x8(%rsp), %rdi
callq 0xd14c
xorl %esi, %esi
testq %rbx, %rbx
sete %sil
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0x67a28(%rip), %rsi     # 0xa3684
leaq 0x28(%rsp), %rdi
callq 0x18fba
leaq 0x6c3ee(%rip), %rsi     # 0xa805b
movq %rax, %rdi
callq 0x3f5dc
leaq 0x6b5da(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3bc9f
movq %rbx, %rdi
addq $0x10, %rdi
movq (%r15), %rsi
callq 0x2110
leaq 0x679de(%rip), %rsi     # 0xa3684
movq %rbx, %rdi
callq 0x18fba
leaq 0x6926a(%rip), %rsi     # 0xa4f1f
movq %rax, %rdi
callq 0x18fba
leaq 0x6b592(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3bce6
movq %rbx, %rdi
addq $0x10, %rdi
xorl %esi, %esi
callq 0x22f0
leaq 0x7e5ac(%rip), %rsi     # 0xba299
movq %rbx, %rdi
callq 0x18fba
leaq 0x28(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x3bd16
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
movq (%r13), %rbx
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x71bd4(%rip), %rsi     # 0xad8fd
leaq 0x71bf3(%rip), %rdx     # 0xad923
callq 0xd14c
xorl %esi, %esi
testq %rbx, %rbx
sete %sil
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0x67930(%rip), %rsi     # 0xa3684
leaq 0x28(%rsp), %rdi
callq 0x18fba
leaq 0x6e9ae(%rip), %rsi     # 0xaa713
movq %rax, %rdi
callq 0x421c0
leaq 0x6b4e2(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3bd98
movq %rbx, %rdi
addq $0x10, %rdi
movq (%r13), %rsi
callq 0x2110
leaq 0x678e5(%rip), %rsi     # 0xa3684
movq %rbx, %rdi
callq 0x18fba
leaq 0x69171(%rip), %rsi     # 0xa4f1f
movq %rax, %rdi
callq 0x18fba
leaq 0x6b499(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3bddf
movq %rbx, %rdi
addq $0x10, %rdi
xorl %esi, %esi
callq 0x22f0
leaq 0x7e4b3(%rip), %rsi     # 0xba299
movq %rbx, %rdi
callq 0x18fba
leaq 0x28(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x3be0f
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
leaq 0xab4ba(%rip), %rax     # 0xe72d0
movq (%rax), %r15
leaq 0xab4c0(%rip), %rax     # 0xe72e0
movq (%rax), %rbx
movq 0xab3de(%rip), %r14     # 0xe7208
movq 0xab3bf(%rip), %r13     # 0xe71f0
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x71ae4(%rip), %rsi     # 0xad924
leaq 0x71b13(%rip), %rdx     # 0xad95a
callq 0xd14c
imulq %r14, %r13
xorl %eax, %eax
testq %r13, %r13
cmovgq %r13, %rax
addq %r15, %rbx
leaq (%rax,%rax,2), %rax
xorl %esi, %esi
cmpq %rax, %rbx
sete %sil
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0x67805(%rip), %rsi     # 0xa3684
leaq 0x28(%rsp), %rdi
callq 0x18fba
leaq 0x6fea4(%rip), %rsi     # 0xabd34
movq %rax, %rdi
callq 0x421f8
leaq 0x6b3b7(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3bed3
leaq 0xab416(%rip), %rax     # 0xe72d0
movq (%rax), %rsi
leaq 0xab41c(%rip), %rax     # 0xe72e0
addq (%rax), %rsi
movq %rbx, %rdi
addq $0x10, %rdi
callq 0x2110
leaq 0x677aa(%rip), %rsi     # 0xa3684
movq %rbx, %rdi
callq 0x18fba
leaq 0x71a58(%rip), %rsi     # 0xad941
movq %rax, %rdi
callq 0x421f8
leaq 0x6b35e(%rip), %rsi     # 0xa7256
movq %rax, %rdi
callq 0x18fba
movq %rax, %rbx
cmpb $0x1, 0x188(%rax)
jne 0x3bf34
movq 0xab2f5(%rip), %rax     # 0xe7208
imulq 0xab2d5(%rip), %rax     # 0xe71f0
xorl %ecx, %ecx
testq %rax, %rax
cmovgq %rax, %rcx
leaq (%rcx,%rcx,2), %rsi
movq %rbx, %rdi
addq $0x10, %rdi
callq 0x2110
leaq 0x7e35e(%rip), %rsi     # 0xba299
movq %rbx, %rdi
callq 0x18fba
leaq 0x28(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x3bf64
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
leaq 0x1b8(%rsp), %rdi
callq 0x402e8
leaq 0x308(%rsp), %rdi
callq 0x402e8
addq $0x458, %rsp            # imm = 0x458
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x3bfd3
jmp 0x3bfd3
jmp 0x3bfd3
jmp 0x3bfd3
jmp 0x3bfd3
jmp 0x3bfd3
jmp 0x3bfd3
jmp 0x3bfe2
jmp 0x3bff1
jmp 0x3c003
jmp 0x3c071
jmp 0x3c012
jmp 0x3c080
jmp 0x3c021
jmp 0x3c09d
jmp 0x3c09d
jmp 0x3bfce
jmp 0x3bfc6
jmp 0x3bfce
jmp 0x3bfc6
jmp 0x3bfce
movq %rax, %rbx
jmp 0x3c08d
movq %rax, %rbx
jmp 0x3c02e
movq %rax, %rbx
jmp 0x3c04a
jmp 0x3bfe2
jmp 0x3bff1
jmp 0x3c003
jmp 0x3c012
jmp 0x3c021
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xbfd8
jmp 0x3c02e
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xbfd8
jmp 0x3c08d
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xbfd8
jmp 0x3c02e
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xbfd8
jmp 0x3c02e
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x3c04a
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
leaq 0x1b8(%rsp), %rdi
callq 0x402e8
leaq 0x308(%rsp), %rdi
callq 0x402e8
movq %rbx, %rdi
callq 0x2300
movq %rax, %rbx
jmp 0x3c057
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xbfd8
jmp 0x3c08d
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
jne 0x3c03d
jmp 0x3c04a
jmp 0x3c09d
jmp 0x3c09d
movq %rax, %rdi
callq 0xc0a9