# LAB 5
###### **Name:Aseem Anand**
###### **Roll No.: CS22B008**
## Question 1
### Before optimisation:
#### 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.706
### After optimisation:
#### 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 halt1
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
halt1:
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.757
##### IPC is increased after unrolling by 0.51
unrolling helps with software pipelining of instructions to achieve higher IPC at run-time.
## Question 2
#### Code
.data
node1: .word 1 # value
.word 0 # pointer to next node
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
#link the nodes
la s1 node1
la s2 node2
la s3 node3
la s4 node4
la s5 node5
la s6 node6
la s7 node7
la s8 node8
la s9 node9
la s10 node10
sw s2 4(s1)
sw s3 4(s2)
sw s4 4(s3)
sw s5 4(s4)
sw s6 4(s5)
sw s7 4(s6)
sw s8 4(s7)
sw s9 4(s8)
sw s10 4(s9)
main:
#reversing the linked list
sw s9 4(s10)
sw s8 4(s9)
sw s7 4(s8)
sw s6 4(s7)
sw s5 4(s6)
sw s4 4(s5)
sw s3 4(s4)
sw s2 4(s3)
sw s1 4(s2)
## Question 3
#### Code
.data
list:.word 1,0,2,0,3,0 #data value is followed by the address to next node
size: .word 3
.text
#link the nodes
la s1 list
la s2 size
lw s3 0(s2)
addi t0 s1 8
sw t0 4(s1)
addi t0 s1 16
sw t0 12(s1)
#the NULL pointer is 0
#we will insert 4
allocate_node:
li s4 0
addi s5 s1 0
loop:
beq s4 s3 link
addi s4 s4 1
addi s5 s5 8
j loop
link:
li s6 4
sw s6 0(s5)
addi t0 s5 0
addi s5 s5 -4
sw t0 0(s5)
addi s3 s3 1
sw s3 0(s2)
exit:
#print the data in inserted Node
lw a0 24(s1)
li a7 1
ecall
#print the new size
lw a0 0(s2)
li a7 1
ecall