// File: /workspace/github_cpp_makefile_star2_O1/shirookad[P]propcpp/main.cpp
// Function: main
int main(int argc, char *argv[]) {
	test1 t1;
	auto test1nanos = measure_block([&t1]() {
		for (unsigned long long i = 0; i < 1000000; ++i) {
			t1.count = 5;
		}
	});
	
	test2 t2;
	auto test2nanos = measure_block([&t2]() {
		for (unsigned long long i = 0; i < 1000000; ++i) {
			t2.setCount(5);
		}
	});

	test3 t3;
	auto test3nanos = measure_block([&t3]() {
		for (unsigned long long i = 0; i < 1000000; ++i) {
			t3.count.set(5);
		}
	});

	observerTest t4;
	auto test4nanos = measure_block([&t4]() {
		for (unsigned long long i = 0; i < 1000000; ++i) {
			t4.someOtherVal.set(5);
		}
	});
	
	t4.strVal.set("Hello");
	t4.strVal.set(t4.strVal.get() + ", World");
	
	int a = (int)t4.intVal;
	
	std::cout << "test1: " << test1nanos << std::endl;
	std::cout << "test2: " << test2nanos << std::endl;
	std::cout << "test3: " << test3nanos << std::endl;
	std::cout << "test4: " << test4nanos << std::endl;
	
	return 0;	
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x138, %rsp            # imm = 0x138
xorps %xmm0, %xmm0
movaps %xmm0, -0x160(%rbp)
movaps %xmm0, -0x150(%rbp)
leaq -0x84(%rbp), %rax
movq %rax, -0x160(%rbp)
leaq 0x4d6(%rip), %rax       # 0x279c
movq %rax, -0x148(%rbp)
leaq 0x4d8(%rip), %rax       # 0x27ac
movq %rax, -0x150(%rbp)
callq 0x2040
cmpq $0x0, -0x150(%rbp)
je 0x2699
movq %rax, %r15
leaq -0x160(%rbp), %rdi
callq *0x18(%rdi)
callq 0x2040
movq %rax, %r13
movq -0x150(%rbp), %rax
testq %rax, %rax
je 0x2320
leaq -0x160(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
movaps %xmm0, -0x160(%rbp)
movaps %xmm0, -0x150(%rbp)
leaq -0x80(%rbp), %rax
movq %rax, -0x160(%rbp)
leaq 0x493(%rip), %rax       # 0x27d6
movq %rax, -0x148(%rbp)
leaq 0x495(%rip), %rax       # 0x27e6
movq %rax, -0x150(%rbp)
callq 0x2040
cmpq $0x0, -0x150(%rbp)
je 0x269e
movq %rax, %r14
leaq -0x160(%rbp), %rdi
callq *0x18(%rdi)
callq 0x2040
movq %rax, %rbx
movq -0x150(%rbp), %rax
testq %rax, %rax
je 0x239d
leaq -0x160(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
movaps %xmm0, -0x160(%rbp)
movaps %xmm0, -0x150(%rbp)
leaq -0x7c(%rbp), %rax
movq %rax, -0x160(%rbp)
leaq 0x450(%rip), %rax       # 0x2810
movq %rax, -0x148(%rbp)
leaq 0x452(%rip), %rax       # 0x2820
movq %rax, -0x150(%rbp)
callq 0x2040
cmpq $0x0, -0x150(%rbp)
je 0x26a3
movq %r15, -0x78(%rbp)
movq %r14, -0x70(%rbp)
movq %rax, -0x68(%rbp)
leaq -0x160(%rbp), %r14
movq %r14, %rdi
callq *0x18(%r14)
callq 0x2040
movq %rax, %r12
movq -0x150(%rbp), %rax
testq %rax, %rax
je 0x2427
leaq -0x160(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq %r14, %rdi
callq 0x28e8
xorps %xmm0, %xmm0
movaps %xmm0, -0x50(%rbp)
movaps %xmm0, -0x40(%rbp)
movq %r14, -0x50(%rbp)
leaq 0x405(%rip), %rax       # 0x284a
movq %rax, -0x38(%rbp)
leaq 0x46e(%rip), %rax       # 0x28be
movq %rax, -0x40(%rbp)
callq 0x2040
movq %rax, -0x60(%rbp)
cmpq $0x0, -0x40(%rbp)
je 0x26a8
leaq -0x50(%rbp), %rdi
callq *0x18(%rdi)
callq 0x2040
movq %rax, -0x58(%rbp)
movq -0x40(%rbp), %rax
testq %rax, %rax
je 0x248f
leaq -0x50(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq -0x40(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x1b66(%rip), %rsi      # 0x4004
leaq 0x1b64(%rip), %rdx      # 0x4009
leaq -0x50(%rbp), %rdi
callq 0x324a
leaq -0xf8(%rbp), %r15
leaq -0x50(%rbp), %rsi
movq %r15, %rdi
callq 0x2bc6
movq -0x50(%rbp), %rdi
cmpq %r14, %rdi
je 0x24d6
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x20f0
leaq -0x50(%rbp), %rdi
movq %r14, (%rdi)
movq -0xf8(%rbp), %rsi
movq -0xf0(%rbp), %rdx
addq %rsi, %rdx
callq 0x3028
leaq 0x1b10(%rip), %rsi      # 0x400a
leaq -0x50(%rbp), %rdi
callq 0x2140
leaq -0x50(%rbp), %rsi
movq %r15, %rdi
callq 0x2bc6
movq -0x50(%rbp), %rdi
cmpq %r14, %rdi
je 0x2524
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x20f0
movq 0x3aad(%rip), %rdi      # 0x5fd8
leaq 0x1ae0(%rip), %rsi      # 0x4012
movl $0x7, %edx
callq 0x2100
subq -0x78(%rbp), %r13
movq 0x3a91(%rip), %rdi      # 0x5fd8
movq %r13, %rsi
callq 0x20d0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x20e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2090
movq 0x3a58(%rip), %rdi      # 0x5fd8
leaq 0x1a93(%rip), %rsi      # 0x401a
movl $0x7, %edx
callq 0x2100
subq -0x70(%rbp), %rbx
movq 0x3a3c(%rip), %rdi      # 0x5fd8
movq %rbx, %rsi
callq 0x20d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x20e0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2090
movq 0x3a03(%rip), %rdi      # 0x5fd8
leaq 0x1a46(%rip), %rsi      # 0x4022
movl $0x7, %edx
callq 0x2100
subq -0x68(%rbp), %r12
movq 0x39e7(%rip), %rdi      # 0x5fd8
movq %r12, %rsi
callq 0x20d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x20e0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2090
movq 0x39ae(%rip), %rdi      # 0x5fd8
leaq 0x19f9(%rip), %rsi      # 0x402a
movl $0x7, %edx
callq 0x2100
movq -0x58(%rbp), %rsi
subq -0x60(%rbp), %rsi
movq 0x398e(%rip), %rdi      # 0x5fd8
callq 0x20d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x20e0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2090
leaq -0x160(%rbp), %rdi
callq 0x2c94
xorl %eax, %eax
addq $0x138, %rsp            # imm = 0x138
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x2060
callq 0x2060
callq 0x2060
callq 0x2060
jmp 0x277c
jmp 0x277c
jmp 0x277c
jmp 0x277c
jmp 0x26ca
jmp 0x26ca
jmp 0x2784
movq %rax, %rbx
movq -0x50(%rbp), %rdi
cmpq %r14, %rdi
je 0x2787
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x20f0
jmp 0x2787
jmp 0x2784
movq %rax, %rbx
movq -0x40(%rbp), %rax
testq %rax, %rax
je 0x2787
leaq -0x50(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x2787
jmp 0x277c
movq %rax, %rbx
movq -0x150(%rbp), %rax
testq %rax, %rax
je 0x2793
leaq -0x160(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x2793
jmp 0x277c
movq %rax, %rbx
movq -0x150(%rbp), %rax
testq %rax, %rax
je 0x2793
leaq -0x160(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x2793
jmp 0x277c
movq %rax, %rbx
movq -0x150(%rbp), %rax
testq %rax, %rax
je 0x2793
leaq -0x160(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x2793
movq %rax, %rdi
callq 0x2d4e
movq %rax, %rbx
leaq -0x160(%rbp), %rdi
callq 0x2c94
movq %rbx, %rdi
callq 0x2120
nop