# 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