Write a SPIM program that computes exp(x) by using a Taylor series: exp(x) = 1 +
ID: 3859342 • Letter: W
Question
Write a SPIM program that computes exp(x) by using a Taylor series: exp(x) = 1 + x + x2/2 + x3/3! + x4/4! + ...The user enters x and n. exp(x) is ex, where e is the base of the natural logarithms, 2.718281828... You don't need to worry about the math behind this. Just compute a sum of terms. Each term in the sum looks like: xn/n! Write a SPIM program that computes exp(x) by using a Taylor series: exp(x) = 1 + x + x2/2 + x3/3! + x4/4! + ...The user enters x and n. exp(x) is ex, where e is the base of the natural logarithms, 2.718281828... You don't need to worry about the math behind this. Just compute a sum of terms. Each term in the sum looks like: xn/n!Explanation / Answer
Answer:
deg:
.zero 4
.LC3:
.string " Degrees"
.LC4:
.string " Sine"
.LC5:
.string " Cosine"
.LC6:
.string " "
.LC7:
.string " "
.LC8:
.string " "
.LC12:
.string " "
.LC13:
.string " "
.LC14:
.string "Enter a character to end. "
main:
push rbp
mov rbp, rsp
sub rsp, 48
pxor xmm0, xmm0
movsd QWORD PTR [rbp-8], xmm0
movsd xmm0, QWORD PTR .LC1[rip]
movsd QWORD PTR [rbp-16], xmm0
movsd xmm1, QWORD PTR [rbp-8]
movsd xmm0, QWORD PTR .LC2[rip]
mulsd xmm0, xmm1
movsd xmm1, QWORD PTR .LC1[rip]
divsd xmm0, xmm1
cvttsd2si eax, xmm0
mov DWORD PTR [rbp-20], eax
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
mov esi, OFFSET FLAT:.LC3
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:.LC4
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:.LC5
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
pxor xmm0, xmm0
call cosine(double)
movsd QWORD PTR [rbp-40], xmm0
pxor xmm0, xmm0
call sine(double)
movsd QWORD PTR [rbp-48], xmm0
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
mov esi, OFFSET FLAT:.LC6
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, 0
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov esi, OFFSET FLAT:.LC7
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
movsd xmm0, QWORD PTR [rbp-48]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov esi, OFFSET FLAT:.LC8
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
movsd xmm0, QWORD PTR [rbp-40]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
.L4:
movsd xmm0, QWORD PTR .LC9[rip]
ucomisd xmm0, QWORD PTR [rbp-8]
jbe .L7
movsd xmm1, QWORD PTR [rbp-8]
movsd xmm0, QWORD PTR .LC10[rip]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-8], xmm0
movsd xmm1, QWORD PTR [rbp-8]
movsd xmm0, QWORD PTR .LC11[rip]
mulsd xmm0, xmm1
cvttsd2si eax, xmm0
mov DWORD PTR [rbp-20], eax
mov rax, QWORD PTR [rbp-8]
mov QWORD PTR [rbp-40], rax
movsd xmm0, QWORD PTR [rbp-40]
call cosine(double)
movsd QWORD PTR [rbp-40], xmm0
mov rax, QWORD PTR [rbp-8]
mov QWORD PTR [rbp-48], rax
movsd xmm0, QWORD PTR [rbp-48]
call sine(double)
movsd QWORD PTR [rbp-48], xmm0
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
mov esi, OFFSET FLAT:.LC6
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rdx, rax
mov eax, DWORD PTR [rbp-20]
mov esi, eax
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov esi, OFFSET FLAT:.LC12
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
movsd xmm0, QWORD PTR [rbp-48]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov esi, OFFSET FLAT:.LC13
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
movsd xmm0, QWORD PTR [rbp-40]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
jmp .L4
.L7:
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
mov esi, OFFSET FLAT:.LC14
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
lea rax, [rbp-21]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char&)
mov eax, 0
leave
ret
fact(int):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-20], edi
movsd xmm0, QWORD PTR .LC15[rip]
movsd QWORD PTR [rbp-8], xmm0
mov DWORD PTR [rbp-12], 1
.L10:
mov eax, DWORD PTR [rbp-12]
cmp eax, DWORD PTR [rbp-20]
jg .L9
pxor xmm0, xmm0
cvtsi2sd xmm0, DWORD PTR [rbp-12]
movsd xmm1, QWORD PTR [rbp-8]
mulsd xmm0, xmm1
movsd QWORD PTR [rbp-8], xmm0
add DWORD PTR [rbp-12], 1
jmp .L10
.L9:
movsd xmm0, QWORD PTR [rbp-8]
pop rbp
ret
power(double, int):
push rbp
mov rbp, rsp
movsd QWORD PTR [rbp-24], xmm0
mov DWORD PTR [rbp-28], edi
movsd xmm0, QWORD PTR .LC15[rip]
movsd QWORD PTR [rbp-8], xmm0
mov DWORD PTR [rbp-12], 1
.L14:
mov eax, DWORD PTR [rbp-12]
cmp eax, DWORD PTR [rbp-28]
jg .L13
movsd xmm0, QWORD PTR [rbp-8]
mulsd xmm0, QWORD PTR [rbp-24]
movsd QWORD PTR [rbp-8], xmm0
add DWORD PTR [rbp-12], 1
jmp .L14
.L13:
movsd xmm0, QWORD PTR [rbp-8]
pop rbp
ret
sine(double):
push rbp
mov rbp, rsp
sub rsp, 64
movsd QWORD PTR [rbp-56], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-8], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-16], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-32], xmm0
movsd xmm0, QWORD PTR .LC1[rip]
movsd QWORD PTR [rbp-40], xmm0
mov DWORD PTR [rbp-20], 1
.L18:
cmp DWORD PTR [rbp-20], 1000
jg .L17
mov edx, DWORD PTR [rbp-20]
mov rax, QWORD PTR [rbp-56]
mov edi, edx
mov QWORD PTR [rbp-64], rax
movsd xmm0, QWORD PTR [rbp-64]
call power(double, int)
movsd QWORD PTR [rbp-64], xmm0
mov eax, DWORD PTR [rbp-20]
mov edi, eax
call fact(int)
movsd xmm2, QWORD PTR [rbp-64]
divsd xmm2, xmm0
movapd xmm0, xmm2
movsd xmm1, QWORD PTR [rbp-8]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-8], xmm0
add DWORD PTR [rbp-20], 4
jmp .L18
.L17:
mov DWORD PTR [rbp-24], 3
.L20:
cmp DWORD PTR [rbp-24], 1000
jg .L19
mov edx, DWORD PTR [rbp-24]
mov rax, QWORD PTR [rbp-56]
mov edi, edx
mov QWORD PTR [rbp-64], rax
movsd xmm0, QWORD PTR [rbp-64]
call power(double, int)
movsd QWORD PTR [rbp-64], xmm0
mov eax, DWORD PTR [rbp-24]
mov edi, eax
call fact(int)
movsd xmm3, QWORD PTR [rbp-64]
divsd xmm3, xmm0
movapd xmm0, xmm3
movsd xmm1, QWORD PTR [rbp-16]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-16], xmm0
add DWORD PTR [rbp-24], 4
jmp .L20
.L19:
movsd xmm0, QWORD PTR [rbp-8]
subsd xmm0, QWORD PTR [rbp-16]
movsd QWORD PTR [rbp-32], xmm0
movsd xmm0, QWORD PTR [rbp-32]
leave
ret
cosine(double):
push rbp
mov rbp, rsp
sub rsp, 64
movsd QWORD PTR [rbp-56], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-32], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-40], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-16], xmm0
movsd xmm0, QWORD PTR .LC1[rip]
movsd QWORD PTR [rbp-24], xmm0
mov DWORD PTR [rbp-4], 4
.L24:
cmp DWORD PTR [rbp-4], 1000
jg .L23
mov edx, DWORD PTR [rbp-4]
mov rax, QWORD PTR [rbp-56]
mov edi, edx
mov QWORD PTR [rbp-64], rax
movsd xmm0, QWORD PTR [rbp-64]
call power(double, int)
movsd QWORD PTR [rbp-64], xmm0
mov eax, DWORD PTR [rbp-4]
mov edi, eax
call fact(int)
movsd xmm2, QWORD PTR [rbp-64]
divsd xmm2, xmm0
movapd xmm0, xmm2
movsd xmm1, QWORD PTR [rbp-32]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-32], xmm0
add DWORD PTR [rbp-4], 4
jmp .L24
.L23:
mov DWORD PTR [rbp-8], 2
.L26:
cmp DWORD PTR [rbp-8], 1000
jg .L25
mov edx, DWORD PTR [rbp-8]
mov rax, QWORD PTR [rbp-56]
mov edi, edx
mov QWORD PTR [rbp-64], rax
movsd xmm0, QWORD PTR [rbp-64]
call power(double, int)
movsd QWORD PTR [rbp-64], xmm0
mov eax, DWORD PTR [rbp-8]
mov edi, eax
call fact(int)
movsd xmm3, QWORD PTR [rbp-64]
divsd xmm3, xmm0
movapd xmm0, xmm3
movsd xmm1, QWORD PTR [rbp-40]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-40], xmm0
add DWORD PTR [rbp-8], 4
jmp .L26
.L25:
movsd xmm1, QWORD PTR [rbp-40]
movsd xmm0, QWORD PTR .LC15[rip]
subsd xmm0, xmm1
movsd xmm1, QWORD PTR [rbp-32]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-16], xmm0
movsd xmm0, QWORD PTR [rbp-16]
leave
ret
__static_initialization_and_destruction_0(int, int):
push rbp
mov rbp, rsp
sub rsp, 16
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
cmp DWORD PTR [rbp-4], 1
jne .L30
cmp DWORD PTR [rbp-8], 65535
jne .L30
mov edi, OFFSET FLAT:std::__ioinit
call std::ios_base::Init::Init()
mov edx, OFFSET FLAT:__dso_handle
mov esi, OFFSET FLAT:std::__ioinit
mov edi, OFFSET FLAT:std::ios_base::Init::~Init()
call __cxa_atexit
.L30:
nop
leave
ret
_GLOBAL__sub_I_deg:
push rbp
mov rbp, rsp
mov esi, 65535
mov edi, 1
call __static_initialization_and_destruction_0(int, int)
pop rbp
ret
.LC1:
.long 3229815407
.long 1074340298
.LC2:
.long 0
.long 1080459264
.LC9:
.long 1999736773
.long 1072242989
.LC10:
.long 1256690773
.long 1068914456
.LC11:
.long 2044604039
.long 1078765075
.LC15:
.long 0
.long 1072693248
deg:
.zero 4
.LC3:
.string " Degrees"
.LC4:
.string " Sine"
.LC5:
.string " Cosine"
.LC6:
.string " "
.LC7:
.string " "
.LC8:
.string " "
.LC12:
.string " "
.LC13:
.string " "
.LC14:
.string "Enter a character to end. "
main:
push rbp
mov rbp, rsp
sub rsp, 48
pxor xmm0, xmm0
movsd QWORD PTR [rbp-8], xmm0
movsd xmm0, QWORD PTR .LC1[rip]
movsd QWORD PTR [rbp-16], xmm0
movsd xmm1, QWORD PTR [rbp-8]
movsd xmm0, QWORD PTR .LC2[rip]
mulsd xmm0, xmm1
movsd xmm1, QWORD PTR .LC1[rip]
divsd xmm0, xmm1
cvttsd2si eax, xmm0
mov DWORD PTR [rbp-20], eax
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
mov esi, OFFSET FLAT:.LC3
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:.LC4
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:.LC5
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
pxor xmm0, xmm0
call cosine(double)
movsd QWORD PTR [rbp-40], xmm0
pxor xmm0, xmm0
call sine(double)
movsd QWORD PTR [rbp-48], xmm0
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
mov esi, OFFSET FLAT:.LC6
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, 0
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov esi, OFFSET FLAT:.LC7
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
movsd xmm0, QWORD PTR [rbp-48]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov esi, OFFSET FLAT:.LC8
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
movsd xmm0, QWORD PTR [rbp-40]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
.L4:
movsd xmm0, QWORD PTR .LC9[rip]
ucomisd xmm0, QWORD PTR [rbp-8]
jbe .L7
movsd xmm1, QWORD PTR [rbp-8]
movsd xmm0, QWORD PTR .LC10[rip]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-8], xmm0
movsd xmm1, QWORD PTR [rbp-8]
movsd xmm0, QWORD PTR .LC11[rip]
mulsd xmm0, xmm1
cvttsd2si eax, xmm0
mov DWORD PTR [rbp-20], eax
mov rax, QWORD PTR [rbp-8]
mov QWORD PTR [rbp-40], rax
movsd xmm0, QWORD PTR [rbp-40]
call cosine(double)
movsd QWORD PTR [rbp-40], xmm0
mov rax, QWORD PTR [rbp-8]
mov QWORD PTR [rbp-48], rax
movsd xmm0, QWORD PTR [rbp-48]
call sine(double)
movsd QWORD PTR [rbp-48], xmm0
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
mov esi, OFFSET FLAT:.LC6
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rdx, rax
mov eax, DWORD PTR [rbp-20]
mov esi, eax
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov esi, OFFSET FLAT:.LC12
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
movsd xmm0, QWORD PTR [rbp-48]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov esi, OFFSET FLAT:.LC13
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
movsd xmm0, QWORD PTR [rbp-40]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
jmp .L4
.L7:
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
mov esi, OFFSET FLAT:.LC14
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
lea rax, [rbp-21]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char&)
mov eax, 0
leave
ret
fact(int):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-20], edi
movsd xmm0, QWORD PTR .LC15[rip]
movsd QWORD PTR [rbp-8], xmm0
mov DWORD PTR [rbp-12], 1
.L10:
mov eax, DWORD PTR [rbp-12]
cmp eax, DWORD PTR [rbp-20]
jg .L9
pxor xmm0, xmm0
cvtsi2sd xmm0, DWORD PTR [rbp-12]
movsd xmm1, QWORD PTR [rbp-8]
mulsd xmm0, xmm1
movsd QWORD PTR [rbp-8], xmm0
add DWORD PTR [rbp-12], 1
jmp .L10
.L9:
movsd xmm0, QWORD PTR [rbp-8]
pop rbp
ret
power(double, int):
push rbp
mov rbp, rsp
movsd QWORD PTR [rbp-24], xmm0
mov DWORD PTR [rbp-28], edi
movsd xmm0, QWORD PTR .LC15[rip]
movsd QWORD PTR [rbp-8], xmm0
mov DWORD PTR [rbp-12], 1
.L14:
mov eax, DWORD PTR [rbp-12]
cmp eax, DWORD PTR [rbp-28]
jg .L13
movsd xmm0, QWORD PTR [rbp-8]
mulsd xmm0, QWORD PTR [rbp-24]
movsd QWORD PTR [rbp-8], xmm0
add DWORD PTR [rbp-12], 1
jmp .L14
.L13:
movsd xmm0, QWORD PTR [rbp-8]
pop rbp
ret
sine(double):
push rbp
mov rbp, rsp
sub rsp, 64
movsd QWORD PTR [rbp-56], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-8], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-16], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-32], xmm0
movsd xmm0, QWORD PTR .LC1[rip]
movsd QWORD PTR [rbp-40], xmm0
mov DWORD PTR [rbp-20], 1
.L18:
cmp DWORD PTR [rbp-20], 1000
jg .L17
mov edx, DWORD PTR [rbp-20]
mov rax, QWORD PTR [rbp-56]
mov edi, edx
mov QWORD PTR [rbp-64], rax
movsd xmm0, QWORD PTR [rbp-64]
call power(double, int)
movsd QWORD PTR [rbp-64], xmm0
mov eax, DWORD PTR [rbp-20]
mov edi, eax
call fact(int)
movsd xmm2, QWORD PTR [rbp-64]
divsd xmm2, xmm0
movapd xmm0, xmm2
movsd xmm1, QWORD PTR [rbp-8]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-8], xmm0
add DWORD PTR [rbp-20], 4
jmp .L18
.L17:
mov DWORD PTR [rbp-24], 3
.L20:
cmp DWORD PTR [rbp-24], 1000
jg .L19
mov edx, DWORD PTR [rbp-24]
mov rax, QWORD PTR [rbp-56]
mov edi, edx
mov QWORD PTR [rbp-64], rax
movsd xmm0, QWORD PTR [rbp-64]
call power(double, int)
movsd QWORD PTR [rbp-64], xmm0
mov eax, DWORD PTR [rbp-24]
mov edi, eax
call fact(int)
movsd xmm3, QWORD PTR [rbp-64]
divsd xmm3, xmm0
movapd xmm0, xmm3
movsd xmm1, QWORD PTR [rbp-16]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-16], xmm0
add DWORD PTR [rbp-24], 4
jmp .L20
.L19:
movsd xmm0, QWORD PTR [rbp-8]
subsd xmm0, QWORD PTR [rbp-16]
movsd QWORD PTR [rbp-32], xmm0
movsd xmm0, QWORD PTR [rbp-32]
leave
ret
cosine(double):
push rbp
mov rbp, rsp
sub rsp, 64
movsd QWORD PTR [rbp-56], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-32], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-40], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-16], xmm0
movsd xmm0, QWORD PTR .LC1[rip]
movsd QWORD PTR [rbp-24], xmm0
mov DWORD PTR [rbp-4], 4
.L24:
cmp DWORD PTR [rbp-4], 1000
jg .L23
mov edx, DWORD PTR [rbp-4]
mov rax, QWORD PTR [rbp-56]
mov edi, edx
mov QWORD PTR [rbp-64], rax
movsd xmm0, QWORD PTR [rbp-64]
call power(double, int)
movsd QWORD PTR [rbp-64], xmm0
mov eax, DWORD PTR [rbp-4]
mov edi, eax
call fact(int)
movsd xmm2, QWORD PTR [rbp-64]
divsd xmm2, xmm0
movapd xmm0, xmm2
movsd xmm1, QWORD PTR [rbp-32]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-32], xmm0
add DWORD PTR [rbp-4], 4
jmp .L24
.L23:
mov DWORD PTR [rbp-8], 2
.L26:
cmp DWORD PTR [rbp-8], 1000
jg .L25
mov edx, DWORD PTR [rbp-8]
mov rax, QWORD PTR [rbp-56]
mov edi, edx
mov QWORD PTR [rbp-64], rax
movsd xmm0, QWORD PTR [rbp-64]
call power(double, int)
movsd QWORD PTR [rbp-64], xmm0
mov eax, DWORD PTR [rbp-8]
mov edi, eax
call fact(int)
movsd xmm3, QWORD PTR [rbp-64]
divsd xmm3, xmm0
movapd xmm0, xmm3
movsd xmm1, QWORD PTR [rbp-40]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-40], xmm0
add DWORD PTR [rbp-8], 4
jmp .L26
.L25:
movsd xmm1, QWORD PTR [rbp-40]
movsd xmm0, QWORD PTR .LC15[rip]
subsd xmm0, xmm1
movsd xmm1, QWORD PTR [rbp-32]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-16], xmm0
movsd xmm0, QWORD PTR [rbp-16]
leave
ret
__static_initialization_and_destruction_0(int, int):
push rbp
mov rbp, rsp
sub rsp, 16
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
cmp DWORD PTR [rbp-4], 1
jne .L30
cmp DWORD PTR [rbp-8], 65535
jne .L30
mov edi, OFFSET FLAT:std::__ioinit
call std::ios_base::Init::Init()
mov edx, OFFSET FLAT:__dso_handle
mov esi, OFFSET FLAT:std::__ioinit
mov edi, OFFSET FLAT:std::ios_base::Init::~Init()
call __cxa_atexit
.L30:
nop
leave
ret
_GLOBAL__sub_I_deg:
push rbp
mov rbp, rsp
mov esi, 65535
mov edi, 1
call __static_initialization_and_destruction_0(int, int)
pop rbp
ret
.LC1:
.long 3229815407
.long 1074340298
.LC2:
.long 0
.long 1080459264
.LC9:
.long 1999736773
.long 1072242989
.LC10:
.long 1256690773
.long 1068914456
.LC11:
.long 2044604039
.long 1078765075
.LC15:
.long 0
.long 1072693248
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.