# LAB 5
NAME - AMAN ANAND
ROLL NO - CS22B054
## QUESTION NO 1
### BEFORE OPTIMIZATION
`code`
.data
arr:
.word 1,2,3,4,5,6,7,8,9,10,11
.text
main:
la s0 arr
li s1 3
li s2 10
li s3 -1
loop1:
beq s2 s3 exit
lw s4 40(s0)
add s4 s4 s1
sw s4 40(s0)
addi s2 s2 -1
addi s0 s0 -4
exit:
li a7 10
#IPC: 0.714
### AFTER OPTIMIZATION
`code`
.data
arr:
.word 1,2,3,4,5,6,7,8,9,10,11
.text
main:
la s0 arr
li s1 3
li s2 10
li s3 2
loop1:
beq s2 s3 temp
lw s4 40(s0)
add s4 s4 s1
sw s4 40(s0)
lw s4 36(s0)
add s4 s4 s1
sw s4 36(s0)
lw s4 32(s0)
add s4 s4 s1
sw s4 32(s0)
lw s4 28(s0)
add s4 s4 s1
sw s4 28(s0)
addi s2 s2 -4
addi s0 s0 -16
temp:
li s2 -1
loop2:
beq s3 s2 exit
lw s4 40(s0)
add s4 s4 s1
sw s4 40(s0)
addi s2 s2 -1
addi s0 s0 -4
exit:
li a7 10
#IPC: 0.764
IPC is increased after unrolling by 0.05
By unrolling a loop, the compiler generates code that executes multiple iterations of the loop body in a single iteration, reducing the overhead of loop control and increasing the amount of work done in each iteration. This can improve instruction-level parallelism (ILP) and help achieve higher instructions per cycle (IPC) at runtime.
## QUESTION NO 2
```javascript=
.data
node1: .word 1
.word 0
node2: .word 2
.word 0
node3: .word 3
.word 0
node4: .word 4
.word 0
node5: .word 5
.word 0
node6: .word 6
.word 0
node7: .word 7
.word 0
node8: .word 8
.word 0
node9: .word 9
.word 0
node10: .word 10
.word 0
.text
.global main
reverse:
addi t0 x0 0
mv t1 s0
mv t2 s0
loop:
beq t1 x0 return
lw t2 4(t1)
sw t0 4(t1)
mv t0 t1
mv t1 t2
j loop
return:
addi s0 t0 0
jalr x0 x1 0
# link the nodes
main:
la t0 , node1
la t1 , node2
sw t1 , 4(t0)
la t0 , node3
sw t0 , 4(t1)
la t1 , node4
sw t1 , 4(t0)
la t0 , node5
sw t0 , 4(t1)
la t1 , node6
sw t1 , 4(t0)
la t0 , node7
sw t0 , 4(t1)
la t1 , node8
sw t1 , 4(t0)
la t0 , node9
sw t0 , 4(t1)
la t1 , node10
sw t1 , 4(t0)
la s0 node1
jal x1 reverse
addi a7 zero 10
ecall
```
## QUESTION N0 3
```javascript=
.data
node1: .word 1
.word 0
node2: .word 2
.word 0
node3: .word 3
.word 0
node4: .word 4
.word 0
.text
.global main
main:
li x19,5
la x1,node1
la x2,node2
sw x2,4(x1)
la x3,node3
sw x3,4(x2)
la x4, node4
sw x4,4(x3)
la x2, node1
fia:
beq x2,x0,new_node
lw x3, 4(x2)
lw a0,0(x2)
li a7,1
ecall
mv x2,x3
j fia
new_node:
la x2, node1
mv x3,x2
loop:
beq x3,x0,add_node
lw x4 ,4(x3)
mv x5,x3
mv x3,x4
j loop
add_node:
addi x7,x5,8
sw x7,4(x5)
sw x19,0(x7)
sw x0, 4(x7)
j print_again
print_again:
la x2, node1
fa:
beq x2,x0,exit
lw x3, 4(x2)
lw a0,0(x2)
li a7,1
ecall
mv x2,x3
j fa
exit:
li a7,10
ecall
```
==END==