# #include # int a[3][3] = {{1,0,3},{0,5,6},{7,0,9}}; # int main() { # int s = 0; # for (int i = 0; i < 3; i++) # for(int j = 0; j < 3; j++) { # s += a[i][j]; # } # return s; # } # Rewritten as int *ptr = &a[0][0]; # int s = 0; # for (int i = 3; i != 0; i--) # for(int j = 3; j != 0; j--) { # s += *ptr; # ptr++; # } .data a: .word 1,0,3,0,5,6,7,0,9 .text main: # @main li a1, 0 li a0, 0 la a2, a li a6, 3 i_loop: # =>This Loop Header: Depth=1 mv a4, a2 li a5, 3 # j = 3 # Beginning of Loop 2 j_loop: # Parent Loop BB0_1 Depth=1 lw a3, 0(a4) # Load a[i][j] add a0, a0, a3 # s += a[i][j] addi a5, a5, -1 # j-- addi a4, a4, 4 # Bump pointer. bnez a5, j_loop # End of Loop 2 addi a2, a2, 12 # Bump pointer. addi a1, a1, 1 bne a1, a6, i_loop # End of Loop 1. mv a1,a0 li a0,1 ecall li a0,10 ecall ret