Assume that the arrays
c are indexed from 1 to
n in each dimension.
Assume that you know at compile time that
n is 300 and
that the arrays
start at addresses 10000, 4000000, and 6000000, respectively.
Because you know that
n≥1, you know that each loop
will execute at least once. Take advantage of this fact by having
each loop execute its test only after it has made it through the loop
In your three address code, do not use the bracket notation, but rather do the address addition explicitly.
Create a new temporary for each value, rather than trying to be frugal and re-use temporaries. That is, do something like
t1 := i * n t2 := t1 + jnot
t1 := i * n t1 := t1 + j