The following code transposes the elements of an

Question

The following code transposes the elements of an M ×M array, where M is a constant defined by #define:

1 void transpose(long A[M][M]) {

2 long i, j;

3 for (i = 0; i < M; i++)

4 for (j = 0; j < i; j++) {

5 long t = A[i][j];

6 A[i][j] = A[j][i];

7 A[j][i] = t;

8 }

9 }

When compiled with optimization level -O1, gcc generates the following code for the inner loop of the function:

1 .L6:

2 movq (%rdx), %rcx

3 movq (%rax), %rsi

4 movq %rsi, (%rdx)

5 movq %rcx, (%rax)

6 addq $8, %rdx

7 addq $120, %rax

8 cmpq %rdi, %rax

9 jne .L6

We can see that gcc has converted the array indexing to pointer code.

(a) Which register holds a pointer to array element A[i][j]?

(b) Which register holds a pointer to array element A[j][i]?

(c) What is the value of M?

Details
Purchase An Answer Below

Have a similar question?