// matrix multiplication
// inline index to compare with matmulRC

// N = 4 simulate (i,j) = i*N + j

to print x = syscall {1 x}
to space = syscall {2 32}
to nl = syscall {2 10}

to index i j = (i * N) + j

to inita | i j =
  for i 0 N-1
    for j 0 N-1
       a[index i j] = i

to initb | i j =
  for i 0 N-1
    for j 0 N-1
      b[index i j] = j

to matmul | i j s k =
  for i 0 N-1
    for j 0 N-1
      s = 0
      for k 0 N-1
        s = s + (a[i*N+k] * b[k*N+j])
      c[i*N+j] = s

to show | i j =
  i = 0
  while i < N
    j = 0
    while j < N
      print c[index i j] space
      j = j + 1
    i = i + 1
    nl

to main = 
  N = 4
  a = array 16 
  b = array 16
  c = array 16
  inita initb matmul show
