# LAB-5
##V_Pavan
##CS22B048
# Question-1
```assembly=
.data
array: .word 1 2 3 4 5 6 7 8 9 10 11
.text
la x6 array # first value address
addi x11 x0 11 # size of array
addi x6 x6 44 # last element
addi x28 x0 0
addi x1 x0 3 # s=3
loop:
beq x1 x28 break # unrolling by factor 4
lw x5 0(x6)
add x2 x5 x1
sw x2 0(x6)
addi x6 x6 -4
lw x5 0(x6)
add x2 x5 x1
sw x2 0(x6)
addi x6 x6 -4
lw x5 0(x6)
add x2 x5 x1
sw x2 0(x6)
addi x6 x6 -4
lw x5 0(x6)
add x2 x5 x1
sw x2 0(x6)
addi x6 x6 -4
addi x22 x22 4
addi x28 x28 1
j loop
break:
li a7 10
.data
arr: .word 1,2,3,4,5,6,7,8,9,10,11 # with loop
.text
la x1 arr
la x4 arr
addi x2 x0 12 #n
addi x3 x0 3
addi x5 x0 12
loop:
beq x2 x0 exit
addi x4 x0 4
addi x2 x2 -1
j loop
exit:
beq x5 x0 exit1
addi x5 x5 -1
lw x20 0(x4)
add x4 x4 x3
addi x4 x4 -4
j exit
exit1:
li a7 4
```
this ipc with loop by 5 stage processor


This above one ipc with unrolling loop by a factor 4
observation: the ipc value is increased in unrolling loop by factor 4,,
# Question-2
```assembly=
.data
node1: .word 10
.word 0
node2: .word 9
.word 0
node3: .word 8
.word 0
node4: .word 7
.word 0
node5: .word 6
.word 0
node6: .word 5
.word 0
node7: .word 4
.word 0
node8: .word 3
.word 0
node9: .word 2
.word 0
node10: .word 1
.word 0
.text
la x1 node1
la x2 node2
la x3 node3
la x4 node4
la x5 node5
la x6 node6
la x7 node7
la x8 node8
la x9 node9
la x10 node10
sw x2 4(x1) # In the linkedlist the second node address
sw x3 4(x2) # stored in first ,like for all nodes
sw x4 4(x3)
sw x5 4(x4)
sw x6 4(x5)
sw x7 4(x6)
sw x8 4(x7)
sw x9 4(x8)
sw x10 4(x9)
sw x0 4(x10) # here the last node contain null address
sw x9 0(x10) # here i am reversing the address.,head to tail
sw x8 0(x9) # tail to head,,now the x1 contain null
sw x7 0(x8) # the x10 contain the x9 address
sw x6 0(x7)
sw x5 0(x6)
sw x4 0(x5)
sw x3 0(x4)
sw x2 0(x3)
sw x1 0(x2)
sw x0 0(x1)
```

# Question-3
```
assembly=
.data
head: .word 1
.word 0
middle: .word 2
.word 0
middle2: .word 3
.word 0
tail: .word 4
.word 0
.text
j main
newnode:
la x9 head
addi x9 x9 4
loop:
lw x25 0(x9)
addi x9 x9 8
bne x25 x0 loop
addi x9 x9 -8
la x23 tail
sw x23 0(x9)
jalr x0 x7 0
main:
la x1 head
la x2 middle
sw x2 4(x1)
la x3 middle2
sw x3 4(x2)
sw x0 4(x3)
jal x7 newnode
li a7 10
```
