fibonacci_recursive(long long):
push rbp #
mov rbp, rsp #,
push rbx #
sub rsp, 24 #,
mov QWORD PTR [rbp-24], rdi # n, n
cmp QWORD PTR [rbp-24], 0 # n,
jne .L2 #,
mov eax, 0 # _5,
jmp .L3 #
.L2:
cmp QWORD PTR [rbp-24], 1 # n,
jne .L4 #,
mov eax, 1 # _5,
jmp .L3 #
.L4:
mov rax, QWORD PTR [rbp-24] # tmp88, n
sub rax, 1 # _1,
mov rdi, rax #, _1
call fibonacci_recursive(long long) #
mov rbx, rax # _2,
mov rax, QWORD PTR [rbp-24] # tmp89, n
sub rax, 2 # _3,
mov rdi, rax #, _3
call fibonacci_recursive(long long) #
add rax, rbx # _5, _2
.L3:
mov rbx, QWORD PTR [rbp-8] #,
leave
ret
fibonacci_iterative(long long):
push rbp #
mov rbp, rsp #,
mov QWORD PTR [rbp-40], rdi # n, n
mov QWORD PTR [rbp-8], 1 # fn,
mov QWORD PTR [rbp-16], 0 # fn_1,
mov DWORD PTR [rbp-20], 2 # i,
jmp .L2 #
.L3:
mov rdx, QWORD PTR [rbp-8] # tmp89, fn
mov rax, QWORD PTR [rbp-16] # tmp90, fn_1
add rax, rdx # tmp88, tmp89
mov QWORD PTR [rbp-32], rax # temp, tmp88
mov rax, QWORD PTR [rbp-8] # tmp91, fn
mov QWORD PTR [rbp-16], rax # fn_1, tmp91
mov rax, QWORD PTR [rbp-32] # tmp92, temp
mov QWORD PTR [rbp-8], rax # fn, tmp92
add DWORD PTR [rbp-20], 1 # i,
.L2:
mov eax, DWORD PTR [rbp-20] # tmp93, i
cdqe
cmp QWORD PTR [rbp-40], rax # n, _1
jge .L3 #,
mov rax, QWORD PTR [rbp-8] # _9, fn
pop rbp #
ret
phi:
.zero 8
fibonacci_closed(long long):
push rbp #
mov rbp, rsp #,
push r12 #
push rbx #
sub rsp, 16 #,
mov QWORD PTR [rbp-24], rdi # n, n
mov rax, QWORD PTR phi[rip] # phi.0_1, phi
mov rdx, QWORD PTR [rbp-24] # tmp93, n
mov rdi, rdx #, tmp93
movq xmm0, rax #, phi.0_1
call __gnu_cxx::__promote_2<decltype (((__gnu_cxx::__promote_2<double, std::__is_integer<double>::__value>::__type)(0))+((__gnu_cxx::__promote_2<long long, std::__is_integer<long long>::__value>::__type)(0))), std::__is_integer<decltype (((__gnu_cxx::__promote_2<double, std::__is_integer<double>::__value>::__type)(0))+((__gnu_cxx::__promote_2<long long, std::__is_integer<long long>::__value>::__type)(0)))>::__value>::__type std::pow<double, long long>(double, long long) #
movq rbx, xmm0 # _2,
mov rax, QWORD PTR [rbp-24] # tmp94, n
mov rsi, rax #, tmp94
mov edi, -1 #,
call __gnu_cxx::__promote_2<decltype (((__gnu_cxx::__promote_2<int, std::__is_integer<int>::__value>::__type)(0))+((__gnu_cxx::__promote_2<long long, std::__is_integer<long long>::__value>::__type)(0))), std::__is_integer<decltype (((__gnu_cxx::__promote_2<int, std::__is_integer<int>::__value>::__type)(0))+((__gnu_cxx::__promote_2<long long, std::__is_integer<long long>::__value>::__type)(0)))>::__value>::__type std::pow<int, long long>(int, long long) #
movq r12, xmm0 # _3,
mov rax, QWORD PTR phi[rip] # phi.1_4, phi
mov rdx, QWORD PTR [rbp-24] # tmp95, n
mov rdi, rdx #, tmp95
movq xmm0, rax #, phi.1_4
call __gnu_cxx::__promote_2<decltype (((__gnu_cxx::__promote_2<double, std::__is_integer<double>::__value>::__type)(0))+((__gnu_cxx::__promote_2<long long, std::__is_integer<long long>::__value>::__type)(0))), std::__is_integer<decltype (((__gnu_cxx::__promote_2<double, std::__is_integer<double>::__value>::__type)(0))+((__gnu_cxx::__promote_2<long long, std::__is_integer<long long>::__value>::__type)(0)))>::__value>::__type std::pow<double, long long>(double, long long) #
movq xmm1, r12 # _3, _3
divsd xmm1, xmm0 # _3, _5
movq xmm2, rbx # _2, _2
subsd xmm2, xmm1 # _2, _6
movsd QWORD PTR [rbp-32], xmm2 # %sfp, _2
mov edi, 5 #,
call __gnu_cxx::__enable_if<std::__is_integer<int>::__value, double>::__type std::sqrt<int>(int) #
movsd xmm1, QWORD PTR [rbp-32] # _7, %sfp
divsd xmm1, xmm0 # _7, _8
cvttsd2si rax, xmm1 # _16, _9
add rsp, 16 #,
pop rbx #
pop r12 #
pop rbp #
ret