3.64 Multiple Dimension Array I
★★★
long A[R][S][T];
long store_ele(long i, long j, long k, long *dest) {
*dest = A[i][j][k];
return sizeof(A);
}; i in %rdi, j in %rsi, k in %rdx, dest in %rcx
store_ele:
leaq (%rsi,%rsi,2), %rax ; Compute 3*j
leaq (%rsi,%rax,4), %rax ; Compute 13*j
movq %rdi, %rsi ; Move i to %rsi
salq $6, %rsi ; Compute 64*i
addq %rsi, %rdi ; Compute 65*i
addq %rax, %rdi ; Compute 65*i + 13*j
addq %rdi, %rdx ; Compute 65*i + 13*j + k
movq A(,%rdx,8), %rax ; Compute 8*(65*i + 13*j + k)
movq %rax, (%rcx) ; Retrive A[i][j][k] to %rcx
movl $3640, %eax ; Compute sizeof(A) = 8 * R * S * T
retLast updated