// File: /workspace/github_c_makefile_star2_O0/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:
subq $0x1c8, %rsp            # imm = 0x1C8
movq 0x2d9a(%rip), %rdi      # 0x3fd8
leaq 0xdbf(%rip), %rsi       # 0x2004
callq 0x1090
movq %rax, %rdi
movl $0x4, %esi
callq 0x1030
movq %rax, %rdi
movl $0xa, %esi
callq 0x10a0
movq 0x2d6d(%rip), %rdi      # 0x3fd8
leaq 0xd9f(%rip), %rsi       # 0x2011
callq 0x1090
movq %rax, %rdi
movl $0x8, %esi
callq 0x1030
movq %rax, %rdi
movl $0xa, %esi
callq 0x10a0
movq 0x2d40(%rip), %rdi      # 0x3fd8
leaq 0xd83(%rip), %rsi       # 0x2022
callq 0x1090
movq %rax, %rdi
movl $0x80000000, %esi       # imm = 0x80000000
callq 0x10c0
movq %rax, %rdi
movl $0xa, %esi
callq 0x10a0
movq 0x2d13(%rip), %rdi      # 0x3fd8
leaq 0xd75(%rip), %rsi       # 0x2041
callq 0x1090
movq %rax, %rdi
movl $0x7fffffff, %esi       # imm = 0x7FFFFFFF
callq 0x10c0
movq %rax, %rdi
movl $0xa, %esi
callq 0x10a0
movq 0x2ce6(%rip), %rdi      # 0x3fd8
leaq 0xd67(%rip), %rsi       # 0x2060
callq 0x1090
movq %rax, %rdi
movabsq $-0x8000000000000000, %rsi # imm = 0x8000000000000000
callq 0x10e0
movq %rax, %rdi
movl $0xa, %esi
callq 0x10a0
movq 0x2cb4(%rip), %rdi      # 0x3fd8
leaq 0xd5c(%rip), %rsi       # 0x2087
callq 0x1090
movq %rax, %rdi
movabsq $0x7fffffffffffffff, %rsi # imm = 0x7FFFFFFFFFFFFFFF
callq 0x10e0
movq %rax, %rdi
movl $0xa, %esi
callq 0x10a0
movq 0x2c82(%rip), %rdi      # 0x3fd8
leaq 0xd51(%rip), %rsi       # 0x20ae
callq 0x1090
movq %rax, %rdi
movl $0x190, %esi            # imm = 0x190
callq 0x1030
movq %rax, %rdi
movl $0xa, %esi
callq 0x10a0
movq 0x2c55(%rip), %rdi      # 0x3fd8
leaq 0xd37(%rip), %rsi       # 0x20c1
callq 0x1090
movq %rax, %rdi
movl $0x8, %esi
callq 0x1030
movq %rax, %rdi
movl $0xa, %esi
callq 0x10a0
movq 0x2c28(%rip), %rdi      # 0x3fd8
leaq 0xd1d(%rip), %rsi       # 0x20d4
callq 0x1090
movq %rax, %rdi
movl $0x10, %esi
callq 0x1030
movq %rax, %rdi
movl $0xa, %esi
callq 0x10a0
movq 0x2bfb(%rip), %rdi      # 0x3fd8
leaq 0xdc(%rip), %rsi        # 0x14c0
callq 0x1050
movq %rax, %rdi
leaq 0xcf4(%rip), %rsi       # 0x20e7
callq 0x1090
movq %rax, %rdi
movl $0x64, %esi
callq 0x10c0
movq %rax, %rdi
leaq 0xd15(%rip), %rsi       # 0x2124
callq 0x1090
movq %rax, 0x8(%rsp)
leaq 0x38(%rsp), %rdi
callq 0x14e0
movq 0x8(%rsp), %rdi
movzbl %al, %esi
andl $0x1, %esi
callq 0x10d0
movq %rax, %rdi
movl $0xa, %esi
callq 0x10a0
movq %rax, %rdi
leaq 0xcbe(%rip), %rsi       # 0x2108
callq 0x1090
movq %rax, 0x10(%rsp)
leaq 0x30(%rsp), %rdi
callq 0x1500
movq 0x10(%rsp), %rdi
movzbl %al, %esi
andl $0x1, %esi
callq 0x10d0
movq %rax, %rdi
movl $0xa, %esi
callq 0x10a0
movq %rax, %rdi
leaq 0xcaf(%rip), %rsi       # 0x2134
callq 0x1090
movq %rax, 0x18(%rsp)
leaq 0x20(%rsp), %rdi
callq 0x1520
movq 0x18(%rsp), %rdi
movzbl %al, %esi
andl $0x1, %esi
callq 0x10d0
movq %rax, %rdi
movl $0xa, %esi
callq 0x10a0
xorl %eax, %eax
addq $0x1c8, %rsp            # imm = 0x1C8
retq