Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote