// File: t0mm4rx[P]piscine_cpp/day02/ex02/main.cpp
// Function: main
int main(void) {
	Fixed a;
	Fixed const b(Fixed(5.05f) * Fixed(2));

	std::cout << "A: " << a << std::endl;
	std::cout << "++A: " << ++a << std::endl;
	std::cout << "A: " << a << std::endl;
	std::cout << "A++: " << a++ << std::endl;
	std::cout << "A: " << a << std::endl;
	std::cout << "B: " << b << std::endl;
	std::cout << "Max(A, B): " << Fixed::max(a, b) << std::endl;
	std::cout << "Min(A, B): " << Fixed::min(a, b) << std::endl;
	std::cout << "A / B: " << a / b << std::endl;
	std::cout << "42.5 / 21.14: " << Fixed(42.5f) / Fixed(21.14f) << std::endl;
	std::cout << "A * B: " << a * b << std::endl;
	std::cout << "42.42 * 21.21: " << Fixed(42.42f) * Fixed(21.21f) << std::endl;
	std::cout << "A + B: " << a + b << std::endl;
	std::cout << "A - B: " << a - b << std::endl;
	return (0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x150, %rsp            # imm = 0x150
movl $0x0, -0x4(%rbp)
leaq -0x8(%rbp), %rdi
callq 0x1220
leaq -0x10(%rbp), %rdi
movss 0x7d1(%rip), %xmm0      # 0x2008
callq 0x1260
jmp 0x183e
leaq -0x20(%rbp), %rdi
movl $0x2, %esi
callq 0x1240
jmp 0x184e
leaq -0xc(%rbp), %rdi
leaq -0x10(%rbp), %rsi
leaq -0x20(%rbp), %rdx
callq 0x1550
jmp 0x1861
leaq -0x20(%rbp), %rdi
callq 0x12a0
leaq -0x10(%rbp), %rdi
callq 0x12a0
movq 0x275e(%rip), %rdi      # 0x3fd8
leaq 0x79d(%rip), %rsi       # 0x201e
callq 0x1050
movq %rax, -0x58(%rbp)
jmp 0x188c
movq -0x58(%rbp), %rdi
leaq -0x8(%rbp), %rsi
callq 0x1390
movq %rax, -0x60(%rbp)
jmp 0x189f
movq -0x60(%rbp), %rdi
movq 0x271e(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x18b1
movq 0x2720(%rip), %rdi      # 0x3fd8
leaq 0x75d(%rip), %rsi       # 0x201c
callq 0x1050
movq %rax, -0x68(%rbp)
jmp 0x18ca
leaq -0x8(%rbp), %rdi
callq 0x1610
movq %rax, -0x70(%rbp)
jmp 0x18d9
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdi
callq 0x1390
movq %rax, -0x78(%rbp)
jmp 0x18ec
movq -0x78(%rbp), %rdi
movq 0x26d1(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x18fe
movq 0x26d3(%rip), %rdi      # 0x3fd8
leaq 0x712(%rip), %rsi       # 0x201e
callq 0x1050
movq %rax, -0x80(%rbp)
jmp 0x1917
movq -0x80(%rbp), %rdi
leaq -0x8(%rbp), %rsi
callq 0x1390
movq %rax, -0x88(%rbp)
jmp 0x192d
movq -0x88(%rbp), %rdi
movq 0x268d(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x1942
movq 0x268f(%rip), %rdi      # 0x3fd8
leaq 0x6d2(%rip), %rsi       # 0x2022
callq 0x1050
movq %rax, -0x90(%rbp)
jmp 0x195e
leaq -0x24(%rbp), %rdi
leaq -0x8(%rbp), %rsi
xorl %edx, %edx
callq 0x1650
jmp 0x196f
movq -0x90(%rbp), %rdi
leaq -0x24(%rbp), %rsi
callq 0x1390
movq %rax, -0x98(%rbp)
jmp 0x1988
movq -0x98(%rbp), %rdi
movq 0x2632(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x199d
leaq -0x24(%rbp), %rdi
callq 0x12a0
movq 0x262b(%rip), %rdi      # 0x3fd8
leaq 0x66a(%rip), %rsi       # 0x201e
callq 0x1050
movq %rax, -0xa0(%rbp)
jmp 0x19c2
movq -0xa0(%rbp), %rdi
leaq -0x8(%rbp), %rsi
callq 0x1390
movq %rax, -0xa8(%rbp)
jmp 0x19db
movq -0xa8(%rbp), %rdi
movq 0x25df(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x19f0
movq 0x25e1(%rip), %rdi      # 0x3fd8
leaq 0x65d(%rip), %rsi       # 0x205b
callq 0x1050
movq %rax, -0xb0(%rbp)
jmp 0x1a0c
movq -0xb0(%rbp), %rdi
leaq -0xc(%rbp), %rsi
callq 0x1390
movq %rax, -0xb8(%rbp)
jmp 0x1a25
movq -0xb8(%rbp), %rdi
movq 0x2595(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x1a3a
movq 0x2597(%rip), %rdi      # 0x3fd8
leaq 0x5e0(%rip), %rsi       # 0x2028
callq 0x1050
movq %rax, -0xc0(%rbp)
jmp 0x1a56
leaq -0x8(%rbp), %rdi
leaq -0xc(%rbp), %rsi
callq 0x17d0
movq %rax, -0xc8(%rbp)
jmp 0x1a6c
movq -0xc8(%rbp), %rsi
movq -0xc0(%rbp), %rdi
callq 0x1390
movq %rax, -0xd0(%rbp)
jmp 0x1a88
movq -0xd0(%rbp), %rdi
movq 0x2532(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x1a9d
movq 0x2534(%rip), %rdi      # 0x3fd8
leaq 0x589(%rip), %rsi       # 0x2034
callq 0x1050
movq %rax, -0xd8(%rbp)
jmp 0x1ab9
leaq -0x8(%rbp), %rdi
leaq -0xc(%rbp), %rsi
callq 0x1750
movq %rax, -0xe0(%rbp)
jmp 0x1acf
movq -0xe0(%rbp), %rsi
movq -0xd8(%rbp), %rdi
callq 0x1390
movq %rax, -0xe8(%rbp)
jmp 0x1aeb
movq -0xe8(%rbp), %rdi
movq 0x24cf(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x1b00
movq 0x24d1(%rip), %rdi      # 0x3fd8
leaq 0x532(%rip), %rsi       # 0x2040
callq 0x1050
movq %rax, -0xf0(%rbp)
jmp 0x1b1c
leaq -0x28(%rbp), %rdi
leaq -0x8(%rbp), %rsi
leaq -0xc(%rbp), %rdx
callq 0x15b0
jmp 0x1b2f
movq -0xf0(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x1390
movq %rax, -0xf8(%rbp)
jmp 0x1b48
movq -0xf8(%rbp), %rdi
movq 0x2472(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x1b5d
leaq -0x28(%rbp), %rdi
callq 0x12a0
movq 0x246b(%rip), %rdi      # 0x3fd8
leaq 0x4d4(%rip), %rsi       # 0x2048
callq 0x1050
movq %rax, -0x100(%rbp)
jmp 0x1b82
leaq -0x30(%rbp), %rdi
movss 0x47e(%rip), %xmm0      # 0x200c
callq 0x1260
jmp 0x1b95
leaq -0x34(%rbp), %rdi
movss 0x46f(%rip), %xmm0      # 0x2010
callq 0x1260
jmp 0x1ba8
leaq -0x2c(%rbp), %rdi
leaq -0x30(%rbp), %rsi
leaq -0x34(%rbp), %rdx
callq 0x15b0
jmp 0x1bbb
movq -0x100(%rbp), %rdi
leaq -0x2c(%rbp), %rsi
callq 0x1390
movq %rax, -0x108(%rbp)
jmp 0x1bd4
movq -0x108(%rbp), %rdi
movq 0x23e6(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x1be9
leaq -0x2c(%rbp), %rdi
callq 0x12a0
leaq -0x34(%rbp), %rdi
callq 0x12a0
leaq -0x30(%rbp), %rdi
callq 0x12a0
movq 0x23cd(%rip), %rdi      # 0x3fd8
leaq 0x445(%rip), %rsi       # 0x2057
callq 0x1050
movq %rax, -0x110(%rbp)
jmp 0x1c20
leaq -0x38(%rbp), %rdi
leaq -0x8(%rbp), %rsi
leaq -0xc(%rbp), %rdx
callq 0x1550
jmp 0x1c33
movq -0x110(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x1390
movq %rax, -0x118(%rbp)
jmp 0x1c4c
movq -0x118(%rbp), %rdi
movq 0x236e(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x1c61
leaq -0x38(%rbp), %rdi
callq 0x12a0
movq 0x2367(%rip), %rdi      # 0x3fd8
leaq 0x3e7(%rip), %rsi       # 0x205f
callq 0x1050
movq %rax, -0x120(%rbp)
jmp 0x1c86
leaq -0x40(%rbp), %rdi
movss 0x382(%rip), %xmm0      # 0x2014
callq 0x1260
jmp 0x1c99
leaq -0x44(%rbp), %rdi
movss 0x373(%rip), %xmm0      # 0x2018
callq 0x1260
jmp 0x1cac
leaq -0x3c(%rbp), %rdi
leaq -0x40(%rbp), %rsi
leaq -0x44(%rbp), %rdx
callq 0x1550
jmp 0x1cbf
movq -0x120(%rbp), %rdi
leaq -0x3c(%rbp), %rsi
callq 0x1390
movq %rax, -0x128(%rbp)
jmp 0x1cd8
movq -0x128(%rbp), %rdi
movq 0x22e2(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x1ced
leaq -0x3c(%rbp), %rdi
callq 0x12a0
leaq -0x44(%rbp), %rdi
callq 0x12a0
leaq -0x40(%rbp), %rdi
callq 0x12a0
movq 0x22c9(%rip), %rdi      # 0x3fd8
leaq 0x359(%rip), %rsi       # 0x206f
callq 0x1050
movq %rax, -0x130(%rbp)
jmp 0x1d24
leaq -0x48(%rbp), %rdi
leaq -0x8(%rbp), %rsi
leaq -0xc(%rbp), %rdx
callq 0x1490
jmp 0x1d37
movq -0x130(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x1390
movq %rax, -0x138(%rbp)
jmp 0x1d50
movq -0x138(%rbp), %rdi
movq 0x226a(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x1d65
leaq -0x48(%rbp), %rdi
callq 0x12a0
movq 0x2263(%rip), %rdi      # 0x3fd8
leaq 0x2fb(%rip), %rsi       # 0x2077
callq 0x1050
movq %rax, -0x140(%rbp)
jmp 0x1d8a
leaq -0x4c(%rbp), %rdi
leaq -0x8(%rbp), %rsi
leaq -0xc(%rbp), %rdx
callq 0x14f0
jmp 0x1d9d
movq -0x140(%rbp), %rdi
leaq -0x4c(%rbp), %rsi
callq 0x1390
movq %rax, -0x148(%rbp)
jmp 0x1db6
movq -0x148(%rbp), %rdi
movq 0x2204(%rip), %rsi      # 0x3fc8
callq 0x1070
jmp 0x1dcb
leaq -0x4c(%rbp), %rdi
callq 0x12a0
movl $0x0, -0x4(%rbp)
leaq -0xc(%rbp), %rdi
callq 0x12a0
leaq -0x8(%rbp), %rdi
callq 0x12a0
movl -0x4(%rbp), %eax
addq $0x150, %rsp            # imm = 0x150
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x1f59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x1e2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x12a0
leaq -0x10(%rbp), %rdi
callq 0x12a0
jmp 0x1f59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x1f50
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x24(%rbp), %rdi
callq 0x12a0
jmp 0x1f50
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x12a0
jmp 0x1f50
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x1eba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x1eb1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x2c(%rbp), %rdi
callq 0x12a0
leaq -0x34(%rbp), %rdi
callq 0x12a0
leaq -0x30(%rbp), %rdi
callq 0x12a0
jmp 0x1f50
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x12a0
jmp 0x1f50
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x1f19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x1f10
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x3c(%rbp), %rdi
callq 0x12a0
leaq -0x44(%rbp), %rdi
callq 0x12a0
leaq -0x40(%rbp), %rdi
callq 0x12a0
jmp 0x1f50
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x12a0
jmp 0x1f50
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x4c(%rbp), %rdi
callq 0x12a0
leaq -0xc(%rbp), %rdi
callq 0x12a0
leaq -0x8(%rbp), %rdi
callq 0x12a0
movq -0x18(%rbp), %rdi
callq 0x1090