In: Computer Science
Answer 1: Translate to a recursive RISC-V procedure.
c language program: ---------------
long long int fun(long long int x, long long int y)
{if (x == 0)
return (y);
else
return(fun(x-1, x+y));}
RISC-V language program: --------------
_PROCEDURE_LINKAGE_TABLE_:
.#..3..A......C.
.....S......g...
fun(long long, long long):
bnez a0,10580 <fun(long long, long long)+0x6>
mv a0,a1
ret
addi sp,sp,-16
sd ra,8(sp)
add a1,a1,a0
addi a0,a0,-1
jal ra,1057a <fun(long long, long long)>
ld ra,8(sp)
addi sp,sp,16
ret
main:
li a0,0
ret
Answer 2: translate to a non-recursive RISC-V version.
c language program: ---------------
long long int fun(long long int x, long long int y)
{
while(true){
if(x == 0)
return(y);
x = x - 1;
y = x + y;
}
}
RISC-V language program: --------------
_PROCEDURE_LINKAGE_TABLE_:
.#..3..A......C.
.....S......g...
fun(long long, long long):
beqz a0,10582 <fun(long long, long long)+0x8>
addi a0,a0,-1
add a1,a1,a0
bnez a0,1057c <fun(long long, long long)+0x2>
mv a0,a1
ret
main:
li a0,0
ret