
//  sum all elements in an array
//  quad core running strip 2
//   result  
//           one core 159 instructions
//           dual core 111 instructions

ax[20], s0, s1, s2, s3

#noframe
main()
  asm("cid r3")
  asm("eq r2 r3 #0")
  asm("jt r2 core0")
  asm("eq r2 r3 #1")
  asm("jt r2 core1")
  asm("eq r2 r3 #2")
  asm("jt r2 core2")
  asm("jmp core3")
  asm("trap r0 #0")     // stop

suma(i)
  s = 0
  while(i < 20)
    s = s + ax[i]
    i = i + 4
  return s

printa()
  i = 0
  while(i < 20)
    print(ax[i])
    i = i + 1

#noframe
core0()
  asm("mov sp #3000")
  asm("mov fp #3500")
//  printa()
  s0 = suma(0)  
  asm("sync")
  s = s0 + s1 + s2 + s3
  print(s)
  asm("trap r0 #0")

#noframe
core1()
  asm("mov sp #4000")
  asm("mov fp #4500")
  s1 = suma(1)
  asm("sync")
  asm("trap r0 #0")

#noframe
core2()
  asm("mov sp #5000")
  asm("mov fp #5500")
  s2 = suma(2)
  asm("sync")
  asm("trap r0 #0")

#noframe
core3()
  asm("mov sp #6000")
  asm("mov fp #6500")
  s3 = suma(3)
  asm("sync")
  asm("trap r0 #0")

#noframe
initdata()
  asm(".data 1100")
  asm("  1 2 3 4 5 6 7 8 9 10")
  asm("  11 12 13 14 15 16 17 18 19 20")
