;; sum all elements in an array ;; quad core running strip 4 ;; result ;; one core 142 instructions ;; dual core 80 instructions ;; quad core 58 instructions ;; s = 0 ;; i = 0 ;; while i < N ;; a = b[i] ;; s = s + a ;; i = i + 1 .symbol stop 0 print1 17 print2 18 ;; register link 15 retval 27 ;; global variable and constants N 20 ;; size of input aB 200 ;; ads of array sum2 300 ;; share var sum from p2 sum3 301 sum4 302 ;; r2 : s, r3 : i, r4 : N, r5 : a .code 0 cid r3 eq r2 r3 #0 jt r2 p1 eq r2 r3 #1 jt r2 p2 eq r2 r3 #2 jt r2 p3 jmp p4 :p1 ;; sum 0,4,.. mv r3 #0 ;; i = 0 jal link suma mv r1 r2 trap print1 sync ld r2 sum2 add r1 r1 r2 ld r2 sum3 add r1 r1 r2 ld r2 sum4 add r1 r1 r2 trap print1 trap stop :p2 ;; sum 1,5,.. mv r3 #1 ;; i = 1 jal link suma mv r1 r2 trap print2 st r1 sum2 sync trap stop :p3 ;; sum 2,6,.. mv r3 #2 ;; i = 2 jal link suma mv r1 r2 trap print2 st r1 sum3 sync trap stop :p4 ;; sum 3,7,.. mv r3 #3 ;; i = 3 jal link suma mv r1 r2 trap print2 st r1 sum4 sync trap stop :suma ;; strip by 4 mv r2 r0 ;; s = 0 mv r4 #N mv r7 #aB ;; &b[.] :while lt r6 r3 r4 ;; i < N jf r6 exit ld r5 +r3 r7 add r2 r2 r5 add r3 r3 #4 jmp while :exit ret link .data 200 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .end