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

im using ARMv8 and im very new to this .data type d, %object size d, 4 //d array

ID: 3866108 • Letter: I

Question

im using ARMv8 and im very new to this

.data type d, %object size d, 4 //d array double 7.0, 0.0, 1.0, 1.0//64-bit double precision text global main arch armv8-a*fp*$ind type main, %function main: ADRP X0, d//load the label address of the ADD X0, X0,: lo12: d//load the low 12-bit address off LDUR D0, [X0, #0]//load X value (7, 0) LDUR D1, [X0, #8]//load result value (0, 0) LDUR D2, [X0, #16]//load third value (1, 0) LDUR D3, [X0, #24]//load fourth value (1, 0) MOV D4, 1.0//load fifth value (1.0) = 1 MOV X19, #2//X19-A-2 LOOP: SUBS X2R, D4, X19//If i

Explanation / Answer

Here is the corresponding ARM gcc code..

------------------------------------------------------------------------------------------------------------------------------------------------------

.LC0:
.string "Enter the value of x and a "
.LC1:
.string "E^x is :"
.LC2:
.string "Answer is: "
main:
stp x29, x30, [sp, -64]!
add x29, sp, 0
adrp x0, .LC0
add x1, x0, :lo12:.LC0
adrp x0, std::cout
add x0, x0, :lo12:std::cout
bl std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
adrp x0, std::cout
add x0, x0, :lo12:std::cout
ldr d0, [x29, 24]
bl std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
ldr w1, [x29, 20]
bl std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
str wzr, [x29, 60]
mov w0, 1
str w0, [x29, 56]
fmov d0, 1.0e+0
str d0, [x29, 48]
fmov d0, xzr
str d0, [x29, 40]
fmov d0, xzr
str d0, [x29, 32]
mov w0, 1
str w0, [x29, 60]
.L3:
ldr w1, [x29, 60]
ldr w0, [x29, 20]
cmp w1, w0
bgt .L2
ldr d1, [x29, 48]
ldr d0, [x29, 24]
fmul d0, d1, d0
str d0, [x29, 48]
ldr w1, [x29, 56]
ldr w0, [x29, 60]
mul w0, w1, w0
str w0, [x29, 56]
ldr w0, [x29, 56]
scvtf d0, w0
ldr d1, [x29, 48]
fdiv d0, d1, d0
str d0, [x29, 32]
ldr w0, [x29, 56]
scvtf d0, w0
ldr d1, [x29, 48]
fdiv d0, d1, d0
ldr d1, [x29, 40]
fmul d0, d1, d0
str d0, [x29, 40]
ldr w0, [x29, 60]
add w0, w0, 1
str w0, [x29, 60]
b .L3
.L2:
adrp x0, .LC1
add x1, x0, :lo12:.LC1
adrp x0, std::cout
add x0, x0, :lo12:std::cout
bl std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
ldr d0, [x29, 32]
bl std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov x2, x0
adrp x0, std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
add x0, x0, :lo12:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov x1, x0
mov x0, x2
bl 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> >&))
adrp x0, .LC2
add x1, x0, :lo12:.LC2
adrp x0, std::cout
add x0, x0, :lo12:std::cout
bl std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
ldr d0, [x29, 40]
bl std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov w0, 0
ldp x29, x30, [sp], 64
ret
__static_initialization_and_destruction_0(int, int):
stp x29, x30, [sp, -32]!
add x29, sp, 0
str w0, [x29, 28]
str w1, [x29, 24]
ldr w0, [x29, 28]
cmp w0, 1
bne .L7
ldr w1, [x29, 24]
mov w0, 65535
cmp w1, w0
bne .L7
adrp x0, std::__ioinit
add x0, x0, :lo12:std::__ioinit
bl std::ios_base::Init::Init()
adrp x0, __dso_handle
add x2, x0, :lo12:__dso_handle
adrp x0, std::__ioinit
add x1, x0, :lo12:std::__ioinit
adrp x0, std::ios_base::Init::~Init()
add x0, x0, :lo12:std::ios_base::Init::~Init()
bl __cxa_atexit
.L7:
nop
ldp x29, x30, [sp], 32
ret
_GLOBAL__sub_I_main:
stp x29, x30, [sp, -16]!
add x29, sp, 0
mov w1, 65535
mov w0, 1
bl __static_initialization_and_destruction_0(int, int)
ldp x29, x30, [sp], 16
ret