1-Translate the following C code into IA-64. Your translation must be compliant
ID: 3710916 • Letter: 1
Question
1-Translate the following C code into IA-64. Your translation must be compliant with the gcc compiler
conventions.
long sum(long A[], long size, long i){
if ( i >= size || i < 0)
return 0;
return A[i] + sum(A, size, i+1);
}
long F1(int A[], int size){
long i;
for (i = 0; i < size; i++)
if (i % 2 == 0)
A[i] = i << 2;
else
A[i] = i >> 1;
return sum(A, size, 0);
{
======
it should not look like
sum(long*, long, long):
push rbp
mov rbp, rsp
push rbx
sub rsp, 40
mov QWORD PTR [rbp-24], rdi
mov QWORD PTR [rbp-32], rsi
mov QWORD PTR [rbp-40], rdx
mov rax, QWORD PTR [rbp-40]
cmp rax, QWORD PTR [rbp-32]
jge .L2
cmp QWORD PTR [rbp-40], 0
jns .L3
.L2:
mov eax, 0
jmp .L4
.L3:
mov rax, QWORD PTR [rbp-40]
lea rdx, [0+rax*8]
mov rax, QWORD PTR [rbp-24]
add rax, rdx
mov rbx, QWORD PTR [rax]
mov rax, QWORD PTR [rbp-40]
lea rdx, [rax+1]
mov rcx, QWORD PTR [rbp-32]
mov rax, QWORD PTR [rbp-24]
mov rsi, rcx
mov rdi, rax
call sum(long*, long, long)
add rax, rbx
.L4:
add rsp, 40
pop rbx
pop rbp
ret
F1(long*, int):
push rbp
mov rbp, rsp
sub rsp, 32
mov QWORD PTR [rbp-24], rdi
mov DWORD PTR [rbp-28], esi
mov QWORD PTR [rbp-8], 0
.L9:
mov eax, DWORD PTR [rbp-28]
cdqe
cmp QWORD PTR [rbp-8], rax
jge .L6
mov rax, QWORD PTR [rbp-8]
and eax, 1
test rax, rax
jne .L7
mov rax, QWORD PTR [rbp-8]
lea rdx, [0+rax*8]
mov rax, QWORD PTR [rbp-24]
add rax, rdx
mov rdx, QWORD PTR [rbp-8]
sal rdx, 2
mov QWORD PTR [rax], rdx
jmp .L8
.L7:
mov rax, QWORD PTR [rbp-8]
lea rdx, [0+rax*8]
mov rax, QWORD PTR [rbp-24]
add rax, rdx
mov rdx, QWORD PTR [rbp-8]
sar rdx
mov QWORD PTR [rax], rdx
.L8:
add QWORD PTR [rbp-8], 1
jmp .L9
.L6:
mov eax, DWORD PTR [rbp-28]
movsx rcx, eax
mov rax, QWORD PTR [rbp-24]
mov edx, 0
mov rsi, rcx
mov rdi, rax
call sum(long*, long, long)
leave
ret
with the Qword ptr and stuff
but in simply assembly
example:
pushl %rbp
movl %rsp, %rbp
subl $4, %rsp
movl $0, -4(%rbp)
.L2:
movl -4(%rbp), %rax
cmpl 8(%rbp), %rax
jl .L5
jmp .L3
.L5:
decl 8(%rbp)
movl 12(%rbp), %rdx
leal -4(%rbp), %rax
addl %rdx, (%rax)
jmp .L2
.L3:
movl 8(%rbp), %rax
leave
ret
and stuff pls help
(in computer system language)
ASSEMBLY
Explanation / Answer
(1) Solution (In your needed format):
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $40, %rsp
movq %rdi, -24(%rbp)
movq %rsi, -32(%rbp)
movq %rdx, -40(%rbp)
movq -40(%rbp), %rax
cmpq -32(%rbp), %rax
jge .L2
cmpq $0, -40(%rbp)
jns .L3
.L2:
movl $0, %eax
jmp .L4
.L3:
movq -40(%rbp), %rax
leaq 0(,%rax,8), %rdx
movq -24(%rbp), %rax
addq %rdx, %rax
movq (%rax), %rbx
movq -40(%rbp), %rax
leaq 1(%rax), %rdx
movq -32(%rbp), %rcx
movq -24(%rbp), %rax
movq %rcx, %rsi
movq %rax, %rdi
call sum
addq %rbx, %rax
.L4:
addq $40, %rsp
popq %rbx
popq %rbp
ret
.LFE0:
F1:
.LFB1:
pushq %rbp
movq %rsp, %rbp
subq $32, %rsp
movq %rdi, -24(%rbp)
movl %esi, -28(%rbp)
movq $0, -8(%rbp)
jmp .L6
.L9:
movq -8(%rbp), %rax
andl $1, %eax
testq %rax, %rax
jne .L7
movq -8(%rbp), %rax
leaq 0(,%rax,4), %rdx
movq -8(%rbp), %rax
leaq 0(,%rax,4), %rcx
movq -24(%rbp), %rax
addq %rcx, %rax
movl %edx, (%rax)
jmp .L8
.L7:
movq -8(%rbp), %rax
sarq %rax
movq %rax, %rdx
movq -8(%rbp), %rax
leaq 0(,%rax,4), %rcx
movq -24(%rbp), %rax
addq %rcx, %rax
movl %edx, (%rax)
.L8:
addq $1, -8(%rbp)
.L6:
movl -28(%rbp), %eax
cltq
cmpq %rax, -8(%rbp)
jl .L9
movl -28(%rbp), %eax
movslq %eax, %rcx
movq -24(%rbp), %rax
movl $0, %edx
movq %rcx, %rsi
movq %rax, %rdi
call sum
leave
ret
.LFE1:
.Letext0:
.Ldebug_info0:
.Ldebug_abbrev0:
.Ldebug_line0:
.LASF4:
.LASF1:
.LASF0:
.LASF3:
.LASF2:
{
(2) Solution (Optional):
sum:
push rbp
mov rbp, rsp
push rbx
sub rsp, 40
mov QWORD PTR [rbp-24], rdi
mov QWORD PTR [rbp-32], rsi
mov QWORD PTR [rbp-40], rdx
mov rax, QWORD PTR [rbp-40]
cmp rax, QWORD PTR [rbp-32]
jge .L2
cmp QWORD PTR [rbp-40], 0
jns .L3
.L2:
mov eax, 0
jmp .L4
.L3:
mov rax, QWORD PTR [rbp-40]
lea rdx, [0+rax*8]
mov rax, QWORD PTR [rbp-24]
add rax, rdx
mov rbx, QWORD PTR [rax]
mov rax, QWORD PTR [rbp-40]
lea rdx, [rax+1]
mov rcx, QWORD PTR [rbp-32]
mov rax, QWORD PTR [rbp-24]
mov rsi, rcx
mov rdi, rax
call sum
add rax, rbx
.L4:
add rsp, 40
pop rbx
pop rbp
ret
F1:
push rbp
mov rbp, rsp
sub rsp, 32
mov QWORD PTR [rbp-24], rdi
mov DWORD PTR [rbp-28], esi
mov QWORD PTR [rbp-8], 0
jmp
.L6
.L9:
mov rax, QWORD PTR [rbp-8]
and eax, 1
test rax, rax
jne .L7
mov rax, QWORD PTR [rbp-8]
lea rdx, [0+rax*4]
mov rax, QWORD PTR [rbp-8]
lea rcx, [0+rax*4]
mov rax, QWORD PTR [rbp-24]
add rax, rcx
mov DWORD PTR [rax], edx
jmp .L8
.L7:
mov rax, QWORD PTR [rbp-8]
sar rax
mov rdx, rax
mov rax, QWORD PTR [rbp-8]
lea rcx, [0+rax*4]
mov rax, QWORD PTR [rbp-24]
add rax, rcx
mov DWORD PTR [rax], edx
.L8:
add QWORD PTR [rbp-8], 1
.L6:
mov eax, DWORD PTR [rbp-28]
cdqe
cmp QWORD PTR [rbp-8], rax
jl .L9
mov eax, DWORD PTR [rbp-28]
movsx rcx, eax
mov rax, QWORD PTR [rbp-24]
mov edx, 0
mov rsi, rcx
mov rdi, rax
call sum
leave
ret
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.