// File: /workspace/github_c_makefile_star2_O1/KhuramAli[P]JAM-Benchmark/is_lockfree/isLockfree.cpp
// Function: main
int main()
{
    std::atomic<A> a;
    std::atomic<B> b;
    std::atomic<C> c;

    std::cout << "sizeof int: " << sizeof(int) << '\n';
    std::cout << "sizeof int64_t: " << sizeof(int64_t) << '\n';
    std::cout << "minimum numeric limit of int: " << min_int << '\n'; 			
    std::cout << "maximum numeric limit of int: " << max_int << '\n';
    std::cout << "minimum numeric limit of min_int64_t: " << min_int64_t << '\n';			
    std::cout << "maximum numeric limit of max_int64_t: " << max_int64_t << '\n';
    std::cout << "size of struct A: " << sizeof(int) * size << '\n';
    std::cout << "size of struct B: " << sizeof(b) << '\n';
    std::cout << "size of struct C: " << sizeof(c) << '\n';

    std::cout << std::boolalpha
              << "std::atomic<A> with an array of " << size <<  " is lock free? "
              << std::atomic_is_lock_free(&a) << '\n'
              << "std::atomic<B> with two ints is lock free? "
              << std::atomic_is_lock_free(&b) << '\n'
	      << "std::atomic<C> with two int64_t is lock free? "
	      << std::atomic_is_lock_free(&c) << '\n';
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq 0x2dcd(%rip), %rbx      # 0x3fd8
leaq 0xdf2(%rip), %rsi       # 0x2004
movl $0xc, %edx
movq %rbx, %rdi
callq 0x1090
movl $0x4, %esi
movq %rbx, %rdi
callq 0x1060
movb $0xa, %bpl
leaq 0x4(%rsp), %rsi
movb %bpl, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x1090
leaq 0xdc6(%rip), %rsi       # 0x2011
movl $0x10, %edx
movq %rbx, %rdi
callq 0x1090
movl $0x8, %esi
movq %rbx, %rdi
callq 0x1060
leaq 0x5(%rsp), %rsi
movb %bpl, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x1090
leaq 0xda1(%rip), %rsi       # 0x2022
movl $0x1e, %edx
movq %rbx, %rdi
callq 0x1090
movq %rbx, %rdi
movl $0x80000000, %esi       # imm = 0x80000000
callq 0x10c0
leaq 0x6(%rsp), %rsi
movb %bpl, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x1090
leaq 0xd8a(%rip), %rsi       # 0x2041
movl $0x1e, %edx
movq %rbx, %rdi
callq 0x1090
movq %rbx, %rdi
movl $0x7fffffff, %esi       # imm = 0x7FFFFFFF
callq 0x10c0
leaq 0x7(%rsp), %rsi
movb %bpl, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x1090
leaq 0xd73(%rip), %rsi       # 0x2060
movl $0x26, %edx
movq %rbx, %rdi
callq 0x1090
movabsq $0x7fffffffffffffff, %r14 # imm = 0x7FFFFFFFFFFFFFFF
leaq 0x1(%r14), %rsi
movq %rbx, %rdi
callq 0x1080
leaq 0x8(%rsp), %rsi
movb %bpl, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x1090
leaq 0xd5b(%rip), %rsi       # 0x2087
movl $0x26, %edx
movq %rbx, %rdi
callq 0x1090
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1080
leaq 0x9(%rsp), %rsi
movb %bpl, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x1090
leaq 0xd4e(%rip), %rsi       # 0x20ae
movl $0x12, %edx
movq %rbx, %rdi
callq 0x1090
movl $0x190, %esi            # imm = 0x190
movq %rbx, %rdi
callq 0x1060
leaq 0xa(%rsp), %rsi
movb %bpl, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x1090
leaq 0xd2b(%rip), %rsi       # 0x20c1
movl $0x12, %edx
movq %rbx, %rdi
callq 0x1090
movl $0x8, %esi
movq %rbx, %rdi
callq 0x1060
leaq 0xb(%rsp), %rsi
movb %bpl, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x1090
leaq 0xd08(%rip), %rsi       # 0x20d4
movl $0x12, %edx
movq %rbx, %rdi
callq 0x1090
movl $0x10, %esi
movq %rbx, %rdi
callq 0x1060
leaq 0xc(%rsp), %rsi
movb %bpl, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x1090
movq (%rbx), %rax
movq -0x18(%rax), %rax
orl $0x1, 0x18(%rbx,%rax)
leaq 0xcd9(%rip), %rsi       # 0x20e7
movl $0x20, %edx
movq %rbx, %rdi
callq 0x1090
movq %rbx, %rdi
movl $0x64, %esi
callq 0x10c0
movq %rax, %rbx
leaq 0xcf2(%rip), %rsi       # 0x2124
movl $0xf, %edx
movq %rax, %rdi
callq 0x1090
movl $0x190, %edi            # imm = 0x190
movq $-0x4, %rsi
callq 0x1050
movzbl %al, %esi
movq %rbx, %rdi
callq 0x10b0
leaq 0xd(%rsp), %rsi
movb %bpl, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x1090
movq %rax, %rbx
leaq 0xc8e(%rip), %rsi       # 0x2108
movl $0x2b, %edx
movq %rax, %rdi
callq 0x1090
movq %rbx, %rdi
movl $0x1, %esi
callq 0x10b0
leaq 0xe(%rsp), %rsi
movb %bpl, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x1090
movq %rax, %rbx
leaq 0xc81(%rip), %rsi       # 0x2134
movl $0x2e, %edx
movq %rax, %rdi
callq 0x1090
movl $0x10, %edi
movq $-0x10, %rsi
callq 0x1050
movzbl %al, %esi
movq %rbx, %rdi
callq 0x10b0
leaq 0xf(%rsp), %rsi
movb $0xa, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x1090
xorl %eax, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
jmp 0x14fe
movq %rax, %rdi
callq 0x1506